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

#77 in #solidity

Download history 18/week @ 2024-11-16 60/week @ 2024-11-23 56/week @ 2024-11-30 98/week @ 2024-12-07 74/week @ 2024-12-14 35/week @ 2024-12-21 15/week @ 2024-12-28 35/week @ 2025-01-04 56/week @ 2025-01-11 42/week @ 2025-01-18 73/week @ 2025-01-25 70/week @ 2025-02-01 63/week @ 2025-02-08 42/week @ 2025-02-15 36/week @ 2025-02-22 78/week @ 2025-03-01

230 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

~12MB
~225K SLoC