执行委托人示例时,出现"ContractTrapped"错误



构建委托人合同。。。

  1. Git克隆"https://github.com/paritytech/ink.git">
  2. 移动";examples/delegator">
  3. 通过使用";构建所有.sh">

部署&执行

  1. 带有合同托盘的异常基板节点模板
  2. 访问Polkadot/基板门户(https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/accounts)
  3. 转到合同页面(https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/contracts)
  4. 部署";delegator/target/ink/accumulator/accuminator.contact">
  5. 部署";delegator/target/ink/adder/adder.contract";通过指示";累加器";地址作为参数
  6. 非常可爱"inc公司;加法器合同
  7. 我得到一个错误";系统外部失败的合同。ContractTrapped">

如何解决此问题?

最近,如果您的合同构造函数不是payable,则可以返回ContractTrapped。您目前需要使用payable进行如下装饰:

impl Dapp {
/// Creates a new payable contract
#[ink(constructor, payable)]
pub fn new(initial_supply: Balance) -> Self {
...
}

我在尝试从链外工作者测试环境中调用智能合约时遇到了类似的问题。

DispatchError::Module { index: 0, error: 17, message: Some("ContractTrapped") }

在此处找到:primitives/ssandbox/with_std.rs:275错误在:

Trap(Trap { kind: Unreachable })

但仍然不知道为什么会发生这种情况以及如何解决

可能已经晚了,但我会把它留给未来的奋斗者。如果遇到TrapCode,请仔细查看它以及它是什么类型的TrapCode。以下是关于TrapCodes的更多信息:https://docs.wasmtime.dev/api/wasmtime/enum.TrapCode.html

例如,我得到了TrapCode。我的substrate节点告诉我它是TrapCode::UnreachableCodeReached,这是因为我的智能合约没有实现一些功能,而其他合约正试图从第一个智能合约调用这些功能,因此无法访问代码。

如果衬底节点和polkadot-js版本不兼容,则可以运行到ContractTrapped

尝试在packages.json中更新以下内容

"@polkadot/api": "<add latest version>",
"@polkadot/api-contract": "<add latest version>",
"@polkadot/types": "<add latest version>",
"@polkadot/util": "<add latest version>"

最新版本可以在GitHub上的标签中找到。

  • https://github.com/polkadot-js/api
  • https://github.com/polkadot-js/api/tree/master/packages/api-contract
  • https://github.com/polkadot-js/api/tree/master/packages/types/src
  • https://github.com/polkadot-js/common/tree/master/packages/util/src

我可以在github的最新提交时执行delegator示例。我不知道这个错误的原因,但现在错误已经解决了。

相关内容

  • 没有找到相关文章

最新更新