数据序列化/反序列化
为了优化数据在网络上的发送和接收方式,Gear 使用parity-scale-codec
,这是 SCALE 编解码器的 Rust 实现。这个编解码器被 Substrate 节点的内部 runtime 所使用。SCALE 是一种轻量级的编码格式,能够实现数据的序列化和反序列化。使用 SCALE 对数据进行编码(和解码),它非常适用于资源受限的执行环境,如区块链运行时间和低功耗、低内存设备。
在程序中使用 SCALE codec,Cargo.toml
需要添加以下内容:
[dependencies]
// ...
codec = { package = "parity-scale-codec", version = "3.1.2", default-features = false }
use codec::{Decode, Encode};
#[derive(Encode, Decode)]
enum MyType {
MyStruct { field: ... },
...
}
信息
我们只需要在使用 gstd
的包装方法时使用 Encode 和 Decode 特性,例如 msg::send
,msg::reply
,send_for_reply
等。像 send_byte
或reply_bytes
这样的方法,我们操作的是字节数组,所以不需要进行解码/编码。
更多的内容请看 SCALE Codec。
scale-info
scale-info
是一个描述 Rust 类型的库,提供有关可编码 SCALE 类型结构的信息。
这些第三方工具 (例如 UI 客户端) 提供了关于它们如何能够解码不受语言影响的类型的信息。Gear 程序使用 scale-info
的接口称为 metadata
。它为所有必要的入口点定义了输入和输出类型,并允许合约和客户端相互理解。
信息
如何在合约中使用 metadata
,请看链接
在项目中使用 scale-info
:
[dependencies]
// ...
scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
更多的内容请看 scale-info。