如何使用web3-py解码BSC交易收据特定部分的十六进制



我正在使用web3包编写一个python脚本。

解释的过程:

  1. 我有一笔交易,我读取了的交易收据

    txn_receipt = w3.eth.getTransactionReceipt('0x8ddd5ab8f53df7365a2feb8ee249ca2d317edcdcb6f40faae728a3cb946b4eb1')

  2. 就这个例子而言,我阅读了日志的特定部分。这将返回一个十六进制。

    x = txn_receipt['logs'][4]['data']

问题:如何解码此十六进制?如果你转到BSC SCAN,你将在块453看到我期望的解码值。

期望值:

amount0In :
2369737542851785768252
amount1In :
0
amount0Out :
0
amount1Out :
82650726831815053455

请参见此处:https://bscscan.com/tx/0x8ddd5ab8f53df7365a2feb8ee249ca2d317edcdcb6f40faae728a3cb946b4eb1#eventlog

假设您不需要密钥名称,您可以使用基本的python(不需要web3库(来完成此操作。

BSC日志中的数据字段是一个十六进制编码值的字符串,它只是十进制值的16进制表示。在您的示例中:

0x00000000000000000000000000000000000000000000008076b6fbd0ebb5bd3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047b025e26b62ed08f

只需修剪开头,将其拆分,并使用python的int()函数转换每个字符串:

hexdata = '0x00000000000000000000000000000000000000000000008076b6fbd0ebb5bd3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047b025e26b62ed08f'
# Trim '0x' from beginning of string
hexdataTrimed = hexdata[2:]
# Split trimmed string every 64 characters
n = 64
dataSplit = [hexdataTrimed[i:i+n] for i in range(0, len(hexdataTrimed), n)]
# Fill new list with converted decimal values
data = []
for val in range(len(dataSplit)):
toDec = int(dataSplit[val], 16)
data.append(toDec)
print(data) 
# returns [2369737542851785768252, 0, 0, 82650726831815053455]

来源:

https://www.binaryhexconverter.com/hex-to-decimal-converterhttps://www.w3schools.com/python/ref_func_int.asp

最新更新