Crate rollblock

Crate rollblock 

Source
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::*;

Modules§

api
Public API surface for Rollblock consumers.
client
net
runtime
Runtime protocols: orchestration, durability and metrics collection.
state
State management primitives (shards, engines, planners).
storage
Persistence backends: filesystem helpers, journals, metadata, snapshots.