上期回顾
上期我们介绍了一下主要工具,和一点点的概念,这期我们大概聊聊 GETH。
Geth 又名 Go Ethereum 是以太坊协议的三种实现之一,由 Go 语言开发,完全开源的项目。Geth 可以安装在多个平台上,包括Windows、Linux、Mac 的 OSX、Android 或者 IOS 系统。
Geth 的作用:Geth是以太坊协议的具体落地实现,通过 Geth,你可以实现以太坊的各种功能,如账户的新建编辑删除,开启挖矿,ether 币的转移,智能合约的部署和执行等等。
启动
还没装GETH的同学建议先看看上一篇:环境安装(用Windows的同学官网下载安装包就行,傻瓜式安装)
直接启动
直接输入 geth 会启动本地的一个测试网络,默认端口 30303(关闭的时候直接CTRL -C关闭)
但是这个网络不便于保存,所以不建议这么启动。
初始化启动
我们对本地网络初始化,创建一个固定的链。 我们需要创建一个 json文件,用于创建创世块;再创建一个文件夹,用于存放区块链信息、私钥等
1 | mkdir geth |
参考的genesis.json如下:
1 | { |
注意事项:
- difficulty和gasLimit可以更改,但是后续部署的时候遇到了gas不足无法部署的情况,所以先把gasLimit设置到最大
- 后期部署智能合约的时候可能会遇到部署成功但不能执行的情况,很有可能是应为truffle更新后不能很好的解决拜占庭将军问题,所以需要手动在创世块中添加拜占庭块
"byzantiumBlock": 0
之后直接初始化即可:
1 | geth --datadir ./mychain init ./genesis.json |
这样生成的链,在退出后再次启动时也不会失效。
进入控制台
1 | geth --networkid "30" --nodiscover --datadir="mychain" console 2>>"mychain"/"err.log" |
--networkid
: 设置网络id –nodiscover: 希望这条链不被其他节点发现,即搭建私有链--datadir
: 数据目录console 2 >>
: 控制台错误重定向,即保留错误日志
在后续部署智能合约的时候可能需要开启 RPC 和允许外部登录:手动添加即可
1 | geth --networkid "30" --nodiscover --datadir="./mychain" console 2>>"mychain"/"err.log" --rpc --allow-insecure-unlock |
在控制台输入 eth.getBlock(0)
,可以查看初始区块:可以看到 gasLimit
和 difficulty
是我们刚才设置的值(转换成了十进制)
退出:在控制台输入 exit
或者 CTRL-D
用户相关
GETH 控制台运行
查看账户:
1 | eth.accounts |
创建账户:
1 | personal.newAccount("pay") |
此时可以看到两个用户的地址
注意这里的 pay
和 collect
均可以理解为 “密码”,区块链中实际的用户名为该用户的地址,我们创建用户时输入的字符串当作私钥的提示符,即 “密码”
解锁账户:用户解锁前不能进行汇款操作,一段时间会自动锁定,汇款前需手动解锁
1 | personal.unlockAccount(user1) |
删除账户:控制台中不能直接删除账户,要删除账户的话需要手动删除目录中的私钥文件
宿主机执行
1 | geth account list |
宿主机中删除账户同样需要手动删除用户文件
挖矿与汇款
(以下内容均在GETH控制台中执行)
挖矿
模拟挖矿: 先设置矿工地址,默认为第一个用户:
1 | eth.coinbase |
挖矿:
1 | miner.start() |
转账
1 | user1 = "0xdeada991bda83c68e2e4428d75bc86d59e3a4efb" |
转账操作本质也是区块打包并上传到链上,需要获得节点的共识才能被认可,即矿工(本地的user1或者user2)需要继续挖矿,直到挖到这块区块,才能完成交易。
本地块挖矿比较快,几秒钟就可以了。
再次查看账户余额:收款账户 user2 收到汇款,转账成功
1 | eth.getBalance(user2) |
小结
好的,你已经是一名成熟的矿工了,快来一起挖矿吧
关于 GETH,掌握以上内容基本可以满足需求了,再深入的操作可以参考官方文档和带佬博客。
Reference:https://geth.ethereum.org/docs/interface/command-line-options