#graph-traversal #epoch #algorithm #guard #bitcoin #codebase #guarded

bitcoin-epoch

基于纪元的图遍历算法的 RAII 风格守卫器

2 个版本

0.1.16-alpha.02023 年 4 月 1 日
0.1.12-alpha.02023 年 1 月 19 日

#17 in #graph-traversal

Download history 92/week @ 2024-03-11 117/week @ 2024-03-18 197/week @ 2024-03-25 195/week @ 2024-04-01 87/week @ 2024-04-08 114/week @ 2024-04-15 123/week @ 2024-04-22 108/week @ 2024-04-29 136/week @ 2024-05-06 112/week @ 2024-05-13 114/week @ 2024-05-20 75/week @ 2024-05-27 83/week @ 2024-06-03 84/week @ 2024-06-10 99/week @ 2024-06-17 123/week @ 2024-06-24

389 每月下载次数
46 个 (4 个直接) 库中使用

MIT 许可证

265KB
685

bitcoin-epoch

此库是 Bitcoin Core C++ 代码库直接翻译为 Rust 的一部分。

它提供了用于管理基于纪元的图遍历算法的类型和函数,这些算法在 Bitcoin Core 代码库中被广泛用于遍历交易依赖图。

纪元

Epoch 是库的主要类型。它是用于使用基于纪元的图遍历算法的 RAII 风格守卫器。它用于在遍历祖先或后代时避免重复访问相同的交易。

该类型包含一个表示当前纪元的 raw_epoch 字段,以及一个表示纪元是否目前正被 EpochGuard 守卫的 guarded 字段。默认函数使用 raw_epoch 为 0 和 guarded 设置为 false 创建一个 Epoch 实例。

该类型提供了一个 visited 函数,该函数接受一个可变引用到 EpochMarker 并返回一个布尔值,指示标记是否在当前纪元中已被访问。默认函数返回一个布尔值,指示纪元是否目前正被 EpochGuard 守卫。

EpochGuard

EpochGuard 是一个作用域锁守卫,用于在区块持续时间内守卫纪元。它负责在作用域结束时递增纪元,以确保纪元之间的清晰分离。

该类型包含一个代表被保护的纪元的 epoch 字段,该字段是一个 Rc<RefCell<Epoch>>,表示正在被保护的纪元。new 函数创建一个新的 EpochGuard 实例并保护该纪元,增加其 raw_epoch 字段,并设置其 guarded 字段为 true。当保护者超出作用域并调用保护者的 drop 函数时,保护者被释放,纪元的 guarded 字段被设置为 false

纪元标记

EpochMarker 是一个简单的结构体,包含一个 marker 字段,用于跟踪在当前纪元中是否已访问过事务。该 marker 字段是一个表示纪元时间的 u64

default 函数创建一个具有 marker 字段为 0 的 EpochMarker 实例。

免责声明

请注意,本软件包中的一些函数体可能仍在从 C++ 转换到 Rust 的过程中。

依赖项

~89MB
~848K SLoC