【问题标题】:How a transaction is verified in a blockchain?如何在区块链中验证交易?
【发布时间】:2020-07-07 12:16:14
【问题描述】:

如果矿工 A 创建了一个包含交易 A 的区块,而矿工 B 创建了一个不包含交易 A 的区块,那么其他一些矿工将首先收到矿工 A 和其他人的区块会收到矿工B的出块。

如果矿工 B 的链比矿工 A 的链增长得快,那么交易 A 将永远不会被接受(就像它从未发生过一样)。那么,创建交易 A 的用户 A 如何确定交易 A 已被区块链接受/验证?

另外,交易A是否有可能在某个时候被区块链验证,然后在未来另一个不包含交易A的子链会增长得更快,从而拒绝交易A?

是否创建了所有矿工都应同意的时间检查点?

【问题讨论】:

  • 你到底在考虑哪个链?

标签: blockchain policy nonce consensus


【解决方案1】:

注意:由于区块链都非常不同,我假设我们谈论的是比特币。

如果块 B 被首先挖掘,事务 A 会回到节点的内存池(内存)中,并且是包含在下一个块中的候选者。如果交易没有被挖掘,内存池会在 2 周后踢出交易。

另一个不包含该区块的链可能会增长得更快,但可能性很小,因为每个区块平均需要 10 分钟,并且矿工被激励在主链上工作(而不是分叉链),因此他们会切换当主链挖出一个新区块时立即结束。他们不会在分叉链上工作足够长的时间来超过网络,浪费时间和资源。它需要至少 51%(平均)网络的哈希算力才能超过主链,被称为 51% 攻击。比特币从未发生过这种情况,但像比特币黄金这样的小型连锁店却发生过。

【讨论】:

  • 在比特币确实发生这种情况(51% 攻击)的假设场景中,这是否意味着交易会丢失?如果是这样,用户如何检查他的交易是否丢失(它不再属于主链)?如果发生这种情况,是否有预先配置的策略?
  • 如果该交易之前被挖掘,然后该链被丢弃(在 51% 攻击场景中),该交易必须再次提交(因为它的输出可能已经被花费,所以它可能是无效的在新链上)。这就是为什么一些托管方/交易所需要最少数量的确认(在首次确认交易后,每增加一个区块,攻击就会成倍增加)。
猜你喜欢
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2022-12-15
  • 1970-01-01
  • 2019-04-24
  • 2019-12-09
  • 1970-01-01
相关资源
最近更新 更多