6 releases

0.2.0 May 18, 2022
0.1.5 May 17, 2022
0.1.2 Jan 13, 2022
0.1.1 Sep 6, 2021

#111 in #abi

24 downloads per month
Used in 2 crates

MIT license

49KB
1K SLoC

Airnode ABI

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.

decoding example

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);
}

encoding example

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.

License

MIT

Dependencies

~1.2–2MB
~43K SLoC