@@ -464,6 +464,63 @@ fn test_database_reset() {
464464 assert_eq ! ( adb_reset. account_count( ) , 0 ) ;
465465}
466466
467+ #[ test]
468+ fn test_checksum_deterministic_across_dbs ( ) {
469+ // Two independent DBs with identical accounts must produce identical checksums
470+ let dir1 = tempfile:: tempdir ( ) . unwrap ( ) ;
471+ let dir2 = tempfile:: tempdir ( ) . unwrap ( ) ;
472+ let config = AccountsDbConfig :: default ( ) ;
473+
474+ let db1 = AccountsDb :: new ( & config, dir1. path ( ) , 0 ) . unwrap ( ) ;
475+ let db2 = AccountsDb :: new ( & config, dir2. path ( ) , 0 ) . unwrap ( ) ;
476+
477+ // Insert same accounts into both DBs
478+ for i in 0 ..50 {
479+ let pubkey = Pubkey :: new_unique ( ) ;
480+ let mut account = AccountSharedData :: new ( LAMPORTS , SPACE , & OWNER ) ;
481+ account. data_as_mut_slice ( ) [ ..8 ] . copy_from_slice ( & ( i as u64 ) . to_le_bytes ( ) ) ;
482+ db1. insert_account ( & pubkey, & account) . unwrap ( ) ;
483+ db2. insert_account ( & pubkey, & account) . unwrap ( ) ;
484+ }
485+
486+ assert_eq ! ( db1. checksum( ) , db2. checksum( ) , "checksums must match for identical state" ) ;
487+ }
488+
489+ #[ test]
490+ fn test_checksum_detects_state_change ( ) {
491+ let env = TestEnv :: new ( ) ;
492+
493+ // Create initial state
494+ let mut accounts: Vec < _ > = ( 0 ..20 )
495+ . map ( |_| {
496+ let acc = env. create_and_insert_account ( ) ;
497+ ( acc. pubkey , acc. account )
498+ } )
499+ . collect ( ) ;
500+
501+ let original_checksum = env. checksum ( ) ;
502+
503+ // Modify a single account's data
504+ accounts[ 5 ] . 1 . data_as_mut_slice ( ) [ 0 ] ^= 0xFF ;
505+ env. insert_account ( & accounts[ 5 ] . 0 , & accounts[ 5 ] . 1 ) . unwrap ( ) ;
506+
507+ assert_ne ! (
508+ env. checksum( ) ,
509+ original_checksum,
510+ "checksum must detect single account modification"
511+ ) ;
512+
513+ // Modify lamports on a different account
514+ accounts[ 10 ] . 1 . set_lamports ( 1_000_000 ) ;
515+ env. insert_account ( & accounts[ 10 ] . 0 , & accounts[ 10 ] . 1 ) . unwrap ( ) ;
516+
517+ assert_ne ! (
518+ env. checksum( ) ,
519+ original_checksum,
520+ "checksum must detect lamport change"
521+ ) ;
522+ }
523+
467524// ==============================================================
468525// TEST UTILITIES
469526// ==============================================================
0 commit comments