Aikamatka

Surfpool-ajoympäristö tarjoaa kolme aikamatka-apufunktiota. Jokainen siirtää paikallisen kellon absoluuttiseen kohteeseen (ei suhteelliseen siirtymään) ja palauttaa päivitetyn EpochInfo, jotta testit voivat varmistaa, että ajoympäristö todella saavutti pyydetyn ajan.

HelperKohdePalauttaa
time_travel_to_slot / timeTravelToSlotAbsoluuttinen slot-numeroEpochInfo uudella absolute_slot
time_travel_to_epoch / timeTravelToEpochAbsoluuttinen epoch-numeroEpochInfo uudella epoch
time_travel_to_timestamp / timeTravelToTimestampUnix-aikaleima millisekunteinaEpochInfo vastaa laskettua slotia

Vain eteenpäin

Aikamatka voi siirtää kelloa vain eteenpäin. Näiden metodien kutsuminen menneisyyteen osoittavalla kohteella ei tee mitään — apufunktio palauttaa nykyisen EpochInfo muuttumattomana.

Hyppää slotiin

use surfpool_sdk::Surfnet;
let surfnet = Surfnet::start().await?;
let cheats = surfnet.cheatcodes();
let info = cheats.time_travel_to_slot(1_000_000)?;
assert!(info.absolute_slot >= 1_000_000);

Hyppää epochiin

let info = cheats.time_travel_to_epoch(420)?;
assert_eq!(info.epoch, 420);

Hyppää Unix-aikaleimaan

Anna aikaleima millisekunteina, ei sekunteina. Ajoympäristö laskee lähimmän slotin kyseiselle ajankohdalle.

// 2030-01-01T00:00:00Z
let info = cheats.time_travel_to_timestamp(1_893_456_000_000)?;

Yleisiä käyttötapoja

Testaa lukitusaika tai vesting-ikkuna

Alla oleva esimerkki on luonnos — assertWithdrawFails ja assertWithdrawSucceeds ovat paikkamerkkejä niille asiakaspuolen apufunktioille, joita testipakettisi käyttää RPC-toiminnan varmistamiseen.

import { Surfnet } from "@solana/surfpool";
const surfnet = Surfnet.start();
const beneficiary = Surfnet.newKeypair();
// 1. Set up a vesting account that unlocks at slot 1,000,000.
surfnet.setAccount(/* ...lockup program state... */);
// 2. Verify withdrawal fails before unlock.
await assertWithdrawFails(surfnet.rpcUrl, beneficiary);
// 3. Travel past the unlock slot.
surfnet.timeTravelToSlot(1_000_001);
// 4. Verify withdrawal succeeds.
await assertWithdrawSucceeds(surfnet.rpcUrl, beneficiary);
surfnet.stop();

Aja Moni-Epoch-Skenaario

Väliset slot-yksiköt ohitetaan

Aikamatka hyppää suoraan kohteeseen — siirtyminen epoch 1:stä epoch 5:een ohittaa välissä olevat slot-yksiköt. Jos ohjelmasi tarvitsee jokaisen välissä olevan epoch- rajan laukaistavan (esimerkiksi epoch-kohtaisten palkintojen hyvittämiseksi), kutsu time_travel_to_epoch kerran per epoch tarvittavien transaktioiden kanssa välissä.

for epoch in 2..=5 {
cheats.time_travel_to_epoch(epoch)?;
surfnet.rpc_client().send_transaction(&claim_rewards_tx)?;
}

EpochInfo-rakenne

Molemmat SDK:t palauttavat EpochInfo-muotoisen objektin seuraavilla kentillä:

KenttäRustJS
Absoluuttinen slotabsolute_slot: u64absoluteSlot: number
Slot epochin sisälläslot_index: u64slotIndex: number
Sloteja per epochslots_in_epoch: u64slotsInEpoch: number
Epoch-numeroepoch: u64epoch: number
Lohkokorkeusblock_height: u64blockHeight: number
Transaktioiden määrätransaction_count: Option<u64>transactionCount?: number

Is this page helpful?

Sisällysluettelo

Muokkaa sivua
© 2026 Solana Foundation. Kaikki oikeudet pidätetään.