⌘K

Icon Link编解码

编码和解码按照Fuel 规范 Icon Link进行。为此,fuels使用了ABIEncoder Icon LinkABIDecoder Icon Link

Icon Link编码/解码的先决条件

要编码一个类型,必须首先将其转换为Token Icon Link。这通常通过实现Tokenizable Icon Link特性来完成。

要解码,也需要提供描述该类型模式的ParamType Icon Link。这通常通过实现Parameterize Icon Link特性来完成。

所有由abigen! 宏生成的类型都实现了Tokenizable Icon LinkParameterize Icon Link特性。

fuels还包含了以下类型的实现:

Icon Link派生特性

如果所有内部类型都实现了派生特性,那么Tokenizable Icon LinkParameterize Icon Link都可以为structenum派生:

use fuels::macros::{Parameterize, Tokenizable};
 
#[derive(Parameterize, Tokenizable)]
struct MyStruct {
    field_a: u8,
}
 
#[derive(Parameterize, Tokenizable)]
enum SomeEnum {
    A(MyStruct),
    B(Vec<u64>),
}
Icon InfoCircle

注意: 为enum派生Tokenizable Icon Link要求所有变体也实现Parameterize Icon Link

Icon Link调整派生

Icon Link更改导入位置

派生代码期望fuels包通过::fuels访问。如果情况并非如此,则需要给派生宏提供fuels::typesfuels::core的位置。

#[derive(Parameterize, Tokenizable)]
#[FuelsCorePath = "fuels_core_elsewhere"]
#[FuelsTypesPath = "fuels_types_elsewhere"]
pub struct SomeStruct {
    field_a: u64,
}

Icon Link生成 no-std 代码

如果需要生成no-std代码:

use fuels::macros::{Parameterize, Tokenizable};
#[derive(Parameterize, Tokenizable)]
#[NoStd]
pub struct SomeStruct {
    field_a: u64,
}