我正在使用web3包编写一个python脚本。
解释的过程:
-
我有一笔交易,我读取了的交易收据
txn_receipt = w3.eth.getTransactionReceipt('0x8ddd5ab8f53df7365a2feb8ee249ca2d317edcdcb6f40faae728a3cb946b4eb1')
-
就这个例子而言,我阅读了日志的特定部分。这将返回一个十六进制。
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