web3 (python) 创建的交易不会反映在以太坊区块链上

Posted

技术标签:

【中文标题】web3 (python) 创建的交易不会反映在以太坊区块链上【英文标题】:The transactions created by web3 (python) aren't reflected on the Ethereum blockchain 【发布时间】:2018-06-23 20:46:42 【问题描述】:

我正在尝试将web3.py 与 infura.io 一起使用,将以太坊令牌从一个地址发送到另一个地址。 这将返回给我一个交易 ID。但是当我检查它时,它永远不会进入区块链。我使用了高gas量,但它仍然不起作用(根据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()))

【问题讨论】:

与ethereum.stackexchange.com/questions/36310/…交叉链接。 【参考方案1】:

您的nonce 不正确。这不应该是一个随机值,而是一个标量,用于标识从该帐户发生的交易数量。这用于确保交易按照从发件人地址提交的正确顺序执行。如果您的 nonce 有缺口,则在填补该缺口之前,不会执行具有较高 nonce 的交易。使用nonce 的时间几乎可以保证您的交易永远不会被挖掘。

您可以使用nonce = w.eth.getTransactionCount('from_addr') 来获取正确的nonce 值。请注意,nonce 是从 0 开始的。

编辑 - 抱歉...没有意识到 @smarx 添加了评论链接以回答 SE。

【讨论】:

以上是关于web3 (python) 创建的交易不会反映在以太坊区块链上的主要内容,如果未能解决你的问题,请参考以下文章

Web3 python无法发送交易

web3 python 以太坊原始交易

Web3 签名交易问题找到非十六进制数字(Python)

Web3 - 可以取消 ETH 交易吗?

Web3 获取合约交易历史

如何从 RSKj regtest 区块链节点的测试账户发送 web3 交易