From db73bcf190ac4b949cb316bee467a3485922efcd Mon Sep 17 00:00:00 2001 From: Babur Makhmudov Date: Fri, 20 Feb 2026 16:05:56 +0400 Subject: [PATCH 1/2] feat: allow for accountsdb checksum computation --- Cargo.lock | 9 +- Cargo.toml | 8 +- magicblock-accounts-db/Cargo.toml | 3 + magicblock-accounts-db/src/lib.rs | 23 +++- magicblock-accounts-db/src/storage.rs | 5 +- magicblock-accounts-db/src/tests.rs | 57 +++++++++ test-integration/Cargo.lock | 177 +++++++++++++++----------- test-integration/Cargo.toml | 4 +- 8 files changed, 202 insertions(+), 84 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e61e2d104..f20f34d93 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2989,6 +2989,7 @@ dependencies = [ "thiserror 1.0.69", "tracing", "tracing-subscriber", + "twox-hash", ] [[package]] @@ -5501,7 +5502,7 @@ dependencies = [ [[package]] name = "solana-account" version = "2.2.1" -source = "git+https://github.com/magicblock-labs/solana-account.git?rev=6eae52b#6eae52bde25e90b3c79d4935ce2b267e35338945" +source = "git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea#3ff1b2eaf16fd8b82dd8e625673df9798b07db22" dependencies = [ "bincode", "qualifier_attr", @@ -8930,6 +8931,12 @@ dependencies = [ "webpki-roots 0.24.0", ] +[[package]] +name = "twox-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" + [[package]] name = "typenum" version = "1.19.0" diff --git a/Cargo.toml b/Cargo.toml index 8d47b19ba..36a7e1aaf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -140,7 +140,7 @@ serde_json = "1.0" serde_with = "3.16" serial_test = "3.2" sha3 = "0.10.8" -solana-account = { git = "https://github.com/magicblock-labs/solana-account.git", rev = "6eae52b" } +solana-account = { git = "https://github.com/magicblock-labs/solana-account.git", rev = "3ff1b2ea" } solana-account-decoder = { version = "2.2" } solana-account-decoder-client-types = { version = "2.2" } solana-account-info = { version = "2.2" } @@ -211,6 +211,10 @@ tonic-build = "0.9.2" tracing = "0.1" tracing-log = { version = "0.2", features = ["log-tracer"] } tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] } +twox-hash = { version = "2.1", default-features = false, features = [ + "xxhash3_64", + "alloc", +] } url = "2.5.0" # SPL Token crates used across the workspace @@ -231,7 +235,7 @@ version = "0.22.0" # some solana dependencies have solana-storage-proto as dependency # we need to patch them with our version, because they use protobuf-src v1.1.0 # and we use protobuf-src v2.1.1. Otherwise compilation fails -solana-account = { git = "https://github.com/magicblock-labs/solana-account.git", rev = "6eae52b" } +solana-account = { git = "https://github.com/magicblock-labs/solana-account.git", rev = "3ff1b2ea" } solana-storage-proto = { path = "./storage-proto" } solana-svm = { git = "https://github.com/magicblock-labs/magicblock-svm.git", rev = "bdbaac86" } # Fork is used to enable `disable_manual_compaction` usage diff --git a/magicblock-accounts-db/Cargo.toml b/magicblock-accounts-db/Cargo.toml index 981ef200f..2a854cd11 100644 --- a/magicblock-accounts-db/Cargo.toml +++ b/magicblock-accounts-db/Cargo.toml @@ -23,6 +23,9 @@ thiserror = { workspace = true } tracing = { workspace = true } magicblock-config = { workspace = true } +# misc +twox-hash = { workspace = true } + [dev-dependencies] tempfile = { workspace = true } tracing-subscriber = { workspace = true } diff --git a/magicblock-accounts-db/src/lib.rs b/magicblock-accounts-db/src/lib.rs index b1437a24a..f2826bc80 100644 --- a/magicblock-accounts-db/src/lib.rs +++ b/magicblock-accounts-db/src/lib.rs @@ -1,4 +1,4 @@ -use std::{fs, path::Path, sync::Arc, thread}; +use std::{fs, hash::Hasher, path::Path, sync::Arc, thread}; use error::{AccountsDbError, LogErr}; use index::{ @@ -13,6 +13,7 @@ use solana_account::{ use solana_pubkey::Pubkey; use storage::AccountsStorage; use tracing::{error, info, warn}; +use twox_hash::xxhash3_64; use crate::{snapshot::SnapshotManager, traits::AccountsBank}; @@ -374,6 +375,26 @@ impl AccountsDb { pub fn write_lock(&self) -> GlobalSyncLock { self.write_lock.clone() } + + /// Computes a deterministic checksum of all active accounts. + /// + /// Iterates all accounts in key-sorted order (via LMDB) and hashes both + /// pubkey and serialized account data using xxHash3. Returns a 64-bit hash + /// suitable for verifying state consistency across nodes. + /// + /// Acquires the write lock to ensure a consistent snapshot of the state. + pub fn checksum(&self) -> u64 { + let _locked = self.write_lock.write(); + let mut hasher = xxhash3_64::Hasher::new(); + for (pubkey, acc) in self.iter_all() { + let Some(borrowed) = acc.as_borrowed() else { + continue; + }; + hasher.write(pubkey.as_ref()); + hasher.write(borrowed.buffer()); + } + hasher.finish() + } } impl AccountsBank for AccountsDb { diff --git a/magicblock-accounts-db/src/storage.rs b/magicblock-accounts-db/src/storage.rs index 69dce7db3..9a541a9e8 100644 --- a/magicblock-accounts-db/src/storage.rs +++ b/magicblock-accounts-db/src/storage.rs @@ -371,10 +371,9 @@ impl AccountsStorage { Ok(()) } - /// Returns the total expected size of the file in bytes (Header + Data). + /// Returns the total occupied size of the storage file in bytes. pub(crate) fn size_bytes(&self) -> u64 { - (self.header().capacity_blocks as u64 * self.block_size as u64) - + METADATA_STORAGE_SIZE as u64 + self.active_segment().len() as u64 } pub(crate) fn block_size(&self) -> usize { diff --git a/magicblock-accounts-db/src/tests.rs b/magicblock-accounts-db/src/tests.rs index aba17258f..91497353d 100644 --- a/magicblock-accounts-db/src/tests.rs +++ b/magicblock-accounts-db/src/tests.rs @@ -464,6 +464,63 @@ fn test_database_reset() { assert_eq!(adb_reset.account_count(), 0); } +#[test] +fn test_checksum_deterministic_across_dbs() { + // Two independent DBs with identical accounts must produce identical checksums + let dir1 = tempfile::tempdir().unwrap(); + let dir2 = tempfile::tempdir().unwrap(); + let config = AccountsDbConfig::default(); + + let db1 = AccountsDb::new(&config, dir1.path(), 0).unwrap(); + let db2 = AccountsDb::new(&config, dir2.path(), 0).unwrap(); + + // Insert same accounts into both DBs + for i in 0..50 { + let pubkey = Pubkey::new_unique(); + let mut account = AccountSharedData::new(LAMPORTS, SPACE, &OWNER); + account.data_as_mut_slice()[..8].copy_from_slice(&(i as u64).to_le_bytes()); + db1.insert_account(&pubkey, &account).unwrap(); + db2.insert_account(&pubkey, &account).unwrap(); + } + + assert_eq!(db1.checksum(), db2.checksum(), "checksums must match for identical state"); +} + +#[test] +fn test_checksum_detects_state_change() { + let env = TestEnv::new(); + + // Create initial state + let mut accounts: Vec<_> = (0..20) + .map(|_| { + let acc = env.create_and_insert_account(); + (acc.pubkey, acc.account) + }) + .collect(); + + let original_checksum = env.checksum(); + + // Modify a single account's data + accounts[5].1.data_as_mut_slice()[0] ^= 0xFF; + env.insert_account(&accounts[5].0, &accounts[5].1).unwrap(); + + assert_ne!( + env.checksum(), + original_checksum, + "checksum must detect single account modification" + ); + + // Modify lamports on a different account + accounts[10].1.set_lamports(1_000_000); + env.insert_account(&accounts[10].0, &accounts[10].1).unwrap(); + + assert_ne!( + env.checksum(), + original_checksum, + "checksum must detect lamport change" + ); +} + // ============================================================== // TEST UTILITIES // ============================================================== diff --git a/test-integration/Cargo.lock b/test-integration/Cargo.lock index e372ed370..10f2a4eee 100644 --- a/test-integration/Cargo.lock +++ b/test-integration/Cargo.lock @@ -1711,7 +1711,7 @@ dependencies = [ "getrandom 0.2.16", "magicblock-delegation-program 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "magicblock-magic-program-api 0.6.2", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-account-info", "solana-cpi", "solana-instruction", @@ -2251,10 +2251,10 @@ dependencies = [ [[package]] name = "guinea" -version = "0.7.0" +version = "0.8.0" dependencies = [ "bincode", - "magicblock-magic-program-api 0.7.0", + "magicblock-magic-program-api 0.8.0", "serde", "solana-program", ] @@ -3273,7 +3273,7 @@ dependencies = [ [[package]] name = "magicblock-account-cloner" -version = "0.7.0" +version = "0.8.0" dependencies = [ "async-trait", "bincode", @@ -3283,11 +3283,11 @@ dependencies = [ "magicblock-config", "magicblock-core", "magicblock-ledger", - "magicblock-magic-program-api 0.7.0", + "magicblock-magic-program-api 0.8.0", "magicblock-program", "magicblock-rpc-client", "rand 0.9.2", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", "solana-hash", "solana-instruction", "solana-loader-v3-interface 3.0.0", @@ -3305,7 +3305,7 @@ dependencies = [ [[package]] name = "magicblock-accounts" -version = "0.7.0" +version = "0.8.0" dependencies = [ "async-trait", "magicblock-account-cloner", @@ -3327,22 +3327,23 @@ dependencies = [ [[package]] name = "magicblock-accounts-db" -version = "0.7.0" +version = "0.8.0" dependencies = [ "lmdb-rkv", "magicblock-config", "memmap2 0.9.9", "parking_lot", "reflink-copy", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", "solana-pubkey", "thiserror 1.0.69", "tracing", + "twox-hash", ] [[package]] name = "magicblock-aperture" -version = "0.7.0" +version = "0.8.0" dependencies = [ "agave-geyser-plugin-interface", "arc-swap", @@ -3366,7 +3367,7 @@ dependencies = [ "parking_lot", "scc", "serde", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", "solana-account-decoder", "solana-compute-budget-instruction", "solana-feature-set", @@ -3390,7 +3391,7 @@ dependencies = [ [[package]] name = "magicblock-api" -version = "0.7.0" +version = "0.8.0" dependencies = [ "anyhow", "borsh 1.6.0", @@ -3405,7 +3406,7 @@ dependencies = [ "magicblock-config", "magicblock-core", "magicblock-ledger", - "magicblock-magic-program-api 0.7.0", + "magicblock-magic-program-api 0.8.0", "magicblock-metrics", "magicblock-processor", "magicblock-program", @@ -3413,7 +3414,7 @@ dependencies = [ "magicblock-validator-admin", "num_cpus", "paste", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", "solana-clock", "solana-commitment-config", "solana-feature-gate-interface", @@ -3445,7 +3446,7 @@ dependencies = [ [[package]] name = "magicblock-chainlink" -version = "0.7.0" +version = "0.8.0" dependencies = [ "arc-swap", "async-trait", @@ -3457,11 +3458,11 @@ dependencies = [ "magicblock-config", "magicblock-core", "magicblock-delegation-program 1.1.3 (git+https://github.com/magicblock-labs/delegation-program.git?rev=2cb491032f372)", - "magicblock-magic-program-api 0.7.0", + "magicblock-magic-program-api 0.8.0", "magicblock-metrics", "parking_lot", "scc", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", "solana-account-decoder", "solana-account-decoder-client-types", "solana-address-lookup-table-interface", @@ -3499,11 +3500,11 @@ dependencies = [ [[package]] name = "magicblock-committor-program" -version = "0.7.0" +version = "0.8.0" dependencies = [ "borsh 1.6.0", "paste", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", "solana-program", "solana-pubkey", "thiserror 1.0.69", @@ -3511,7 +3512,7 @@ dependencies = [ [[package]] name = "magicblock-committor-service" -version = "0.7.0" +version = "0.8.0" dependencies = [ "async-trait", "base64 0.21.7", @@ -3527,7 +3528,7 @@ dependencies = [ "magicblock-rpc-client", "magicblock-table-mania", "rusqlite", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", "solana-account-decoder", "solana-address-lookup-table-interface", "solana-commitment-config", @@ -3555,7 +3556,7 @@ dependencies = [ [[package]] name = "magicblock-config" -version = "0.7.0" +version = "0.8.0" dependencies = [ "clap", "derive_more", @@ -3573,11 +3574,11 @@ dependencies = [ [[package]] name = "magicblock-core" -version = "0.7.0" +version = "0.8.0" dependencies = [ "flume", - "magicblock-magic-program-api 0.7.0", - "solana-account", + "magicblock-magic-program-api 0.8.0", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", "solana-account-decoder", "solana-hash", "solana-program", @@ -3628,12 +3629,12 @@ dependencies = [ "solana-security-txt", "static_assertions", "strum 0.27.2", - "thiserror 1.0.69", + "thiserror 2.0.17", ] [[package]] name = "magicblock-ledger" -version = "0.7.0" +version = "0.8.0" dependencies = [ "arc-swap", "bincode", @@ -3684,7 +3685,7 @@ dependencies = [ [[package]] name = "magicblock-magic-program-api" -version = "0.7.0" +version = "0.8.0" dependencies = [ "bincode", "serde", @@ -3693,7 +3694,7 @@ dependencies = [ [[package]] name = "magicblock-metrics" -version = "0.7.0" +version = "0.8.0" dependencies = [ "http-body-util", "hyper 1.8.1", @@ -3707,7 +3708,7 @@ dependencies = [ [[package]] name = "magicblock-processor" -version = "0.7.0" +version = "0.8.0" dependencies = [ "bincode", "magicblock-accounts-db", @@ -3718,7 +3719,7 @@ dependencies = [ "parking_lot", "rustc-hash 2.1.1", "serde", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", "solana-bpf-loader-program", "solana-compute-budget-program", "solana-feature-set", @@ -3743,23 +3744,25 @@ dependencies = [ [[package]] name = "magicblock-program" -version = "0.7.0" +version = "0.8.0" dependencies = [ "bincode", "lazy_static", "magicblock-core", - "magicblock-magic-program-api 0.7.0", + "magicblock-magic-program-api 0.8.0", "num-derive", "num-traits", "parking_lot", "serde", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", "solana-account-info", "solana-clock", "solana-fee-calculator", "solana-hash", "solana-instruction", "solana-keypair", + "solana-loader-v3-interface 3.0.0", + "solana-loader-v4-interface", "solana-log-collector", "solana-program-runtime", "solana-pubkey", @@ -3775,9 +3778,9 @@ dependencies = [ [[package]] name = "magicblock-rpc-client" -version = "0.7.0" +version = "0.8.0" dependencies = [ - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", "solana-account-decoder-client-types", "solana-address-lookup-table-interface", "solana-clock", @@ -3797,7 +3800,7 @@ dependencies = [ [[package]] name = "magicblock-table-mania" -version = "0.7.0" +version = "0.8.0" dependencies = [ "ed25519-dalek", "magicblock-metrics", @@ -3823,7 +3826,7 @@ dependencies = [ [[package]] name = "magicblock-task-scheduler" -version = "0.7.0" +version = "0.8.0" dependencies = [ "bincode", "chrono", @@ -3849,7 +3852,7 @@ dependencies = [ [[package]] name = "magicblock-validator-admin" -version = "0.7.0" +version = "0.8.0" dependencies = [ "magicblock-delegation-program 1.1.3 (git+https://github.com/magicblock-labs/delegation-program.git?rev=2cb491032f372)", "magicblock-program", @@ -3866,7 +3869,7 @@ dependencies = [ [[package]] name = "magicblock-version" -version = "0.7.0" +version = "0.8.0" dependencies = [ "git-version", "rustc_version", @@ -4766,7 +4769,7 @@ dependencies = [ "bincode", "borsh 1.6.0", "ephemeral-rollups-sdk", - "magicblock-magic-program-api 0.7.0", + "magicblock-magic-program-api 0.8.0", "serde", "solana-program", ] @@ -4790,7 +4793,7 @@ dependencies = [ "borsh 1.6.0", "ephemeral-rollups-sdk", "magicblock-delegation-program 1.1.3 (git+https://github.com/magicblock-labs/delegation-program.git?rev=2cb491032f372)", - "magicblock-magic-program-api 0.7.0", + "magicblock-magic-program-api 0.8.0", "rkyv 0.7.45", "solana-program", "static_assertions", @@ -5806,7 +5809,7 @@ dependencies = [ "program-flexi-counter", "program-schedulecommit", "rand 0.8.5", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-pubkey", "solana-rpc-client", "solana-rpc-client-api", @@ -5824,7 +5827,7 @@ dependencies = [ "ephemeral-rollups-sdk", "integration-test-tools", "magicblock-core", - "magicblock-magic-program-api 0.7.0", + "magicblock-magic-program-api 0.8.0", "program-schedulecommit", "rand 0.8.5", "schedulecommit-client", @@ -5842,7 +5845,7 @@ version = "0.0.0" dependencies = [ "integration-test-tools", "magicblock-core", - "magicblock-magic-program-api 0.7.0", + "magicblock-magic-program-api 0.8.0", "program-schedulecommit", "program-schedulecommit-security", "schedulecommit-client", @@ -6243,7 +6246,25 @@ dependencies = [ [[package]] name = "solana-account" version = "2.2.1" -source = "git+https://github.com/magicblock-labs/solana-account.git?rev=6eae52b#6eae52bde25e90b3c79d4935ce2b267e35338945" +source = "git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e#3ff1b2eaf16fd8b82dd8e625673df9798b07db22" +dependencies = [ + "bincode", + "qualifier_attr", + "serde", + "serde_bytes", + "serde_derive", + "solana-account-info", + "solana-clock", + "solana-instruction", + "solana-pubkey", + "solana-sdk-ids", + "solana-sysvar", +] + +[[package]] +name = "solana-account" +version = "2.2.1" +source = "git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea#3ff1b2eaf16fd8b82dd8e625673df9798b07db22" dependencies = [ "bincode", "qualifier_attr", @@ -6273,7 +6294,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-account-decoder-client-types", "solana-clock", "solana-config-program", @@ -6308,7 +6329,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-pubkey", "zstd", ] @@ -6546,7 +6567,7 @@ dependencies = [ "libsecp256k1", "qualifier_attr", "scopeguard", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-account-info", "solana-big-mod-exp", "solana-bincode", @@ -6666,7 +6687,7 @@ dependencies = [ "log", "quinn", "rayon", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-client-traits", "solana-commitment-config", "solana-connection-cache", @@ -6702,7 +6723,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83f0071874e629f29e0eb3dab8a863e98502ac7aba55b7e0df1803fc5cac72a7" dependencies = [ - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-commitment-config", "solana-epoch-info", "solana-hash", @@ -6815,7 +6836,7 @@ dependencies = [ "chrono", "serde", "serde_derive", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-bincode", "solana-instruction", "solana-log-collector", @@ -7029,7 +7050,7 @@ dependencies = [ "bincode", "serde", "serde_derive", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-account-info", "solana-instruction", "solana-program-error", @@ -7109,7 +7130,7 @@ dependencies = [ "memmap2 0.5.10", "serde", "serde_derive", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-clock", "solana-cluster-type", "solana-epoch-schedule", @@ -7334,7 +7355,7 @@ checksum = "81b24999844b09096c79567c1298617efe084860149d875b702ef76e2faa2462" dependencies = [ "log", "qualifier_attr", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-bincode", "solana-bpf-loader-program", "solana-compute-budget", @@ -7482,7 +7503,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cde971a20b8dbf60144d6a84439dda86b5466e00e2843091fe731083cda614da" dependencies = [ - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-hash", "solana-nonce", "solana-sdk-ids", @@ -7757,7 +7778,7 @@ dependencies = [ "percentage", "rand 0.8.5", "serde", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-clock", "solana-compute-budget", "solana-epoch-rewards", @@ -7946,7 +7967,7 @@ checksum = "127e6dfa51e8c8ae3aa646d8b2672bc4ac901972a338a9e1cd249e030564fb9d" dependencies = [ "serde", "serde_derive", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-clock", "solana-epoch-schedule", "solana-genesis-config", @@ -8005,7 +8026,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-account-decoder-client-types", "solana-clock", "solana-commitment-config", @@ -8041,7 +8062,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-account-decoder-client-types", "solana-clock", "solana-commitment-config", @@ -8062,7 +8083,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0244e2bf439ec424179414173cdc8b43e34371608752799c5610bf17430eee18" dependencies = [ - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-commitment-config", "solana-hash", "solana-message", @@ -8215,7 +8236,7 @@ dependencies = [ "js-sys", "serde", "serde_json", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-bn254", "solana-client-traits", "solana-cluster-type", @@ -8538,7 +8559,7 @@ checksum = "dabc713c25ff999424ec68ac4572f2ff6bfd6317922c7864435ccaf9c76504a8" dependencies = [ "bincode", "log", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-bincode", "solana-clock", "solana-config-program", @@ -8561,7 +8582,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "0.7.0" +version = "0.8.0" dependencies = [ "bincode", "bs58", @@ -8640,7 +8661,7 @@ dependencies = [ "percentage", "serde", "serde_derive", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-bpf-loader-program", "solana-clock", "solana-compute-budget", @@ -8684,7 +8705,7 @@ dependencies = [ "qualifier_attr", "serde", "serde_derive", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-bpf-loader-program", "solana-clock", "solana-compute-budget", @@ -8767,7 +8788,7 @@ dependencies = [ "log", "serde", "serde_derive", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-bincode", "solana-instruction", "solana-log-collector", @@ -8854,7 +8875,7 @@ dependencies = [ "bincode", "log", "rayon", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-client-traits", "solana-clock", "solana-commitment-config", @@ -8975,7 +8996,7 @@ dependencies = [ "bincode", "serde", "serde_derive", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-instruction", "solana-pubkey", "solana-rent", @@ -9144,7 +9165,7 @@ dependencies = [ "log", "serde", "serde_derive", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-bincode", "solana-clock", "solana-hash", @@ -9195,7 +9216,7 @@ dependencies = [ "num-traits", "serde", "serde_derive", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-bincode", "solana-clock", "solana-epoch-schedule", @@ -10012,7 +10033,7 @@ dependencies = [ "magicblock-delegation-program 1.1.3 (git+https://github.com/magicblock-labs/delegation-program.git?rev=2cb491032f372)", "program-flexi-counter", "program-mini", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-loader-v2-interface", "solana-loader-v3-interface 4.0.1", "solana-loader-v4-interface", @@ -10062,14 +10083,14 @@ dependencies = [ [[package]] name = "test-kit" -version = "0.7.0" +version = "0.8.0" dependencies = [ "guinea", "magicblock-accounts-db", "magicblock-core", "magicblock-ledger", "magicblock-processor", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", "solana-instruction", "solana-keypair", "solana-program", @@ -10750,6 +10771,12 @@ dependencies = [ "webpki-roots 0.24.0", ] +[[package]] +name = "twox-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" + [[package]] name = "typenum" version = "1.19.0" @@ -11620,7 +11647,7 @@ dependencies = [ "prost 0.13.5", "prost-types 0.13.5", "protobuf-src", - "solana-account", + "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", "solana-account-decoder", "solana-clock", "solana-hash", diff --git a/test-integration/Cargo.toml b/test-integration/Cargo.toml index 0690ffee4..1434ae2f9 100644 --- a/test-integration/Cargo.toml +++ b/test-integration/Cargo.toml @@ -78,7 +78,7 @@ rkyv = "0.7.45" schedulecommit-client = { path = "schedulecommit/client" } serde = "1.0.217" serial_test = "3.2.0" -solana-account = { git = "https://github.com/magicblock-labs/solana-account.git", rev = "6eae52b" } +solana-account = { git = "https://github.com/magicblock-labs/solana-account.git", rev = "3ff1b2e" } solana-loader-v2-interface = "2.2" solana-loader-v3-interface = "4.0" solana-loader-v4-interface = "2.1" @@ -114,4 +114,4 @@ url = "2.5.0" solana-storage-proto = { path = "../storage-proto" } # same reason as above rocksdb = { git = "https://github.com/magicblock-labs/rust-rocksdb.git", rev = "6d975197" } -solana-account = { git = "https://github.com/magicblock-labs/solana-account.git", rev = "6eae52b" } +solana-account = { git = "https://github.com/magicblock-labs/solana-account.git", rev = "3ff1b2e" } From 3ed3c711106fd86f6235c79d68fe1fe2a684d035 Mon Sep 17 00:00:00 2001 From: Babur Makhmudov Date: Fri, 20 Feb 2026 16:52:27 +0400 Subject: [PATCH 2/2] fix: clippy and fmt --- magicblock-accounts-db/src/tests.rs | 12 +++- test-integration/Cargo.lock | 98 ++++++++++++----------------- test-integration/Cargo.toml | 4 +- 3 files changed, 51 insertions(+), 63 deletions(-) diff --git a/magicblock-accounts-db/src/tests.rs b/magicblock-accounts-db/src/tests.rs index 91497353d..49d5e0303 100644 --- a/magicblock-accounts-db/src/tests.rs +++ b/magicblock-accounts-db/src/tests.rs @@ -478,12 +478,17 @@ fn test_checksum_deterministic_across_dbs() { for i in 0..50 { let pubkey = Pubkey::new_unique(); let mut account = AccountSharedData::new(LAMPORTS, SPACE, &OWNER); - account.data_as_mut_slice()[..8].copy_from_slice(&(i as u64).to_le_bytes()); + account.data_as_mut_slice()[..8] + .copy_from_slice(&(i as u64).to_le_bytes()); db1.insert_account(&pubkey, &account).unwrap(); db2.insert_account(&pubkey, &account).unwrap(); } - assert_eq!(db1.checksum(), db2.checksum(), "checksums must match for identical state"); + assert_eq!( + db1.checksum(), + db2.checksum(), + "checksums must match for identical state" + ); } #[test] @@ -512,7 +517,8 @@ fn test_checksum_detects_state_change() { // Modify lamports on a different account accounts[10].1.set_lamports(1_000_000); - env.insert_account(&accounts[10].0, &accounts[10].1).unwrap(); + env.insert_account(&accounts[10].0, &accounts[10].1) + .unwrap(); assert_ne!( env.checksum(), diff --git a/test-integration/Cargo.lock b/test-integration/Cargo.lock index 10f2a4eee..95ffb18d7 100644 --- a/test-integration/Cargo.lock +++ b/test-integration/Cargo.lock @@ -1711,7 +1711,7 @@ dependencies = [ "getrandom 0.2.16", "magicblock-delegation-program 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "magicblock-magic-program-api 0.6.2", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-account-info", "solana-cpi", "solana-instruction", @@ -3287,7 +3287,7 @@ dependencies = [ "magicblock-program", "magicblock-rpc-client", "rand 0.9.2", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", + "solana-account", "solana-hash", "solana-instruction", "solana-loader-v3-interface 3.0.0", @@ -3334,7 +3334,7 @@ dependencies = [ "memmap2 0.9.9", "parking_lot", "reflink-copy", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", + "solana-account", "solana-pubkey", "thiserror 1.0.69", "tracing", @@ -3367,7 +3367,7 @@ dependencies = [ "parking_lot", "scc", "serde", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", + "solana-account", "solana-account-decoder", "solana-compute-budget-instruction", "solana-feature-set", @@ -3414,7 +3414,7 @@ dependencies = [ "magicblock-validator-admin", "num_cpus", "paste", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", + "solana-account", "solana-clock", "solana-commitment-config", "solana-feature-gate-interface", @@ -3462,7 +3462,7 @@ dependencies = [ "magicblock-metrics", "parking_lot", "scc", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", + "solana-account", "solana-account-decoder", "solana-account-decoder-client-types", "solana-address-lookup-table-interface", @@ -3504,7 +3504,7 @@ version = "0.8.0" dependencies = [ "borsh 1.6.0", "paste", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", + "solana-account", "solana-program", "solana-pubkey", "thiserror 1.0.69", @@ -3528,7 +3528,7 @@ dependencies = [ "magicblock-rpc-client", "magicblock-table-mania", "rusqlite", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", + "solana-account", "solana-account-decoder", "solana-address-lookup-table-interface", "solana-commitment-config", @@ -3578,7 +3578,7 @@ version = "0.8.0" dependencies = [ "flume", "magicblock-magic-program-api 0.8.0", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", + "solana-account", "solana-account-decoder", "solana-hash", "solana-program", @@ -3719,7 +3719,7 @@ dependencies = [ "parking_lot", "rustc-hash 2.1.1", "serde", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", + "solana-account", "solana-bpf-loader-program", "solana-compute-budget-program", "solana-feature-set", @@ -3754,7 +3754,7 @@ dependencies = [ "num-traits", "parking_lot", "serde", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", + "solana-account", "solana-account-info", "solana-clock", "solana-fee-calculator", @@ -3780,7 +3780,7 @@ dependencies = [ name = "magicblock-rpc-client" version = "0.8.0" dependencies = [ - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", + "solana-account", "solana-account-decoder-client-types", "solana-address-lookup-table-interface", "solana-clock", @@ -5809,7 +5809,7 @@ dependencies = [ "program-flexi-counter", "program-schedulecommit", "rand 0.8.5", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-pubkey", "solana-rpc-client", "solana-rpc-client-api", @@ -6243,24 +6243,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "solana-account" -version = "2.2.1" -source = "git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e#3ff1b2eaf16fd8b82dd8e625673df9798b07db22" -dependencies = [ - "bincode", - "qualifier_attr", - "serde", - "serde_bytes", - "serde_derive", - "solana-account-info", - "solana-clock", - "solana-instruction", - "solana-pubkey", - "solana-sdk-ids", - "solana-sysvar", -] - [[package]] name = "solana-account" version = "2.2.1" @@ -6294,7 +6276,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-account-decoder-client-types", "solana-clock", "solana-config-program", @@ -6329,7 +6311,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-pubkey", "zstd", ] @@ -6567,7 +6549,7 @@ dependencies = [ "libsecp256k1", "qualifier_attr", "scopeguard", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-account-info", "solana-big-mod-exp", "solana-bincode", @@ -6687,7 +6669,7 @@ dependencies = [ "log", "quinn", "rayon", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-client-traits", "solana-commitment-config", "solana-connection-cache", @@ -6723,7 +6705,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83f0071874e629f29e0eb3dab8a863e98502ac7aba55b7e0df1803fc5cac72a7" dependencies = [ - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-commitment-config", "solana-epoch-info", "solana-hash", @@ -6836,7 +6818,7 @@ dependencies = [ "chrono", "serde", "serde_derive", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-bincode", "solana-instruction", "solana-log-collector", @@ -7050,7 +7032,7 @@ dependencies = [ "bincode", "serde", "serde_derive", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-account-info", "solana-instruction", "solana-program-error", @@ -7130,7 +7112,7 @@ dependencies = [ "memmap2 0.5.10", "serde", "serde_derive", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-clock", "solana-cluster-type", "solana-epoch-schedule", @@ -7355,7 +7337,7 @@ checksum = "81b24999844b09096c79567c1298617efe084860149d875b702ef76e2faa2462" dependencies = [ "log", "qualifier_attr", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-bincode", "solana-bpf-loader-program", "solana-compute-budget", @@ -7503,7 +7485,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cde971a20b8dbf60144d6a84439dda86b5466e00e2843091fe731083cda614da" dependencies = [ - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-hash", "solana-nonce", "solana-sdk-ids", @@ -7778,7 +7760,7 @@ dependencies = [ "percentage", "rand 0.8.5", "serde", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-clock", "solana-compute-budget", "solana-epoch-rewards", @@ -7967,7 +7949,7 @@ checksum = "127e6dfa51e8c8ae3aa646d8b2672bc4ac901972a338a9e1cd249e030564fb9d" dependencies = [ "serde", "serde_derive", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-clock", "solana-epoch-schedule", "solana-genesis-config", @@ -8026,7 +8008,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-account-decoder-client-types", "solana-clock", "solana-commitment-config", @@ -8062,7 +8044,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-account-decoder-client-types", "solana-clock", "solana-commitment-config", @@ -8083,7 +8065,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0244e2bf439ec424179414173cdc8b43e34371608752799c5610bf17430eee18" dependencies = [ - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-commitment-config", "solana-hash", "solana-message", @@ -8236,7 +8218,7 @@ dependencies = [ "js-sys", "serde", "serde_json", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-bn254", "solana-client-traits", "solana-cluster-type", @@ -8559,7 +8541,7 @@ checksum = "dabc713c25ff999424ec68ac4572f2ff6bfd6317922c7864435ccaf9c76504a8" dependencies = [ "bincode", "log", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-bincode", "solana-clock", "solana-config-program", @@ -8661,7 +8643,7 @@ dependencies = [ "percentage", "serde", "serde_derive", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-bpf-loader-program", "solana-clock", "solana-compute-budget", @@ -8705,7 +8687,7 @@ dependencies = [ "qualifier_attr", "serde", "serde_derive", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-bpf-loader-program", "solana-clock", "solana-compute-budget", @@ -8788,7 +8770,7 @@ dependencies = [ "log", "serde", "serde_derive", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-bincode", "solana-instruction", "solana-log-collector", @@ -8875,7 +8857,7 @@ dependencies = [ "bincode", "log", "rayon", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-client-traits", "solana-clock", "solana-commitment-config", @@ -8996,7 +8978,7 @@ dependencies = [ "bincode", "serde", "serde_derive", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-instruction", "solana-pubkey", "solana-rent", @@ -9165,7 +9147,7 @@ dependencies = [ "log", "serde", "serde_derive", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-bincode", "solana-clock", "solana-hash", @@ -9216,7 +9198,7 @@ dependencies = [ "num-traits", "serde", "serde_derive", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-bincode", "solana-clock", "solana-epoch-schedule", @@ -10033,7 +10015,7 @@ dependencies = [ "magicblock-delegation-program 1.1.3 (git+https://github.com/magicblock-labs/delegation-program.git?rev=2cb491032f372)", "program-flexi-counter", "program-mini", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-loader-v2-interface", "solana-loader-v3-interface 4.0.1", "solana-loader-v4-interface", @@ -10090,7 +10072,7 @@ dependencies = [ "magicblock-core", "magicblock-ledger", "magicblock-processor", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2ea)", + "solana-account", "solana-instruction", "solana-keypair", "solana-program", @@ -11647,7 +11629,7 @@ dependencies = [ "prost 0.13.5", "prost-types 0.13.5", "protobuf-src", - "solana-account 2.2.1 (git+https://github.com/magicblock-labs/solana-account.git?rev=3ff1b2e)", + "solana-account", "solana-account-decoder", "solana-clock", "solana-hash", diff --git a/test-integration/Cargo.toml b/test-integration/Cargo.toml index 1434ae2f9..578353048 100644 --- a/test-integration/Cargo.toml +++ b/test-integration/Cargo.toml @@ -78,7 +78,7 @@ rkyv = "0.7.45" schedulecommit-client = { path = "schedulecommit/client" } serde = "1.0.217" serial_test = "3.2.0" -solana-account = { git = "https://github.com/magicblock-labs/solana-account.git", rev = "3ff1b2e" } +solana-account = { git = "https://github.com/magicblock-labs/solana-account.git", rev = "3ff1b2ea" } solana-loader-v2-interface = "2.2" solana-loader-v3-interface = "4.0" solana-loader-v4-interface = "2.1" @@ -114,4 +114,4 @@ url = "2.5.0" solana-storage-proto = { path = "../storage-proto" } # same reason as above rocksdb = { git = "https://github.com/magicblock-labs/rust-rocksdb.git", rev = "6d975197" } -solana-account = { git = "https://github.com/magicblock-labs/solana-account.git", rev = "3ff1b2e" } +solana-account = { git = "https://github.com/magicblock-labs/solana-account.git", rev = "3ff1b2ea" }