5 个版本 (3 个重大变更)

0.4.0 2022年3月11日
0.3.1 2022年3月11日
0.3.0 2021年1月19日
0.2.0 2020年12月21日
0.1.0 2020年12月19日

#59 in #solidity

Download history 31/week @ 2024-03-22 40/week @ 2024-03-29 31/week @ 2024-04-05 27/week @ 2024-04-12 26/week @ 2024-04-19 24/week @ 2024-04-26 27/week @ 2024-05-03 31/week @ 2024-05-10 31/week @ 2024-05-17 66/week @ 2024-05-24 62/week @ 2024-05-31 107/week @ 2024-06-07 84/week @ 2024-06-14 97/week @ 2024-06-21 29/week @ 2024-06-28 5/week @ 2024-07-05

每月225 次下载
用于 2 crates

MIT 许可协议

82KB
2K SLoC

Ethereum ABI

Crates.io Docs.rs codecov

ethereum_abi 是一个 Rust 库,用于帮助编写与 Ethereum 智能合约交互的代码。

示例

解码函数输入

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);
}

解码日志数据

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);
}

功能

ABI 编码器 V1

  • JSON 解析
  • 函数选择器(方法 ID)
  • 参数编码和解码

ABI 编码器 V2

  • JSON 解析
  • 函数选择器(方法 ID)
  • 参数编码和解码

许可协议

本项目采用 MIT 许可协议

依赖关系

~7–10MB
~187K SLoC