So dekodieren Sie txn_hash aus dem Vertragsfunktionsaufruf über Python web3.py, w3.eth.sendRawTransaction

Hallo, ich verwende Python web3.py (nicht web3.js), um Folgendes auszuführen:

 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)

Dann sieht txn_hash sehr seltsam aus: b"\x83\xd4\t'\x9e\xec\xb7\xc0\xf5\xdd\xf9\xb9\x0fD\xdc\x81\xfb\x8d\x0e\xf7\xb5\xbc2e~ \x81R\x8c]Ek|"

Was ist es? Wie entschlüsselt man diesen Transaktions-Hash?

Warum sieht es anders aus als andere Transaktionshashs, die ich online gesehen habe?

Wie kann ich es entschlüsseln, damit ich es in EtherScan eingeben kann, um eine solche Transaktion zu überprüfen? Danke dir

Referenz: http://web3py.readthedocs.io/en/latest/web3.eth.html#web3.eth.Eth.sendRawTransaction

Hast du das Beispiel hier gesehen ? Scheint, als ob Sie möglicherweise nicht den richtigen Wert an die Funktion übergeben.

Antworten (2)

Verwenden Sie hex().

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

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

Ausgabe im Terminal:

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

Sie können dann txnHash.hex()zu EtherScan gehen, um diesen Transaktionsstatus zu finden :)

Was Sie sehen, ist eine ASCII-Binärdarstellung der Bytes.

Sie können rohe Bytes in Python in Hex umwandeln:

 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
Hey. danke schön. Warum konnte Ropsten EtherScan eine solche Transaktion nicht finden? Vielen Dank
Ich schlage vor, Sie öffnen eine weitere Frage mit den Details, was Ihr Transaktionshash ist, wie Sie mit dem Ropsten-Netzwerk verbunden sind und wie Sie es auf Ropsten nachschlagen, da die Frage, die Sie im Kommentar stellen, eine andere Frage ist.
Danke Miko. txnHash.hex() ist eigentlich bequemer :)