Cheatcode'lar, normal işlem akışını atlayan durum mutasyonlarıdır. Bir blockhash tüketmeden veya ücret ödemeden anında çalışırlar; bu da onları test kurulumu için ideal hale getirir.
Rust'ta cheatcode'lar Surfnet::cheatcodes() altında yer alır. JS'de ise
doğrudan Surfnet örneği üzerindeki metotlardır.
SOL Fonlama
fundSol / fund_sol, herhangi bir hesaptaki lamport bakiyesini ayarlar; hesap
mevcut değilse oluşturur.
use surfpool_sdk::{Pubkey, Surfnet};let surfnet = Surfnet::start().await?;let cheats = surfnet.cheatcodes();let wallet = Pubkey::new_unique();cheats.fund_sol(&wallet, 1_000_000_000)?;// Fund several accounts in one call.let bob = Pubkey::new_unique();let carol = Pubkey::new_unique();cheats.fund_sol_many(&[(&bob, 2_000_000_000), (&carol, 3_000_000_000)])?;
Token Fonlama
fundToken / fund_token, ilişkili token account'ı hesaplayarak bir cüzdana
token basar; gerekirse hesabı oluşturur ve miktarı ayarlar.
Token-2022 mint'leri
Varsayılan olarak fundToken klasik SPL Token program'ı kullanır. Token-2022
mint'leri için son argüman olarak Token-2022 program ID'sini
(TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb) geçirin.
use surfpool_sdk::{Pubkey, Surfnet};let surfnet = Surfnet::start().await?;let cheats = surfnet.cheatcodes();let wallet = Pubkey::new_unique();let mint: Pubkey = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v".parse().unwrap();// Classic SPL Token mint.cheats.fund_token(&wallet, &mint, 5_000_000, None)?;// Token-2022 mint — pass the program id explicitly.let token_2022: Pubkey = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb".parse().unwrap();cheats.fund_token(&wallet, &mint, 5_000_000, Some(&token_2022))?;// Fund many wallets with the same mint.let mob = vec![Pubkey::new_unique(), Pubkey::new_unique()];cheats.fund_token_many(&mob.iter().collect::<Vec<_>>(), &mint, 1_000_000, None)?;
ATA'yı fonlamadan türetmek için getAta / get_ata kullanın:
let ata = cheats.get_ata(&wallet, &mint, None);
Rastgele Hesap Durumu Ayarlama
setAccount metodu, herhangi bir hesap için lamport, sahip ve ham veri
baytlarını tek bir çağrıda yazar. Rust SDK ayrıca rent_epoch ve executable
gibi daha gelişmiş alanlar için SetAccount oluşturucusunu da sunar.
use surfpool_sdk::cheatcodes::builders::SetAccount;use surfpool_sdk::{Pubkey, Surfnet};let surfnet = Surfnet::start().await?;let cheats = surfnet.cheatcodes();let address = Pubkey::new_unique();let owner = Pubkey::new_unique();// Direct method.cheats.set_account(&address, 500_000, &[1, 2, 3], &owner)?;// Builder when you need finer control.cheats.execute(SetAccount::new(address).lamports(500_000).owner(owner).data(vec![1, 2, 3]).rent_epoch(0).executable(false),)?;
Token Account Alanlarını Değiştir
setTokenAccount, mevcut bir token account'ın gelişmiş alanlarını günceller —
temsilci, durum, kapatma yetkisi, devredilen miktar. Yalnızca fundToken
yetmediğinde kullanın.
use surfpool_sdk::cheatcodes::builders::SetTokenAccount;use surfpool_sdk::{Pubkey, Surfnet};let cheats = Surfnet::start().await?.cheatcodes();let owner = Pubkey::new_unique();let mint: Pubkey = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v".parse()?;let delegate = Pubkey::new_unique();cheats.execute(SetTokenAccount::new(owner, mint).amount(2_000_000).delegate(delegate).delegated_amount(500_000).state("initialized"),)?;// Later: clear the delegation.cheats.execute(SetTokenAccount::new(owner, mint).clear_delegate())?;
Hesapları Başlangıç Durumuna Sıfırla
resetAccount yerel değişiklikleri iptal eder ve hesabı üst akış RPC'sinden
yeniden çeker. Her hesabı sıfırlamak için includeOwnedAccounts: true
parametresini geçirin — hedef tarafından sahip olunan tüm PDA'larla birlikte bir
programı sıfırlarken kullanışlıdır.
Yeniden çekmek için `remoteRpcUrl` gerekir
Çevrimdışı bir Surfnet'te resetAccount yerel kopyayı temizler ancak üst
akışa erişemez. Sıfırlamaların başlangıç durumunu geri yüklemesi için
başlangıçta remoteRpcUrl yapılandırın.
use surfpool_sdk::cheatcodes::builders::ResetAccount;use surfpool_sdk::{Pubkey, Surfnet};let cheats = Surfnet::start().await?.cheatcodes();let token_program: Pubkey = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA".parse()?;cheats.execute(ResetAccount::new(token_program).include_owned_accounts(true),)?;
Hesapları Canlı Olarak İzle
streamAccount bir hesabı üst akış RPC'sinden arka planda periyodik sorgulama
için kaydeder. Yerel Surfnet kopyası, testin açıkça sorgulama yapmasına gerek
kalmadan mainnet ile senkronize kalır. Bir programa ait her PDA'yı izlemek için
includeOwnedAccounts ile birleştirin.
`remoteRpcUrl` gerektirir
streamAccount yalnızca remoteRpcUrl (veya Rust'ta remote_rpc_url) ile
başlatılmış bir Surfnet'te çalışır. Üst akış RPC'si olmadan izlenecek bir
kaynak yoktur ve çağrı hata döndürür.
use surfpool_sdk::cheatcodes::builders::StreamAccount;use surfpool_sdk::{Pubkey, Surfnet};let cheats = Surfnet::builder().remote_rpc_url("https://api.mainnet-beta.solana.com").start().await?.cheatcodes();let oracle: Pubkey = "H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG".parse()?;cheats.execute(StreamAccount::new(oracle).include_owned_accounts(false))?;
Hile Kodu Oluşturucular (Rust)
Rust SDK, kolaylık metotlarının yeterli olmadığı durumlar için
surfpool_sdk::cheatcodes::builders altında tipli oluşturucular sunar. Her
oluşturucu CheatcodeBuilder özelliğini uygular ve cheats.execute(builder)
aracılığıyla çalıştırılır.
| Builder | Constructor | Common setters |
|---|---|---|
SetAccount | new(address: Pubkey) | lamports, data, owner, rent_epoch, executable |
SetTokenAccount | new(owner: Pubkey, mint: Pubkey) | amount, delegate, clear_delegate, state, delegated_amount, close_authority, clear_close_authority, token_program |
ResetAccount | new(address: Pubkey) | include_owned_accounts(bool) |
StreamAccount | new(address: Pubkey) | include_owned_accounts(bool) |
DeployProgram | new(program_id: Pubkey), from_keypair_path(path) | so_path, so_bytes, idl_path |
Tam JS yüzeyi için bkz. JS Referansı. Tam Rust yüzeyi için bkz. Rust Referansı.
Is this page helpful?