首页 > 解决方案 > 以太坊如何处理不同世界状态下的重复交易,这意味着一个 tx 有效而另一个无效?

问题描述

step1:我创建一个智能合约调用交易 TX 并将其发送到以太坊。
step2:TX 被验证并广播到其他节点。
step3:evm执行TX失败(可能是因为solidity函数返回err,等等)。
step4:别人修改了合约状态,我之前的TX现在有效。


我的问题是,如果我现在重新发送 TX,它会作为重复交易被执行还是丢弃?

如果以太坊不做重复检查,一个交易可能在p2p网络中循环?

标签: blockchainethereump2pgo-ethereum

解决方案


每笔交易都有一个随机数。每次发送交易时都必须增加随机数。

因此,在您的场景中,假设第一笔交易的随机数为 5。该交易失败。您发送的下一个交易必须有 nonce 6。因此,您不能简单地重新广播相同的交易——它将因为具有无效的 nonce 而被拒绝——但是你可以进行一个除了增加的 nonce 之外相同的新交易。那个人将有资格被开采成一个区块。


推荐阅读