#ethereum #event-log #decode #logs #data #decoding #ethabi

无需 std ethabi-decode

解析 ABI 编码的数据和事件日志

1 个稳定版本

1.0.0 2024年1月15日

#400魔法豆

Download history 19021/week @ 2024-03-14 23960/week @ 2024-03-21 25032/week @ 2024-03-28 29676/week @ 2024-04-04 26578/week @ 2024-04-11 23802/week @ 2024-04-18 18547/week @ 2024-04-25 17739/week @ 2024-05-02 17337/week @ 2024-05-09 17048/week @ 2024-05-16 27366/week @ 2024-05-23 23652/week @ 2024-05-30 16715/week @ 2024-06-06 19274/week @ 2024-06-13 20331/week @ 2024-06-20 14582/week @ 2024-06-27

74,732 每月下载量
用于 19 个 crate(3 个直接使用)

Apache-2.0

72KB
1.5K SLoC

ethabi-decode

这个库是 ABI 编码数据的事件日志编解码器。它是 ethabi 的分支,重点是在可能无法使用 libstd 的环境中提供解码功能。

为了与受限的 no_std 环境兼容,此库的设计在几个方面与上游 ethabi 不同,包括

  • 将 ABI 指定为代码而不是从 JSON 加载(不支持 SERDE)。
  • 使用 Vec<u8> 代替 std::string::String 用于所有者字符串。
  • 与人类可读的错误和显示输出有关的一切都被删除。

构建

  • 不使用 libstd 构建

    cargo build --no-default-features
    
  • 使用 libstd 构建

    cargo build
    

示例

解码事件日志

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()
}

依赖项

~0.3–1.2MB
~24K SLoC