airdrop
pub fn airdrop(&mut self, address: &Address, lamports: u64) -> TransactionResult
여기서 TransactionResult은
Result<TransactionMetadata, FailedTransactionMetadata>입니다.
계정에 lamport를 지급합니다. 성공 시 트랜잭션 메타데이터를 반환합니다.
let keypair = Keypair::new();// Option 1: Ignore result if you don't care about tx detailssvm.airdrop(&keypair.pubkey(), 10_000_000_000).unwrap();// Option 2: Check transaction metadatamatch svm.airdrop(&keypair.pubkey(), 10_000_000_000) {Ok(meta) => {println!("Airdrop successful");println!("Compute units: {}", meta.compute_units_consumed);}Err(e) => {println!("Airdrop failed: {:?}", e.err);}}
get_account
pub fn get_account(&self, address: &Address) -> Option<Account>
계정 데이터를 조회합니다.
let account = svm.get_account(&pubkey)?;println!("Lamports: {}", account.lamports);println!("Owner: {}", account.owner);println!("Data length: {}", account.data.len());
set_account
pub fn set_account(&mut self, address: Address, account: Account) -> Result<(), LiteSVMError>
계정 상태를 직접 설정합니다.
use solana_account::Account;svm.set_account(pubkey, Account {lamports: 1_000_000,data: vec![0; 100],owner: program_id,executable: false,rent_epoch: 0,}).unwrap();
get_balance
pub fn get_balance(&self, address: &Address) -> Option<u64>
계정의 lamport 잔액을 조회합니다. 계정이 존재하지 않으면 None를 반환합니다.
// Check if account exists and get balanceif let Some(balance) = svm.get_balance(&pubkey) {println!("Balance: {} lamports", balance);} else {println!("Account doesn't exist");}// Or use unwrap_or for defaultlet balance = svm.get_balance(&pubkey).unwrap_or(0);println!("Balance: {} lamports", balance);
minimum_balance_for_rent_exemption
pub fn minimum_balance_for_rent_exemption(&self, data_len: usize) -> u64
rent 면제에 필요한 최소 lamport를 계산합니다.
let data_len = 100;let min_balance = svm.minimum_balance_for_rent_exemption(data_len);use solana_account::Account;svm.set_account(pubkey, Account {lamports: min_balance,data: vec![0; data_len],owner: program_id,executable: false,rent_epoch: 0,}).unwrap();
성능 최적화 팁
계정 일괄 생성
// Slow - individual operationsfor i in 0..100 {let account = Keypair::new();svm.airdrop(&account.pubkey(), 1_000_000_000).unwrap();}// Fast - batch with set_accountlet accounts: Vec<_> = (0..100).map(|_| {let keypair = Keypair::new();svm.set_account(keypair.pubkey(), Account {lamports: 1_000_000_000,data: vec![],owner: solana_sdk::system_program::id(),executable: false,rent_epoch: 0,}).unwrap();keypair}).collect();
계정 상태 검사
// Before transactionlet before = svm.get_account(&pubkey).unwrap();// Executesvm.send_transaction(tx).unwrap();// After transactionlet after = svm.get_account(&pubkey).unwrap();// Compareassert_ne!(before.lamports, after.lamports);assert_ne!(before.data, after.data);
Is this page helpful?