块压缩是 Fuel Core 中的一个子系统,负责压缩 L2 区块链块以实现数据可用性(DA)。这种压缩机制可减少块的存储和带宽要求,同时确保所有必要数据在需要时仍可检索。本页将解释压缩服务的工作原理、其架构以及其与 Fuel Core 其他部分的集成。
有关数据可用性层和中继机制的信息,请参阅数据可用性和中继器。
块压缩子系统
来源:crates/services/compression/src/service.rs86-101 crates/services/compression/src/ports/block_source.rs crates/services/compression/src/ports/compression_storage.rs
The CompressionService 是负责接收块、压缩块并存储压缩数据的核心组件。它作为 Fuel Core 内的后台服务运行。
来源:crates/services/compression/src/service.rs86-121 crates/services/compression/src/service.rs44-82
块压缩流程如下所示
BlockSource 的新块流handle_new_block 函数compress 函数压缩块CompressionStorage 中来源:crates/services/compression/src/service.rs161-198 crates/services/compression/src/service.rs125-159
The CompressionStorage trait 定义了用于存储和检索压缩块的接口。它由支持压缩列的存储系统实现。
压缩块以其块高度作为键进行存储,从而实现按块高度的高效检索。
来源:crates/services/compression/src/ports/compression_storage.rs29-42 crates/services/compression/src/ports/compression_storage.rs
The BlockSource trait 提供了从区块链获取块的抽象。
这使得压缩服务能够在块生成时接收它们,并检索历史块以进行同步。
来源:crates/services/compression/src/ports/block_source.rs72-77
压缩服务使用 CompressionConfig 进行配置,其中包含:
temporal_registry_retention: 在时间注册表中保留数据的时间长度metrics: 启用/禁用指标收集的标志来源:crates/services/compression/src/config.rs1-36
当压缩服务启动时,它首先通过压缩服务启动前生成的任何块来与区块链同步。
这确保了压缩存储始终包含直到当前区块链高度的所有块。
来源:crates/services/compression/src/service.rs224-262
压缩服务通过适配器与 Fuel Core 集成
该适配器实现了 BlockSource trait,用于将块从块导入器提供给压缩服务。
来源:crates/fuel-core/src/service/adapters/compression_adapters.rs32-47
该适配器提供对压缩数据库的访问
来源:crates/fuel-core/src/service/adapters/compression_adapters.rs90-102
压缩服务定义了各种错误类型,以处理压缩过程中的故障
这些错误被封装在 CompressionError 枚举中,以便进行特定的错误处理和报告。
来源:crates/services/compression/src/errors.rs1-44
通过 GraphQL API 可以使用 da_compressed_block(height) 查询来访问压缩块。此查询返回指定高度的压缩块数据,这些数据可以反序列化为 VersionedCompressedBlock。
来自测试的用例示例
来源:tests/tests/da_compression.rs96-102
尽管本文档侧重于块压缩,但值得注意的是,块可以使用 decompress 函数进行解压缩,这需要:
这使得在需要时能够从压缩版本重建完整的块。
来源:tests/tests/da_compression.rs107-123
压缩服务可选择性地收集有关压缩过程的指标
这些指标可用于监控压缩服务的性能和健康状况。
来源:crates/services/compression/src/service.rs176-188
Fuel Core 中的块压缩系统提供了一种有效的方式来存储和传输区块链块,以实现数据可用性。通过压缩块并将其存储在专用数据库中,它减少了存储和带宽要求,同时确保所有数据在需要时仍可访问。该系统旨在与 Fuel Core 的其他部分无缝协作,自动与区块链同步并通过 GraphQL API 提供对压缩块的访问。