442  
使用 Raft 共识协议创建私有网络
作者: 姜天雨 于 2021年07月19日 发布在分类 / 区块链基础知识 / 底层框架资料 / GoQuorum 下,并于 2021年07月19日 编辑

使用 Raft 共识协议创建私有网络

专用网络提供用于测试的可配置网络。 这个私有网络使用 Raft 共识协议。

粘贴图片

先决条件

GoQuorum 确保 PATH 包含 geth  bootnode

粘贴图片

步骤

页面右侧列出了使用具有两个节点的 Raft 创建私有网络的步骤。

1. 创建目录

为您的专用网络和两个节点创建目录:

粘贴图片

2.创建创世文件

将以下配置文件定义复制到名为 raftGenesis.json 的文件中,并将其保存在 Raft-Network  目录中:

{

  "alloc": {

    "fe3b557e8fb62b89f4916b721be55ceb828dbd73": {

      "privateKey": "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63",

      "comment": "private key and this comment are ignored.  In a real chain, the private key should NOT be stored",

      "balance": "0xad78ebc5ac6200000"

    },

    "627306090abaB3A6e1400e9345bC60c78a8BEf57": {

      "privateKey": "c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3",

      "comment": "private key and this comment are ignored.  In a real chain, the private key should NOT be stored",

      "balance": "90000000000000000000000"

    },

    "f17f52151EbEF6C7334FAD080c5704D77216b732": {

      "privateKey": "ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f",

      "comment": "private key and this comment are ignored.  In a real chain, the private key should NOT be stored",

      "balance": "90000000000000000000000"

    }

  },

  "coinbase": "0x0000000000000000000000000000000000000000",

  "config": {

    "homesteadBlock": 0,

    "byzantiumBlock": 0,

    "constantinopleBlock": 0,

    "chainId": 10,

    "eip150Block": 0,

    "eip155Block": 0,

    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",

    "eip158Block": 0,

    "maxCodeSizeConfig": [

      {

        "block": 0,

        "size": 35

      }

    ],

    "isQuorum": true

  },

  "difficulty": "0x0",

  "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",

  "gasLimit": "0xE0000000",

  "mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578",

  "nonce": "0x0",

  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",

  "timestamp": "0x00"

}

3. 生成节点密钥

Node-1   目录中,生成一个节点密钥,并将密钥复制到数据目录中。

粘贴图片

4. 添加节点到静态节点文件

Node-1 目录中,显示节点 1 enode ID

粘贴图片

将以下内容复制到名为  static-nodes.json  Node-1/data  目录中

粘贴图片

bootnode  命令返回的 enode ID 替换 <EnodeID> 占位符。

[

  "enode://212655378f4f48ec6aa57648f9bd4ab86b596553a0825d68ae34ad55176920b0ae06bf68fd682633b0ef3662cbe68a06166aa3053077b93fd4afa9cf8855ea0b@127.0.0.1:21000?discport=0&raftport=50000"

]

5. 初始化节点 1

 Node-1 目录中,初始化节点 1

粘贴图片

6. 启动节点 1

Node-1  目录中,启动节点 1

PRIVATE_CONFIG=ignore geth --datadir data --nodiscover --verbosity 5 --networkid 31337 --raft --raftport 50000 --rpc --rpcaddr 0.0.0.0 --rpcport 22000 --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,quorum,raft --emitcheckpoints --port 21000

PRIVATE_CONFIG 环境变量在未启用隐私的情况下启动 GoQuorum

7. 附加到节点 1

  Node-1  目录中的另一个终端中,附加到您的节点。

粘贴图片

使用 Raft cluster  命令查看集群详情。

粘贴图片

8. 为节点 2 生成节点密钥

Node-2  目录下的另一个终端中,为节点 2 生成一个节点密钥,并将密钥复制到数据目录中。

粘贴图片

9. 创建和更新节点 2 的静态节点文件

static-nodes.json  文件从 Node-1  目录复制到 Node-2

粘贴图片

Node-2  目录中,显示节点 2 enode ID

粘贴图片

使用不同的主机端口和 Raft 端口将节点 2 enode ID 添加到 static-nodes.json 

粘贴图片

10.初始化节点 2

Node-2 目录中,初始化节点 2

粘贴图片

11. 将节点 2 添加为节点 1 Raft peer

在连接节点 1 的终端中,使用 Raft addPeer 命令添加节点 2

粘贴图片

使用 Raft cluster  命令确认集群现在有两个节点。

粘贴图片

12.启动节点 2

 Node-2 目录中,使用与节点 1 相同的命令启动节点 2 ,除了:

  • DevP2P RPC Raft 指定不同的端口。
  • 使用 --raftjoinexisting   选项指定 Raft ID

PRIVATE_CONFIG=ignore geth  --datadir data --nodiscover --verbosity 5 --networkid 31337 --raft --raftjoinexisting 2 --raftport 50001 --rpc --rpcaddr 0.0.0.0 --rpcport 22001 --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,quorum,raft --emitcheckpoints --port 21001

节点 2 连接到节点 1

粘贴图片





 推荐知识

 历史版本

修改日期 修改人 备注
2021-07-19 11:21:10[当前版本] 姜天雨 修改内容
2021-07-19 11:20:25 姜天雨 创建版本

 附件

附件类型

PNGPNG

  目录
    区块链服务网络发展联盟