26 个版本 (4 个破坏性更新)
0.4.0-rc.0 | 2024 年 7 月 15 日 |
---|---|
0.4.0-dev.3 | 2024 年 6 月 10 日 |
0.3.0 | 2024 年 3 月 5 日 |
0.2.2 | 2023 年 12 月 19 日 |
0.0.3 | 2023 年 7 月 27 日 |
#1543 in 魔法豆
每月 3,114 次下载
用于 native_blockifier
1MB
11K SLoC
papyrus-storage
描述
papyrus-storage 为 Starknet 数据结构提供了到数据库的读写接口,专为 Papyrus(Starknet 节点)设计。
lib.rs
:
Starknet 节点的存储实现。
此包为各种 Starknet 数据结构提供到数据库的读写接口。同时最多允许一个写入操作和多个读取操作。底层存储使用 libmdbx
包实现。
免责声明
此包仍在开发中,不保证与之前版本的向后兼容性。预计在不久的将来会发生破坏性更改。
快速入门
要使用此软件包,通过调用 open_storage
打开存储,以获取 StorageWriter
和一个 StorageReader
,并使用它们来创建 StorageTxn
实例。实际功能是在多个特性中实现的。
use papyrus_storage::open_storage;
use papyrus_storage::header::{HeaderStorageReader, HeaderStorageWriter}; // Import the header API.
use starknet_api::block::{BlockHeader, BlockNumber, StarknetVersion};
use starknet_api::core::ChainId;
let db_config = DbConfig {
path_prefix: dir,
chain_id: ChainId::Mainnet,
enforce_file_exists: false,
min_size: 1 << 20, // 1MB
max_size: 1 << 35, // 32GB
growth_step: 1 << 26, // 64MB
};
let (reader, mut writer) = open_storage(storage_config)?;
writer
.begin_rw_txn()? // Start a RW transaction.
.append_header(BlockNumber(0), &BlockHeader::default())? // Append a header.
.commit()?; // Commit the changes.
let header = reader.begin_ro_txn()?.get_block_header(BlockNumber(0))?; // Read the header.
assert_eq!(header, Some(BlockHeader::default()));
存储版本
尝试使用与存储版本不匹配的软件包版本打开现有数据库将导致错误。
存储版本由两个组件组成:用于状态的 STORAGE_VERSION_STATE
和用于块的 STORAGE_VERSION_BLOCKS
。每个版本由主版本和次版本组成。较高的主版本表示需要重新同步,而较高的次版本表示可迁移的变化。
当使用 StorageScope::StateOnly
打开存储时,只有状态版本必须匹配。对于使用 StorageScope::FullArchive
打开的存储,两个版本都必须与软件包的版本匹配。
当代码和数据库具有不同的主版本时发生不兼容。然而,如果代码具有与数据库相同的主版本,但次版本更高,它仍然可以正常工作。
示例情况
- 代码:{major: 0, minor: 0},数据库:{major: 1, minor: 0} 将因主版本不匹配而失败。
- 代码:{major: 0, minor: 0},数据库:{major: 0, minor: 1} 将因代码的次版本较小而失败。
- 代码:{major: 0, minor: 1},数据库:{major: 0, minor: 0} 将成功,因为主版本匹配且代码的次版本更高。
依赖关系
~26–41MB
~680K SLoC