Crates.io | airnode-abi |
lib.rs | airnode-abi |
version | 0.2.0 |
source | src |
created_at | 2021-09-06 06:26:22.5094 |
updated_at | 2022-05-18 06:20:07.021487 |
description | Airnode ABI (API3.org) encoder/decoder |
homepage | https://github.com/EnormousCloud/airnode/ |
repository | https://github.com/EnormousCloud/airnode/ |
max_upload_size | |
id | 447418 |
size | 60,834 |
This library allows to encode and decode different types of data during interaction between API3 Airnode and Ethereum smart contracts
See details of protocol are at Airnode Specification
Parameters from contract event logs are consumed as Vec<U256>
, which avoids reading
random raw bytes and provides guarantee of a proper data alignment on input.
Second parameter of decoding is strict
flag, which defines whether decoding
could be done into extended types (String32
,Bool
,Date
)
that are actually represented as Bytes32
on a protocol level.
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);
}
Please see more examples for each type of the parameter in unit tests.
MIT