npm npm-downloads
code-style-prettier

@solana/sysvars

This package contains types and helpers for fetching and decoding Solana sysvars. It can be used standalone, but it is also exported as part of the Solana JavaScript SDK @solana/web3.js@next.

More information about the available sysvars on Solana can be found in the docs at https://docs.solanalabs.com/runtime/sysvars.

All currently available sysvars can be retrieved and/or decoded using this library.

This package offers a simple API for working with sysvars.

One can fetch an encoded sysvar account using an RPC client.

const maybeEncodedClock = await fetchEncodedSysvarAccount(rpc, SYSVAR_CLOCK_ADDRESS);
maybeEncodedClock satisfies MaybeEncodedAccount<'SysvarC1ock11111111111111111111111111111111'>;

One can also attempt to fetch a JSON-parsed sysvar account.

const maybeJsonParsedClock = await fetchJsonParsedSysvarAccount(rpc, SYSVAR_CLOCK_ADDRESS);
maybeJsonParsedClock satisfies
| MaybeAccount<JsonParsedSysvarAccount, 'SysvarC1ock11111111111111111111111111111111'>
| MaybeEncodedAccount<'SysvarC1ock11111111111111111111111111111111'>;

Each sysvar within the library ships with its own codec for deserializing the account data.

You can pair this codec with the helpers from @solana/accounts to assert and decode sysvar account data.

// Fetch.
const clock = await fetchEncodedSysvarAccount(rpc, SYSVAR_CLOCK_ADDRESS);
clock satisfies MaybeEncodedAccount<'SysvarC1ock11111111111111111111111111111111'>;

// Assert.
assertAccountExists(clock);
clock satisfies EncodedAccount<'SysvarC1ock11111111111111111111111111111111'>;

// Decode.
const decodedClock = decodeAccount(clock, getSysvarClockDecoder());
decodedClock satisfies Account<SysvarClock, 'SysvarC1ock11111111111111111111111111111111'>;

Each supported sysvar also ships with its own fetch-and-decode function to perform the steps above and return the decoded sysvar data.

const clock: SysvarClock = await fetchSysvarClock(rpc);

This package supports the following Solana sysvars:

The Instructions sysvar is also supported but does not exist on-chain, therefore has no corresponding module or codec.

Modules

<internal>

Type Aliases

SysvarClock
SysvarEpochRewards
SysvarEpochSchedule
SysvarFees
SysvarLastRestartSlot
SysvarRecentBlockhashes
SysvarRent
SysvarSlotHashes
SysvarSlotHistory
SysvarStakeHistory

Variables

SYSVAR_CLOCK_ADDRESS
SYSVAR_EPOCH_REWARDS_ADDRESS
SYSVAR_EPOCH_SCHEDULE_ADDRESS
SYSVAR_FEES_ADDRESS
SYSVAR_INSTRUCTIONS_ADDRESS
SYSVAR_LAST_RESTART_SLOT_ADDRESS
SYSVAR_RECENT_BLOCKHASHES_ADDRESS
SYSVAR_RENT_ADDRESS
SYSVAR_SLOT_HASHES_ADDRESS
SYSVAR_SLOT_HISTORY_ADDRESS
SYSVAR_STAKE_HISTORY_ADDRESS

Functions

fetchEncodedSysvarAccount
fetchJsonParsedSysvarAccount
fetchSysvarClock
fetchSysvarEpochRewards
fetchSysvarEpochSchedule
fetchSysvarFees
fetchSysvarLastRestartSlot
fetchSysvarRecentBlockhashes
fetchSysvarRent
fetchSysvarSlotHashes
fetchSysvarSlotHistory
fetchSysvarStakeHistory
getSysvarClockCodec
getSysvarClockDecoder
getSysvarClockEncoder
getSysvarEpochRewardsCodec
getSysvarEpochRewardsDecoder
getSysvarEpochRewardsEncoder
getSysvarEpochScheduleCodec
getSysvarEpochScheduleDecoder
getSysvarEpochScheduleEncoder
getSysvarFeesCodec
getSysvarFeesDecoder
getSysvarFeesEncoder
getSysvarLastRestartSlotCodec
getSysvarLastRestartSlotDecoder
getSysvarLastRestartSlotEncoder
getSysvarRecentBlockhashesCodec
getSysvarRecentBlockhashesDecoder
getSysvarRecentBlockhashesEncoder
getSysvarRentCodec
getSysvarRentDecoder
getSysvarRentEncoder
getSysvarSlotHashesCodec
getSysvarSlotHashesDecoder
getSysvarSlotHashesEncoder
getSysvarSlotHistoryCodec
getSysvarSlotHistoryDecoder
getSysvarSlotHistoryEncoder
getSysvarStakeHistoryCodec
getSysvarStakeHistoryDecoder
getSysvarStakeHistoryEncoder