调用 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 和 Flamegraph:使用 cargo 安装时出现一堆错误