并非所有字节都读取常见解决方案

2024-03-10

在这篇文章中,我将详细介绍导致神秘错误消息的原因"Smart contract panicked: panicked at 'Cannot deserialize the contract state.: Custom { kind: InvalidData, error: "Not all bytes read" }".

当您部署智能合约并存储信息时,状态将被序列化并存储在磁盘上。部署的时候出现问题another智能合约到您的帐户,您已经changed重要信息。 NEAR 运行时将尝试从磁盘读取序列化状态,并使用部署到您帐户的任何智能合约代码加载它。如果它不知道如何执行此操作,则会输出错误Not all bytes read错误信息。

有关何时可能发生这种情况的示例,请参阅升级合同 https://docs.near.org/docs/tutorials/contracts/nfts/upgrade-contract我们的 DevDocs 中的 NFT 从零到英雄教程的部分。

要了解最佳实践以及如何避免此类情况,请参阅this https://www.near-sdk.io/upgrading/prototyping详细的文章。


正如您所指出的,问题是,如果您使用near-sdk构建合约,它会尝试加载存储以在每次函数调用时构建合约对象。如果合约的布局发生更改,则使用新布局反序列化旧存储将会失败。

检查这个模式 https://github.com/near/near-sdk-rs/blob/31cba6213919ec4866bc0fab7f6963de241cc43a/HELP.md#upgrading-a-contract升级后根据合同升级存储布局。使用near-sdk-rs你应该装饰一个函数#[init(ignore_state)],然后这个函数默认不会加载状态(不过你可以手动加载)。该函数的结果将被序列化并存储为新状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

并非所有字节都读取常见解决方案 的相关文章

  • 在 asp.net 中按日期过滤 DirectoryInfo 文件

    我正在使用指定路径 DirectoryInfo 中的文件填充数据网格控件 我想根据用户指定的日期范围 开始日期和结束日期 过滤文件 在搜索 S O 时 我发现this https stackoverflow com questions 52
  • 有没有办法在 Android 中创建自定义答录机?

    我想创建一个应用程序 允许您使用以下命令过滤来电到各种应答消息 对于列入黑名单的电话号码 此号码不可用 给陌生人的正式信息 关于您为朋友所做的事情的信息性消息 我不知道如何自动接听电话 播放录制的消息 然后等待应答并录制 或者也许只有一种与
  • 如何从给定类 Item 获取数组?

    首先 我是新手 我正在尝试使用媒体存储获取媒体文件详细信息并将详细信息保存在列表中mitems 这就是我正在做的事情 public class MusicRetriever final String TAG MusicRetriever C

随机推荐