From e94173aa1227da84c364d7dc936c9f9b7af51292 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 23 May 2025 15:46:52 -0400 Subject: [PATCH 01/11] add new column family --- storage/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/storage/src/lib.rs b/storage/src/lib.rs index 753cac3..dd43016 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -41,6 +41,8 @@ pub const CF_BLOCK_NAME: &str = "cf_block"; pub const CF_META_NAME: &str = "cf_meta"; ///Name of smart contract column family pub const CF_SC_NAME: &str = "cf_sc"; +///Name of snapshot column family +pub const CF_SNAPSHOT_NAME: &str = "cf_snapshot"; ///Suffix, used to mark field, which contain length of smart contract pub const SC_LEN_SUFFIX: &str = "sc_len"; From b89dcb7fca41d8e0dfc60512b1147ea63d10daae Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 23 May 2025 15:47:20 -0400 Subject: [PATCH 02/11] add new db keys --- storage/src/lib.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/storage/src/lib.rs b/storage/src/lib.rs index dd43016..2c73380 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -35,6 +35,17 @@ pub const DB_META_FIRST_BLOCK_SET_KEY: &str = "first_block_set"; ///Key to list of all known smart contract addresses pub const DB_META_SC_LIST: &str = "sc_list"; +///Key base for storing snapshot which describe block id +pub const DB_SNAPSHOT_BLOCK_ID_KEY: &str = "block_id"; +///Key base for storing snapshot which describe commitment +pub const DB_SNAPSHOT_COMMITMENT_KEY: &str = "commitment"; +///Key base for storing snapshot which describe transaction +pub const DB_SNAPSHOT_TRANSACTION_KEY: &str = "transaction"; +///Key base for storing snapshot which describe nullifier +pub const DB_SNAPSHOT_NULLIFIER_KEY: &str = "nullifier"; +///Key base for storing snapshot which describe account +pub const DB_SNAPSHOT_ACCOUNT_KEY: &str = "account"; + ///Name of block column family pub const CF_BLOCK_NAME: &str = "cf_block"; ///Name of meta column family From d9e82f4ffc185e660f32be67d7f1b69f7a5d6d67 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 23 May 2025 15:47:39 -0400 Subject: [PATCH 03/11] fix new fn --- storage/src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/storage/src/lib.rs b/storage/src/lib.rs index 2c73380..89a4dc5 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -72,6 +72,7 @@ impl RocksDBIO { let cfb = ColumnFamilyDescriptor::new(CF_BLOCK_NAME, cf_opts.clone()); let cfmeta = ColumnFamilyDescriptor::new(CF_META_NAME, cf_opts.clone()); let cfsc = ColumnFamilyDescriptor::new(CF_SC_NAME, cf_opts.clone()); + let cfsnapshot = ColumnFamilyDescriptor::new(CF_SNAPSHOT_NAME, cf_opts.clone()); let mut db_opts = Options::default(); db_opts.create_missing_column_families(true); @@ -79,7 +80,7 @@ impl RocksDBIO { let db = DBWithThreadMode::::open_cf_descriptors( &db_opts, path, - vec![cfb, cfmeta, cfsc], + vec![cfb, cfmeta, cfsc, cfsnapshot], ); let dbio = Self { From a53e8f708c34af637d40eaf80ebc02fbe55d0979 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 23 May 2025 15:47:51 -0400 Subject: [PATCH 04/11] fix destroy fn --- storage/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/storage/src/lib.rs b/storage/src/lib.rs index 89a4dc5..8224b14 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -115,6 +115,7 @@ impl RocksDBIO { //ToDo: Add more column families for different data let _cfb = ColumnFamilyDescriptor::new(CF_BLOCK_NAME, cf_opts.clone()); let _cfmeta = ColumnFamilyDescriptor::new(CF_META_NAME, cf_opts.clone()); + let _cfsnapshot = ColumnFamilyDescriptor::new(CF_SNAPSHOT_NAME, cf_opts.clone()); let mut db_opts = Options::default(); db_opts.create_missing_column_families(true); From caaa6108d8e729ada3380e52f41540c04a16d44a Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 23 May 2025 15:48:09 -0400 Subject: [PATCH 05/11] add handle for snapshot --- storage/src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/storage/src/lib.rs b/storage/src/lib.rs index 8224b14..422365e 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -136,6 +136,10 @@ impl RocksDBIO { self.db.cf_handle(CF_SC_NAME).unwrap() } + pub fn snapshot_column(&self) -> Arc { + self.db.cf_handle(CF_SNAPSHOT_NAME).unwrap() + } + pub fn get_meta_first_block_in_db(&self) -> DbResult { let cf_meta = self.meta_column(); let res = self From 4350b69a18b32d7bb13337f12285ffe40380af33 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 23 May 2025 15:49:27 -0400 Subject: [PATCH 06/11] add getters for block_id and commitment --- storage/src/lib.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/storage/src/lib.rs b/storage/src/lib.rs index 422365e..287edb9 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -403,6 +403,41 @@ impl RocksDBIO { Ok(data_blob_list) } + + pub fn get_snapshot_block_id(&self) -> DbResult { + let cf_snapshot = self.snapshot_column(); + let res = self + .db + .get_cf(&cf_snapshot, DB_SNAPSHOT_BLOCK_ID_KEY) + .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; + + if let Some(data) = res { + Ok(u64::from_be_bytes(data.try_into().unwrap())) + } else { + Err(DbError::db_interaction_error( + "Snapshot block ID not found".to_string(), + )) + } + } + + pub fn get_snapshot_commitment(&self) -> DbResult> { + let cf_snapshot = self.snapshot_column(); + let res = self + .db + .get_cf(&cf_snapshot, DB_SNAPSHOT_COMMITMENT_KEY) + .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; + + if let Some(data) = res { + Ok(data) + } else { + Err(DbError::db_interaction_error( + "Snapshot commitment not found".to_string(), + )) + } + } + + + } ///Creates address for sc data blob at corresponding id From ee26147dde1e0e384ce066adac86ff7a6afbeeb1 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 23 May 2025 15:49:59 -0400 Subject: [PATCH 07/11] add getters for transaction and nullifier --- storage/src/lib.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/storage/src/lib.rs b/storage/src/lib.rs index 287edb9..625f19f 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -436,7 +436,37 @@ impl RocksDBIO { } } + pub fn get_snapshot_transaction(&self) -> DbResult> { + let cf_snapshot = self.snapshot_column(); + let res = self + .db + .get_cf(&cf_snapshot, DB_SNAPSHOT_TRANSACTION_KEY) + .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; + if let Some(data) = res { + Ok(data) + } else { + Err(DbError::db_interaction_error( + "Snapshot transaction not found".to_string(), + )) + } + } + + pub fn get_snapshot_nullifier(&self) -> DbResult> { + let cf_snapshot = self.snapshot_column(); + let res = self + .db + .get_cf(&cf_snapshot, DB_SNAPSHOT_NULLIFIER_KEY) + .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; + + if let Some(data) = res { + Ok(data) + } else { + Err(DbError::db_interaction_error( + "Snapshot nullifier not found".to_string(), + )) + } + } } From 611436a9431b4fdc7860cb6ef996672455b47054 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 23 May 2025 15:50:16 -0400 Subject: [PATCH 08/11] add getters for account --- storage/src/lib.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/storage/src/lib.rs b/storage/src/lib.rs index 625f19f..0df1515 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -468,6 +468,22 @@ impl RocksDBIO { } } + pub fn get_snapshot_account(&self) -> DbResult> { + let cf_snapshot = self.snapshot_column(); + let res = self + .db + .get_cf(&cf_snapshot, DB_SNAPSHOT_ACCOUNT_KEY) + .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; + + if let Some(data) = res { + Ok(data) + } else { + Err(DbError::db_interaction_error( + "Snapshot account not found".to_string(), + )) + } + } + } ///Creates address for sc data blob at corresponding id From c71e1b9f8bcdf0cae01efd9c66b53205d078168b Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 23 May 2025 15:50:51 -0400 Subject: [PATCH 09/11] add out fn for block_id and commitment --- storage/src/lib.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/storage/src/lib.rs b/storage/src/lib.rs index 0df1515..059d646 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -484,6 +484,31 @@ impl RocksDBIO { } } + pub fn put_snapshot_block_id_db(&self, block_id: u64) -> DbResult<()> { + let cf_snapshot = self.snapshot_column(); + self.db + .put_cf( + &cf_snapshot, + DB_SNAPSHOT_BLOCK_ID_KEY.as_bytes(), + block_id.to_be_bytes(), + ) + .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; + Ok(()) + } + + pub fn put_snapshot_commitement_db(&self, commitment: Vec) -> DbResult<()> { + let cf_snapshot = self.snapshot_column(); + self.db + .put_cf( + &cf_snapshot, + DB_SNAPSHOT_COMMITMENT_KEY.as_bytes(), + commitment, + ) + .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; + Ok(()) + } + + } ///Creates address for sc data blob at corresponding id From b69969942acfdc3b5b62fb32744cf040ee3eaaca Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 23 May 2025 15:51:21 -0400 Subject: [PATCH 10/11] add out fn for transaction, nullifier and account --- storage/src/lib.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/storage/src/lib.rs b/storage/src/lib.rs index 059d646..0839e05 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -508,7 +508,41 @@ impl RocksDBIO { Ok(()) } + pub fn put_snapshot_transaction_db(&self, transaction: Vec) -> DbResult<()> { + let cf_snapshot = self.snapshot_column(); + self.db + .put_cf( + &cf_snapshot, + DB_SNAPSHOT_TRANSACTION_KEY.as_bytes(), + transaction, + ) + .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; + Ok(()) + } + pub fn put_snapshot_nullifier_db(&self, nullifier: Vec) -> DbResult<()> { + let cf_snapshot = self.snapshot_column(); + self.db + .put_cf( + &cf_snapshot, + DB_SNAPSHOT_NULLIFIER_KEY.as_bytes(), + nullifier, + ) + .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; + Ok(()) + } + + pub fn put_snapshot_account_db(&self, account: Vec) -> DbResult<()> { + let cf_snapshot = self.snapshot_column(); + self.db + .put_cf( + &cf_snapshot, + DB_SNAPSHOT_ACCOUNT_KEY.as_bytes(), + account, + ) + .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; + Ok(()) + } } ///Creates address for sc data blob at corresponding id From 0b1a1c03dc73722ec89aa3a4f75e2845c25fee24 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 23 May 2025 15:51:31 -0400 Subject: [PATCH 11/11] fmt --- storage/src/lib.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/storage/src/lib.rs b/storage/src/lib.rs index 0839e05..e7f7f44 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -535,11 +535,7 @@ impl RocksDBIO { pub fn put_snapshot_account_db(&self, account: Vec) -> DbResult<()> { let cf_snapshot = self.snapshot_column(); self.db - .put_cf( - &cf_snapshot, - DB_SNAPSHOT_ACCOUNT_KEY.as_bytes(), - account, - ) + .put_cf(&cf_snapshot, DB_SNAPSHOT_ACCOUNT_KEY.as_bytes(), account) .map_err(|rerr| DbError::rocksdb_cast_message(rerr, None))?; Ok(()) }