Expand description

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.

Structs

Airnode ABI object that can be encoded into the vector of U256 and decoded from it

Enums

Atomic parameter in the Airnode ABI