Blockchain 以太坊如何处理不同世界状态下的重复事务,即一个发送有效,另一个无效?

Blockchain 以太坊如何处理不同世界状态下的重复事务,即一个发送有效,另一个无效?,blockchain,ethereum,p2p,go-ethereum,Blockchain,Ethereum,P2p,Go Ethereum,步骤1:我创建一个智能合约呼叫事务TX并将其发送到以太坊 步骤2:验证发送并向其他节点广播 步骤3:Evm执行TX失败(可能是因为solidity函数返回错误,等等) 第四步:其他人更改了合同状态,我以前的发送现在有效。 我的问题是,如果我现在重新发送TX,它会被执行还是被丢弃 重复交易 如果以太坊不进行重复检查,一个事务可能会在p2p网络中循环?每个事务都有一个nonce。每次发送事务时,必须增加nonce 在您的场景中,假设第一个事务的nonce为5。那笔交易失败了。您发送的下一个事务

步骤1:我创建一个智能合约呼叫事务TX并将其发送到以太坊
步骤2:验证发送并向其他节点广播
步骤3:Evm执行TX失败(可能是因为solidity函数返回错误,等等)
第四步:其他人更改了合同状态,我以前的发送现在有效。


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


如果以太坊不进行重复检查,一个事务可能会在p2p网络中循环?

每个事务都有一个nonce。每次发送事务时,必须增加nonce


在您的场景中,假设第一个事务的nonce为5。那笔交易失败了。您发送的下一个事务必须具有nonce 6。因此,您不能简单地重播相同的事务,它将被拒绝,因为它具有无效的nonce,但您可以创建一个除了递增的nonce之外相同的新事务。那颗有资格被开采成一个区块。

谢谢。但是,如果我的第一个事务使用nonce 5 execute失败,那么我的第二个事务nonce仍然是5,并且这两个事务是相同的。对吗?不,无论事务是成功还是失败,下一个事务都需要使用递增的nonce。