Expand description
§Rollblock
A high-performance, reliable state storage system with rollback support, optimized for blockchain applications.
§Features
- Instant Rollback: Revert to any previous block
- High Performance: Parallel sharding with optimized hashmaps
- Compressed Snapshots: Periodic state backups with zstd compression
- Sparse Blocks: Support for gaps in block numbering
- Secure: Data integrity with Blake3 checksums
§Quick Start
ⓘ
use rollblock::*;
use rollblock::types::Operation;
// Create configuration
let config = StoreConfig::new(
"./data", // data directory
4, // number of shards
1000, // initial capacity per shard
1, // thread count (1 = sequential mode)
false, // use compression (default: false)
)?;
// Initialize store
let store = MhinStoreFacade::new(config)?;
// Apply operations
let ops = vec![
Operation {
key: [1, 2, 3, 4, 5, 6, 7, 8],
value: b"answer".to_vec().into(),
},
];
store.set(1, ops)?;
// Read value
let key = [1, 2, 3, 4, 5, 6, 7, 8];
let value = store.get(key)?;
if value.is_delete() {
println!("Key not found");
} else {
println!("Value bytes: {:?}", value.as_slice());
}
// Atomically remove a key and get its previous value
let removed = store.pop(2, key)?;
println!("Removed bytes: {:?}", removed.as_slice());
// Rollback
store.rollback(0)?;
store.close()?;Networking is opt-in: call .enable_remote_server() (or
.with_remote_server(...)) to start the embedded server. It binds to
127.0.0.1:9443 by default but refuses to start until you override the
placeholder Basic Auth credentials via RemoteServerSettings::with_basic_auth(...).
Re-exports§
pub use crate::api::error;pub use crate::api::facade;pub use crate::api::types;pub use crate::runtime::metrics;pub use crate::runtime::orchestrator;pub use crate::state::engine as state_engine;pub use crate::state::shard as state_shard;pub use crate::storage::fs::store_lock;pub use crate::storage::journal as block_journal;pub use crate::storage::metadata;pub use crate::storage::snapshot;pub use api::error::MhinStoreError;pub use api::error::StoreResult;pub use api::facade::MhinStoreBlockFacade;pub use api::facade::MhinStoreFacade;pub use api::facade::RemoteServerSettings;pub use api::facade::StoreConfig;pub use api::facade::StoreFacade;pub use client::ClientError;pub use client::RemoteStoreClient;pub use net::server::RemoteServerConfig;pub use net::server::RemoteServerHandle;pub use net::server::RemoteServerSecurity;pub use net::server::RemoteStoreServer;pub use net::server::ServerError;pub use net::server::ServerMetricsSnapshot;pub use net::BasicAuthConfig;pub use runtime::metrics::HealthState;pub use runtime::metrics::HealthStatus;pub use runtime::metrics::MetricsSnapshot;pub use runtime::metrics::StoreMetrics;pub use runtime::orchestrator::BlockOrchestrator;pub use runtime::orchestrator::DefaultBlockOrchestrator;pub use runtime::orchestrator::DurabilityMode;pub use runtime::orchestrator::PersistenceSettings;pub use state::engine::ShardedStateEngine;pub use state::engine::StateEngine;pub use state::shard::RawTableShard;pub use state::shard::StateShard;pub use storage::fs::store_lock::StoreLockGuard;pub use storage::journal::BlockJournal;pub use storage::journal::FileBlockJournal;pub use storage::journal::JournalBlock;pub use storage::journal::JournalIter;pub use storage::journal::JournalOptions;pub use storage::journal::JournalPruneObserver;pub use storage::journal::JournalPruneReport;pub use storage::journal::JournalPruner;pub use storage::journal::SyncPolicy;pub use storage::metadata::LmdbMetadataStore;pub use storage::metadata::MetadataStore;pub use storage::metadata::ShardLayout;pub use storage::snapshot::MmapSnapshotter;pub use storage::snapshot::Snapshotter;pub use api::types::*;