#abi #airnode #parameters #codec #decode #decoding #byte

airnode-abi

Airnode ABI (API3.org) 编码/解码器

6 个版本

0.2.0 2022年5月18日
0.1.5 2022年5月17日
0.1.2 2022年1月13日
0.1.1 2021年9月6日

#120 in #abi


用于 2 crates

MIT 许可证

49KB
1K SLoC

Airnode ABI

该库允许在 API3 Airnode 和以太坊智能合约交互过程中对不同类型的数据进行编码和解码。

有关协议的详细信息请参阅 Airnode 规范

合约事件日志中的参数作为 Vec<U256> 消费,从而避免了读取随机原始字节,并在输入上提供正确数据对齐的保证。

解码的第二个参数是 strict 标志,它定义了解码是否可以扩展到在协议级别实际表示为 Bytes32 的扩展类型(String32BoolDate)。

解码示例

use airnode_abi::ABI;
use ethereum_types::U256;
use hex_literal::hex;

fn main() {
    let data: Vec<U256> = vec![
        hex!("3162000000000000000000000000000000000000000000000000000000000000").into(),
        hex!("54657374427974657333324e616d650000000000000000000000000000000000").into(),
        hex!("536f6d6520627974657333322076616c75650000000000000000000000000000").into(),
    ];
    let res: ABI = ABI::decode(&data, true).unwrap();
    println!("{:#?}", res);
}

编码示例

use airnode_abi::{ABI, Param};
use ethereum_types::U256;

fn main() {
    let param = Param::String {
        name: "hello".to_owned(),
        value: "world".to_owned(),
    };
    let res: Vec<U256> = ABI::new(vec![param]).encode().unwrap();
    println!("{:#?}", res);
}

请参阅单元测试中每个参数类型的更多示例。

许可证

MIT

依赖关系

~1.1–2MB
~41K SLoC