https://github.com/rust-ethereum/ethabi
Encode and decode smart contract invocations
https://github.com/rust-ethereum/ethabi
abi ethereum evm rust
Last synced: 3 days ago
JSON representation
Encode and decode smart contract invocations
- Host: GitHub
- URL: https://github.com/rust-ethereum/ethabi
- Owner: rust-ethereum
- License: apache-2.0
- Created: 2016-05-02T22:27:15.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2023-08-16T17:41:09.000Z (over 1 year ago)
- Last Synced: 2025-04-12T01:55:27.543Z (3 days ago)
- Topics: abi, ethereum, evm, rust
- Language: Rust
- Homepage:
- Size: 1.35 MB
- Stars: 519
- Watchers: 24
- Forks: 197
- Open Issues: 47
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rust - ethabi - Encode and decode smart contract invocations. (Applications / Blockchain)
- awesome-solidity - rust-ethereum/ethabi - Encode and decode smart contract invocations. (Languages)
- awesome-solidity - rust-ethereum/ethabi - Encode and decode smart contract invocations. (Languages)
- awesome-web3-tools-and-dapps - Rust Ethereum ABI - Analyze the ABI for encoding and decoding smart contract functions and results. (dApps directory / ABI Tools)
- awesome-solidity - rust-ethereum/ethabi - Encode and decode smart contract invocations. (Languages)
- awesome-rust - ethabi - Encode and decode smart contract invocations. (Applications / Blockchain)
- awesome-ethereum-rust - ethabi
- awesome-solidity - rust-ethereum/ethabi - Encode and decode smart contract invocations. (Languages)
- awesome-solidity - rust-ethereum/ethabi - Encode and decode smart contract invocations. (Languages)
- fucking-awesome-rust - ethabi - Encode and decode smart contract invocations. (Applications / Blockchain)
- fucking-awesome-rust - ethabi - Encode and decode smart contract invocations. (Applications / Blockchain)
- awesome-rust-cn - ethabi - 对智能合约的调用进行编码和解码. (应用程序 Applications / 加密货币 Cryptocurrencies)
README
This project is not actively maintained. Consider these alternatives:
- https://github.com/nlordell/solabi-rs
- https://github.com/alloy-rs/core# ethabi
The ABI, Application Binary Interface, is basically how you call functions in a contract and get data back.
> An ABI determines such details as how functions are called and in which binary format information should be passed from one program component to the next...
An Ethereum smart contract is bytecode, EVM, on the Ethereum blockchain. Among the EVM, there could be several functions in a contract. An ABI is necessary so that you can specify which function in the contract to invoke, as well as get a guarantee that the function will return data in the format you are expecting. [read more](http://ethereum.stackexchange.com/a/1171/394)
This library encodes function calls and decodes their output.
[Documentation](https://docs.rs/ethabi)
### Disclaimer
This library intends to support only valid ABIs generated by recent Solidity versions. Specifically, we don't intend to support ABIs that are invalid due to known Solidity bugs or by external libraries that don't strictly follow the specification.
Please make sure to pre-process your ABI in case it's not supported before using it with `ethabi`.### Installation
```
cargo install ethabi-cli
```### Usage
```
Ethereum ABI coder.
Copyright 2016-2017 Parity Technologies (UK) LimitedUsage:
ethabi encode function [-p ]... [-l | --lenient]
ethabi encode params [-v ]... [-l | --lenient]
ethabi decode function
ethabi decode params [-t ]...
ethabi decode log [-l ]...
ethabi -h | --helpOptions:
-h, --help Display this message and exit.
-l, --lenient Allow short representation of input params.Commands:
encode Encode ABI call.
decode Decode ABI call result.
function Load function from json ABI file.
params Specify types of input params inline.
log Decode event log.
```### Examples
```
ethabi encode params -v bool 1
```> 0000000000000000000000000000000000000000000000000000000000000001
--
```
ethabi encode params -v bool 1 -v string gavofyork -v bool 0
```> 00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096761766f66796f726b0000000000000000000000000000000000000000000000
--
```
ethabi encode params -v bool[] [1,0,false]
```> 00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--
```
ethabi encode params -v '(string,bool,string)' '(test,1,cyborg)'
```> 00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000004746573740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066379626f72670000000000000000000000000000000000000000000000000000
--
```
ethabi encode function examples/test.json foo -p 1
``````json
[{
"type":"function",
"inputs": [{
"name":"a",
"type":"bool"
}],
"name":"foo",
"outputs": []
}]
```> 455575780000000000000000000000000000000000000000000000000000000000000001
--
```
ethabi encode function examples/test.json foo(bool) -p 1
``````json
[{
"type":"function",
"inputs": [{
"name":"a",
"type":"bool"
}],
"name":"foo",
"outputs": []
}]
```> 455575780000000000000000000000000000000000000000000000000000000000000001
--
```
ethabi encode function examples/test.json bar(bool) -p 1
``````json
[{
"type":"function",
"inputs": [{
"name":"a",
"type":"bool"
}],
"name":"foo",
"outputs": []
}]
```> 6fae94120000000000000000000000000000000000000000000000000000000000000001
--
```
ethabi encode function examples/test.json bar(string):(uint256) -p 1
``````json
[{
"type":"function",
"inputs": [{
"type":"string"
}],
"name":"foo",
"outputs": [{
"type": "uint256"
}]
}]
```> d473a8ed000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000
--
```
ethabi decode params -t bool 0000000000000000000000000000000000000000000000000000000000000001
```> bool true
--
```
ethabi decode params -t bool -t string -t bool 00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096761766f66796f726b0000000000000000000000000000000000000000000000
```> bool true
> string gavofyork
> bool false--
```
ethabi decode params -t bool[] 00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
```> bool[] [true,false,false]
--
```
ethabi decode params -t '(string,bool,string)' 00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000673706972616c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067175617361720000000000000000000000000000000000000000000000000000```
```> (string,bool,string) (spiral,true,quasar)
--
```
ethabi decode function ./examples/foo.json bar 0000000000000000000000000000000000000000000000000000000000000001
``````json
[{
"constant":false,
"inputs":[{
"name":"hello",
"type":"address"
}],
"name":"bar",
"outputs":[{
"name":"",
"type":"bool"
}],
"type":"function"
}]
```> bool true
--
```
ethabi decode log ./examples/event.json Event -l 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000004444444444444444444444444444444444444444
```> a bool true
> b address 4444444444444444444444444444444444444444