我想了解这一点,以分析来自私有链事务的数据并获取针对特定事务发送的输入数据,我尝试了许多解码器,但在某些时候它们失败了。 这是我尝试使用混音的简单智能合约
contract simple{
uint256 deliveryID;
string status;
function stringAndUint(string _status,uint256 _deliveryID){
status=_status;
deliveryID=_deliveryID;
}
}
生成的输入数据:-0x3c38b7fd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000
我可以从上面解释以下内容。
答案 0 :(得分:3)
尝试在这里http://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#argument-encoding和这里http://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#use-of-dynamic-types
将编码拆分为32个字节的块可获得:
答案 1 :(得分:1)
Solidity使用"Contract ABI" spec进行编码。
@Brendan关于这些值的答案比我的要好,因此我将删除此部分。因为下面的部分仍然有用,所以我会保留答案。
在python中有一个名为eth-abi
的ABI解码工具,您可以像这样使用它:
from eth_utils import to_bytes
encoded = to_bytes(hexstr="0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000067374617475730000000000000000000000000000000000000000000000000000")
from eth_abi import decode_abi
decoded = decode_abi(['string', 'uint256'], encoded)
assert decoded == (b'status', 12)