Cheatcode'lar

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.

BuilderConstructorCommon setters
SetAccountnew(address: Pubkey)lamports, data, owner, rent_epoch, executable
SetTokenAccountnew(owner: Pubkey, mint: Pubkey)amount, delegate, clear_delegate, state, delegated_amount, close_authority, clear_close_authority, token_program
ResetAccountnew(address: Pubkey)include_owned_accounts(bool)
StreamAccountnew(address: Pubkey)include_owned_accounts(bool)
DeployProgramnew(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?

İçindekiler

Sayfayı Düzenle
© 2026 Solana Vakfı. Tüm hakları saklıdır.