Runtime Surfpool menyediakan tiga helper perjalanan waktu. Masing-masing
memindahkan jam lokal ke target absolut (bukan offset relatif) dan mengembalikan
EpochInfo yang telah diperbarui sehingga pengujian dapat memverifikasi bahwa
runtime benar-benar mencapai waktu yang diminta.
| Helper | Target | Mengembalikan |
|---|---|---|
time_travel_to_slot / timeTravelToSlot | Nomor slot absolut | EpochInfo dengan absolute_slot baru |
time_travel_to_epoch / timeTravelToEpoch | Nomor epoch absolut | EpochInfo dengan epoch baru |
time_travel_to_timestamp / timeTravelToTimestamp | Stempel waktu Unix dalam milidetik | EpochInfo yang mencerminkan slot yang tersirat |
Hanya maju
Perjalanan waktu hanya dapat memajukan jam. Memanggil metode ini dengan target
di masa lalu tidak akan berpengaruh — helper mengembalikan EpochInfo saat
ini tanpa perubahan.
Lompat Ke Slot
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);
Lompat Ke Epoch
let info = cheats.time_travel_to_epoch(420)?;assert_eq!(info.epoch, 420);
Lompat Ke Stempel Waktu Unix
Masukkan stempel waktu dalam milidetik, bukan detik. Runtime akan menghitung slot terdekat pada stempel waktu tersebut.
// 2030-01-01T00:00:00Zlet info = cheats.time_travel_to_timestamp(1_893_456_000_000)?;
Pola Umum
Uji Lockup atau Jendela Vesting
Contoh di bawah ini hanyalah sketsa — assertWithdrawFails dan
assertWithdrawSucceeds adalah placeholder untuk helper sisi klien apa pun yang
digunakan layanan pengujian Anda untuk memverifikasi perilaku RPC.
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();
Jalankan Skenario Multi-Epoch
Slot perantara dilewati
Perjalanan waktu langsung melompat ke target — berpindah dari epoch 1 ke epoch
5 akan melewati slot-slot di antaranya. Jika program Anda membutuhkan setiap
batas epoch perantara untuk dieksekusi (misalnya, untuk mengkredit hadiah
per-epoch), panggil time_travel_to_epoch sekali per epoch dengan transaksi
yang diperlukan di antaranya.
for epoch in 2..=5 {cheats.time_travel_to_epoch(epoch)?;surfnet.rpc_client().send_transaction(&claim_rewards_tx)?;}
Bentuk EpochInfo
Kedua SDK mengembalikan objek berbentuk EpochInfo dengan field-field berikut:
| Field | Rust | JS |
|---|---|---|
| Slot absolut | absolute_slot: u64 | absoluteSlot: number |
| Slot dalam epoch | slot_index: u64 | slotIndex: number |
| Slot per epoch | slots_in_epoch: u64 | slotsInEpoch: number |
| Nomor epoch | epoch: u64 | epoch: number |
| Tinggi blok | block_height: u64 | blockHeight: number |
| Jumlah transaksi | transaction_count: Option<u64> | transactionCount?: number |
Is this page helpful?