Huijauskoodit ovat tilamuutoksia, jotka ohittavat normaalin transaktiovirran. Ne suoritetaan välittömästi kuluttamatta lohkohajautusarvoa tai maksamatta maksuja – juuri sitä tarvitset testitilanteen valmisteluun.
Rustissa huijauskoodit sijaitsevat kohdassa Surfnet::cheatcodes(). JS:ssä ne
ovat metodeja suoraan Surfnet-instanssissa.
Rahoita SOL
fundSol / fund_sol asettaa lamport-saldon mille tahansa tilille luoden
tilin, jos sitä ei ole olemassa.
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)])?;
Rahoita tokenit
fundToken / fund_token lyö tokeneita lompakkoon laskemalla associated token
account, luoden sen tarvittaessa ja asettamalla määrän.
Token-2022 -lyöntisopimukset
Oletusarvoisesti fundToken käyttää perinteistä SPL Token Program -ohjelmaa.
Token-2022 -lyöntisopimuksille anna Token-2022-ohjelman tunnus
(TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb) viimeisenä argumenttina.
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:n johtamiseksi ilman rahoitusta käytä getAta / get_ata:
let ata = cheats.get_ata(&wallet, &mint, None);
Aseta mielivaltainen tilin tila
setAccount-metodi kirjoittaa lamportit, omistajan ja raakatavujen datan mille
tahansa tilille yhdellä kutsulla. Rust SDK tarjoaa lisäksi
SetAccount-rakentajan kehittyneemmille kentille, kuten rent_epoch ja
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),)?;
Token Account -kenttien muokkaaminen
setTokenAccount päivittää olemassa olevan token account -tilin lisäkenttiä —
valtuutettu, tila, sulkemisvaltuus ja valtuutettu määrä. Käytä sitä, kun
fundToken yksinään ei riitä.
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())?;
Tilien palauttaminen alkuperäiseen tilaan
resetAccount hylkää kaikki paikalliset muutokset ja hakee tilin uudelleen
ylävirran RPC:ltä. Anna includeOwnedAccounts: true myös nollataksesi kaikki
kohteen omistamat tilit — hyödyllinen, kun nollaat ohjelman ja kaikki sen PDA:t.
Vaatii `remoteRpcUrl` uudelleenhakua varten
Offline-Surfnetissä resetAccount tyhjentää paikallisen kopion, mutta
ylävirran lähdettä ei ole saatavilla. Määritä remoteRpcUrl käynnistyksen
yhteydessä, jotta nollaukset palauttavat ylävirran tilan.
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),)?;
Tilien reaaliaikainen suoratoisto
streamAccount rekisteröi tilin taustakyselyn ylävirran RPC:ltä. Paikallinen
Surfnet-kopio pysyy synkronoituna mainnettiin ilman, että testin tarvitsee tehdä
kyselyitä erikseen. Yhdistä includeOwnedAccounts kanssa, jotta voit
suoratoistaa kaikki ohjelman omistamat PDA:t.
Vaatii `remoteRpcUrl`
streamAccount toimii vain Surfnetissä, joka on käynnistetty
remoteRpcUrl:llä (tai remote_rpc_url Rustissa). Ilman ylävirran RPC:tä ei
ole mitään suoratoistettavaa, ja kutsu palauttaa virheen.
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-rakentajat (Rust)
Rust SDK tarjoaa tyypitetyt rakentajat surfpool_sdk::cheatcodes::builders
-kohdan alta tapauksiin, joissa kätevyysmetodit eivät riitä. Jokainen rakentaja
toteuttaa CheatcodeBuilder -rajapinnan ja suoritetaan
cheats.execute(builder):n kautta.
| 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 |
Koko JS-pintaa varten katso JS-viite. Koko Rust-pintaa varten katso Rust-viite.
Is this page helpful?