So rufen Sie Schreibfunktionen über Python auf web3.py, w3.eth.sendRawTransaction()

Hallo, ich verwende Python web3.py (nicht web3.js), um mit Vertragsfunktionen zu interagieren:

w3 = Web3(HTTPProvider('http://room1.abc.com:8545/'))

txn = ctrtInstance.functions.setzString(zString).buildTransaction()
txn['nonce'] = 3643 # I have to add those into txn because Python complains about missing arguments
txn['chainId'] = 3 # for Ropsten network

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

Meine Variablen haben folgende Werte:

>>> txn
{
    'value': 0,
    'gas': 33504,
    'gasPrice': 1000000000,
    'chainId': 3,
    'to': '0x5227Dxyzxyzxyz',
    'data': '0xb32e420700000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000007476f204d616e2100000000000000000000000000000000000000000000000000',
    'nonce': 3643
}
>>> signed
AttrDict({
    'rawTransaction': HexBytes('0xf8ca820e3f8408f0d1808282e0945227d720d8efdcb259c6c79c74f3cfe04dc4d4fa80b864b32e420700000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000007476f204d616e21000000000000000000000000000000000000000000000000002aa0d6caf903ed36cbd971612805e0506c8800d8d7d2bf8e96efcbd17ef87ca103dda02875ef8165c191658e91d81c3f1a52e32f0ecb57956a943496290f9bd400080e'),
    'hash': HexBytes('0xcd96d8b646eabcaf40955a44b3bfd0bdd8eb8c8baab1d5eb1788802905fedd0d'),
    'r': 97153571344605986608608195363439103576254965532977107907893318995927525032925,
    's': 18300888055835900205586458475722080051361212052928774052376466183455388993550,
    'v': 42
})
>>> txn_hash
b'\xcd\x96\xd8\xb6F\xea\xbc\xaf@\x95ZD\xb3\xbf\xd0\xbd\xd8\xeb\x8c\x8b\xaa\xb1\xd5\xeb\x17\x88\x80)\x05\xfe\xdd\r'
>>> txn_hash.hex()
'cd96d8b646eabcaf40955a44b3bfd0bdd8eb8c8baab1d5eb1788802905fedd0d'

Python hat mir beim Senden keinen Fehler gegeben, aber Ropsten EtherScan zeigt meine Transaktion nicht an. Ich habe mehrere Minuten gewartet, daher ist die Mining-Verzögerung nicht der Grund. Und anscheinend ist diese Transaktion nicht zustande gekommen, denn nach Überprüfung des Werts der Vertragsvariablen ist es immer noch der alte Wert.

Was ist also schief gelaufen? Bitte helfen Sie. Danke schön.

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

Antworten (1)

Ihr Problem könnte sein, dass Sie eine falsche Nonce verwenden, anstatt sie manuell einzustellen, können Sie in web3py verwenden:

nonce = w3.eth.getTransactionCount('your account address')

hoffe das hilft