调用 Rust 初始化函数时出现“无法反序列化合约状态”

Posted

技术标签:

【中文标题】调用 Rust 初始化函数时出现“无法反序列化合约状态”【英文标题】:Getting "Cannot deserialize the contract state" when calling Rust init function 【发布时间】:2020-07-01 04:12:00 【问题描述】:

我已经能够使用 near-shell 为 Rust 合约运行 near dev-deploy,然后使用 near call my-account new '"param1": "foo"' 调用“新”函数

但是,当我将相同的合同部署到使用NEAR Wallet 创建的首选帐户时,这不起作用。

错误是:

Smart contract panicked: panicked at 'Cannot deserialize the contract state.: Custom  kind: InvalidInput, error: "Unexpected length of input" ',

【问题讨论】:

【参考方案1】:

事实证明,在同一账户/地址更新合约时,区块链世界中存在一个常见问题。 这里的解决方案是删除并重新创建帐户。 我用near-shell 删除它,然后用 Wallet 重新创建它。

在命令行上:

near delete my-account another-account-getting-the-tokens

然后通过访问再次创建帐户: https://wallet.nearprotocol.com/create/

这清除了状态,我能够重新部署合约并运行 init 函数“new”

【讨论】:

太棒了!另一种解决方案是创建当前为master的子帐户,然后在config.js中更改CONTRACT_NAME【参考方案2】:

我在 2021 年偶然发现了同样的错误: Cannot deserialize the contract state 对合同进行更改后,这导致了我这个 *** 问题。

我通过运行yarn dev 来在测试网上发布合约,该near dev-deploy 调用。

我的解决方案是生成一个新的开发用户,这可以通过传递 -f 作为参数来实现:

near dev-deploy -f path/to/contract.wasm

你可以通过运行 dev-deploy --help 找到这个:

-f, --init, --force 为部署创建新帐户(即使已经有可用帐户)。默认值:假

希望这会有所帮助。

【讨论】:

以上是关于调用 Rust 初始化函数时出现“无法反序列化合约状态”的主要内容,如果未能解决你的问题,请参考以下文章

segueing时出现核心数据错误:无法在NSManagedObject类上调用指定的初始值设定项

Rust:实现泛型特征时出现 E0562

Rust 和 Flamegraph:使用 cargo 安装时出现一堆错误

尝试初始化结构数组时出现段错误

在 Rust 项目的 C 绑定上运行 jextract 时出现致命错误“'stdlib.h' 文件未找到”

使用 rust 二进制文件运行 docker 映像时出现权限被拒绝错误