如何使用ABI解码web3 py交易对象输入变量

问题描述 投票:0回答:1

我有一笔交易,我知道其中的哈希值。这是使用 Uniswap 出售代币的互换。我正在尝试查找钱包在交易对象中收到的 ETH 金额。据我所知,可以通过提取 web3 py 库返回的交易对象的“输入”字段中的函数调用及其参数来找到此信息。

任何人都可以帮助指导我如何正确解码此信息以获得我正在寻找的信息?

这是我正在打印的一些一般交易数据:

    -----------------------------------------------------------------------------------------
Transaction 4:
     Type: execute
     From: 0x9ae6c4196E8ca4aEE7bFCA0E2A767019e1fDbe26
     To: 0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD
     Block Number: 19715682
     Hash: 0x2691a1feec999b296b6b5a4e16f531b525afe59554246d23bfe8ccfd580cd495
     Value: 0 ETH ($0.0)
     Gas Spent: 0.0019 ETH ($6.6)
     Total Spent: 0.0019 ETH ($6.6)
-----------------------------------------------------------------------------------------

这里是相关代码,帮助我提取交易对象的输入字段(我通过etherscan手动获取abi,我可以确认函数getContractABI正在工作):

for i in range(0, len(transactions)):
    if getTransactionType(transactions[i]) == "execute":
        input_data = transactions[i]['input']
        print("Input Data:", input_data)

abi = getContractABI('0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD')

# Ensure input data is long enough to extract the function signature
if len(input_data) < 10:
    print("Error: Input data is too short to extract function signature.")
    exit(1)

# Extract the function signature from the input data
function_signature = input_data[:10]
print("Function Signature:", function_signature.hex())
function_signature_bytes = function_signature.hex()
print("Function Signatures in ABI:")
for item in abi:
    if 'name' in item and 'type' in item and item['type'] == 'function':
        signature = item.get('signature', 'N/A')
        print(item['name'], item['type'], signature)

以下是上面代码打印的信息:

Input Data: b"5\x93VL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00f'9\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\n\x08\x06\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\xeb\xa1\xed'\xb1\xa4\xba\x00\xb0 \x81\x92d\xa7\x013\xb6\xe1'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00fN\xc4\x8d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xc9\x1a:\xfdp9\\\xd4\x96\xc6G\xd5\xa6\xcc\x9dK+\x7f\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00f'>\x95\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00A\x94\xa3>\x89\rHt\xcc\xc3y\xf1\xb9l[\xdd\xf5A\xc5N\xe5\xd3k\xa9\xdd\x96\xb5\xe7Z\x987: ^7\xeb\xa8f\x1b\xbb\x03\x9cG\xd2G\xd6\xe06z\xdd\xdfW\x1a,\xdb\x13\xb9\x81R\xd7l N\x8c\xba\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x003+\xce,6\x116\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\xc7\xbf\x17<\x0e\x05\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\xeb\xa1\xed'\xb1\xa4\xba\x00\xb0 \x81\x92d\xa7\x013\xb6\xe1'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0*\xaa9\xb2#\xfe\x8d\n\x0e\\O'\xea\xd9\x08<ul\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0*\xaa9\xb2#\xfe\x8d\n\x0e\\O'\xea\xd9\x08<ul\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x007\xa8\xf2\x95a&\x02\xf2wM3\x1eV+\xe9\xe6\x1b\x83\xa3'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\xc0\xd8\xda`bw\x88"
Function Signature: 0x3593564c000000000000
Function Signatures in ABI:
collectRewards function N/A
execute function N/A
execute function N/A
onERC1155BatchReceived function N/A
onERC1155Received function N/A
onERC721Received function N/A
supportsInterface function N/A
uniswapV3SwapCallback function N/A
ethereum blockchain solidity web3js web3py
1个回答
0
投票

如果您使用的是 web3.py 您可以执行以下操作

  • 加载ABI文件、合约
  • 根据32位签名确定合约中的函数(函数选择器)
  • 从 Contract 对象中拉出此 Function 对象
  • 调用 decode_function_args

这将给出一个人类可读的被调用函数参数的字典。

© www.soinside.com 2019 - 2024. All rights reserved.