diff --git a/benches/max_perf.rs b/benches/max_perf.rs index 1d80cbbe..4c18b4a3 100644 --- a/benches/max_perf.rs +++ b/benches/max_perf.rs @@ -11,12 +11,6 @@ use solana_sdk::{ transaction::Transaction, }; -fn read_counter_program() -> Vec { - let mut so_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - so_path.push("test_programs/target/deploy/counter.so"); - std::fs::read(so_path).unwrap() -} - const NUM_GREETINGS: u8 = 255; fn make_tx( @@ -45,8 +39,9 @@ fn criterion_benchmark(c: &mut Criterion) { let payer_kp = Keypair::new(); let payer_pk = payer_kp.pubkey(); let program_id = Pubkey::new_unique(); - - svm.add_program(program_id, &read_counter_program()); + let mut so_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + so_path.push("test_programs/target/deploy/counter.so"); + svm.add_program_from_file(program_id, &so_path).unwrap(); svm.airdrop(&payer_pk, 1000000000).unwrap(); let counter_address = Pubkey::new_unique(); let latest_blockhash = svm.latest_blockhash(); diff --git a/src/lib.rs b/src/lib.rs index 9522cede..791b0bf4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -41,7 +41,7 @@ use solana_sdk::{ transaction_context::{ExecutionRecord, IndexOfAccount, TransactionContext}, }; use solana_system_program::{get_system_account_kind, SystemAccountKind}; -use std::{cell::RefCell, rc::Rc, sync::Arc}; +use std::{cell::RefCell, path::Path, rc::Rc, sync::Arc}; use utils::construct_instructions_account; use crate::{ @@ -274,6 +274,16 @@ impl LiteSVM { .unwrap(); } + pub fn add_program_from_file( + &mut self, + program_id: Pubkey, + path: impl AsRef, + ) -> Result<(), std::io::Error> { + let bytes = std::fs::read(path)?; + self.add_program(program_id, &bytes); + Ok(()) + } + pub fn add_program(&mut self, program_id: Pubkey, program_bytes: &[u8]) { let program_len = program_bytes.len(); let lamports = self.minimum_balance_for_rent_exemption(program_len); diff --git a/tests/fees.rs b/tests/fees.rs index 7616056c..cfb51d25 100644 --- a/tests/fees.rs +++ b/tests/fees.rs @@ -37,12 +37,6 @@ fn test_insufficient_funds_for_rent() { assert!(svm.get_transaction(&signature).is_none()); } -fn read_failure_program() -> Vec { - let mut so_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - so_path.push("test_programs/target/deploy/failure.so"); - std::fs::read(so_path).unwrap() -} - #[test_log::test] fn test_fees_failed_transaction() { let from_keypair = Keypair::new(); @@ -50,7 +44,9 @@ fn test_fees_failed_transaction() { let mut svm = LiteSVM::new(); let program_id = pubkey!("HvrRMSshMx3itvsyWDnWg2E3cy5h57iMaR7oVxSZJDSA"); - svm.add_program(program_id, &read_failure_program()); + let mut so_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + so_path.push("test_programs/target/deploy/failure.so"); + svm.add_program_from_file(program_id, &so_path).unwrap(); let initial_balance = 1_000_000_000; svm.airdrop(&from, initial_balance).unwrap(); let instruction = Instruction {