طرق للتحكم في الوقت والوصول إلى متغيرات النظام.
قم بتفعيل متغيرات النظام أولاً باستخدام client.svm.withSysvars() قبل الوصول
إلى طرق متغيرات النظام.
التحكم في الساعة
warpToSlot
warpToSlot(slot: bigint): LiteSVM
تقديم الساعة إلى slot محدد.
client.svm.withSysvars();// Check current slotconst before = client.svm.getClock();console.log("Current slot:", before.slot);// Warp forwardclient.svm.warpToSlot(10000n);const after = client.svm.getClock();console.log("New slot:", after.slot);
getClock
getClock(): Clock
الحصول على قيم الساعة الحالية لمتغير النظام.
const clock = client.svm.getClock();console.log("Slot:", clock.slot);console.log("Epoch:", clock.epoch);console.log("Unix timestamp:", clock.unixTimestamp);console.log("Epoch start timestamp:", clock.epochStartTimestamp);console.log("Leader schedule epoch:", clock.leaderScheduleEpoch);
setClock
setClock(clock: Clock): LiteSVM
استبدال متغير نظام الساعة. احصل على الساعة، عدّل حقولها، ثم اكتبها من جديد.
استخدم هذا عندما تحتاج إلى تحكم دقيق في حقول الساعة المتعددة — على سبيل المثال،
تعيين epoch أو الطابع الزمني Unix، وهو ما لا تقوم به warpToSlot.
const clock = client.svm.getClock();clock.slot = 1000n;clock.epoch = 10n;clock.unixTimestamp = 1735689600n;client.svm.setClock(clock);
warpToSlot تُحدّث slot فقط. استخدم setClock عندما يقرأ برنامجك epoch
أو unix_timestamp من متغير نظام الساعة.
خصائص الساعة
| الخاصية | النوع | الوصف |
|---|---|---|
slot | bigint | رقم slot الحالي |
epoch | bigint | رقم epoch الحالي |
unixTimestamp | bigint | الطابع الزمني Unix بالثواني |
epochStartTimestamp | bigint | بداية epoch الحالي |
leaderScheduleEpoch | bigint | epoch جدول القادة |
Rent
getRent
getRent(): Rent
الحصول على متغير نظام rent.
const rent = client.svm.getRent();console.log("Lamports per byte-year:", rent.lamportsPerByteYear);console.log("Exemption threshold:", rent.exemptionThreshold);console.log("Burn percent:", rent.burnPercent);
minimumBalanceForRentExemption
minimumBalanceForRentExemption(dataLen: bigint): bigint
احسب الحد الأدنى من lamport المطلوبة للإعفاء من rent.
// Calculate for different data sizesfor (const size of [0n, 100n, 1000n]) {const min = client.svm.minimumBalanceForRentExemption(size);console.log(`${size} bytes: ${min} lamports`);}
جدول epoch
getEpochSchedule
getEpochSchedule(): EpochSchedule
الحصول على متغير النظام الخاص بجدول epoch.
const epochSchedule = client.svm.getEpochSchedule();console.log("Slots per epoch:", epochSchedule.slotsPerEpoch);console.log("Leader schedule slot offset:",epochSchedule.leaderScheduleSlotOffset);console.log("Warmup:", epochSchedule.warmup);console.log("First normal epoch:", epochSchedule.firstNormalEpoch);console.log("First normal slot:", epochSchedule.firstNormalSlot);
مكافآت epoch
getEpochRewards
getEpochRewards(): EpochRewards
الحصول على متغير النظام الخاص بمكافآت epoch.
const rewards = client.svm.getEpochRewards();console.log("Active:", rewards.active);console.log("Total rewards:", rewards.totalRewards);console.log("Distributed rewards:", rewards.distributedRewards);console.log("Total points:", rewards.totalPoints);console.log("Num partitions:", rewards.numPartitions);console.log("Distribution starting block height:",rewards.distributionStartingBlockHeight);
معلومات slot
getSlotHashes
getSlotHashes(): SlotHash[]
الحصول على تجزئات slot الأخيرة.
const slotHashes = client.svm.getSlotHashes();console.log("Slot hashes count:", slotHashes.length);if (slotHashes.length > 0) {console.log("First hash:", {slot: slotHashes[0].slot,hash: slotHashes[0].hash});}
getSlotHistory
getSlotHistory(): SlotHistory
الحصول على سجل slot.
const slotHistory = client.svm.getSlotHistory();console.log("Next slot:", slotHistory.nextSlot);
getLastRestartSlot / setLastRestartSlot
getLastRestartSlot(): bigintsetLastRestartSlot(slot: bigint): LiteSVM
احصل على آخر slot للإعادة التشغيل أو قم بتعيينه.
const lastRestart = client.svm.getLastRestartSlot();console.log("Last restart slot:", lastRestart);client.svm.setLastRestartSlot(500n);
سجل الحصص
getStakeHistory
getStakeHistory(): StakeHistory
احصل على سجل الحصص.
const stakeHistory = client.svm.getStakeHistory();// Returns array of { epoch, entry: { effective, activating, deactivating } }
اختبار المنطق المعتمد على الوقت
استخدم warpToSlot لاختبار سلوك البرنامج المعتمد على الوقت:
import { createClient, generateKeyPairSigner } from "@solana/kit";import { litesvm } from "@solana/kit-plugin-litesvm";import { signer } from "@solana/kit-plugin-signer";async function testTimeLockedVault() {const mySigner = await generateKeyPairSigner();const client = createClient().use(signer(mySigner)).use(litesvm());client.svm.withSysvars();const unlockSlot = 10000n;// Setup: Create time-locked account// ... set up your account state ...// Test 1: Try to withdraw before unlock (should fail)const beforeClock = client.svm.getClock();console.log("Current slot:", beforeClock.slot);// ... attempt withdrawal, expect failure ...// Warp time forward past unlock slotclient.svm.warpToSlot(unlockSlot + 1n);// Test 2: Try to withdraw after unlock (should succeed)const afterClock = client.svm.getClock();console.log("New slot:", afterClock.slot);// ... attempt withdrawal, expect success ...}
Is this page helpful?