Zaman Yolculuğu

Surfpool çalışma zamanı üç zaman yolculuğu yardımcısı sunar. Her biri yerel saati mutlak bir hedefe (göreli bir ofset değil) taşır ve testlerin çalışma zamanının gerçekten istenen zamana ulaştığını doğrulayabilmesi için güncellenmiş EpochInfo değerini döndürür.

YardımcıHedefDöndürür
time_travel_to_slot / timeTravelToSlotMutlak slot numarasıYeni absolute_slot ile EpochInfo
time_travel_to_epoch / timeTravelToEpochMutlak epoch numarasıYeni epoch ile EpochInfo
time_travel_to_timestamp / timeTravelToTimestampMilisaniye cinsinden Unix zaman damgasıTahmini slot'u yansıtan EpochInfo

Yalnızca ileri

Zaman yolculuğu saati yalnızca ileri alabilir. Bu yöntemleri geçmişteki bir hedefle çağırmak işlevsizdir — yardımcı mevcut EpochInfo değerini değiştirmeden döndürür.

Bir Slot'a Atla

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);

Bir Epoch'a Atla

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

Bir Unix Zaman Damgasına Atla

Zaman damgasını saniye değil milisaniye cinsinden girin. Çalışma zamanı, o zaman damgasına en yakın slot'u hesaplar.

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

Yaygın Kalıplar

Kilitleme veya Hakediş Penceresini Test Etme

Aşağıdaki örnek bir taslaktır — assertWithdrawFails ve assertWithdrawSucceeds, test paketinizin RPC davranışını doğrulamak için kullandığı istemci tarafı yardımcılar için yer tutuculardır.

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();

Çok Epoch'lu Bir Senaryo Yürütün

Aradaki slot'lar atlanır

Zaman yolculuğu doğrudan hedefe atlar — epoch 1'den epoch 5'e geçmek aradaki slot'ları atlar. Programınızın her ara epoch sınırının tetiklenmesine ihtiyacı varsa (örneğin, epoch başına ödülleri kaydetmek için), time_travel_to_epoch işlevini her epoch için aradaki gerekli işlemlerle birlikte bir kez çağırın.

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

EpochInfo Yapısı

Her iki SDK de şu alanları içeren bir EpochInfo şekilli nesne döndürür:

AlanRustJS
Mutlak slotabsolute_slot: u64absoluteSlot: number
Epoch içindeki slotslot_index: u64slotIndex: number
Epoch başına slot sayısıslots_in_epoch: u64slotsInEpoch: number
Epoch numarasıepoch: u64epoch: number
Blok yüksekliğiblock_height: u64blockHeight: number
İşlem sayısıtransaction_count: Option<u64>transactionCount?: number

Is this page helpful?

İçindekiler

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