ethereum_abi

Crates.ioethereum_abi
lib.rsethereum_abi
version0.4.0
sourcesrc
created_at2020-12-19 23:10:50.806708
updated_at2022-03-11 23:07:54.260149
descriptionEthereum Smart Contract ABI parsing library
homepage
repositoryhttps://github.com/FelipeRosa/rust-ethereum-abi
max_upload_size
id324724
size85,386
Felipe Rosa (FelipeRosa)

documentation

https://docs.rs/ethereum_abi

README

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

Commit count: 61

cargo fmt