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

使用最新polkadot-js与substrate contracts node查询合约信息报错如何解决

报错根因说明

该错误为版本不兼容导致:ink! 3.0.0-rc6调整了ContractInfo枚举的结构,新增了特殊标记位,和旧版本的pallet-contracts模块、polkadot-js类型定义不匹配,导致解析时无法识别索引为128的枚举值。

可稳定运行的兼容环境配置方案

经过验证的版本组合

  • Rust 版本:stable 1.56.1(当前环境版本符合要求,无需调整)
  • cargo-contract 版本:0.15.0
  • ink! 全量依赖版本:3.0.0-rc5
  • substrate-contracts-node 版本:v0.1.0
  • polkadot-js 相关依赖版本:7.9.1

具体操作步骤

  • 清理本地合约项目的历史构建缓存:执行cargo clean,手动删除项目根目录下的Cargo.lock文件,避免旧版本依赖残留
  • 固定合约Cargo.toml中所有ink!相关依赖的版本为3.0.0-rc5,不要使用模糊版本标识符,示例配置如下:
[dependencies]
ink_primitives = { version = "3.0.0-rc5", default-features = false }
ink_metadata = { version = "3.0.0-rc5", default-features = false, features = ["derive"], optional = true }
ink_env = { version = "3.0.0-rc5", default-features = false }
ink_storage = { version = "3.0.0-rc5", default-features = false }
ink_lang = { version = "3.0.0-rc5", default-features = false }

[dev-dependencies]
ink_lang_macro = { version = "3.0.0-rc5" }
  • 安装指定版本的cargo-contract:执行cargo install cargo-contract --version 0.15.0 --force,强制覆盖本地已安装的其他版本
  • 重新编译合约:执行cargo +stable contract build,编译完成后检查生成的metadata.json文件,确认source.language字段显示为ink! 3.0.0-rc5
  • 运行v0.1.0版本的substrate-contracts-node,不要使用master分支的最新提交
  • 前端项目锁定polkadot-js相关依赖版本,执行npm install @polkadot/api@7.9.1 @polkadot/api-contract@7.9.1

功能验证

按照原有流程重新部署合约后,调用const contractInfo = await api.query.contracts.contractInfoOf(deployedAddress);即可正常获取合约信息,不会再出现枚举解析报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:45:03