经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 区块链 » 查看文章
geth 基本使用
来源:cnblogs  作者:wang_yb  时间:2019/9/18 8:38:34  对本文有异议

概要

geth 是以太坊的官方 golang 客户端. 通过 geth 的使用可以直观的了解以太坊, 乃至区块链的运作.

下面, 通过 geth 来构造一次搭建私链, 创建账户, 挖矿, 交易的流程.

搭建私链

做实验, 搭建私链是第一步, 如果直接在 ETH 公链上实验的话, 会消耗真实的以太币, 而且在真实的公链上, 个人的电脑几乎不可能挖到矿的.

通过 geth 搭建私链很简单, 首先需要定义创世区块, 参考: https://github.com/ethereum/go-ethereum/wiki/Private-network

genesis.json:

  1. {
  2. "config": {
  3. "chainId": 100,
  4. "homesteadBlock":0,
  5. "eip155Block":0,
  6. "eip158Block":0
  7. },
  8. "nonce": "0x0000000000000042",
  9. "timestamp": "0x0",
  10. "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  11. "gasLimit": "0x80000000",
  12. "difficulty": "0x1",
  13. "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  14. "coinbase": "0x3333333333333333333333333333333333333333",
  15. "alloc": { }
  16. }

配置之后, 启动

  1. mkdir geth-test
  2. cd geth-test
  3. geth --datadri ./data init genesis.json

创建账户

创建账户很简单, 登录 geth 的 javascript console

  1. geth --datadir ./data --networkid 100 console

其中 networkid 就是 genesis.json 中配置的 chainId

登录之后:

  1. > personal.newAccount() # 创建新的账户
  2. > eth.accounts # 查看目前有哪些账户

挖矿

开始挖矿很简单, 接着在上面的 console 中操作

  1. > miner.start()

等待几分钟之后, 再

  1. > miner.stop()

我的测试机器 2CPU 8G 内存, 大概挖了 5 分钟, 挖到的 eth 如下:

  1. > acc0 = eth.accounts[0] # 这个私链上目前只有一个测试账号
  2. > eth.getBalance(acc0) # 这里使用 wei 作为单位
  3. 2.46e+21
  4. > web3.fromWei(eth.getBalance(acc0), 'ether') # 相当于 2460 个以太币
  5. 2460

私链上挖到的以太币是不能在公链交易的, 这个是用来测试用的, 不然就发了 :)

交易

挖矿很简单, 交易也简单, 为了交易, 我们还需要再创建一个账户

  1. > personal.newAccount()
  2. > eth.accounts
  3. ["0xd4b42869954689395e502daa6dd9a02aa34dbaff", "0x500aaa5b196741a4c768fa972b5f16a7e0c9c1e5"]
  4. > acc0 = eth.accounts[0]
  5. > acc1 = eth.accounts[1]
  6. > web3.fromWei(eth.getBalance(acc0), 'ether') # acc0 的余额
  7. 2460
  8. > web3.fromWei(eth.getBalance(acc1), 'ether') # acc1 的余额
  9. 0
  10. > val = web3.toWei(1) # 准备转账的金额 1 eth
  11. "1000000000000000000"
  12. > eth.sendTransaction({from: acc0, to: acc1, value: val}) # 执行转账, 如果这里出现错误, 提示账户被锁定的话, 解锁账户
  13. > personal.unlockAccount(acc0) # 解锁时, 输入创建账户时的密码
  14. Unlock account 0xd4b42869954689395e502daa6dd9a02aa34dbaff
  15. Password:
  16. true
  17. > eth.sendTransaction({from: acc0, to: acc1, value: val}) # 再次转账, 这次应该能够成功, 如果第一次就成功的话, 不需要这步
  18. # 再次查看余额, 发现2个账户的余额没变
  19. > web3.fromWei(eth.getBalance(acc0), 'ether')
  20. 2460
  21. > web3.fromWei(eth.getBalance(acc1), 'ether')
  22. 0
  23. # 余额没变, 是因为我们前面已经停止挖矿(miner.stop()), 没有矿工来确认这笔交易了
  24. > miner.start()
  25. > miner.stop() # 启动10来秒左右再 stop
  26. # 再次查看余额, acc1 账户上多了 1 个以太币, 但是 acc0的以太币不减反增, 这是因为刚才的挖矿产生的以太币以及交易手续费都给了 acc0
  27. # 这里的挖矿时如果不指定账号, 默认会把挖到的以太币给 eth.accounts 中的第一个账号
  28. > web3.fromWei(eth.getBalance(acc0), 'ether')
  29. 2494
  30. > web3.fromWei(eth.getBalance(acc1), 'ether')
  31. 1

原文链接:http://www.cnblogs.com/wang_yb/p/11527228.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号