Documentación de SolanaLiteSVMTypeScriptReferencia de API

Tiempo y Sysvars

Métodos para manipular el tiempo y acceder a las variables del sistema.

Habilita primero los sysvars con client.svm.withSysvars() antes de acceder a los métodos de sysvar.

Manipulación del Reloj

warpToSlot

warpToSlot(slot: bigint): LiteSVM

Avanza el reloj a un slot específico.

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

Obtiene los valores actuales del sysvar de reloj.

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

Sobreescribe el sysvar de reloj. Obtén el reloj, modifica sus campos y luego escríbelo de nuevo. Úsalo cuando necesites un control preciso sobre múltiples campos del reloj — por ejemplo, para establecer el epoch o la marca de tiempo Unix, lo cual warpToSlot no actualiza.

const clock = client.svm.getClock();
clock.slot = 1000n;
clock.epoch = 10n;
clock.unixTimestamp = 1735689600n;
client.svm.setClock(clock);

warpToSlot solo actualiza slot. Usa setClock cuando tu programa lea epoch o unix_timestamp del sysvar de reloj.

Propiedades del Reloj

PropertyTypeDescription
slotbigintNúmero de slot actual
epochbigintNúmero de epoch actual
unixTimestampbigintMarca de tiempo Unix en segundos
epochStartTimestampbigintInicio del epoch actual
leaderScheduleEpochbigintEpoch del programa de líderes

Rent

getRent

getRent(): Rent

Obtiene el sysvar de 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

Calcula los lamports mínimos necesarios para la exención de 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`);
}

Programación de epoch

getEpochSchedule

getEpochSchedule(): EpochSchedule

Obtén la variable del sistema de programación de 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);

Recompensas de epoch

getEpochRewards

getEpochRewards(): EpochRewards

Obtén la variable del sistema de recompensas de 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
);

Información de slot

getSlotHashes

getSlotHashes(): SlotHash[]

Obtén los hashes de slot recientes.

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

Obtén el historial de slot.

const slotHistory = client.svm.getSlotHistory();
console.log("Next slot:", slotHistory.nextSlot);

getLastRestartSlot / setLastRestartSlot

getLastRestartSlot(): bigint
setLastRestartSlot(slot: bigint): LiteSVM

Obtener o establecer el último slot de reinicio.

const lastRestart = client.svm.getLastRestartSlot();
console.log("Last restart slot:", lastRestart);
client.svm.setLastRestartSlot(500n);

Historial de Staking

getStakeHistory

getStakeHistory(): StakeHistory

Obtener el historial de staking.

const stakeHistory = client.svm.getStakeHistory();
// Returns array of { epoch, entry: { effective, activating, deactivating } }

Pruebas de Lógica Dependiente del Tiempo

Usa warpToSlot para probar el comportamiento del programa dependiente del tiempo:

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?