以太坊私有节点部署

准备工作,参考上一篇文章

结构设计

  • 以太坊支持两种共识机制:POW和POA,使用POW没有足够的算力,会丧失自主权,所以私链一般使用POA
  • 总体结构为:1个bootnode、3个挖矿节点、2个rpc节点
    • 1个bootnode,挖矿节点和rpc节点都从bootnode进入到私有链中,比直接去相互连接更加方便
    • 3个挖矿节点,可以容错一个节点停机,因为需要半数以上的节点存活才能继续挖矿
    • 2个rpc节点,也是为了容错

部署

  1. 启动bootnode节点

    1
    2
    3
    4
    5
    # 生成bootnode的key,会在当前目录下生成string对应的私钥文件
    bootnode -genkey string
    # 启动bootnode,string指向key filename
    bootnode -nodekey string
    # 启动后会看到有关bootnode的日志,如“enode://xxxxxxx@ip:port”
  2. 生成一批帐号,3个帐号用来挖矿,1个存储货币,以及用于其他业务帐号

    1
    2
    # 在当前目录下创建帐号,根据提示输入钱包密码,在本地会在keystore目录下生成一个UTC--xxx的钱包文件
    ./geth account new
  3. 生成创世配置,使用以太坊自带的puppeth工具,

    1
    2
    3
    4
    5
    6
    puppeth
    # 配置配置名字,如输入x_poa就会生成x_poa.json文件
    # 设置共识机制POA,对应关键词是“clique”
    # 配置networkid
    # 允许挖矿的帐号地址
    # 配置发行货币量,以及货币存到哪个帐号上
  4. 启动挖矿节点

    1
    2
    3
    4
    # 初始化节点
    geth --datadir /miner0.d init x_poa.json
    # 启动节点
    geth --datadir /miner0.d --networkid 1024 --bootnodes enode://83789b30dd3d091bad865c1ab14c12bf28eabf7babe291965e2e9beffaa79f2e55fb2e63f5ff8f7f25483fe85b8803d0101dbf87b11e46e614d6ddc7100955c2@172.20.0.56:30301 --unlock 0x6df176a7f059223715121d7cd3c75b87f46cdca2 --password node0.d/.password --mine --minerthreads=1 --gasprice 1 console
  5. 启动RPC节点

    1
    2
    3
    4
    # 初始化节点
    geth --datadir /node0.d init x_poa.json
    # 启动节点
    ./geth --datadir /node0.d --networkid 1024 --bootnodes enode://83789b30dd3d091bad865c1ab14c12bf28eabf7babe291965e2e9beffaa79f2e55fb2e63f5ff8f7f25483fe85b8803d0101dbf87b11e46e614d6ddc7100955c2@172.20.0.56:30301 --rpc --rpcaddr 0.0.0.0 --rpccorsdomain * --rpcapi eth,net,web3 --ws --wsaddr 0.0.0.0 --wsorigins * --wsapi eth,net,web3 --ipcdisable --gasprice 1 console

POA共识添加和删除旷工

1
2
3
4
5
6
# 查看挖矿节点
admin.peers()
# 投票添加节点,半数以上添加,方可加入
clique.propose(signer_address,true)
# 投票删除节点,半数以上删除,方可删除
clique.discard(signer_address)