#abi #ethereum #solidity #cli #eth #events #smart-contracts

应用 ethabi-cli

用于将以太坊合约调用转换为字节码的简单易用的命令行界面

16个稳定版本 (12个主要版本)

16.0.0 2021年12月18日
14.1.0 2021年7月8日
14.0.0 2021年3月31日
13.0.0 2021年1月8日
1.2.0 2017年6月19日

#13 in #eth

Apache-2.0

235KB
6.5K SLoC

该项目不再积极维护。请考虑以下替代方案

ethabi

ABI(应用程序二进制接口)基本上是调用合约函数并获取数据的方式。

ABI确定了诸如函数如何被调用以及信息应如何以二进制格式从一个程序组件传递到下一个程序组件的细节...

以太坊智能合约是字节码,位于以太坊区块链上的EVM。在EVM中,一个合约中可能包含多个函数。ABI是必要的,以便您可以指定调用合约中的哪个函数,并且可以确保该函数将以您期望的格式返回数据。 了解更多

该库对函数调用进行编码并解码其输出。

文档

免责声明

该库旨在仅支持由最新版本的Solidity生成的有效ABI。具体来说,我们不打算支持由已知的Solidity错误或未严格遵循规范的库产生的无效ABI。在使用 ethabi 之前,请确保您的ABI已预先处理,以防它不受支持。

安装

cargo install ethabi-cli

使用方法

Ethereum ABI coder.
  Copyright 2016-2017 Parity Technologies (UK) Limited

Usage:
    ethabi encode function <abi-path> <function-name-or-signature> [-p <param>]... [-l | --lenient]
    ethabi encode params [-v <type> <param>]... [-l | --lenient]
    ethabi decode function <abi-path> <function-name-or-signature> <data>
    ethabi decode params [-t <type>]... <data>
    ethabi decode log <abi-path> <event-name-or-signature> [-l <topic>]... <data>
    ethabi -h | --help

Options:
    -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.

示例

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
[{
	"type":"function",
	"inputs": [{
		"name":"a",
		"type":"bool"
	}],
	"name":"foo",
	"outputs": []
}]

455575780000000000000000000000000000000000000000000000000000000000000001

--

ethabi encode function examples/test.json foo(bool) -p 1
[{
	"type":"function",
	"inputs": [{
		"name":"a",
		"type":"bool"
	}],
	"name":"foo",
	"outputs": []
}]

455575780000000000000000000000000000000000000000000000000000000000000001

--

ethabi encode function examples/test.json bar(bool) -p 1
[{
	"type":"function",
	"inputs": [{
		"name":"a",
		"type":"bool"
	}],
	"name":"foo",
	"outputs": []
}]

6fae94120000000000000000000000000000000000000000000000000000000000000001

--

ethabi encode function examples/test.json bar(string):(uint256) -p 1
[{
	"type":"function",
	"inputs": [{
		"type":"string"
	}],
	"name":"foo",
	"outputs": [{
		"type": "uint256"
	}]
}]

d473a8ed000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000

--

ethabi decode params -t bool 0000000000000000000000000000000000000000000000000000000000000001

布尔值 true

--

ethabi decode params -t bool -t string -t bool 00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096761766f66796f726b0000000000000000000000000000000000000000000000

布尔值 true
字符串 gavofyork
布尔值 false

--

ethabi decode params -t bool[] 00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

布尔数组 [true, false, false]

--

ethabi decode params -t '(string,bool,string)' 00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000673706972616c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067175617361720000000000000000000000000000000000000000000000000000```

(字符串, 布尔值, 字符串) (spiral, true, quasar)

--

ethabi decode function ./examples/foo.json bar 0000000000000000000000000000000000000000000000000000000000000001
[{
	"constant":false,
	"inputs":[{
		"name":"hello",
		"type":"address"
	}],
	"name":"bar",
	"outputs":[{
		"name":"",
		"type":"bool"
	}],
	"type":"function"
}]

布尔值 true

--

ethabi decode log ./examples/event.json Event -l 0000000000000000000000000000000000000000000000000000000000000001 0000000000000000000000004444444444444444444444444444444444444444

a 布尔值 true
b 地址 4444444444444444444444444444444444444444

依赖关系

约5MB
约77K SLoC