Crates.io | solabi |
lib.rs | solabi |
version | 0.2.0 |
source | src |
created_at | 2022-03-26 19:37:47.239543 |
updated_at | 2023-10-29 16:28:26.010314 |
description | Solidity ABI implementation in Rust |
homepage | https://github.com/nlordell/solabi-rs |
repository | https://github.com/nlordell/solabi-rs |
max_upload_size | |
id | 556941 |
size | 251,716 |
solabi
Solidity ABI implementation in Rust.
This crate aims to provide a comprehensive toolkit for working with the Solidity ABI in Rust, including encoding and decoding values as well as parsing JSON ABI generated by the Solidity complier.
Just add solabi
as a dependency!
solabi = "*"
solabi
depends on the ethprim
crate which gets
re-exported for convenience. This crate notably includes macros for compile-time
computed literals (for things like 256-bit integers and checksummed addresses)
as well as compile-time computed Keccak-256 digests:
use solabi::*;
const DIGEST: Digest = keccak!("hello world!");
const PRIME: I256 = int!("57896044618658097711785492504343953926634992332820282019728792003956564819949");
const ADDRESS: Address = address!("0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045");
While the core components of the Solidity ABI implementation are mostly
complete, there are a couple of features that expected to be implemented before
v1
of this crate, namely:
#[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
and Decode
.
#[derive(solabi::Decode, solabi::Encode)]
struct MyStruct {
name: String,
age: uint256,
occupation: Occupation,
}
#[derive(solabi::Decode, solabi::Encode)]
enum Occupation {
Crypto,
Other,
}