我注意到当我尝试使用 Borsh 进行序列化/反序列化时我会收到错误

ano*_*epe 5 serialization blockchain solana

我注意到当我尝试使用 Borsh 进行序列化/反序列化时,当数据大小不匹配时,我会收到错误。例如,如果我的帐户数据中有一个数组,然后我尝试添加另一个元素。如果我还没有占位符数据项以及字段中的虚拟值,则序列化尝试将失败。我是否做错了什么,或者事情就是这样,我只能接受它?

Cha*_*ker 7

如果您将数据的 &[u8] 传递给 try_from_slice 但总体帐户数据大小大于您的数据,您将收到 borsh 错误,因为它默认检查反序列化长度与总体切片长度(或类似的内容) :

  • 通过获取 try_to_vec() 输出的 .len() 来捕获您要存储的数据的实际大小,并将其写入帐户数据块中,然后存储您的数据。反序列化时,使用存储的 len 并使用它从帐户数据创建该大小的切片以传递给 try_from_slice。您可以在此处查看示例(使用 BTreeMap 而不是数组,但您明白了)https://github.com/hashblock/solana-cli-program-template/blob/main/program/src/account_state.rs L66(序列化)和 L85(反序列化)。