2 个版本
0.1.16-alpha.0 | 2023 年 4 月 1 日 |
---|---|
0.1.12-alpha.0 | 2023 年 1 月 19 日 |
#17 in #graph-traversal
389 每月下载次数
在 46 个 (4 个直接) 库中使用
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