8个版本
0.2.0 | 2023年10月29日 |
---|---|
0.1.2 | 2023年6月23日 |
0.0.4 | 2023年6月19日 |
0.0.3 | 2022年11月20日 |
0.0.1 | 2022年3月26日 |
#2109 in 魔法豆
240KB
6K SLoC
solabi
Solidity ABI实现(在Rust中)。
简介
这个crate旨在提供一个用于处理Solidity ABI的全面工具包,包括编码、解码值以及解析由Solidity编译器生成的JSON ABI。
用法
只需将solabi
作为依赖项添加!
solabi = "*"
solabi
依赖于ethprim
crate,该crate被重新导出以方便使用。这个crate特别包括用于编译时计算字面量的宏(例如256位整数和校验和地址)以及编译时计算Keccak-256摘要
use solabi::*;
const DIGEST: Digest = keccak!("hello world!");
const PRIME: I256 = int!("57896044618658097711785492504343953926634992332820282019728792003956564819949");
const ADDRESS: Address = address!("0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045");
未来工作
尽管Solidity ABI实现的核心组件基本完成,但在本crate的v1
版本之前,还有一些功能预计将实现,具体如下
- Solidity ABI项生成的过程宏。这包括生成用于编码和解码Solidity合同项的类型。虽然确切的API尚未确定,但预计将类似于以下
#[derive(solabi::Function)] #[solabi(signature = "function transferFrom(address, address, uint256) returns (bool)")] struct TransferFrom; #[derive(solabi::Event)] struct Transfer { #[solabi(indexed)] pub from: Address, #[solabi(indexed)] pub to: Address, pub value: U256, } fn main() { TransferFrom.encode_params(...); TransferFrom.decode_result(...); Transfer { ... }.encode(); Transfer::decode(Log { topics: ..., data: ..., }) }
- 为
Encode
和Decode
提供派生宏。#[derive(solabi::Decode, solabi::Encode)] struct MyStruct { name: String, age: uint256, occupation: Occupation, } #[derive(solabi::Decode, solabi::Encode)] enum Occupation { Crypto, Other, }
- Solidity打包编码。
依赖关系
~0.8–1.6MB
~33K SLoC