You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于IBFT共识启动Besu区块链链上权限配置

IBFT共识模式下Besu启用链上权限的完整操作步骤

核心说明:IBFT共识需至少4个验证节点才能达成2/3以上共识完成出块,单节点运行状态下所有交易都无法被打包确认,必须先完成4节点组网并稳定出块后再执行权限合约部署操作

一、前置准备

  • 安装Besu 23.x及以上稳定版本,执行besu --version可正常返回版本信息
  • 配置好Java 17+运行环境
  • 创建独立工作目录,例如~/besu-ibft-perm,所有节点数据、配置、合约文件统一存放于此

二、生成节点密钥与IBFT创世配置

  1. 在工作目录下创建4个验证节点的数据目录:
mkdir -p Node-{1..4}/data
  1. 为每个节点生成节点密钥对:
for i in {1..4}; do
  besu --data-path=Node-$i/data public-key export --to=Node-$i/data/nodeKey.pub
done
  1. 整理4个节点的enode信息,格式为enode://<节点公钥内容>@127.0.0.1:<p2p端口>,4个节点p2p端口依次分配为30303、30304、30305、30306,HTTP RPC端口依次分配为8545、8546、8547、8548。
  2. 编写IBFT创世块配置文件genesis.json,核心配置要求:
  • config段添加"permissions": {"onchain-permissions-enabled": true}开启链上权限开关
  • config.bft段配置共识参数:"epochlength": 30000, "blockperiodseconds": 2, "requesttimeoutseconds": 10
  • extraData字段的初始验证人列表必须填入全部4个节点的公钥
  • 为后续部署合约的测试账户(例如0xfe3b557e8fb62b89f4916b721be55ceb828dbd73)预分配至少10000ETH的测试余额
  • gasLimit设置为"0x1fffffffffffff",避免合约部署时gas不足

注意:禁止使用单节点测试的创世配置直接启动多节点,初始验证人列表漏填会直接导致网络无法出块。

三、启动4节点网络并验证出块状态

每个节点启动时需携带权限相关基础参数,以Node1为例(其余节点对应修改数据目录、端口配置即可):

besu \
  --data-path=Node-1/data \
  --genesis-file=./genesis.json \
  --rpc-http-enabled \
  --rpc-http-api=ETH,NET,IBFT,PERM,ADMIN,WEB3,TXPOOL \
  --rpc-http-cors-origins="*" \
  --rpc-http-port=8545 \
  --p2p-port=30303 \
  --permissions-accounts-contract-enabled \
  --permissions-nodes-contract-enabled \
  --bootnodes=<4个节点的enode地址,用英文逗号分隔>

4个节点全部启动后,多次执行以下命令查询块高:

curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://127.0.0.1:8545

若返回的块高数值持续增长,说明IBFT网络已正常达成共识,可执行后续合约部署操作。

四、部署链上权限合约

  1. 从本地Besu安装路径下的contracts/permissions目录获取权限合约源码,共包含4个核心文件:NodeRules.sol、AccountRules.sol、PermissionsImplementation.sol、PermissionsInterface.sol,无需额外下载。
  2. 使用Foundry或Hardhat等合约部署工具,连接Node1的RPC端口http://127.0.0.1:8545,使用预分配了测试ETH的账户按顺序部署:
    • 首先部署PermissionsImplementation.sol,记录部署得到的合约地址
    • 部署PermissionsInterface.sol,构造函数传入上一步得到的Implementation合约地址,记录Interface合约地址
    • 调用Implementation合约的公开查询方法,获取AccountRules和NodeRules两个合约的部署地址
  3. 停掉所有运行中的节点,为每个节点的启动命令添加两个参数:
    • --permissions-accounts-contract-address=<查询到的AccountRules合约地址>
    • --permissions-nodes-contract-address=<查询到的NodeRules合约地址>
  4. 重新启动4个节点,等待块高恢复正常增长后,执行以下命令验证权限功能:
curl -X POST --data '{"jsonrpc":"2.0","method":"perm_getAccountsWhitelist","params":[],"id":1}' http://127.0.0.1:8545

若接口正常返回账户白名单列表,说明链上权限功能已部署生效。

常见问题排查

  • 合约部署交易长时间处于pending状态:检查4个节点的对等连接数是否正常,通过ibft_getValidatorsByBlockNumber接口查询当前生效验证人数量是否≥4
  • 节点重启后权限校验不生效:核对启动参数中两个权限合约地址是否填写正确,创世块中onchain-permissions-enabled开关是否设为true
  • 网络无法出块:核对创世块extraData中初始验证人公钥是否和4个节点的公钥完全匹配,bootnodes配置是否正确

内容的提问来源于stack exchange,提问作者Woojik Chun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:09:25