Line data Source code
1 : #ifndef HEADER_fd_src_flamenco_runtime_sysvar_fd_clock_h 2 : #define HEADER_fd_src_flamenco_runtime_sysvar_fd_clock_h 3 : 4 : /* The clock sysvar provides an approximate measure of network time. */ 5 : 6 : #include "fd_sysvar_base.h" 7 : #include "../../types/fd_types.h" 8 : 9 : /* https://github.com/solana-labs/solana/blob/8f2c8b8388a495d2728909e30460aa40dcc5d733/sdk/program/src/clock.rs#L10 */ 10 : #define FD_SYSVAR_CLOCK_DEFAULT_TICKS_PER_SECOND ( 160UL ) 11 0 : #define FD_SYSVAR_CLOCK_DEFAULT_HASHES_PER_TICK (12500UL) 12 : 13 : /* FD_SYSVAR_CLOCK_STAKE_WEIGHTS_MAX specifies the max number of stake 14 : weights processed in a clock update. */ 15 : 16 : #define FD_SYSVAR_CLOCK_STAKE_WEIGHTS_MAX (10240UL) 17 : 18 : FD_PROTOTYPES_BEGIN 19 : 20 : /* The clock sysvar provides an approximate measure of network time. */ 21 : 22 : /* fd_sysvar_clock_init initializes the sysvar account to genesis state. */ 23 : 24 : void 25 : fd_sysvar_clock_init( fd_exec_slot_ctx_t * slot_ctx ); 26 : 27 : /* fd_sysvar_clock_update updates the clock sysvar account. Runs 28 : fd_calculate_stake_weighted_timestamp under the hood. Should be 29 : called at the start of every slot before execution commences. 30 : Crashes the process with FD_LOG_ERR on failure. */ 31 : 32 : void 33 : fd_sysvar_clock_update( fd_exec_slot_ctx_t * slot_ctx, 34 : fd_spad_t * spad ); 35 : 36 : /* Writes the current value of the clock sysvar to funk. */ 37 : 38 : void 39 : fd_sysvar_clock_write( fd_exec_slot_ctx_t * slot_ctx, 40 : fd_sol_sysvar_clock_t * clock ) ; 41 : 42 : /* fd_sysvar_clock_read reads the current value of the rent sysvar from 43 : funk. If the account doesn't exist in funk or if the account 44 : has zero lamports, this function returns NULL. */ 45 : 46 : fd_sol_sysvar_clock_t * 47 : fd_sysvar_clock_read( fd_funk_t * funk, 48 : fd_funk_txn_t * funk_txn, 49 : fd_sol_sysvar_clock_t * clock ); 50 : 51 : /* fd_calculate_stake_weighted_timestamp calculates a timestamp 52 : estimate. Does not modify the slot context. Walks all cached vote 53 : accounts (from the "bank") and calculates a unix timestamp estimate. 54 : The estimate is stored into *result_timestamp. spad is used for 55 : scratch allocations (allocates a treap of size FD_SYSVAR_CLOCK_STAKE_WEIGHTS_MAX). 56 : Crashes the process with FD_LOG_ERR on failure (e.g. too many vote 57 : accounts). */ 58 : 59 : void 60 : fd_calculate_stake_weighted_timestamp( fd_exec_slot_ctx_t * slot_ctx, 61 : long * result_timestamp, 62 : fd_spad_t * spad ); 63 : 64 : FD_PROTOTYPES_END 65 : 66 : #endif /* HEADER_fd_src_flamenco_runtime_sysvar_fd_clock_h */