我正在尝试将web3.py
与infura.io一起用于将以太币令牌从一个地址发送到另一个地址。
这将返回一个交易ID。但是当我检查它时,它从未进入区块链。我使用了高燃气量,但它仍然不起作用(根据etherscan.io并且根据web3.py函数,交易ID不存在于区块链中)
我尝试了其他一些签署交易的方法,但它们也没有用。
请帮我完成这项工作。谢谢。
import web3
import time
w = web3.Web3(web3.HTTPProvider('https://mainnet.infura.io/12345678'))
# gas example
gas_limit = 250000
gas_price = 60
transaction = {
'to':to_addr,
'from':from_addr,
'value':int(eth_amount*(10**18)),
'gas':gas_limit,
'gasPrice':int(gas_price*(10**9)),
'chainId':1,
'nonce':int(time.time())
}
signed_transaction = w.eth.account.signTransaction(transaction, key)
transaction_id = w.eth.sendRawTransaction(signed_transaction.rawTransaction)
print ('\nhttps://etherscan.io/tx/{0}'.format(transaction_id.hex()))
答案 0 :(得分:2)
您的nonce
不正确。这不应该是随机值,而是用于标识此帐户中发生的事务数量的标量。这用于确保交易按照从发件人地址提交的正确顺序执行。如果你的nonce有一个缺口,那么具有较高nonce的事务就不会被执行,直到填补了这个缺口。使用nonce
的时间几乎可以保证您的交易永远不会被挖掘。
您可以使用nonce = w.eth.getTransactionCount('from_addr')
来获取正确的nonce值。请注意,nonce是从0开始的。
编辑 - 抱歉......没有意识到@smarx添加了评论链接以回答SE。