blockchain - 以太坊如何处理不同世界状态下的重复交易,这意味着一个 tx 有效而另一个无效?
问题描述
step1:我创建一个智能合约调用交易 TX 并将其发送到以太坊。
step2:TX 被验证并广播到其他节点。
step3:evm执行TX失败(可能是因为solidity函数返回err,等等)。
step4:别人修改了合约状态,我之前的TX现在有效。
我的问题是,如果我现在重新发送 TX,它会作为重复交易被执行还是丢弃?
如果以太坊不做重复检查,一个交易可能在p2p网络中循环?
解决方案
每笔交易都有一个随机数。每次发送交易时都必须增加随机数。
因此,在您的场景中,假设第一笔交易的随机数为 5。该交易失败。您发送的下一个交易必须有 nonce 6。因此,您不能简单地重新广播相同的交易——它将因为具有无效的 nonce 而被拒绝——但是你可以进行一个除了增加的 nonce 之外相同的新交易。那个人将有资格被开采成一个区块。
推荐阅读
- flutter - 无法在颤振网络中解析我的响应正文
- git - 稀疏结帐工作区上的 Git 合并也会拉出所有其他文件夹
- flutter - 此 AdWidget 已在 Widget 树中。如何禁用此异常。这是什么意思?扑
- windows - 如何阻止用户在 windows 2012 R2 中删除文件?
- makefile - 如何欺骗 Make 在子文件夹中动态运行命令
- azure-devops - 从 repo 构建特定的解决方案文件
- swift - 如何修复显示屏上的按钮
- python - Google OR-TOOLS VRP 以前的 OR-TOOLS 分配问题的问题
- postman - 如何在 Postman 中使用 pm.expect 断言来显示差异
- c++ - 使用 VSCode MACOS 构建时 GLFW 链接器命令失败(退出代码 1)