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

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

什么是区块链重组(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链的重组过程中,一个交易可能会从被丢弃的区块移到新的主链区块中。这可以通过将交易包含在新的区块中,或者将交易返回到内存池并在随后的区块中重新打包来实现。无论使用哪种方法,交易的最终结果都不应受到重组的影响。

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

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

image.png

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

Chainbase 如何处理这些情况?

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

image.png

检测区块重组:

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

处理区块重组:

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

更多技术细节

image.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

目录
相关文章
|
算法 Ubuntu 物联网
ESP32-C3入门教程 网络 篇(二、 Wi-Fi 配网 — Smart_config方式 和 BlueIF方式)
经过上一篇的WiFI入门篇,我们知道了WiFi初始化方式 和学会了WiFi的几种工作方式, 在实际应用中,环境复杂多变,在固件中输入SSID 的方式太不通用了, 所以肯定是需要学习一下如何在不同的环境中联网,就是所谓的配网。 ESP32-C3的配网方式有多种,本文主要说明测试 Smart方式 和 BlueIF方式。
3498 0
ESP32-C3入门教程 网络 篇(二、 Wi-Fi 配网 — Smart_config方式 和 BlueIF方式)
|
XML 域名解析 JSON
【RESTful】RESTful API 接口设计规范 | 示例
【RESTful】RESTful API 接口设计规范 | 示例
14057 0
【RESTful】RESTful API 接口设计规范 | 示例
|
5月前
|
数据采集 领域建模 数据库
领域模型图(数据架构/ER图)
本文介绍如何通过四色原型法进行领域建模,构建数据架构中的ER图。以风控系统为例,依次解析关键流程、识别时标性原型(MI)、参与方-地点-物品原型(PPT)、角色原型(Role)和描述原型(DESC),最终提炼出实体与关系,形成简洁的ER图,助力数据模型设计。
领域模型图(数据架构/ER图)
|
7月前
|
存储 运维 安全
合约交易所原理与撮合流程入门
本章系统解析合约交易所核心原理,涵盖撮合引擎、订单簿、保证金、风控与清算等关键要素,剖析价格-时间优先的匹配机制与分层架构设计,揭示低延迟、高并发下的稳定撮合逻辑,助力读者建立安全、高效、透明交易系统的认知基础。(238字)
|
缓存 网络协议 Linux
PCIe 以太网芯片 RTL8125B 的 spec 和 Linux driver 分析备忘
本文详细介绍了 Realtek RTL8125B PCIe 以太网芯片的规格以及在 Linux 中的驱动安装和配置方法。通过深入分析驱动源码,可以更好地理解其工作原理和优化方法。在实际应用中,合理配置和优化驱动程序可以显著提升网络性能和稳定性。希望本文能帮助您更好地使用和管理 RTL8125B,以满足各种网络应用需求。
1796 33
|
9月前
|
监控 算法 API
用抖音电商 API 实现抖音小店商品标签精准打标
本文介绍如何利用抖音电商 API 实现商品标签精准打标,提升曝光与转化率。内容涵盖打标重要性、API 调用准备、标签自动化更新流程及最佳实践,助力商家高效运营,优化推荐效果。
608 0
|
编解码 监控 开发工具
H.264语法结构分析之frame_cropping_flag
本文深入探讨了H.264标准中的`frame_cropping_flag`,一个常被提及却易被误解的概念。该标志用于指示解码后图像是否需裁剪,通过四个裁剪偏移量参数调整分辨率。文章分析了其在视频转码、流处理及编辑中的应用,并讨论对视频质量的影响,如内容完整性、分辨率调整和传输效率。合理设置此参数可优化视频适配与播放体验,但需注意兼容性问题。最后强调,理解音视频协议框架对开发高质量播放器至关重要。
370 9
Go字节数组与字符串相互转换
Go字节数组与字符串相互转换
344 3
|
JSON JavaScript 前端开发
以太坊 – 部署智能合约到Ganache
将编译好的智能合约部署到本地的Ganache区块链网络。步骤如下:更新项目的配置文件,修改网络配置连接到本地区块链网络(Ganache)。创建迁移脚本,告诉Truffle如何部署智能合约。运行新创建的迁移脚本,部署智能合约。...
2524 0
以太坊 – 部署智能合约到Ganache