From feba616e85396d894e207a5ba80fb2a8124627f9 Mon Sep 17 00:00:00 2001 From: aoikurokawa Date: Thu, 28 May 2026 11:57:33 +0900 Subject: [PATCH] fix: stake program --- Cargo.lock | 4 +- crates/litesvm/src/lib.rs | 33 ++++++- .../src/programs/elf/core_bpf_stake-5.0.0.so | Bin 0 -> 202280 bytes crates/litesvm/src/programs/mod.rs | 2 +- crates/litesvm/tests/stake_program.rs | 90 +++++++++++++++++- 5 files changed, 123 insertions(+), 6 deletions(-) create mode 100644 crates/litesvm/src/programs/elf/core_bpf_stake-5.0.0.so diff --git a/Cargo.lock b/Cargo.lock index d451bf0a0..49afe5133 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3099,9 +3099,9 @@ dependencies = [ [[package]] name = "solana-clock" -version = "3.0.1" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95cf11109c3b6115cc510f1e31f06fdd52f504271bc24ef5f1249fbbcae5f9f3" +checksum = "5ea35d8f69b67daddb921a9da7f78ca591b533cf5e98833cd9ae62fdc2e4652c" dependencies = [ "serde", "serde_derive", diff --git a/crates/litesvm/src/lib.rs b/crates/litesvm/src/lib.rs index f28d8737e..d9c05fbc8 100644 --- a/crates/litesvm/src/lib.rs +++ b/crates/litesvm/src/lib.rs @@ -364,7 +364,8 @@ use { }, solana_rent::Rent, solana_sdk_ids::{ - bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable, native_loader, system_program, + bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable, config as config_program, + native_loader, system_program, }, solana_signature::Signature, solana_signer::Signer, @@ -582,7 +583,35 @@ impl LiteSVM { latest_blockhash, )])); self.set_sysvar(&SlotHistory::default()); - self.set_sysvar(&StakeHistory::default()); + + // StakeHistory::size_of() is hard-coded to 16 KiB (512 max entries). Using set_sysvar + // would allocate that padded buffer, and sol_get_sysvar reads beyond the actual data + // would return zeros. The Stake BPF program asserts entry_epoch == target_epoch after + // each partial read, so those zero bytes trigger a panic at epoch >= 1. Serialize only + // the actual data so reads beyond the end return an error instead. + { + let data = bincode::serialize(&StakeHistory::default()).unwrap(); + let mut account = AccountSharedData::new(1, data.len(), &solana_sdk_ids::sysvar::id()); + account.data_as_mut_slice().copy_from_slice(&data); + self.accounts + .add_account(StakeHistory::id(), account) + .unwrap(); + } + + // Initialize the deprecated StakeConfig account so it is available to programs + // that still pass it as a transaction account (e.g. older DelegateStake callers). + // Format: ConfigKeys header (8-byte u64 key count = 0) followed by + // bincode-serialised Config::default(). + #[allow(deprecated)] + { + use solana_stake_interface::config::Config; + let mut data = bincode::serialize(&0u64).unwrap(); // 0 authorized keys + data.extend(bincode::serialize(&Config::default()).unwrap()); + let mut account = AccountSharedData::new(1, data.len(), &config_program::id()); + account.data_as_mut_slice().copy_from_slice(&data); + self.accounts + .add_account_no_checks(solana_sdk_ids::stake::config::id(), account); + } } /// Includes the default sysvars. diff --git a/crates/litesvm/src/programs/elf/core_bpf_stake-5.0.0.so b/crates/litesvm/src/programs/elf/core_bpf_stake-5.0.0.so new file mode 100644 index 0000000000000000000000000000000000000000..53e422b6521a368f81a6054559dc704e471acca2 GIT binary patch literal 202280 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�fb`>j3MFB#1C^w>IXvK^a2 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%0A$6fp9So#i66> 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 literal 0 HcmV?d00001 diff --git a/crates/litesvm/src/programs/mod.rs b/crates/litesvm/src/programs/mod.rs index 57367780a..685b032bd 100644 --- a/crates/litesvm/src/programs/mod.rs +++ b/crates/litesvm/src/programs/mod.rs @@ -61,7 +61,7 @@ pub fn load_default_programs(svm: &mut LiteSVM) { .unwrap(); svm.add_program_preverified( stake::ID, - include_bytes!("elf/core_bpf_stake-1.0.1.so"), + include_bytes!("elf/core_bpf_stake-5.0.0.so"), &bpf_loader_upgradeable::id(), ) .unwrap(); diff --git a/crates/litesvm/tests/stake_program.rs b/crates/litesvm/tests/stake_program.rs index b25bc5d58..8a196f65f 100644 --- a/crates/litesvm/tests/stake_program.rs +++ b/crates/litesvm/tests/stake_program.rs @@ -23,6 +23,7 @@ use { solana_transaction::Transaction, solana_transaction_error::TransactionError, solana_vote_interface::{ + authorized_voters::AuthorizedVoters, instruction as vote_instruction, state::{VoteInit, VoteStateV4, VoteStateVersions}, }, @@ -712,7 +713,6 @@ fn test_authorize() { } #[test] -#[ignore] fn test_stake_delegate() { let mut svm = LiteSVM::new(); let accounts = Accounts::default(); @@ -841,3 +841,91 @@ fn test_stake_delegate() { process_instruction(&mut svm, &instruction, &vec![&staker_keypair], &payer).unwrap_err(); assert_eq!(e, ProgramError::InvalidAccountData); } + +/// Regression test for https://github.com/solana-foundation/surfpool/pull/605. +/// +/// Three bugs existed in LiteSVM that made it unusable with mainnet-forked state: +/// +/// 1. The bundled stake ELF (v1.0.1) was compiled against solana-vote-interface v2.x which only +/// knew VoteStateVersions discriminants 0–2. Delegating to a V4 vote account (discriminant 3, +/// common on mainnet) returned InvalidAccountData. +/// +/// 2. StakeHistory was initialised from `size_of()` (16 KiB of zeros). The Stake BPF program +/// uses `sol_get_sysvar` with byte offsets to read individual entries; the oversized zero- +/// padded account made those reads succeed but return zeros, triggering an +/// `assert_eq!(entry_epoch, target_epoch)` panic inside the program at epoch >= 2. +/// +/// 3. The StakeConfig account was absent, so DelegateStake instructions that pass it as an +/// account would fail with AccountNotFound. +#[test] +fn test_stake_surfpool_605() { + let mut svm = LiteSVM::new(); + let payer = Keypair::new(); + svm.airdrop(&payer.pubkey(), 10_000_000_000).unwrap(); + + // Bug 3: StakeConfig must be present at the well-known address after LiteSVM::new(). + #[allow(deprecated)] + let stake_config_id = solana_sdk_ids::stake::config::id(); + assert!( + svm.get_account(&stake_config_id).is_some(), + "StakeConfig account not found — was it removed from set_sysvars()?" + ); + + // Build a V4 vote account directly, bypassing the vote program. + // This simulates the way surfpool (and similar fork-from-mainnet tools) inject live accounts: + // they serialise the RPC state straight into LiteSVM without re-creating it via instructions. + let voter = Keypair::new(); + let vote_account_address = Address::new_unique(); + let rent = svm.get_sysvar::(); + let vote_state = VoteStateV4 { + node_pubkey: Keypair::new().pubkey(), + authorized_withdrawer: Keypair::new().pubkey(), + authorized_voters: AuthorizedVoters::new(0, voter.pubkey()), + ..VoteStateV4::default() + }; + let mut vote_account = Account { + lamports: rent.minimum_balance(VoteStateV4::size_of()), + data: vec![0u8; VoteStateV4::size_of()], + owner: solana_sdk_ids::vote::id(), + executable: false, + rent_epoch: u64::MAX, + }; + to(&VoteStateVersions::V4(Box::new(vote_state)), &mut vote_account).unwrap(); + svm.set_account(vote_account_address, vote_account).unwrap(); + + // Bug 1: DelegateStake to the V4 vote account. + // The old stake ELF (v1.0.1) returned InvalidAccountData for V4 vote accounts. + let staker = Keypair::new(); + let withdrawer = Keypair::new(); + let minimum_delegation = get_minimum_delegation(&mut svm, &payer); + let stake = create_independent_stake_account( + &mut svm, + &Authorized { + staker: staker.pubkey(), + withdrawer: withdrawer.pubkey(), + }, + minimum_delegation * 2, + &payer, + ); + process_instruction( + &mut svm, + &ixn::delegate_stake(&stake, &staker.pubkey(), &vote_account_address), + &[&staker], + &payer, + ) + .unwrap(); + + // Bug 2: Perform a stake operation after epoch 2. + // The old 16 KiB zero-padded StakeHistory caused the Stake BPF program to panic when it read + // an entry via sol_get_sysvar and the zero bytes made the epoch-index assertion fire. + advance_epoch(&mut svm); + advance_epoch(&mut svm); + + process_instruction( + &mut svm, + &ixn::deactivate_stake(&stake, &staker.pubkey()), + &[&staker], + &payer, + ) + .unwrap(); +}