Как декодировать txn_hash из вызова функции контракта через Python web3.py, w3.eth.sendRawTransaction

Привет, я использую Python web3.py(не web3.js), чтобы запустить это:

 txn = ctrtInstance.functions.setzString(zString).buildTransaction()
 print('\ntxn: '+ str(txn))
 txn['nonce'] = 3643
 txn['chainId'] = 3
 print('\ntxn: '+ str(txn))

#So the txn looks this: {'value': 0, 'gas': 33504, 'gasPrice': 1000000000, 'chainId': 3, 'to': '0x5227D720d8eFDcB259c6c79C74f3Cfe04DC4D4fa', 'data': '0xb32e420700000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000007476f204d616e2100000000000000000000000000000000000000000000000000', 'nonce ': 3643}

 signed = w3.eth.account.signTransaction(txn, privateKey)
 txn_hash = w3.eth.sendRawTransaction(signed.rawTransaction)

Тогда txn_hash выглядит очень странно: b"\x83\xd4\t'\x9e\xec\xb7\xc0\xf5\xdd\xf9\xb9\x0fD\xdc\x81\xfb\x8d\x0e\xf7\xb5\xbc2e~ \x81R\x8c]Эк|"

Что это такое? Как расшифровать этот хэш транзакции?

Почему он отличается от других хэшей транзакций, которые я видел в Интернете?

Как я могу расшифровать его, чтобы я мог ввести его в EtherScan для проверки такой транзакции? Спасибо

Ссылка: http://web3py.readthedocs.io/en/latest/web3.eth.html#web3.eth.Eth.sendRawTransaction

Вы видели пример здесь ? Похоже, вы не передаете правильное значение в функцию.

Ответы (2)

Используйте hex().

txnHash = w3.eth.sendRawTransaction(signed.rawTransaction)
print('txnHash: '+ str(txnHash))

txnHashHex = txnHash.hex()
print('txnHash.hex(): '+ txnHashHex)

Вывод в терминале:

txnHash: b'\x8f\xd8\x89\xfdt\x1f\xeb4\x88\x15\xeb\xb2-\xd8D\xf6\xdb%~\xdb\x0c\xf1\xa9n\x17R\x19\xf6#\xe6\x81\xf5'
binascii.hexlify(txnHash)= b'8fd889fd741feb348815ebb22dd844f6db257edb0cf1a96e175219f623e681f5'
txnHash.hex(): 0x8fd889fd741feb348815ebb22dd844f6db257edb0cf1a96e175219f623e681f5

Затем вы можете перейти txnHash.hex()к EtherScan, чтобы найти этот статус транзакции :)

То, что вы видите, представляет собой двоичное представление байтов в формате ASCII.

Вы можете преобразовать необработанные байты в шестнадцатеричный формат в Python:

 import binascii
 print binascii.hexlify(b"\x83\xd4\t'\x9e\xec\xb7\xc0\xf5\xdd\xf9\xb9\x0fD\xdc\x81\xfb\x8d\x0e\xf7\xb5\xbc2e~\x81R\x8c]Ek|")

 83d409279eecb7c0f5ddf9b90f44dc81fb8d0ef7b5bc32657e81528c5d456b7c
Привет. Спасибо. Так почему же Ropsten EtherScan не смог найти такую ​​транзакцию? Спасибо
Я предлагаю вам открыть еще один вопрос с подробным описанием хэша вашей транзакции, как вы подключены к сети Ropsten и как вы ищете его в Ropsten, поскольку вопрос, который вы задаете в комментарии, — это другой вопрос.
Спасибо Микко. txnHash.hex() на самом деле удобнее :)