48个版本 (28个重大更改)
0.36.0 | 2024年6月21日 |
---|---|
0.34.0 | 2024年4月8日 |
0.33.0 | 2024年3月18日 |
0.29.0 | 2023年12月12日 |
0.8.0-alpha.5 | 2020年3月24日 |
#4 in #修剪
10,759 每月下载量
在 79 个crate中使用 (2个直接使用)
405KB
9K SLoC
状态数据库维护。处理数据库中的规范化修剪。该模块的输入是一个ChangeSet
,它基本上是块执行期间添加或删除的关键值对(trie节点)列表。
规范化
规范化窗口跟踪由头部哈希标识的区块树。内存覆盖允许获取窗口内任何块中插入的任何节点。该树被记录到后端数据库中,并在启动时重建。规范化函数从树顶选择一个根,并丢弃所有其他根及其子树。
修剪
有关修剪算法的详细信息,请参阅RefWindow
。StateDb
在满足修剪约束之前在每个规范化过程中进行修剪。
许可证:GPL-3.0-or-later WITH Classpath-exception-2.0
lib.rs
:
状态数据库维护。处理数据库中的规范化修剪。
规范化。
规范化窗口跟踪由头部哈希标识的区块树。内存覆盖允许获取窗口内任何块中插入的任何trie节点。该覆盖被记录到后端数据库中,并在启动时重建。规范化窗口中可能具有相同区块号的区块限制为32个。
规范函数从树的顶部选择一个根,并丢弃所有其他根及其子树。规范化后,所有在块中插入的 trie 节点都被添加到后端数据库中,并且块跟踪被移动到修剪窗口,在该窗口中不允许分叉。
规范与最终性
数据库引擎使用规范性的概念,而不是最终性。一个规范块可能从共识引擎的角度来看还没有最终确定,但它仍然不能在数据库中回滚。在正常操作的大部分时间里,最后一个规范块与最后一个最终块相同。然而,如果由于某些原因最终性停滞了很长时间,那么在非规范覆盖中可以容纳的块数量有限,因此可能被迫对未最终确定的块进行规范化。
修剪。
有关修剪算法的详细信息,请参阅RefWindow
。StateDb
在满足修剪约束之前在每个规范化过程中进行修剪。
依赖关系
~13–21MB
~333K SLoC