部署多节点-美图go-ethereum私链
GitHub项目地址:https://github.com/meitu/go-ethereum
环境
1. 安装Golang环境
1 | yum install -y git |
vim /etc/profile
1 | export GOROOT=/usr/local/go |
1 | source /etc/profile |
2. 编译
在默认的共识代码里面,共识大小(maxValidatorSize)默认设置为21【可以理解为节点总数量】,我们这里计划部署3个节点,故需要修改参数,如下:
1 | 代码目录为 /consensus/dpos/dpos.go#L36 |
修改完编译
1 | make geth |
编译完成后,二进制文件目录: ../go-ethereum/build/bin/geth
1 | cp ../go-ethereum/build/bin/geth /etc/geth/ |
将此二进制文件拷贝到第2和第3节点
3. 账号准备
启动链时,在创世快中需要预先定义好创世的共识节点的地址,这些地址必须是真实存在的,否则将无法打块,无法选举。 因此需要预先生成一些账号。按照以太坊正常的模式进行生成即可。
本次计划在3台服务器启动3个节点的链,规划的节点目录分别为/etc/geth/data
第1个节点[192.168.201]操作:
1 | geth --datadir /etc/geth/data console |
第2个节点[192.168.202]操作:
1 | geth --datadir /etc/geth/data console |
第3个节点[192.168.203]操作:
1 | geth --datadir /etc/geth/data console |
4. 创世块文件准备
创世块默认配置文件:dpos_test_genesis.json ,修改配置文件中的validators为您的创世节点地址。
1 | { |
将此文件拷贝到各个节点的/etc/geth目录下
5. 初始化创世块
1 | 所有创世节点都需要执行,创世块的json所有节点保持一致 |
6. 启动链
第1个节点
1
geth --datadir /etc/geth/data --ipcdisable --port 61910 --rpcport 8200 console
第2个节点
1
geth --datadir /etc/geth/data --ipcdisable --port 61910 --rpcport 8201 console
第3个节点
1
geth --datadir /etc/geth/data --ipcdisable --port 61910 --rpcport 8201 console
确认所有节点都有validator
1 | eth.validator |
7. 添加节点
添加节点顺序:
节点1:添加节点2, 节点3
节点2:添加节点3
查看第1节点的enode值
1 | 查看节点1的enode值 |
分别在2节点和3节点添加1节点
1 | admin.addPeer("enode://a4d7c7d17aa662f42212d6affe5dcb5072bf3545d394bc5f7c62abb5fd2b359d9dbde6f06ff4284cd95d2fc4c2408883bd1df5d9676c044f0edfbde8b88b7475@192.168.1.201:61910") |
- 查看第2节点的enode值
1 | admin.nodeInfo.enode |
在节点3添加节点2
1 | admin.addPeer("enode://e5e964e53b8dcc89510a9a9a06a25d9b42590eb0bf932920229eb85a3dbecb982fa123016017fedb4847085ab4ad808ecd38e5cbbca20af5c1d656efb1be274a@192.168.1.202:61910") |
8. 挖矿
美图以太坊dpos实现默认矿工地址也是account的第0个。但是与以太坊的区别是,以太坊使用coinbase作为矿工地址,我们使用validator作为矿工地址,coinbase保留了下来仅作为奖励收取地址。需要修改请调用
1 | miner.setValidator(eth.accounts[0]) |
开始挖矿
1 | personal.unlockAccount(eth.validator,'meitu',0) |
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2020/03/06/美图-ETH私链部署/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!