API Reference
Time & Sysvars
Clock manipulation and sysvar access in TypeScript
Time & Sysvars
Methods for manipulating time and accessing system variables.
Enable sysvars first with client.svm.withSysvars() before accessing sysvar methods.
Clock Manipulation
warpToSlot
warpToSlot(slot: bigint): LiteSVMAdvance the clock to a specific 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(): ClockGet the current clock sysvar values.
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);Clock Properties
| Property | Type | Description |
|---|---|---|
slot | bigint | Current slot number |
epoch | bigint | Current epoch number |
unixTimestamp | bigint | Unix timestamp in seconds |
epochStartTimestamp | bigint | Start of current epoch |
leaderScheduleEpoch | bigint | Leader schedule epoch |
Rent
getRent
getRent(): RentGet the rent sysvar.
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): bigintCalculate the minimum lamports needed for rent exemption.
// 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 Schedule
getEpochSchedule
getEpochSchedule(): EpochScheduleGet the epoch schedule sysvar.
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 Rewards
getEpochRewards
getEpochRewards(): EpochRewardsGet the epoch rewards sysvar.
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 Information
getSlotHashes
getSlotHashes(): SlotHash[]Get recent slot hashes.
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(): SlotHistoryGet the slot history.
const slotHistory = client.svm.getSlotHistory();
console.log('Next slot:', slotHistory.nextSlot);getLastRestartSlot / setLastRestartSlot
getLastRestartSlot(): bigint
setLastRestartSlot(slot: bigint): LiteSVMGet or set the last restart slot.
const lastRestart = client.svm.getLastRestartSlot();
console.log('Last restart slot:', lastRestart);
client.svm.setLastRestartSlot(500n);Stake History
getStakeHistory
getStakeHistory(): StakeHistoryGet the stake history.
const stakeHistory = client.svm.getStakeHistory();
// Returns array of { epoch, entry: { effective, activating, deactivating } }Testing Time-Dependent Logic
Use warpToSlot to test time-dependent program behavior:
async function testTimeLockedVault() {
const client = createEmptyClient().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 ...
}