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
49KB
1K SLoC
Airnode ABI
该库允许在 API3 Airnode 和以太坊智能合约交互过程中对不同类型的数据进行编码和解码。
有关协议的详细信息请参阅 Airnode 规范
合约事件日志中的参数作为 Vec<U256>
消费,从而避免了读取随机原始字节,并在输入上提供正确数据对齐的保证。
解码的第二个参数是 strict
标志,它定义了解码是否可以扩展到在协议级别实际表示为 Bytes32
的扩展类型(String32、
Bool、
Date
)。
解码示例
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