如何解决区块重组带来的数据一致性问题

  • Chainbase
  • 更新于 2023-09-14 12:34
  • 阅读 2875

区块链数据重组是一个普遍的难题,它影响着所有提供数据服务的机构。为了数据的准确性和完整性,我们不仅要正视这个问题,更要采取切实有效的措施来解决它。

什么是区块链重组(Reorg)?

区块链是一个不断增长的账本,按顺序记录交易在相互连接的区块中。每个区块包含前一个区块的加密哈希、时间戳和交易细节。这种顺序链接确保一旦交易被记录在区块链上,要修改它需要改变所有后续的区块,使区块链交易变得不可变。

有时,由于两个矿工同时生成区块,区块链可能会暂时地分叉。为了解决这个问题,区块链协议使用了“分叉选择规则”机制。这个规则评估所有接收到的区块和消息,决定哪个链是有效的主链。这是至关重要的,因为当两个竞争的区块同时生成时,可能会有多个候选的主链。未被选择为主链的区块成为孤块。随着链越来越长,特定分叉被丢弃的机会显著降低,确保了区块链的完整性。

区块重组(block reorganization)是一个复杂的概念,可以通过图表来解释。下面是一个简化的示例,说明了区块重组的发生过程。

  1. 在正常情况下:在正常运行时,区块按顺序添加到区块链中。
A → B → C → D
  1. 分叉发生:由于网络延迟、软件不兼容性或恶意行为等原因,网络中的一部分节点可能会创建并接受与其他节点不同的区块。这导致了分叉。
A → B → C → D
         ↘ E → F
  1. 区块重组:如果分叉链比主链更长,或以其他方式被网络中大多数节点接受,原始链可能会被丢弃,而分叉链可能会成为新的主链。这就是所谓的区块重组。
A → B → E → F

在这个示例中,区块C和D被丢弃,而区块E和F被接受。

如果涉及到交易会发生什么?

当在EVM网络中发生区块重组时,一个交易可能会从被丢弃的区块移动到新的主链区块。以下是这个过程的详细步骤和解释:

1. 交易被打包到区块A中。

验证者将交易打包到区块A中,并将其广播到网络上。

用户 → 交易 → 内存池 → 验证者 → 区块A

2. 发生分叉。

由于网络延迟或其他原因,另一个验证者可能同时创建另一个区块B。现在有两个竞争的区块。

区块A → 网络
       ↘ 区块B

3. 发生区块重组

随着更多的验证者投票,区块B可能获得更多的支持,并成为新的主链。区块A被丢弃。

区块A(被丢弃)
区块B → 网络(主链)

4. 交易如何“转移到”区块B

交易如何从区块A转移到区块B取决于区块B是如何创建的:

  • 情景1:区块B包含相同的交易:如果区块B的验证者从交易池中选择了相同的交易,并将其打包到区块B中,交易将自然地从区块A转移到区块B。
  • 情景2:区块B不包含该交易:如果区块B不包含该交易,则当区块A被丢弃时,交易可能返回到交易池,并在随后的区块中重新打包。

5. 交易得到确认

随着更多的区块被添加到主链,区块B及其中包含的交易最终会得到确认。

区块B(最终确认)→ 网络

在以太坊或任何EVM链的重组过程中,一个交易可能会从被丢弃的区块移到新的主链区块中。这可以通过将交易包含在新的区块中,或者将交易返回到内存池并在随后的区块中重新打包来实现。无论使用哪种方法,交易的最终结果都不应受到重组的影响。

尽管单个交易不会受到重组的影响,但交易数据哈希和映射块的不一致肯定会影响数据索引器和提供商。

为什么区块重组对于索引器是个问题?

!1.png

  1. 数据一致性:数据索引器依赖于区块链的数据是一致的。区块重组可以改变区块链的状态,意味着先前索引的数据可能不再有效。这要求索引器重新处理和重新索引受影响的区块。
  2. 性能开销:由于区块重组而进行重新索引可能会消耗资源。索引器可能需要回滚到先前的状态,然后重新索引新的区块,这可能耗时并且可能会损坏系统资源。
  3. 数据完整性:如果索引器未正确处理重组,可能会向应用程序或依赖其索引数据的用户提供过时或不正确的数据。
  4. 增加的延迟:为了减轻潜在重组的影响,一些索引器可能会在索引新区块时引入延迟,以确保它们是最长链的一部分。这可能会增加新数据出现在索引结果中所需的时间。

Chainbase 如何处理这些情况?

作为依赖于区块链数据的基础架构,Chainbase非常清楚有效地检测和处理区块重组的重要性。以下是如何执行这两个关键步骤的详细解释:

2.png

检测区块重组:

在此步骤中,我们在索引块数据的同时监视链上可能的区块重组。这种方法的优势在于工程师可以实时发现链的状态变化,包括正常的块添加和异常的块重组。 这种方法使我们能够将重新组织的数据传递给下游(例如,应用程序层或用户界面),同时与链保持一致。这确保了系统可以迅速响应链上的变化,并在客户端应用程序或服务中准确地反映这些变化。

处理区块重组:

在此步骤中,我们基于检测到的区块重组事件实时更新和恢复相关数据。例如,如果由于区块重组需要将用户的资产余额回滚到特定的区块高度,Chainbase可以自动执行此操作。对于“未确认”的区块数据,Chainbase保存了具有更改的块高度的所有版本,并将数据的最新版本呈现给外部。当发生区块重组时,它会回滚到指定版本。 这种方法的优势在于,它确保Chainbase的数据与链的实际状态保持一致,即使面临复杂的情况,如区块重组。

更多技术细节

3.png

1. 检测区块重组的起始点:

首先,我们将检查第一个收到的区块的哈希是否与本地保存的block_hash一致。这一步是为了确定是否发生了区块重组(reorg)。 如果检测到区块重组,我们将更新last_sync_block_file,其中记录了最后同步的区块的信息。 一旦发现重组,我们将指示ETL(Extract、Transform、Load)过程从发生重组的块高度开始重新编写数据。

2. 确保区块的连续性:

我们的算法将遍历并检查export_items中的每个区块,以确保其哈希与前一个区块的哈希一致。 这一步是为了确保本批次的block_hash连续,从而保证了块数据的完整性和连续性。

3. 最终验证和对区块重组的响应:

最后,我们将确定last_block的哈希是否与链上的数据一致。 如果发现区块重组(reorg),我们将决定丢弃该批数据。 在这种情况下,我们将指示ETL过程重新从链上获取数据,从而确保本地数据与链的状态保持一致。

区块链数据重组是一个普遍的难题,它影响着所有提供数据服务的机构。为了数据的准确性和完整性,我们不仅要正视这个问题,更要采取切实有效的措施来解决它。在二层网络乃至三层网络日益增长面向公众开放的未来,谁能充分解决区块重组所带来的数据一致性问题,谁就能够拿到大规模化应用的金钥匙。

在这样的背景下,集体智慧和共同努力变得尤为关键。我们坚信,只有汇聚多方的力量,才能构建出既稳固又高效的解决方案,进而为用户提供最为可靠的区块链数据服务。

因此,我们在这里透明地分享Chainbase的发展方向,并诚邀业内的数据索引商和提供商与我们联手。我们的共同目标是,打造一个优质的web3数据平台,以更好地服务于开发者和满足行业的高级需求。

About Chainbase

Chainbase 是一个开放的 Web3 数据基础设施,用于大规模地访问、组织和分析链上数据。

Chainbase 通过一个数据平台,将丰富的数据集与开放的计算技术相结合,帮助人们更好地利用链上数据。Chainbase 的目标是让加密数据易于使用并发挥效益,使人人受益,不断帮助这个时代最有创造力的人们,实现他们的想法。

本文原始链接: Unraveling Reorgs Problems: The Chainbase Approach

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Chainbase
Chainbase
0x7C46...d02D
Chainbase 是领先的 Web3 数据基础设施,帮助开发者轻松访问加密数据,并支持对数据的大规模索引、转换和使用。