首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当恶意/行为不当的矿工在新块中重新引入旧事务时,节点如何检测重复事务

当恶意/行为不当的矿工在新块中重新引入旧事务时,节点如何检测重复事务
EN

Ethereum用户
提问于 2017-03-05 15:48:31
回答 1查看 2.1K关注 0票数 3

我读过关于种族攻击,芬尼攻击,在这里,商人应该采取预防措施,等待几个街区确认后,才能交付货物。我正在检查验证序列,然后是更新其分类账副本的节点,如以下所示(来自Ethereum白皮书:https://github.com/ethereum/wiki/wiki/White-Paper)

  1. 检查前面引用的块是否存在且是否有效。
  2. 检查该块的时间戳是否大于所引用的前一个块的时间戳,并且在今后不到15分钟的时间内。
  3. 检查区块号、难度、交易根、伯伯根和气体限值(各种低层次的具体概念)是否有效。
  4. 检查块上的工作证明是否有效。
  5. 让S0的状态在前一块结束。
  6. 设TX为块的事务列表,包含n个事务。对于0.n-1中的所有I,设Si+1 = APPLY(S我,TX我).如果任何应用程序返回一个错误,或者如果在此之前块中消耗的气体总量超过了GASLIMIT,则返回一个错误。
  7. 让S_FINAL是SN,但加上付给矿商的整块报酬。8.检查状态S_FINAL的Merkle树根是否等于块标头中提供的最终状态根。如果是,则该块有效;否则,该块无效。

我想知道上面的序列如何防止随后的攻击:

  1. 矿工创建一个具有事务100的块,例如块为27000。
  2. 在创建了几个块之后,当miner有机会创建一个新块(已选中)时,它将再次引入事务100,例如块27100。

比如说,寄件人账户中有大量的以太。上面的攻击允许接收者从发送者那里获得两倍的数量。

验证是否包括检查来自根块的跨块的重复事务ID?随着时间的推移,这似乎是大量的工作。

我肯定我错过了什么。块链和上述序列中的哪个验证点如何保护这一点。

谢谢

EN

回答 1

Ethereum用户

回答已采纳

发布于 2017-03-05 18:32:40

每个帐户都有一个名为“现在”的数字。它从零开始,在处理完每个事务之后,它就会递增。

每个事务也有一个时间。对于要处理的事务,帐户必须具有完全相同的当前事务。这不仅强制所有事务按照发送的顺序进行,而且还防止重复事务。如果矿工再次尝试运行事务,则该块将无效,因为不匹配将不匹配。

但是,如果游戏中有多个区块链,这种保护就不那么强大了。攻击者可以重播发生在另一个区块链上的事务,因为另一个区块链上的当前值不会增加。这个问题最终被EIP 155解决了。

票数 3
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/12779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档