NEAR 是不是需要 Serialize 和 BorshSerialize?

Posted

技术标签:

【中文标题】NEAR 是不是需要 Serialize 和 BorshSerialize?【英文标题】:Does NEAR need both Serialize and BorshSerialize?NEAR 是否需要 Serialize 和 BorshSerialize? 【发布时间】:2021-03-29 10:07:24 【问题描述】:

在 Rust 中编写 NEAR 智能合约时,我的编译器似乎要求通过 API 发送的对象具有 Serialize 特征,并且存储在区块链中的对象具有 BorshSerializeBorshDeserialize。真的是这样吗,还是我做错了什么?我原以为BorshSerialize 会提供Serialize,并且您可以将一个库用于两种目的。

【问题讨论】:

【参考方案1】:

我原以为 BorshSerialize 会提供 Serialize

事实并非如此。 BorshSerialize 特定于 Borsh 而 Serialize 来自 serde 并且两者都不暗示另一个。返回类型之所以需要Serialize,是因为我们希望将其序列化为json,方便前端处理。

【讨论】:

澄清一下,Borsh 之所以没有实现 serde Serialize,是因为这会影响其性能并显着增加代码大小,从而影响编译合约的大小。【参考方案2】:

你的观察是正确的。 Serialize 是 serde::Serialize,使用 serde_json 为您提供 serde Serialize。 BorshSerailize 是用borsh 序列化的,这是 NEAR 实现的常用序列化格式,用于将数据存储在链上。根据您的用例,您可能希望同时使用它们或单独使用它们。另外:您创建存储在只有BorshSerialize 的链上的“模型”,创建由只有Serialize 的API 返回的“视图”。

【讨论】:

以上是关于NEAR 是不是需要 Serialize 和 BorshSerialize?的主要内容,如果未能解决你的问题,请参考以下文章

BinaryFormatter.Serialize() 是不是在 FileStream.Flush() 和 FileStream.Close() 之前完成?

Geocoder Near 方法是不是对谷歌进行地理编码 api 调用

NEAR,如何实现撤销(汇编脚本)

Rainbow bridge:trustless bridge between NEAR and Ethereum

那些技术php的serialize序列化和json性能测试(上)

汇编 里的near 和far有啥用啊?