10

我已经能够near dev-deploy使用近壳来运行Rust 合约,然后调用一个函数“new”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" }',
4

3 回答 3

10

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

在命令行上:

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

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

这清除了状态,我能够重新部署合同并运行init“新”功能

于 2020-03-20T00:54:00.247 回答
1

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

yarn dev我通过运行which calls在 testnet 上发布合同near dev-deploy

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

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

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

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

希望这会有所帮助。

于 2021-10-11T19:23:08.463 回答
0

根据 NEAR 的文档:https ://docs.near.org/docs/concepts/account#:~:text=Each%20NEAR%20account%20can%20only%20hold%201%20smart%20contract 每个 NEAR 账户只能持有一份合同。因此,您无法对现有的进行任何更新。您可以尝试一些解决方案:

  • 删除您的测试网帐户,然后创建一个与 Mike 的答案同名的新帐户。
  • 直接新建账户或子账户,将更新后的合约部署到新创建的合约上。
于 2022-01-16T05:22:22.130 回答