【区块链】HyperLedger Besu集群服务

今天给各位详细讲解关于Besu节点的部署实施并使用到Besu特有的QBFT和IBFT2.0两种共识机制,废话少说马上开始。

1. Node203服务器

1.1 配置文件生成

为了方便管理先创建Besu节点根目录:

mkdir /home/yzh/Documents/blockchain/besu

在根目录下创建qbft_generate.json文件用于生成基于qbft共识的创世规则,目录如下:

root@node204:/home/yzh/Documents/blockchain/besu# ls
qbft_generate.json

qbft_generate.json内容如下所示:

{
    
    
    "genesis": {
    
    
        "config": {
    
    
            "chainId": 76387,
            "londonBlock": 0,
            "qbft": {
    
    
                "blockperiodseconds": 5,
                "epochlength": 30000,
                "requesttimeoutseconds": 10
            }
        },
        "nonce": "0x0",
        "timestamp": "0x5c51a607",
        "gasLimit": "0x1fffffffffffff",
        "difficulty": "0x1",
        "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "coinbase": "0x0000000000000000000000000000000000000000",
        "alloc": {
    
    
        }
    },
    "blockchain": {
    
    
        "nodes": {
    
    
            "generate": true,
            "count": 4
        }
    }
}

跟《【区块链】搭建Geth私有链(PoW)》一文中描述的创世块配置不同,在JSON的第一层级将出现genesisblockchain属性,其中genesis属性的下级配置是区块链创世块基础内容。
篇幅有限,qbft_generate.json中属性定义将不再叙述(详情可参考《【区块链】搭建Geth私有链(PoW)》中描述),这里我没有通过alloc创建默认账号并且将出块难度调成最低。此外,我将设置zero gas参数实现数据快速上链。
至于JSON第一层级的另一个属性blockchain中的配置是告诉要生成多少个节点的配置信息,而生成个数将会根据count属性决定(为了让引导节点达到高可用的目的,我这边count写上4个)。
配置完成后就能通过命令初始化节点配置,在此之前先修改宿主机besu目录执行权限

chmod 777 -R /home/yzh/Documents/blockchain/besu

之后执行operator命令即可生成所需配置,如下所示:

root@node204:/home/yzh/Documents/blockchain/besu# docker run --rm \
-v /home/yzh/Documents/blockchain/besu:/var/lib/besu:rw \
hyperledger/besu:22.4-graalvm \
operator generate-blockchain-config \
--config-file=/var/lib/besu/qbft_generate.json \
--to=/var/lib/besu/config \
--private-key-file-name=key
2022-07-05 09:20:20.495+00:00 | main | INFO  | GenerateBlockchainConfig | Generating 4 nodes keys.
2022-07-05 09:20:20.500+00:00 | main | INFO  | GenerateBlockchainConfig | Generating keypair for node 0.
2022-07-05 09:20:20.570+00:00 | main | INFO  | GenerateBlockchainConfig | Generating keypair for node 1.
2022-07-05 09:20:20.582+00:00 | main | INFO  | GenerateBlockchainConfig | Generating keypair for node 2.
2022-07-05 09:20:20.590+00:00 | main | INFO  | GenerateBlockchainConfig | Generating keypair for node 3.
2022-07-05 09:20:20.594+00:00 | main | INFO  | GenerateBlockchainConfig | Generating QBFT extra data.
2022-07-05 09:20:20.602+00:00 | main | INFO  | GenerateBlockchainConfig | Writing genesis file.

生成将文件迁移到对应目录,keys目录将迁移到根目录底下并重命名为data,对应的目录结构为:

.
├── besu
│   ├── config
│   │   ├── config.toml                   # 节点启动配置采用toml文件统一配置
│   │   └── genesis.json                  # 创世块文件
│   ├── data                              # 数据目录
│   │   ├── bootnode1                     # 第一个引导节点
│   │   │   ├── key                       # 节点启动私钥
│   │   │   └── key.pub                   # 节点启动公钥
│   │   ├── bootnode2                     # 第二个引导节点
│   │   │   ├── key                       # 节点启动私钥
│   │   │   └── key.pub                   # 节点启动公钥
│   │   ├── bootnode3                     # 第三个引导节点
│   │   │   ├── key                       # 节点启动私钥
│   │   │   └── key.pub                   # 节点启动公钥
│   │   └── bootnode4                     # 第四个引导节点
│   │       ├── key                       # 节点启动私钥
│   │       └── key.pub                   # 节点启动公钥
└   └── qbft_generate.json                # qbft自动生成配置

之后我们还需要对config.toml文件进一步的配置,如下所示:

# P2P配置信息
p2p-enabled=true                     # p2p是否启用
max-peers=1024                       # p2p网络最大对等节点数

# RPC HTTP配置信息
rpc-http-api=["ETH","NET","WEB3","QBFT","ADMIN","DEBUG","EEA","PERM","PRIV","TRACE","TXPOOL"]
rpc-http-enabled=true                # rpc-http是否启用
rpc-http-cors-origins=["all"]        # 跨域配置all代表全通过
rpc-http-max-active-connections=8000 # rpc-http最大连接数

# RPC Websocket配置信息
rpc-ws-api=["ETH","NET","WEB3","QBFT","ADMIN","DEBUG","EEA","PERM","PRIV","TRACE","TXPOOL"]
rpc-ws-enabled=true                  # rpc-ws是否启用
rpc-ws-max-active-connections=8000   # rpc-ws最大连接数

# OPTIONAL配置信息
sync-mode="FULL"                     # 数据同步模式
data-path="/var/lib/besu/data"       # 内部挂载映射录路径
logging="INFO"                       # 设定日志输出等级(OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE, ALL)
random-peer-priority-enabled=true    # 启用随机对等优先级
identity="yzh_besu"                  # 节点名称
min-gas-price=0                      # 设置免费上链网络(通过设置min gas price为0,上链都不需要进行gas消费)
network-id="12345"                   # 网络唯一id
host-allowlist=["*"]                 # 主机访问白名单
nat-method="DOCKER"                  # 网络访问模式DOCKER代表采用docker运行

# 交易事务配置
tx-pool-max-size="8000"              # 设置最大事务池大小

# 创世块路径
genesis-file="/var/lib/besu/config/genesis.json"

# 隐私交易配置(Tessera)
#privacy-enabled=true
#privacy-url="http://192.168.200.206:9000"
#privacy-public-key-file="/var/lib/besu/tessera/ptx_key.pub"

# bootstrap节点(qbft)
bootnodes=["enode://ed89ee6000cb0cf8e5210b5ded5937e5edb45e2a4f8fcbf34cb87896fa2210758e51344bdf7011f75f19a775b64d98b018f3708fce73c4fc7c498d07dfedc95b@192.18.0.131:30303","enode://cbb355ea4fe8372a7ee64fadd6f3ffbaa3ae4fda8f0788cec2822eb0474689a634d7e98abd193ab4ed3ee70197c6624a2b1d91762fac243b4b229df0349030f5@192.18.0.132:30303","enode://d3c79de935bee29324e416e5d621607313e89fca6d17aa5cb9b5fd0f027f0d63075ca8ba6fbddf3c4a8262ea665c39cb96daba263ddbcb6c2ea16e26d670f4eb@192.18.0.133:30303","enode://d28a653ea54f7194234813c728518db1c28d74052bd3764403d5f8cd4c251d8245fdd94feb96f7d1dd71e94f4b25a7ea1afd74b653b9e08718a71fbf31cff376@192.18.0.134:30303"]

上面的配置信息详细已经描述的相当清晰了,需要提醒的部分有三点:

  1. 关于隐私交易的部分我建议是有需要时再启用不是必须的;
  2. 若生成toml文件中bootstrap参数内容是空的话(已尝试过有的版本客户端有可能生成不了),至于获取方式我会在下面IBFT2.0部署中进行说明。当然了,也可以参考之前发布的《【区块链】搭建Geth私有链(PoW)》一文;
  3. websocket还是要配置上,毕竟可以避免http长连接而且也有很多场景需要用到,我建议跟rpc的配置一致即可;

之后就可以在node203服务器上分别启动引导节点了。

1.2 引导节点部署

1.2.1 Bootnode1
docker run \
--name bootnode1 \
--network=besu_swarm \
--ip 192.18.0.131 \
-p 30301:30303 \
-p 8641:8545 \
-v /home/yzh/Documents/blockchain/besu/config:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/besu/data/bootnode1:/var/lib/besu/data:rw \
-v /home/yzh/Documents/blockchain/besu/tessera:/var/lib/besu/tessera:rw \
--restart always \
-d hyperledger/besu:22.4-graalvm \
--config-file=/var/lib/besu/config/config.toml
1.2.2 Bootnode2
docker run \
--name bootnode2 \
--network=besu_swarm \
--ip 192.18.0.132 \
-p 30302:30303 \
-p 8642:8545 \
-v /home/yzh/Documents/blockchain/besu/config:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/besu/data/bootnode2:/var/lib/besu/data:rw \
-v /home/yzh/Documents/blockchain/besu/tessera:/var/lib/besu/tessera:rw \
--restart always \
-d hyperledger/besu:22.4-graalvm \
--config-file=/var/lib/besu/config/config.toml
1.2.3 Bootnode3
docker run \
--name bootnode3 \
--network=besu_swarm \
--ip 192.18.0.133 \
-p 30303:30303 \
-p 8643:8545 \
-v /home/yzh/Documents/blockchain/besu/config:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/besu/data/bootnode3:/var/lib/besu/data:rw \
-v /home/yzh/Documents/blockchain/besu/tessera:/var/lib/besu/tessera:rw \
--restart always \
-d hyperledger/besu:22.4-graalvm \
--config-file=/var/lib/besu/config/config.toml
1.2.4 Bootnode4
docker run \
--name bootnode4 \
--network=besu_swarm \
--ip 192.18.0.134 \
-p 30304:30303 \
-p 8644:8545 \
-v /home/yzh/Documents/blockchain/besu/config:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/besu/data/bootnode4:/var/lib/besu/data:rw \
-v /home/yzh/Documents/blockchain/besu/tessera:/var/lib/besu/tessera:rw \
--restart always \
-d hyperledger/besu:22.4-graalvm \
--config-file=/var/lib/besu/config/config.toml

补充说明一下,先将config.tomlgenesis.json分别拷贝到node202、node204和node205服务器中。路径需要与node203服务器相同。之后还需要分别使用qbft_generate.json生成一个新的节点配置,最后将文件夹名称分别命名为node202、node204和node205即可。配置完成后就可以分别启动签署节点。

扫描二维码关注公众号,回复: 14877159 查看本文章

2. Node202服务器

docker run \
--name node202 \
--network=besu_swarm \
--ip 192.18.0.121 \
-p 30303:30303 \
-p 8545:8545 \
-v /home/yzh/Documents/blockchain/besu/config:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/besu/data/node202:/var/lib/besu/data:rw \
-v /home/yzh/Documents/blockchain/besu/tessera:/var/lib/besu/tessera:rw \
--restart always \
-d hyperledger/besu:22.4-graalvm \
--config-file=/var/lib/besu/config/config.toml

3. Node204服务器

docker run \
--name node204 \
--network=besu_swarm \
--ip 192.18.0.141 \
-p 30303:30303 \
-p 8545:8545 \
-v /home/yzh/Documents/blockchain/besu/config:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/besu/data/node204:/var/lib/besu/data:rw \
-v /home/yzh/Documents/blockchain/besu/tessera:/var/lib/besu/tessera:rw \
--restart always \
-d hyperledger/besu:22.4-graalvm \
--config-file=/var/lib/besu/config/config.toml

4. Node205服务器

docker run \
--name node205 \
--network=besu_swarm \
--ip 192.18.0.151 \
-p 30303:30303 \
-p 8545:8545 \
-v /home/yzh/Documents/blockchain/besu/config:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/besu/data/node205:/var/lib/besu/data:rw \
-v /home/yzh/Documents/blockchain/besu/tessera:/var/lib/besu/tessera:rw \
--restart always \
-d hyperledger/besu:22.4-graalvm \
--config-file=/var/lib/besu/config/config.toml

至此关于QBFT共识以太坊区块链就部署完成了。


由于QBFT共识在某些特殊情况下无法实现zero gas上链(这个要在前期调研清楚),因此若基于业务需要将QBFT改为IBFT2.0那怎么办呢?会存在很大差异吗?首先由于共识标准不一致了,因此需要重新设置规则。虽然官网上有提供数据切换方案,但是实现难度较大不建议贸然操作(若依存在大量上链数据则另当别论,毕竟只能按照官网要求进行迁移)。如果只是调研过程中发现有问题,那我们重头再来也不是难事。
IBFT2.0共识的文件存放路径或许跟上面说到的QBFT共识配置存放上有点出入,这里会进行说明。

5. 目录结构修改

首先基础目录结构是这样的

.
├── config                            # config目录中是所有配置文件
│   ├── besu                          # besu目录指的是区块链节点的配置
│   │   ├── config.toml
│   │   └── ibft2_generate.json
│   └── ethsigner                     # ethsigner目录指的是签署节点的配置
└── docker

6. 生成IBFT2.0配置信息

与QBFT共识一样,也是通过operator命令生成所需的创世块和启动密钥(至于ibft_generate.json中参数与上面qbft配置基本一致) ,官网给出的样例如下:

{
    
    
  "genesis": {
    
    
    "config": {
    
    
      "chainId": 1337,
      "berlinBlock": 0,
      "ibft2": {
    
    
        "blockperiodseconds": 2,
        "epochlength": 30000,
        "requesttimeoutseconds": 4
      }
    },
    "nonce": "0x0",
    "timestamp": "0x58ee40ba",
    "gasLimit": "0x47b760",
    "difficulty": "0x1",
    "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "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"
      }
    }
  },
  "blockchain": {
    
    
    "nodes": {
    
    
      "generate": true,
      "count": 4
    }
  }
}

接下来就能够通过命令生成配置文件了

docker run --rm \
-v /home/yzh/Documents/blockchain/config/besu:/var/lib/besu:rw \
hyperledger/besu:21.1.4-graalvm \
operator generate-blockchain-config \
--config-file=/var/lib/besu/ibft2_generate.json \
--to=/var/lib/besu/data \
--private-key-file-name=key

执行结果如下

2022-07-12 00:47:25.326+00:00 | main | INFO  | GenerateBlockchainConfig | Generating 7 nodes keys.
2022-07-12 00:47:25.329+00:00 | main | INFO  | GenerateBlockchainConfig | Generating keypair for node 0.
2022-07-12 00:47:25.368+00:00 | main | INFO  | GenerateBlockchainConfig | Generating keypair for node 1.
2022-07-12 00:47:25.376+00:00 | main | INFO  | GenerateBlockchainConfig | Generating keypair for node 2.
2022-07-12 00:47:25.380+00:00 | main | INFO  | GenerateBlockchainConfig | Generating keypair for node 3.
2022-07-12 00:47:25.382+00:00 | main | INFO  | GenerateBlockchainConfig | Generating keypair for node 4.
2022-07-12 00:47:25.384+00:00 | main | INFO  | GenerateBlockchainConfig | Generating keypair for node 5.
2022-07-12 00:47:25.386+00:00 | main | INFO  | GenerateBlockchainConfig | Generating keypair for node 6.
2022-07-12 00:47:25.389+00:00 | main | INFO  | GenerateBlockchainConfig | Generating IBFT extra data.
2022-07-12 00:47:25.393+00:00 | main | INFO  | GenerateBlockchainConfig | Writing genesis file.

生成出来的目录结构是这样的

.
├── config
│   ├── besu
│   │   ├── config.toml
│   │   ├── data
│   │   │   ├── genesis.json
│   │   │   └── keys
│   │   │       ├── 0x2e00ebab349698dfdd21743559ad80393c9724d6
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       ├── 0x58fdfd62d2714fa43afc8dd4940e2da4616243e2
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       ├── 0x62f6f4510f085fa3e6b8db17625e0f02ea8c9017
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       ├── 0x7c08efadba5162404333f7e147ef3d72943051cb
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       ├── 0x8bc2ab980161b7e46d41570ee53691360933a087
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       ├── 0xe7c9463ef1dd1b02528499c7cf530ec827a04607
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       └── 0xe942acf627a7db39a3940d028a9ce6579dafb701
│   │   │           ├── key
│   │   │           └── key.pub
│   │   └── ibft2_generate.json
│   └── ethsigner
└── docker

接下来就可以按要求设置了。先在docker文件夹中创建besu/bootnode1、besu/bootnode2、besu/bootnode3、besu/bootnode4文件目录,创建后的目录结构如下:

.
├── config
│   ├── besu
│   │   ├── config.toml
│   │   ├── data
│   │   │   ├── genesis.json
│   │   │   └── keys
│   │   │       ├── 0x2e00ebab349698dfdd21743559ad80393c9724d6
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       ├── 0x58fdfd62d2714fa43afc8dd4940e2da4616243e2
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       ├── 0x62f6f4510f085fa3e6b8db17625e0f02ea8c9017
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       ├── 0x7c08efadba5162404333f7e147ef3d72943051cb
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       ├── 0x8bc2ab980161b7e46d41570ee53691360933a087
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       ├── 0xe7c9463ef1dd1b02528499c7cf530ec827a04607
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       └── 0xe942acf627a7db39a3940d028a9ce6579dafb701
│   │   │           ├── key
│   │   │           └── key.pub
│   │   └── ibft2_generate.json
│   └── ethsigner
└── docker                    # 这里作为了docker运行时的数据挂载目录
    └── besu
        ├── bootnode1
        ├── bootnode2
        ├── bootnode3
        └── bootnode4

之后将keys文件夹中的前4条密钥分别转移到bootnode1、bootnode2、bootnode3和bootnode4文件夹中并去掉原目录名称

root@node203:/home/yzh/Documents/blockchain# mv config/besu/data/keys/0x2e00ebab349698dfdd21743559ad80393c9724d6/* docker/besu/bootnode1
root@node203:/home/yzh/Documents/blockchain# mv config/besu/data/keys/0x58fdfd62d2714fa43afc8dd4940e2da4616243e2/* docker/besu/bootnode2
root@node203:/home/yzh/Documents/blockchain# mv config/besu/data/keys/0x62f6f4510f085fa3e6b8db17625e0f02ea8c9017/* docker/besu/bootnode3
root@node203:/home/yzh/Documents/blockchain# mv config/besu/data/keys/0x7c08efadba5162404333f7e147ef3d72943051cb/* docker/besu/bootnode4
root@node203:/home/yzh/Documents/blockchain# rm -rf config/besu/data/keys/0x2e00ebab349698dfdd21743559ad80393c9724d6
root@node203:/home/yzh/Documents/blockchain# rm -rf config/besu/data/keys/0x58fdfd62d2714fa43afc8dd4940e2da4616243e2
root@node203:/home/yzh/Documents/blockchain# rm -rf config/besu/data/keys/0x62f6f4510f085fa3e6b8db17625e0f02ea8c9017
root@node203:/home/yzh/Documents/blockchain# rm -rf config/besu/data/keys/0x7c08efadba5162404333f7e147ef3d72943051cb

完成后结果如下

.
├── config
│   ├── besu
│   │   ├── config.toml
│   │   ├── data
│   │   │   ├── genesis.json
│   │   │   └── keys
│   │   │       ├── 0x8bc2ab980161b7e46d41570ee53691360933a087
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       ├── 0xe7c9463ef1dd1b02528499c7cf530ec827a04607
│   │   │       │   ├── key
│   │   │       │   └── key.pub
│   │   │       └── 0xe942acf627a7db39a3940d028a9ce6579dafb701
│   │   │           ├── key
│   │   │           └── key.pub
│   │   └── ibft2_generate.json
│   └── ethsigner
└── docker
    └── besu
        ├── bootnode1
        │   ├── key
        │   └── key.pub
        ├── bootnode2
        │   ├── key
        │   └── key.pub
        ├── bootnode3
        │   ├── key
        │   └── key.pub
        └── bootnode4
            ├── key
            └── key.pub

部署完成后就可按顺序启动引导节点。

7. IBFT2.0引导节点部署

7.1 Bootnode1

docker run \
--name bootnode1 \
--network=besu_swarm \
--ip 192.18.0.213 \
-p 30301:30303 \
-p 8641:8545 \
-v /home/yzh/Documents/blockchain/config/besu:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/docker/besu/bootnode1:/var/lib/besu/data:rw \
--restart always \
-d hyperledger/besu:21.1.4-graalvm \
--config-file=/var/lib/besu/config/config.toml

启动后通过docker logs -f查看启动输出并获取enode参数

enode://a77ddeb2a66e01dad79a8f1e39aa84e218757b57c9cecc2ef9d7a06870500a6ae780c1bc19ffe49690d140c15a5ce51a62f8ca25f50555395ff494d3dbf58fe1@127.0.0.1:30303

这里要将127.0.0.1改为docker swarm网络中的固定ip

enode://a77ddeb2a66e01dad79a8f1e39aa84e218757b57c9cecc2ef9d7a06870500a6ae780c1bc19ffe49690d140c15a5ce51a62f8ca25f50555395ff494d3dbf58fe1@192.18.0.213:30303

其他节点如法炮制即可(这就是我上面说的不是每个版本都可以直接生成enode信息的只能够自己获取)。

7.2 Bootnode2

docker run \
--name bootnode2 \
--network=besu_swarm \
--ip 192.18.0.223 \
-p 30302:30303 \
-p 8642:8545 \
-v /home/yzh/Documents/blockchain/config/besu:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/docker/besu/bootnode2:/var/lib/besu/data:rw \
--restart always \
-d hyperledger/besu:21.1.4-graalvm \
--config-file=/var/lib/besu/config/config.toml

7.3 Bootnode3

docker run \
--name bootnode3 \
--network=besu_swarm \
--ip 192.18.0.233 \
-p 30303:30303 \
-p 8643:8545 \
-v /home/yzh/Documents/blockchain/config/besu:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/docker/besu/bootnode3:/var/lib/besu/data:rw \
--restart always \
-d hyperledger/besu:21.1.4-graalvm \
--config-file=/var/lib/besu/config/config.toml

7.4 Bootnode4

docker run \
--name bootnode4 \
--network=besu_swarm \
--ip 192.18.0.243 \
-p 30304:30303 \
-p 8644:8545 \
-v /home/yzh/Documents/blockchain/config/besu:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/docker/besu/bootnode4:/var/lib/besu/data:rw \
--restart always \
-d hyperledger/besu:21.1.4-graalvm \
--config-file=/var/lib/besu/config/config.toml

至此将获取到4个引导节点的enode信息,之后可以先通过docker stop停止节点服务,然后将enode配置到config.toml文件中实现节点互通,如下所示:

# P2P配置信息
p2p-enabled=true                                          # p2p是否启用
max-peers=1024                                            # p2p网络最大对等节点数

# RPC HTTP配置信息
rpc-http-api=["ETH","NET","WEB3","IBFT","ADMIN","DEBUG","EEA","PERM","PRIV","TRACE","TXPOOL"]
rpc-http-enabled=true                                     # rpc-http是否启用
rpc-http-cors-origins=["all"]                             # 跨域配置all代表全通过
rpc-http-max-active-connections=8000                      # rpc-http最大连接数

# RPC Websocket配置信息
rpc-ws-api=["ETH","NET","WEB3","IBFT","ADMIN","DEBUG","EEA","PERM","PRIV","TRACE","TXPOOL"]
rpc-ws-enabled=true                                       # rpc-ws是否启用
rpc-ws-max-active-connections=8000                        # rpc-ws最大连接数

# OPTIONAL配置信息
sync-mode="FULL"                                          # 数据同步模式
data-path="/var/lib/besu/data"                            # 内部挂载映射录路径
logging="INFO"                                            # 设定日志输出等级
random-peer-priority-enabled=true                         # 启用随机对等优先级
identity="yzh_besu"                                       # 节点名称
min-gas-price=0                                           # 上链零消费                                                                           

network-id="12345"                                        # 网络唯一id
host-allowlist=["*"]                                      # 主机访问白名单
nat-method="DOCKER"                                       # 网络访问模式DOCKER代表采用docker运行

# 交易事务配置
tx-pool-max-size=8000                                     # 设置最大事务池大小

# 创世块路径
genesis-file="/var/lib/besu/config/genesis.json"

# bootstrap节点(ibft2.0)
bootnodes=["enode://da06f53f84a44282d81225172e955abab7a90e2baaf2c468d09270a2f0f65c84e6f1c33f0b6056ec529785bf98cce15db72efc412a36ea9809072c08a4964e68@192.18.0.213:30303","enode://6ba9c0abf2746b2a7c334f13e80c8b1094a751a8d486e2b96b1fdb3c414b1a380e5fdb186d160363639f3a2dda323f9a5264eae9d9fbf22b6efd64c35475dadd@192.18.0.223:30303","enode://3dfb63e7cadb778e07a63c853a6f4a0823e430f9944e109255779696504c7f279e1fe1f9393c72c56f2c1a0a5cc9243a528c3a4aba4b3cbd90af06acc9e38f26@192.18.0.233:30303","enode://328e50c38b483b3ea372227ae1e223beeca927b05ce6428a1b0c3b28141961ccee46bdd3a0330dcb043bbbdcfe3066d5f19390d86976358f722406c3a0396848@192.18.0.243:30303"]

8. IBFT2.0签署节点部署

在所有文件都配置好了之后就按照惯例一个一个启动签署节点即可

8.1 Node202

docker run \
--name node202 \
--network=besu_swarm \
--ip 192.18.0.202 \
-p 30303:30303 \
-p 8545:8545 \
-v /home/yzh/Documents/blockchain/config/besu:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/docker/besu/node202:/var/lib/besu/data:rw \
--restart always \
-d hyperledger/besu:21.1.4-graalvm \
--config-file=/var/lib/besu/config/config.toml

8.2 Node204

docker run \
--name node204 \
--network=besu_swarm \
--ip 192.18.0.204 \
-p 30303:30303 \
-p 8545:8545 \
-v /home/yzh/Documents/blockchain/config/besu:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/docker/besu/node204:/var/lib/besu/data:rw \
--restart always \
-d hyperledger/besu:21.1.4-graalvm \
--config-file=/var/lib/besu/config/config.toml

8.3 Node205

docker run \
--name node205 \
--network=besu_swarm \
--ip 192.18.0.205 \
-p 30303:30303 \
-p 8545:8545 \
-v /home/yzh/Documents/blockchain/config/besu:/var/lib/besu/config:rw \
-v /home/yzh/Documents/blockchain/docker/besu/node205:/var/lib/besu/data:rw \
--restart always \
-d hyperledger/besu:21.1.4-graalvm \
--config-file=/var/lib/besu/config/config.toml

至此,IBFT2.0共识以太坊区块链部署完毕。

猜你喜欢

转载自blog.csdn.net/kida_yuan/article/details/129176865