Ethereum ABI

Crates.io Docs.rs

ethereum_abi is a Rust library to help writing code that interacts with Ethereum Smart Contracts.

Examples

Decoding function inputs

```rust use std::fs::File; use std::io;

use ethereum_abi::Abi;

fn main() { // Parse ABI JSON file let abi = { let file = File::open("some_abi.json").expect("failed to open ABI file");

    Abi::from_reader(file).expect("failed to parse ABI")
};

// Read some ABI encoded function input
let mut encoded_input = String::new();
io::stdin()
    .read_line(&mut encoded_input)
    .expect("failed to read encoded input");

// Decode
let (func, decoded_input) = abi
    .decode_input_from_hex(&encoded_input.trim())
    .expect("failed decoding input");

println!("function called: {}\ninput: {:?}", func.name, decoded_input);

} ```

Decoding log data

```rust use std::{fs::File, str::FromStr};

use ethereum_abi::Abi; use web3::types::H256;

fn main() { // Parse ABI JSON file let abi = { let file = File::open("some_abi.json").expect("failed to open ABI file");

    Abi::from_reader(file).expect("failed to parse ABI")
};

// Log data
let topics = vec![
    H256::from_str("...").unwrap(),
    H256::from_str("...").unwrap(),
];

let data = "0000000...".as_bytes();

// Decode
let (evt, decoded_data) = abi
    .decode_log_from_slice(&topics, data)
    .expect("failed decoding log");

println!("event: {}\ndata: {:?}", evt.name, decoded_data);

} ```

Features

ABI encoder V1

ABI encoder V2

License

This project is licensed under the [MIT License]