5 releases (3 breaking)

0.4.0 Mar 11, 2022
0.3.1 Mar 11, 2022
0.3.0 Jan 19, 2021
0.2.0 Dec 21, 2020
0.1.0 Dec 19, 2020

#44 in #solidity

Download history 74/week @ 2023-12-17 8/week @ 2023-12-24 50/week @ 2024-01-07 73/week @ 2024-01-14 63/week @ 2024-01-21 25/week @ 2024-01-28 81/week @ 2024-02-04 87/week @ 2024-02-11 64/week @ 2024-02-18 75/week @ 2024-02-25 81/week @ 2024-03-03 45/week @ 2024-03-10 31/week @ 2024-03-17 25/week @ 2024-03-24 128/week @ 2024-03-31

236 downloads per month
Used in 2 crates

MIT license

82KB
2K SLoC

Ethereum ABI

Crates.io Docs.rs codecov

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

Examples

Decoding function inputs

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

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

  • JSON parsing
  • Function selectors (method ID)
  • argument encoding and decoding

ABI encoder V2

  • JSON parsing
  • Function selectors (method ID)
  • argument encoding and decoding

License

This project is licensed under the MIT License

Dependencies

~11MB
~216K SLoC