وثائق سولاناLiteSVMTypeScriptمرجع API

الوقت ومتغيرات النظام

طرق للتحكم في الوقت والوصول إلى متغيرات النظام.

قم بتفعيل متغيرات النظام أولاً باستخدام client.svm.withSysvars() قبل الوصول إلى طرق متغيرات النظام.

التحكم في الساعة

warpToSlot

warpToSlot(slot: bigint): LiteSVM

تقديم الساعة إلى slot محدد.

client.svm.withSysvars();
// Check current slot
const before = client.svm.getClock();
console.log("Current slot:", before.slot);
// Warp forward
client.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 من متغير نظام الساعة.

خصائص الساعة

الخاصيةالنوعالوصف
slotbigintرقم slot الحالي
epochbigintرقم epoch الحالي
unixTimestampbigintالطابع الزمني Unix بالثواني
epochStartTimestampbigintبداية epoch الحالي
leaderScheduleEpochbigintepoch جدول القادة

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 sizes
for (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(): bigint
setLastRestartSlot(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 slot
client.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?