Issue
I'm developing a website using python 3.6, Django 2.1.1, Solidity and web3.py v4. I want to add the transaction to ropsten testnet but the transactions are never getting confirmed. Here is the code:
amount_in_wei = w3.to_wei(questionEtherValue,'ether')
nonce=w3.eth.getTransactionCount(w3.toChecksumAddress(questionairAddress))+1
txn_dict = {
'to': contractAddress,
'value': amount_in_wei,
'gas': 2000000,
'gasPrice': w3.toWei('70', 'gwei'),
'nonce': nonce,
'chainId': 3
}
signed_txn = account.signTransaction(txn_dict)
txn_hash = w3.eth.sendRawTransaction(signed_txn.rawTransaction)
try:
txn_receipt = w3.eth.waitForTransactionReceipt(txn_hash, timeout=300)
except Exception:
return {'status': 'failed', 'error': 'timeout'}
else:
return {'status': 'success', 'receipt': txn_receipt}
Solution
Ah, as @yasaman.h discovered, there is an off-by-one error in the nonce
:
# original:
nonce = w3.eth.getTransactionCount(w3.toChecksumAddress(questionairAddress)) + 1
# should be:
nonce = w3.eth.getTransactionCount(w3.toChecksumAddress(questionairAddress))
The nonce
of a transaction must be equal to the count of previously-sent transactions. So the first transaction sent by a new account would have a nonce
of zero.
Answered By - carver
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.