Skip to content

Commit

Permalink
Rewrite db & storage (#1880)
Browse files Browse the repository at this point in the history
Co-authored-by: Esad Yusuf Atik <[email protected]>
  • Loading branch information
yaziciahmet and eyusufatik authored Feb 15, 2025
1 parent f2bbd86 commit fb0003a
Show file tree
Hide file tree
Showing 51 changed files with 814 additions and 3,325 deletions.
6 changes: 1 addition & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions bin/citrea/src/eth.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@ use anyhow::Context as _;
use ethereum_rpc::{EthRpcConfig, FeeHistoryCacheConfig, GasPriceOracleConfig};
use sov_db::ledger_db::LedgerDB;
use sov_modules_api::default_context::DefaultContext;
use sov_prover_storage_manager::SnapshotManager;
use sov_rollup_interface::services::da::DaService;
use sov_state::ProverStorage;
use tokio::sync::broadcast;

// register ethereum methods.
pub(crate) fn register_ethereum<Da: DaService>(
da_service: Arc<Da>,
storage: ProverStorage<SnapshotManager>,
storage: ProverStorage,
ledger_db: LedgerDB,
methods: &mut jsonrpsee::RpcModule<()>,
sequencer_client_url: Option<String>,
Expand Down
7 changes: 2 additions & 5 deletions bin/citrea/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,6 @@ where
let Storage {
ledger_db,
storage_manager,
prover_storage,
} = rollup_blueprint.setup_storage(&rollup_config, &rocksdb_config, &backup_manager)?;

let Dependencies {
Expand All @@ -212,8 +211,9 @@ where
_ => None,
};

let rpc_storage = storage_manager.create_final_view_storage();
let rpc_module = rollup_blueprint.setup_rpc(
&prover_storage,
rpc_storage,
ledger_db.clone(),
da_service.clone(),
sequencer_client_url,
Expand All @@ -231,7 +231,6 @@ where
da_service,
ledger_db,
storage_manager,
prover_storage,
soft_confirmation_channel.0,
rpc_module,
backup_manager,
Expand Down Expand Up @@ -261,7 +260,6 @@ where
da_service,
ledger_db.clone(),
storage_manager,
prover_storage,
soft_confirmation_channel.0,
rpc_module,
backup_manager,
Expand Down Expand Up @@ -343,7 +341,6 @@ where
da_service,
ledger_db.clone(),
storage_manager,
prover_storage,
soft_confirmation_channel.0,
backup_manager,
)
Expand Down
11 changes: 5 additions & 6 deletions bin/citrea/src/rollup/bitcoin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use sov_db::ledger_db::LedgerDB;
use sov_modules_api::default_context::DefaultContext;
use sov_modules_api::{Address, SpecId, Zkvm};
use sov_modules_rollup_blueprint::RollupBlueprint;
use sov_prover_storage_manager::{ProverStorageManager, SnapshotManager};
use sov_prover_storage_manager::ProverStorageManager;
use sov_rollup_interface::da::DaVerifier;
use sov_rollup_interface::services::da::TxRequestWithNotifier;
use sov_state::ProverStorage;
Expand Down Expand Up @@ -60,7 +60,7 @@ impl RollupBlueprint for BitcoinRollup {
#[instrument(level = "trace", skip_all, err)]
fn create_rpc_methods(
&self,
storage: &ProverStorage<SnapshotManager>,
storage: ProverStorage,
ledger_db: &LedgerDB,
da_service: &Arc<Self::DaService>,
sequencer_client_url: Option<String>,
Expand All @@ -70,15 +70,14 @@ impl RollupBlueprint for BitcoinRollup {
// unused inside register RPC
let sov_sequencer = Address::new([0; 32]);

#[allow(unused_mut)]
let mut rpc_methods = sov_modules_rollup_blueprint::register_rpc::<
Self::DaService,
CitreaRuntime<DefaultContext, Self::DaSpec>,
>(storage, ledger_db, sov_sequencer)?;
>(storage.clone(), ledger_db, sov_sequencer)?;

crate::eth::register_ethereum::<Self::DaService>(
da_service.clone(),
storage.clone(),
storage,
ledger_db.clone(),
&mut rpc_methods,
sequencer_client_url,
Expand All @@ -100,7 +99,7 @@ impl RollupBlueprint for BitcoinRollup {
fn create_storage_manager(
&self,
rollup_config: &citrea_common::FullNodeConfig<Self::DaConfig>,
) -> Result<ProverStorageManager<Self::DaSpec>, anyhow::Error> {
) -> Result<ProverStorageManager, anyhow::Error> {
let storage_config = StorageConfig {
path: rollup_config.storage.path.clone(),
db_max_open_files: rollup_config.storage.db_max_open_files,
Expand Down
8 changes: 4 additions & 4 deletions bin/citrea/src/rollup/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ impl RollupBlueprint for MockDemoRollup {

fn create_rpc_methods(
&self,
storage: &<DefaultContext as Spec>::Storage,
storage: <DefaultContext as Spec>::Storage,
ledger_db: &LedgerDB,
da_service: &Arc<Self::DaService>,
sequencer_client_url: Option<String>,
Expand All @@ -59,11 +59,11 @@ impl RollupBlueprint for MockDemoRollup {
let mut rpc_methods = sov_modules_rollup_blueprint::register_rpc::<
Self::DaService,
CitreaRuntime<DefaultContext, Self::DaSpec>,
>(storage, ledger_db, sequencer)?;
>(storage.clone(), ledger_db, sequencer)?;

crate::eth::register_ethereum::<Self::DaService>(
da_service.clone(),
storage.clone(),
storage,
ledger_db.clone(),
&mut rpc_methods,
sequencer_client_url,
Expand Down Expand Up @@ -157,7 +157,7 @@ impl RollupBlueprint for MockDemoRollup {
fn create_storage_manager(
&self,
rollup_config: &FullNodeConfig<Self::DaConfig>,
) -> anyhow::Result<ProverStorageManager<Self::DaSpec>> {
) -> anyhow::Result<ProverStorageManager> {
let storage_config = StorageConfig {
path: rollup_config.storage.path.clone(),
db_max_open_files: rollup_config.storage.db_max_open_files,
Expand Down
70 changes: 24 additions & 46 deletions bin/citrea/src/rollup/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ use sov_modules_rollup_blueprint::RollupBlueprint;
use sov_modules_stf_blueprint::{
GenesisParams as StfGenesisParams, Runtime as RuntimeTrait, StfBlueprint,
};
use sov_prover_storage_manager::{ProverStorageManager, SnapshotManager};
use sov_prover_storage_manager::ProverStorageManager;
use sov_rollup_interface::fork::ForkManager;
use sov_rollup_interface::stf::StateTransitionFunction;
use sov_state::storage::NativeStorage;
Expand All @@ -49,13 +49,11 @@ type GenesisParams<T> = StfGenesisParams<
>;

/// Group for storage instances
pub struct Storage<T: RollupBlueprint> {
pub struct Storage {
/// The ledger DB instance
pub ledger_db: LedgerDB,
/// The prover storage manager instance.
pub storage_manager: ProverStorageManager<<T as RollupBlueprint>::DaSpec>,
/// The prover storage
pub prover_storage: ProverStorage<SnapshotManager>,
pub storage_manager: ProverStorageManager,
}

/// Group for initialization dependencies
Expand Down Expand Up @@ -102,33 +100,31 @@ pub trait CitreaRollupBlueprint: RollupBlueprint {
rollup_config: &FullNodeConfig<Self::DaConfig>,
rocksdb_config: &RocksdbConfig,
backup_manager: &Arc<BackupManager>,
) -> Result<Storage<Self>> {
) -> Result<Storage> {
let ledger_db = self.create_ledger_db(rocksdb_config);
let mut storage_manager = self.create_storage_manager(rollup_config)?;
let prover_storage = storage_manager.create_finalized_storage()?;
let storage_manager = self.create_storage_manager(rollup_config)?;

backup_manager
.register_database(LEDGER_DB_PATH_SUFFIX.to_string(), ledger_db.db_handle())?;
backup_manager.register_database(
StateDB::<()>::DB_PATH_SUFFIX.to_string(),
StateDB::DB_PATH_SUFFIX.to_string(),
storage_manager.get_state_db_handle(),
)?;
backup_manager.register_database(
NativeDB::<()>::DB_PATH_SUFFIX.to_string(),
NativeDB::DB_PATH_SUFFIX.to_string(),
storage_manager.get_native_db_handle(),
)?;

Ok(Storage {
ledger_db,
storage_manager,
prover_storage,
})
}

/// Setup the RPC server
fn setup_rpc(
&self,
prover_storage: &ProverStorage<SnapshotManager>,
prover_storage: ProverStorage,
ledger_db: LedgerDB,
da_service: Arc<<Self as RollupBlueprint>::DaService>,
sequencer_client_url: Option<String>,
Expand All @@ -155,8 +151,7 @@ pub trait CitreaRollupBlueprint: RollupBlueprint {
sequencer_config: SequencerConfig,
da_service: Arc<<Self as RollupBlueprint>::DaService>,
ledger_db: LedgerDB,
mut storage_manager: ProverStorageManager<<Self as RollupBlueprint>::DaSpec>,
prover_storage: ProverStorage<SnapshotManager>,
storage_manager: ProverStorageManager,
soft_confirmation_tx: broadcast::Sender<u64>,
rpc_module: RpcModule<()>,
backup_manager: Arc<BackupManager>,
Expand All @@ -171,13 +166,8 @@ pub trait CitreaRollupBlueprint: RollupBlueprint {
fork_manager.register_handler(Box::new(ledger_db.clone()));

let native_stf = StfBlueprint::new();
let init_params = self.init_chain(
genesis_config,
&native_stf,
&ledger_db,
&mut storage_manager,
&prover_storage,
)?;
let init_params =
self.init_chain(genesis_config, &native_stf, &ledger_db, &storage_manager)?;

citrea_sequencer::build_services(
sequencer_config,
Expand All @@ -187,7 +177,6 @@ pub trait CitreaRollupBlueprint: RollupBlueprint {
da_service,
ledger_db,
storage_manager,
prover_storage,
soft_confirmation_tx,
fork_manager,
rpc_module,
Expand All @@ -204,8 +193,7 @@ pub trait CitreaRollupBlueprint: RollupBlueprint {
rollup_config: FullNodeConfig<Self::DaConfig>,
da_service: Arc<<Self as RollupBlueprint>::DaService>,
ledger_db: LedgerDB,
mut storage_manager: ProverStorageManager<<Self as RollupBlueprint>::DaSpec>,
prover_storage: ProverStorage<SnapshotManager>,
storage_manager: ProverStorageManager,
soft_confirmation_tx: broadcast::Sender<u64>,
backup_manager: Arc<BackupManager>,
) -> Result<(
Expand All @@ -216,13 +204,8 @@ pub trait CitreaRollupBlueprint: RollupBlueprint {
let runner_config = rollup_config.runner.expect("Runner config is missing");

let native_stf = StfBlueprint::new();
let init_params = self.init_chain(
genesis_config,
&native_stf,
&ledger_db,
&mut storage_manager,
&prover_storage,
)?;
let init_params =
self.init_chain(genesis_config, &native_stf, &ledger_db, &storage_manager)?;

let current_l2_height = ledger_db
.get_head_soft_confirmation()
Expand Down Expand Up @@ -260,8 +243,7 @@ pub trait CitreaRollupBlueprint: RollupBlueprint {
rollup_config: FullNodeConfig<Self::DaConfig>,
da_service: Arc<<Self as RollupBlueprint>::DaService>,
ledger_db: LedgerDB,
mut storage_manager: ProverStorageManager<<Self as RollupBlueprint>::DaSpec>,
prover_storage: ProverStorage<SnapshotManager>,
storage_manager: ProverStorageManager,
soft_confirmation_tx: broadcast::Sender<u64>,
rpc_module: RpcModule<()>,
backup_manager: Arc<BackupManager>,
Expand All @@ -273,13 +255,8 @@ pub trait CitreaRollupBlueprint: RollupBlueprint {
let runner_config = rollup_config.runner.expect("Runner config is missing");

let native_stf = StfBlueprint::new();
let init_params = self.init_chain(
genesis_config,
&native_stf,
&ledger_db,
&mut storage_manager,
&prover_storage,
)?;
let init_params =
self.init_chain(genesis_config, &native_stf, &ledger_db, &storage_manager)?;

let current_l2_height = ledger_db
.get_head_soft_confirmation_height()
Expand Down Expand Up @@ -406,9 +383,10 @@ pub trait CitreaRollupBlueprint: RollupBlueprint {
CitreaRuntime<DefaultContext, Self::DaSpec>,
>,
ledger_db: &LedgerDB,
storage_manager: &mut ProverStorageManager<Self::DaSpec>,
prover_storage: &ProverStorage<SnapshotManager>,
storage_manager: &ProverStorageManager,
) -> anyhow::Result<InitParams> {
let prover_storage = storage_manager.create_storage_for_next_l2_height();

if let Some((number, soft_confirmation)) = ledger_db.get_head_soft_confirmation()? {
// At least one soft confirmation was processed
info!("Initialize node at L2 height #{}. State root: 0x{}. Last soft confirmation hash: 0x{}.", number.0, hex::encode(prover_storage.get_root_hash(number.0 + 1)?), hex::encode(soft_confirmation.hash));
Expand All @@ -430,10 +408,10 @@ pub trait CitreaRollupBlueprint: RollupBlueprint {
}

info!("No history detected. Initializing chain...",);
let storage = storage_manager.create_storage_on_l2_height(0)?;
let (genesis_root, initialized_storage) = stf.init_chain(storage, genesis_config);
storage_manager.save_change_set_l2(0, initialized_storage)?;
storage_manager.finalize_l2(0)?;
assert_eq!(prover_storage.version(), 0, "Init version must be 0");

let (genesis_root, initialized_storage) = stf.init_chain(prover_storage, genesis_config);
storage_manager.finalize_storage(initialized_storage);
ledger_db.set_l2_genesis_state_root(&genesis_root)?;
info!(
"Chain initialization is done. Genesis root: 0x{}",
Expand Down
Loading

0 comments on commit fb0003a

Please sign in to comment.