Sysvar Cluster Data
Renec exposes a variety of cluster state data to programs via
sysvar
accounts. These accounts are populated at
known addresses published along with the account layouts in the
solana-program
crate,
and outlined below.
There are two ways for a program to access a sysvar.
The first is to query the sysvar at runtime via the sysvar's get()
function:
The following sysvars support get
:
- Clock
- EpochSchedule
- Fees
- Rent
The second is to pass the sysvar to the program as an account by including its address as one of the accounts in the Instruction
and then deserializing the data during execution. Access to sysvars accounts is
always readonly.
The first method is more efficient and does not require that the sysvar account be passed to the program, or specified in the Instruction
the program is processing.
#
ClockThe Clock sysvar contains data on cluster time, including the current slot, epoch, and estimated wall-clock Unix timestamp. It is updated every slot.
Address:
SysvarC1ock11111111111111111111111111111111
Layout: Clock
Fields:
slot
: the current slotepoch_start_timestamp
: the Unix timestamp of the first slot in this epoch. In the first slot of an epoch, this timestamp is identical to theunix_timestamp
(below).epoch
: the current epochleader_schedule_epoch
: the most recent epoch for which the leader schedule has already been generatedunix_timestamp
: the Unix timestamp of this slot.
Each slot has an estimated duration based on Proof of History. But in reality, slots may elapse faster and slower than this estimate. As a result, the Unix timestamp of a slot is generated based on oracle input from voting validators. This timestamp is calculated as the stake-weighted median of timestamp estimates provided by votes, bounded by the expected time elapsed since the start of the epoch.
More explicitly: for each slot, the most recent vote timestamp provided by each validator is used to generate a timestamp estimate for the current slot (the elapsed slots since the vote timestamp are assumed to be Bank::ns_per_slot). Each timestamp estimate is associated with the stake delegated to that vote account to create a distribution of timestamps by stake. The median timestamp is used as the
unix_timestamp
, unless the elapsed time since theepoch_start_timestamp
has deviated from the expected elapsed time by more than 25%.
#
EpochScheduleThe EpochSchedule sysvar contains epoch scheduling constants that are set in
genesis, and enables calculating the number of slots in a given epoch, the epoch
for a given slot, etc. (Note: the epoch schedule is distinct from the leader schedule
)
- Address:
SysvarEpochSchedu1e111111111111111111111111
- Layout: EpochSchedule
#
FeesThe Fees sysvar contains the fee calculator for the current slot. It is updated every slot, based on the fee-rate governor.
- Address:
SysvarFees111111111111111111111111111111111
- Layout: Fees
#
InstructionsThe Instructions sysvar contains the serialized instructions in a Message while that Message is being processed. This allows program instructions to reference other instructions in the same transaction. Read more information on instruction introspection.
- Address:
Sysvar1nstructions1111111111111111111111111
- Layout: Instructions
#
RecentBlockhashesThe RecentBlockhashes sysvar contains the active recent blockhashes as well as their associated fee calculators. It is updated every slot. Entries are ordered by descending block height, so the first entry holds the most recent block hash, and the last entry holds an old block hash.
- Address:
SysvarRecentB1ockHashes11111111111111111111
- Layout: RecentBlockhashes
#
RentThe Rent sysvar contains the rental rate. Currently, the rate is static and set in genesis. The Rent burn percentage is modified by manual feature activation.
- Address:
SysvarRent111111111111111111111111111111111
- Layout: Rent
#
SlotHashesThe SlotHashes sysvar contains the most recent hashes of the slot's parent banks. It is updated every slot.
- Address:
SysvarS1otHashes111111111111111111111111111
- Layout: SlotHashes
#
SlotHistoryThe SlotHistory sysvar contains a bitvector of slots present over the last epoch. It is updated every slot.
- Address:
SysvarS1otHistory11111111111111111111111111
- Layout: SlotHistory
#
StakeHistoryThe StakeHistory sysvar contains the history of cluster-wide stake activations and de-activations per epoch. It is updated at the start of every epoch.
- Address:
SysvarStakeHistory1111111111111111111111111
- Layout: StakeHistory