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
每月225 次下载
用于 2 crates
82KB
2K SLoC
Ethereum ABI
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