You need to enable JavaScript to run this app. Truffle部署合约到Hyperledger Besu本地链提示Wrong chainId如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Truffle部署合约到Hyperledger Besu本地链提示Wrong chainId如何解决

问题解决:Truffle部署Hyperledger Besu本地网络时报Wrong chainId错误

问题根因

该错误由@truffle/hdwallet-provider的默认规则导致:旧版本的hdwallet-provider会默认将交易的chainId设置为以太坊主网的1,即使Truffle配置中network_id设为通配符*,也不会自动同步Besu节点的实际chainId,最终导致签名交易携带的chainId和Besu创世配置的1337不匹配,触发报错。

解决方案

按以下步骤修改即可解决:

  • 第一步:调整Truffle配置,显式指定匹配创世配置的network_id和chainId,取消通配符,修改后的配置如下:
const PrivateKeyProvider = require("@truffle/hdwallet-provider");
const privateKeys = [
  '0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3',
  '0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63',
  '0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f'
];

const privateKeyProvider = new PrivateKeyProvider(
  privateKeys,
  'http://127.0.0.1:8545',
  0,
  3
);

module.exports = {
  networks: {
    besuKDO: {
     provider: privateKeyProvider,
     network_id: 1337, // 和创世配置的chainId保持一致,取消通配符
     chainId: 1337, // 显式指定chainId,匹配Besu节点配置
     gas: 16234336 // 可选,和节点返回的区块gas上限一致,避免额外报错
    }
  }
}
  • 第二步:如果修改配置后仍报错,升级@truffle/hdwallet-provider到最新版本,部分旧版本存在chainId传递异常的bug,执行命令npm update @truffle/hdwallet-provider即可完成升级。
  • 第三步:确认Besu启动命令没有额外配置--chain-id或--network-id参数,如果启动参数指定的数值和创世配置的1337不一致,也会触发该错误,移除对应参数或修改为1337即可。

验证修改

调整完成后重新执行部署命令truffle migrate --network besuKDO即可正常部署合约。

内容的提问来源于stack exchange,提问作者Stefan Iffländer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 04:45:07