diff --git a/config.example.toml b/config.example.toml index 30c2f7e40..f9e12417b 100644 --- a/config.example.toml +++ b/config.example.toml @@ -233,13 +233,6 @@ verify-keypair = true # Env: MBV_LEDGER__RESET reset = false -# (Optional) Override the validator authority pubkey during ledger replay. -# When set, replayed transactions are verified against this key instead of -# the validator's own identity. The override is automatically unset once -# replay completes. Useful when replaying a ledger from a different validator. -# Default: not set (uses the validator's own keypair) -# Env: MBV_LEDGER__REPLAY_AUTHORITY_OVERRIDE -# Example: replay-authority-override = "11111111111111111111111111111111" # ============================================================================== # Chainlink (cloning pipeline) diff --git a/magicblock-config/src/config/ledger.rs b/magicblock-config/src/config/ledger.rs index 6022eaa49..d8cd6872b 100644 --- a/magicblock-config/src/config/ledger.rs +++ b/magicblock-config/src/config/ledger.rs @@ -2,7 +2,7 @@ use std::time::Duration; use serde::{Deserialize, Serialize}; -use crate::{consts, types::SerdePubkey}; +use crate::consts; /// Configuration for the ledger database and block production. #[derive(Deserialize, Serialize, Debug, Clone)] @@ -29,12 +29,6 @@ pub struct LedgerConfig { /// ledger truncation logic kicks in, when the disk space /// used by the ledger approaches this number. pub size: u64, - - /// If set, overrides the validator authority pubkey during ledger - /// replay (StartingUp mode) so that replayed transactions are - /// verified against this key instead of the validator's own - /// identity. The override is unset once replay completes. - pub replay_authority_override: Option, } impl Default for LedgerConfig { @@ -48,7 +42,6 @@ impl Default for LedgerConfig { reset: false, verify_keypair: true, size: consts::DEFAULT_LEDGER_SIZE, - replay_authority_override: None, } } } diff --git a/test-integration/test-ledger-restore/src/lib.rs b/test-integration/test-ledger-restore/src/lib.rs index c88230786..e12c674fb 100644 --- a/test-integration/test-ledger-restore/src/lib.rs +++ b/test-integration/test-ledger-restore/src/lib.rs @@ -195,126 +195,6 @@ pub fn setup_validator_with_local_remote_and_resume_strategy( (default_tmpdir_config, validator, ctx) } -/// Like `setup_offline_validator` but uses a new validator authority -/// and sets `replay_authority_override` for ledger replay. -pub fn setup_offline_validator_with_authority_override( - ledger_path: &Path, - programs: Option>, - millis_per_slot: Option, - reset_ledger: bool, - replay_authority_override: Pubkey, -) -> (TempDir, Child, IntegrationTestContext) { - let accountsdb_config = AccountsDbConfig::default(); - - let validator_config = ValidatorConfig::default(); - let programs = resolve_programs(programs); - - let config = ValidatorParams { - ledger: LedgerConfig { - reset: reset_ledger, - verify_keypair: false, - replay_authority_override: Some(SerdePubkey( - replay_authority_override, - )), - block_time: millis_per_slot - .map(Duration::from_millis) - .unwrap_or_else(|| { - Duration::from_millis(DEFAULT_LEDGER_BLOCK_TIME_MS) - }), - ..Default::default() - }, - accountsdb: accountsdb_config.clone(), - programs, - validator: validator_config, - lifecycle: LifecycleMode::Offline, - storage: StorageDirectory(ledger_path.to_path_buf()), - ..Default::default() - }; - let (default_tmpdir_config, Some(mut validator), port) = - start_magicblock_validator_with_config_struct( - config, - &LoadedAccounts::new_with_new_validator_authority(), - ) - else { - panic!("validator should set up correctly"); - }; - - let ctx = expect!( - IntegrationTestContext::try_new_with_ephem_port(port), - validator - ); - (default_tmpdir_config, validator, ctx) -} - -/// Like `setup_validator_with_local_remote` but uses a new validator -/// authority and sets `replay_authority_override` for ledger replay. -pub fn setup_validator_with_local_remote_and_authority_override( - ledger_path: &Path, - programs: Option>, - reset_ledger: bool, - replay_authority_override: Pubkey, -) -> (TempDir, Child, IntegrationTestContext) { - let accountsdb_config = AccountsDbConfig { - reset: reset_ledger, - ..Default::default() - }; - - let programs = resolve_programs(programs); - let loaded_accounts = LoadedAccounts::new_with_new_validator_authority(); - - let config = ValidatorParams { - ledger: LedgerConfig { - reset: reset_ledger, - verify_keypair: false, - replay_authority_override: Some(SerdePubkey( - replay_authority_override, - )), - ..Default::default() - }, - accountsdb: accountsdb_config.clone(), - programs, - task_scheduler: TaskSchedulerConfig { - reset: reset_ledger, - ..Default::default() - }, - lifecycle: LifecycleMode::Ephemeral, - remotes: vec![ - Remote::from_str(IntegrationTestContext::url_chain()).unwrap(), - Remote::from_str(IntegrationTestContext::ws_url_chain()).unwrap(), - ], - storage: StorageDirectory(ledger_path.to_path_buf()), - ..Default::default() - }; - // Fund the NEW validator authority on chain - { - let chain_only_ctx = - IntegrationTestContext::try_new_chain_only().unwrap(); - chain_only_ctx - .airdrop_chain( - &loaded_accounts.validator_authority(), - 20 * LAMPORTS_PER_SOL, - ) - .unwrap(); - - init_validator_fees_vault( - &chain_only_ctx, - loaded_accounts.validator_authority_keypair(), - ); - } - - let (default_tmpdir_config, Some(mut validator), port) = - start_magicblock_validator_with_config_struct(config, &loaded_accounts) - else { - panic!("validator should set up correctly"); - }; - - let ctx = expect!( - IntegrationTestContext::try_new_with_ephem_port(port), - validator - ); - (default_tmpdir_config, validator, ctx) -} - /// Init validator fees vault for proper validator setup pub fn init_validator_fees_vault( chain_ctx: &IntegrationTestContext, diff --git a/test-integration/test-ledger-restore/tests/01_single_transfer.rs b/test-integration/test-ledger-restore/tests/01_single_transfer.rs index 944ee2afc..12c843c4b 100644 --- a/test-integration/test-ledger-restore/tests/01_single_transfer.rs +++ b/test-integration/test-ledger-restore/tests/01_single_transfer.rs @@ -2,8 +2,7 @@ use std::{path::Path, process::Child}; use cleanass::{assert, assert_eq}; use integration_test_tools::{ - expect, loaded_accounts::LoadedAccounts, tmpdir::resolve_tmp_dir, unwrap, - validator::cleanup, + expect, tmpdir::resolve_tmp_dir, unwrap, validator::cleanup, }; use solana_commitment_config::CommitmentConfig; use solana_sdk::{ @@ -14,7 +13,6 @@ use solana_sdk::{ use test_kit::init_logger; use test_ledger_restore::{ airdrop_and_delegate_accounts, setup_offline_validator, - setup_offline_validator_with_authority_override, setup_validator_with_local_remote, transfer_lamports, wait_for_ledger_persist, TMP_DIR_LEDGER, }; @@ -31,32 +29,8 @@ fn test_restore_ledger_with_transferred_account() { test_ledger_restore::kill_validator(&mut validator); debug!("Transfer sig: {transfer_sig}"); - let mut validator = read_ledger( - &ledger_path, - &keypair2.pubkey(), - Some(&transfer_sig), - None, - ); - test_ledger_restore::kill_validator(&mut validator); -} - -#[test] -fn test_restore_ledger_with_transferred_account_authority_override() { - init_logger!(); - let (_tmpdir, ledger_path) = resolve_tmp_dir(TMP_DIR_LEDGER); - - let original_authority = LoadedAccounts::default().validator_authority(); - - let (mut validator, transfer_sig, _slot, _keypair1, keypair2) = - write_ledger(&ledger_path); - test_ledger_restore::kill_validator(&mut validator); - - let mut validator = read_ledger( - &ledger_path, - &keypair2.pubkey(), - Some(&transfer_sig), - Some(original_authority), - ); + let mut validator = + read_ledger(&ledger_path, &keypair2.pubkey(), Some(&transfer_sig)); test_ledger_restore::kill_validator(&mut validator); } @@ -106,19 +80,10 @@ fn read_ledger( ledger_path: &Path, pubkey2: &Pubkey, transfer_sig1: Option<&Signature>, - authority_override: Option, ) -> Child { // Launch another validator reusing ledger - let (_, mut validator, ctx) = match authority_override { - Some(original) => setup_offline_validator_with_authority_override( - ledger_path, - None, - None, - false, - original, - ), - None => setup_offline_validator(ledger_path, None, None, false, false), - }; + let (_, mut validator, ctx) = + setup_offline_validator(ledger_path, None, None, false, false); let acc = expect!( expect!(ctx.try_ephem_client(), validator).get_account(pubkey2), diff --git a/test-integration/test-ledger-restore/tests/04_flexi_counter.rs b/test-integration/test-ledger-restore/tests/04_flexi_counter.rs index 689cf1015..93014e148 100644 --- a/test-integration/test-ledger-restore/tests/04_flexi_counter.rs +++ b/test-integration/test-ledger-restore/tests/04_flexi_counter.rs @@ -14,7 +14,6 @@ use test_kit::init_logger; use test_ledger_restore::{ confirm_tx_with_payer_ephem, fetch_counter_ephem, init_and_delegate_counter_and_payer, setup_offline_validator, - setup_offline_validator_with_authority_override, setup_validator_with_local_remote_and_resume_strategy, wait_for_ledger_persist, TMP_DIR_LEDGER, }; @@ -38,7 +37,7 @@ fn test_restore_ledger_with_flexi_counter_same_slot() { let (mut validator, _, payer1, payer2) = write(&ledger_path, false); test_ledger_restore::kill_validator(&mut validator); - let mut validator = read(&ledger_path, &payer1, &payer2, None); + let mut validator = read(&ledger_path, &payer1, &payer2); test_ledger_restore::kill_validator(&mut validator); } @@ -51,24 +50,7 @@ fn test_restore_ledger_with_flexi_counter_separate_slot() { let (mut validator, _, payer1, payer2) = write(&ledger_path, true); test_ledger_restore::kill_validator(&mut validator); - let mut validator = read(&ledger_path, &payer1, &payer2, None); - test_ledger_restore::kill_validator(&mut validator); -} - -#[test] -fn test_restore_ledger_with_flexi_counter_authority_override() { - init_logger!(); - let (_tmpdir, ledger_path) = resolve_tmp_dir(TMP_DIR_LEDGER); - - let original_authority = - LoadedAccounts::with_delegation_program_test_authority() - .validator_authority(); - - let (mut validator, _, payer1, payer2) = write(&ledger_path, true); - test_ledger_restore::kill_validator(&mut validator); - - let mut validator = - read(&ledger_path, &payer1, &payer2, Some(original_authority)); + let mut validator = read(&ledger_path, &payer1, &payer2); test_ledger_restore::kill_validator(&mut validator); } @@ -217,28 +199,9 @@ fn write( (validator, slot, payer1.pubkey(), payer2.pubkey()) } -fn read( - ledger_path: &Path, - payer1: &Pubkey, - payer2: &Pubkey, - authority_override: Option, -) -> Child { - let (_, mut validator, ctx) = match authority_override { - Some(original) => setup_offline_validator_with_authority_override( - ledger_path, - None, - Some(SLOT_MS), - false, - original, - ), - None => setup_offline_validator( - ledger_path, - None, - Some(SLOT_MS), - false, - true, - ), - }; +fn read(ledger_path: &Path, payer1: &Pubkey, payer2: &Pubkey) -> Child { + let (_, mut validator, ctx) = + setup_offline_validator(ledger_path, None, Some(SLOT_MS), false, true); let counter1_decoded = fetch_counter_ephem(&ctx, payer1, &mut validator); assert_eq!( diff --git a/test-integration/test-ledger-restore/tests/09_restore_different_accounts_multiple_times.rs b/test-integration/test-ledger-restore/tests/09_restore_different_accounts_multiple_times.rs index df1c448c2..4fd94d4ed 100644 --- a/test-integration/test-ledger-restore/tests/09_restore_different_accounts_multiple_times.rs +++ b/test-integration/test-ledger-restore/tests/09_restore_different_accounts_multiple_times.rs @@ -10,15 +10,13 @@ use program_flexi_counter::{ state::FlexiCounter, }; use solana_sdk::{ - native_token::LAMPORTS_PER_SOL, pubkey::Pubkey, signature::Keypair, - signer::Signer, + native_token::LAMPORTS_PER_SOL, signature::Keypair, signer::Signer, }; use test_kit::init_logger; use test_ledger_restore::{ confirm_tx_with_payer_chain, confirm_tx_with_payer_ephem, fetch_counter_chain, fetch_counter_ephem, init_and_delegate_counter_and_payer, setup_validator_with_local_remote, - setup_validator_with_local_remote_and_authority_override, wait_for_counter_ephem_state, wait_for_ledger_persist, TMP_DIR_LEDGER, }; use tracing::*; @@ -57,33 +55,6 @@ fn test_restore_ledger_different_accounts_multiple_times() { &payer_main, &payer_readonly, payer_main_lamports, - None, - ); - test_ledger_restore::kill_validator(&mut validator); - } -} - -#[test] -fn test_restore_different_accounts_multiple_times_authority_override() { - init_logger!(); - let (_tmpdir, ledger_path) = resolve_tmp_dir(TMP_DIR_LEDGER); - let payer_readonly = payer_keypair(); - - let original_authority = - LoadedAccounts::with_delegation_program_test_authority() - .validator_authority(); - - let (mut validator, _, payer_main_lamports, payer_main) = - write(&ledger_path, &payer_readonly); - test_ledger_restore::kill_validator(&mut validator); - - for _ in 0..5 { - let mut validator = read( - &ledger_path, - &payer_main, - &payer_readonly, - payer_main_lamports, - Some(original_authority), ); test_ledger_restore::kill_validator(&mut validator); } @@ -206,28 +177,17 @@ fn read( payer_main_kp: &Keypair, payer_readonly_kp: &Keypair, payer_main_lamports: u64, - authority_override: Option, ) -> Child { let payer_main = &payer_main_kp.pubkey(); let payer_readonly = &payer_readonly_kp.pubkey(); - let (_, mut validator, ctx) = match authority_override { - Some(original) => { - setup_validator_with_local_remote_and_authority_override( - ledger_path, - None, - false, - original, - ) - } - None => setup_validator_with_local_remote( - ledger_path, - None, - false, - false, - &LoadedAccounts::with_delegation_program_test_authority(), - ), - }; + let (_, mut validator, ctx) = setup_validator_with_local_remote( + ledger_path, + None, + false, + false, + &LoadedAccounts::with_delegation_program_test_authority(), + ); wait_for_counter_ephem_state( &ctx, diff --git a/test-integration/test-ledger-restore/tests/13_timestamps_match_during_replay.rs b/test-integration/test-ledger-restore/tests/13_timestamps_match_during_replay.rs index f059b7ae1..a525bfff4 100644 --- a/test-integration/test-ledger-restore/tests/13_timestamps_match_during_replay.rs +++ b/test-integration/test-ledger-restore/tests/13_timestamps_match_during_replay.rs @@ -6,7 +6,6 @@ use integration_test_tools::{ validator::cleanup, }; use solana_sdk::{ - pubkey::Pubkey, signature::{Keypair, Signature}, signer::Signer, }; @@ -14,7 +13,6 @@ use solana_transaction_status::UiTransactionEncoding; use test_kit::init_logger; use test_ledger_restore::{ airdrop_and_delegate_accounts, setup_offline_validator, - setup_offline_validator_with_authority_override, setup_validator_with_local_remote, transfer_lamports, wait_for_ledger_persist, SNAPSHOT_FREQUENCY, TMP_DIR_LEDGER, }; @@ -35,29 +33,7 @@ fn test_restore_preserves_timestamps() { assert!(slot > SNAPSHOT_FREQUENCY); - let mut validator = read(&ledger_path, signature, block_time, None); - test_ledger_restore::kill_validator(&mut validator); -} - -#[test] -fn test_restore_preserves_timestamps_with_authority_override() { - init_logger!(); - let (_tmpdir, ledger_path) = resolve_tmp_dir(TMP_DIR_LEDGER); - - let original_authority = LoadedAccounts::default().validator_authority(); - - let (mut validator, slot, signature, block_time, _payer) = - write(&ledger_path); - test_ledger_restore::kill_validator(&mut validator); - - assert!(slot > SNAPSHOT_FREQUENCY); - - let mut validator = read( - &ledger_path, - signature, - block_time, - Some(original_authority), - ); + let mut validator = read(&ledger_path, signature, block_time); test_ledger_restore::kill_validator(&mut validator); } @@ -117,24 +93,11 @@ fn write(ledger_path: &Path) -> (Child, u64, Signature, i64, Keypair) { (validator, slot, signature, block_time, payer1) } -fn read( - ledger_path: &Path, - signature: Signature, - block_time: i64, - authority_override: Option, -) -> Child { +fn read(ledger_path: &Path, signature: Signature, block_time: i64) -> Child { // Measure time let start = std::time::Instant::now(); - let (_, mut validator, ctx) = match authority_override { - Some(original) => setup_offline_validator_with_authority_override( - ledger_path, - None, - None, - false, - original, - ), - None => setup_offline_validator(ledger_path, None, None, false, false), - }; + let (_, mut validator, ctx) = + setup_offline_validator(ledger_path, None, None, false, false); debug!("✅ Validator started in {:?}", start.elapsed()); let restored_block_time = expect!(