Cheatcodes adalah mutasi status yang melewati alur transaksi normal. Cheatcodes berjalan seketika tanpa menggunakan blockhash atau membayar biaya, yang merupakan hal yang tepat untuk persiapan pengujian.
Di Rust, cheatcodes berada di bawah Surfnet::cheatcodes(). Di JS, cheatcodes
adalah metode langsung pada instance Surfnet.
Dana SOL
fundSol / fund_sol mengatur saldo lamport pada akun mana pun, membuat akun
jika belum ada.
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)])?;
Dana Token
fundToken / fund_token mencetak token ke dompet dengan menghitung token
account terkait, membuatnya jika diperlukan, dan menetapkan jumlahnya.
Mint Token-2022
Secara default fundToken menggunakan Token Program SPL klasik. Untuk mint
Token-2022, berikan ID program Token-2022
(TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb) sebagai argumen terakhir.
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)?;
Untuk menurunkan ATA tanpa pendanaan, gunakan getAta / get_ata:
let ata = cheats.get_ata(&wallet, &mint, None);
Atur Status Akun Sembarang
Metode setAccount menulis lamport, pemilik, dan byte data mentah untuk akun
mana pun dalam satu panggilan. Rust SDK juga mengekspos builder SetAccount
untuk kolom yang lebih canggih seperti rent_epoch dan executable.
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),)?;
Mutasi Bidang Token Account
setTokenAccount memperbarui bidang lanjutan dari token account yang sudah ada
— delegasi, status, otoritas penutupan, jumlah yang didelegasikan. Gunakan ini
ketika fundToken saja tidak cukup.
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())?;
Reset Akun ke Status Upstream
resetAccount membuang semua mutasi lokal dan mengambil ulang akun dari RPC
upstream. Berikan includeOwnedAccounts: true untuk juga mereset setiap akun
yang dimiliki oleh target — berguna saat mereset program beserta seluruh
PDA-nya.
Membutuhkan `remoteRpcUrl` untuk mengambil ulang
Pada Surfnet offline, resetAccount menghapus salinan lokal tetapi tidak
memiliki upstream untuk diambil. Konfigurasikan remoteRpcUrl saat startup
agar reset memulihkan status upstream.
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),)?;
Streaming Akun Secara Langsung
streamAccount mendaftarkan akun untuk polling latar belakang dari RPC
upstream. Salinan lokal Surfnet tetap tersinkronisasi dengan mainnet tanpa
pengujian harus melakukan polling secara eksplisit. Kombinasikan dengan
includeOwnedAccounts untuk melakukan streaming setiap PDA yang dimiliki oleh
suatu program.
Membutuhkan `remoteRpcUrl`
streamAccount hanya berfungsi pada Surfnet yang dijalankan dengan
remoteRpcUrl (atau remote_rpc_url di Rust). Tanpa RPC upstream tidak ada
yang bisa di-streaming dan panggilan akan mengembalikan error.
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))?;
Cheatcode Builders (Rust)
Rust SDK mengekspos typed builders di bawah surfpool_sdk::cheatcodes::builders
untuk kasus di mana metode kenyamanan tidak mencukupi. Setiap builder
mengimplementasikan trait CheatcodeBuilder dan dieksekusi melalui
cheats.execute(builder).
| 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 |
Untuk tampilan lengkap JS, lihat Referensi JS. Untuk tampilan lengkap Rust, lihat Referensi Rust.
Is this page helpful?