#ethereum #event-log #events #decode #logs #data #abi

no-std ethabi-decode

Decoding of ABI-encoded data and event logs

3 stable releases

2.0.0 Oct 1, 2024
1.1.0 Sep 11, 2024
1.0.0 Jan 15, 2024

#23 in #event-log

Download history 21214/week @ 2024-07-29 24576/week @ 2024-08-05 36145/week @ 2024-08-12 21423/week @ 2024-08-19 30841/week @ 2024-08-26 35918/week @ 2024-09-02 31864/week @ 2024-09-09 31066/week @ 2024-09-16 30962/week @ 2024-09-23 32901/week @ 2024-09-30 33826/week @ 2024-10-07 34208/week @ 2024-10-14 38023/week @ 2024-10-21 28221/week @ 2024-10-28 33481/week @ 2024-11-04 45181/week @ 2024-11-11

146,316 downloads per month
Used in 27 crates (3 directly)

Apache-2.0

73KB
1.5K SLoC

ethabi-decode

This library is a codec for ABI-encoded data and event logs. It is a fork of ethabi with a focus on providing decode functionality in environments where libstd may not be available.

For compatibility with constrained no_std environments, the design of this library differs from the the upstream ethabi in several respects, including:

  • ABI's need to be specified as code rather than being loaded from JSON (No SERDE support).
  • Use of Vec<u8> instead of std::string::String for owned strings.
  • Anything to do with human-readable error and display output was excised.

Building

  • Build without libstd

    cargo build --no-default-features
    
  • Build with libstd

    cargo build
    

Example

Decode an event log:

use ethabi_decode::{Event, ParamKind, Token};

fn decode_event_log(topics: Vec<H256>, data: Vec<u8>) -> Vec<Token> {

    let event = Event {
      signature: "SomeEvent(address,int256)",
      inputs: vec![
        Param { kind: ParamKind::Address, indexed: true },
        Param { kind: ParamKind::Int(256), indexed: false },
      ],
      anonymous: false,
    };

    event.decode(topics, data).unwrap()
}

Dependencies

~0.3–1.2MB
~22K SLoC