Documentação SolanaLiteSVMTypeScriptReferência da API

Tempo & Sysvars

Métodos para manipular o tempo e acessar variáveis do sistema.

Ative os sysvars primeiro com client.svm.withSysvars() antes de acessar os métodos de sysvar.

Manipulação de Clock

warpToSlot

warpToSlot(slot: bigint): LiteSVM

Avança o clock para um 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

Obtém os valores atuais do sysvar de 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

Sobrescreve o sysvar de clock. Obtenha o clock, modifique seus campos e escreva-o de volta. Use isso quando precisar de controle preciso sobre múltiplos campos do clock — por exemplo, definindo o epoch ou o timestamp Unix, que warpToSlot não atualiza.

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

warpToSlot atualiza apenas slot. Use setClock quando seu programa ler epoch ou unix_timestamp do sysvar Clock.

Propriedades do Clock

PropertyTypeDescription
slotbigintNúmero do slot atual
epochbigintNúmero do epoch atual
unixTimestampbigintTimestamp Unix em segundos
epochStartTimestampbigintInício do epoch atual
leaderScheduleEpochbigintEpoch do cronograma de líderes

Rent

getRent

getRent(): Rent

Obtém o 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

Calcule o mínimo de lamports necessários para isenção 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`);
}

Agendamento de Epoch

getEpochSchedule

getEpochSchedule(): EpochSchedule

Obtenha a sysvar de agendamento 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

Obtenha a sysvar 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
);

Informações de Slot

getSlotHashes

getSlotHashes(): SlotHash[]

Obtenha os hashes de slot recentes.

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

Obtenha o histórico de slot.

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

getLastRestartSlot / setLastRestartSlot

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

Obter ou definir o último slot de reinicialização.

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

Histórico de Stake

getStakeHistory

getStakeHistory(): StakeHistory

Obter o histórico de stake.

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

Testando Lógica Dependente de Tempo

Use warpToSlot para testar o comportamento do programa dependente de tempo:

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?

© 2026 Fundação Solana. Todos os direitos reservados.