Line data Source code
1 : #ifndef HEADER_fd_src_flamenco_events_fd_event_runtime_h 2 : #define HEADER_fd_src_flamenco_events_fd_event_runtime_h 3 : 4 : /* fd_event_runtime.h provides the shared helpers used by the 5 : exec-replay (execrp) and exec-leader (execle) tiles to convert 6 : runtime events and emit them on the tile's event link. */ 7 : 8 : #include "../runtime/fd_runtime.h" 9 : #include "../runtime/fd_runtime_err.h" 10 : #include "../runtime/fd_executor_err.h" 11 : #include "../runtime/fd_bank.h" 12 : #include "../stakes/fd_stakes.h" 13 : #include "../../disco/events/generated/fd_event_gen.h" 14 : 15 : FD_PROTOTYPES_BEGIN 16 : 17 : static inline int 18 0 : fd_event_txn_err_from_txn_err( int err ) { 19 0 : switch( err ) { 20 0 : case FD_RUNTIME_EXECUTE_SUCCESS: return FD_EVENT_RUNTIME_TXN_TXN_ERR_SUCCESS; 21 0 : case FD_RUNTIME_TXN_ERR_ACCOUNT_LOADED_TWICE: return FD_EVENT_RUNTIME_TXN_TXN_ERR_ACCOUNT_LOADED_TWICE; 22 0 : case FD_RUNTIME_TXN_ERR_ACCOUNT_NOT_FOUND: return FD_EVENT_RUNTIME_TXN_TXN_ERR_ACCOUNT_NOT_FOUND; 23 0 : case FD_RUNTIME_TXN_ERR_PROGRAM_ACCOUNT_NOT_FOUND: return FD_EVENT_RUNTIME_TXN_TXN_ERR_PROGRAM_ACCOUNT_NOT_FOUND; 24 0 : case FD_RUNTIME_TXN_ERR_INSUFFICIENT_FUNDS_FOR_FEE: return FD_EVENT_RUNTIME_TXN_TXN_ERR_INSUFFICIENT_FUNDS_FOR_FEE; 25 0 : case FD_RUNTIME_TXN_ERR_INVALID_ACCOUNT_FOR_FEE: return FD_EVENT_RUNTIME_TXN_TXN_ERR_INVALID_ACCOUNT_FOR_FEE; 26 0 : case FD_RUNTIME_TXN_ERR_ALREADY_PROCESSED: return FD_EVENT_RUNTIME_TXN_TXN_ERR_ALREADY_PROCESSED; 27 0 : case FD_RUNTIME_TXN_ERR_BLOCKHASH_NOT_FOUND: return FD_EVENT_RUNTIME_TXN_TXN_ERR_BLOCKHASH_NOT_FOUND; 28 0 : case FD_RUNTIME_TXN_ERR_INSTRUCTION_ERROR: return FD_EVENT_RUNTIME_TXN_TXN_ERR_INSTRUCTION_ERROR; 29 0 : case FD_RUNTIME_TXN_ERR_SIGNATURE_FAILURE: return FD_EVENT_RUNTIME_TXN_TXN_ERR_SIGNATURE_FAILURE; 30 0 : case FD_RUNTIME_TXN_ERR_INVALID_PROGRAM_FOR_EXECUTION: return FD_EVENT_RUNTIME_TXN_TXN_ERR_INVALID_PROGRAM_FOR_EXECUTION; 31 0 : case FD_RUNTIME_TXN_ERR_SANITIZE_FAILURE: return FD_EVENT_RUNTIME_TXN_TXN_ERR_SANITIZE_FAILURE; 32 0 : case FD_RUNTIME_TXN_ERR_WOULD_EXCEED_MAX_BLOCK_COST_LIMIT: return FD_EVENT_RUNTIME_TXN_TXN_ERR_WOULD_EXCEED_MAX_BLOCK_COST_LIMIT; 33 0 : case FD_RUNTIME_TXN_ERR_WOULD_EXCEED_MAX_ACCOUNT_COST_LIMIT: return FD_EVENT_RUNTIME_TXN_TXN_ERR_WOULD_EXCEED_MAX_ACCOUNT_COST_LIMIT; 34 0 : case FD_RUNTIME_TXN_ERR_WOULD_EXCEED_ACCOUNT_DATA_BLOCK_LIMIT: return FD_EVENT_RUNTIME_TXN_TXN_ERR_WOULD_EXCEED_ACCOUNT_DATA_BLOCK_LIMIT; 35 0 : case FD_RUNTIME_TXN_ERR_TOO_MANY_ACCOUNT_LOCKS: return FD_EVENT_RUNTIME_TXN_TXN_ERR_TOO_MANY_ACCOUNT_LOCKS; 36 0 : case FD_RUNTIME_TXN_ERR_ADDRESS_LOOKUP_TABLE_NOT_FOUND: return FD_EVENT_RUNTIME_TXN_TXN_ERR_ADDRESS_LOOKUP_TABLE_NOT_FOUND; 37 0 : case FD_RUNTIME_TXN_ERR_INVALID_ADDRESS_LOOKUP_TABLE_OWNER: return FD_EVENT_RUNTIME_TXN_TXN_ERR_INVALID_ADDRESS_LOOKUP_TABLE_OWNER; 38 0 : case FD_RUNTIME_TXN_ERR_INVALID_ADDRESS_LOOKUP_TABLE_DATA: return FD_EVENT_RUNTIME_TXN_TXN_ERR_INVALID_ADDRESS_LOOKUP_TABLE_DATA; 39 0 : case FD_RUNTIME_TXN_ERR_INVALID_ADDRESS_LOOKUP_TABLE_INDEX: return FD_EVENT_RUNTIME_TXN_TXN_ERR_INVALID_ADDRESS_LOOKUP_TABLE_INDEX; 40 0 : case FD_RUNTIME_TXN_ERR_WOULD_EXCEED_MAX_VOTE_COST_LIMIT: return FD_EVENT_RUNTIME_TXN_TXN_ERR_WOULD_EXCEED_MAX_VOTE_COST_LIMIT; 41 0 : case FD_RUNTIME_TXN_ERR_WOULD_EXCEED_ACCOUNT_DATA_TOTAL_LIMIT: return FD_EVENT_RUNTIME_TXN_TXN_ERR_WOULD_EXCEED_ACCOUNT_DATA_TOTAL_LIMIT; 42 0 : case FD_RUNTIME_TXN_ERR_DUPLICATE_INSTRUCTION: return FD_EVENT_RUNTIME_TXN_TXN_ERR_DUPLICATE_INSTRUCTION; 43 0 : case FD_RUNTIME_TXN_ERR_INSUFFICIENT_FUNDS_FOR_RENT: return FD_EVENT_RUNTIME_TXN_TXN_ERR_INSUFFICIENT_FUNDS_FOR_RENT; 44 0 : case FD_RUNTIME_TXN_ERR_MAX_LOADED_ACCOUNTS_DATA_SIZE_EXCEEDED: return FD_EVENT_RUNTIME_TXN_TXN_ERR_MAX_LOADED_ACCOUNTS_DATA_SIZE_EXCEEDED; 45 0 : case FD_RUNTIME_TXN_ERR_INVALID_LOADED_ACCOUNTS_DATA_SIZE_LIMIT: return FD_EVENT_RUNTIME_TXN_TXN_ERR_INVALID_LOADED_ACCOUNTS_DATA_SIZE_LIMIT; 46 0 : case FD_RUNTIME_TXN_ERR_UNBALANCED_TRANSACTION: return FD_EVENT_RUNTIME_TXN_TXN_ERR_UNBALANCED_TRANSACTION; 47 0 : case FD_RUNTIME_TXN_ERR_BUNDLE_PEER: return FD_EVENT_RUNTIME_TXN_TXN_ERR_BUNDLE_PEER; 48 0 : case FD_RUNTIME_TXN_ERR_BLOCKHASH_NONCE_ALREADY_ADVANCED: return FD_EVENT_RUNTIME_TXN_TXN_ERR_BLOCKHASH_NONCE_ALREADY_ADVANCED; 49 0 : case FD_RUNTIME_TXN_ERR_BLOCKHASH_FAIL_ADVANCE_NONCE_INSTR: return FD_EVENT_RUNTIME_TXN_TXN_ERR_BLOCKHASH_FAIL_ADVANCE_NONCE_INSTR; 50 0 : case FD_RUNTIME_TXN_ERR_BLOCKHASH_FAIL_WRONG_NONCE: return FD_EVENT_RUNTIME_TXN_TXN_ERR_BLOCKHASH_FAIL_WRONG_NONCE; 51 0 : case FD_RUNTIME_TXN_ERR_UNSUPPORTED_VERSION: return FD_EVENT_RUNTIME_TXN_TXN_ERR_UNSUPPORTED_VERSION; 52 0 : default: FD_LOG_ERR(( "unmapped runtime txn err %d", err )); 53 0 : } 54 0 : } 55 : 56 : static inline int 57 0 : fd_event_exec_err_from_exec_err( int err ) { 58 0 : switch( err ) { 59 0 : case FD_EXECUTOR_INSTR_SUCCESS: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_SUCCESS; 60 0 : case FD_EXECUTOR_INSTR_ERR_GENERIC_ERR: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_GENERIC_ERR; 61 0 : case FD_EXECUTOR_INSTR_ERR_INVALID_ARG: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_ARG; 62 0 : case FD_EXECUTOR_INSTR_ERR_INVALID_INSTR_DATA: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_INSTR_DATA; 63 0 : case FD_EXECUTOR_INSTR_ERR_INVALID_ACC_DATA: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_ACC_DATA; 64 0 : case FD_EXECUTOR_INSTR_ERR_ACC_DATA_TOO_SMALL: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_DATA_TOO_SMALL; 65 0 : case FD_EXECUTOR_INSTR_ERR_INSUFFICIENT_FUNDS: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INSUFFICIENT_FUNDS; 66 0 : case FD_EXECUTOR_INSTR_ERR_INCORRECT_PROGRAM_ID: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INCORRECT_PROGRAM_ID; 67 0 : case FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MISSING_REQUIRED_SIGNATURE; 68 0 : case FD_EXECUTOR_INSTR_ERR_ACC_ALREADY_INITIALIZED: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_ALREADY_INITIALIZED; 69 0 : case FD_EXECUTOR_INSTR_ERR_UNINITIALIZED_ACCOUNT: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_UNINITIALIZED_ACCOUNT; 70 0 : case FD_EXECUTOR_INSTR_ERR_UNBALANCED_INSTR: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_UNBALANCED_INSTR; 71 0 : case FD_EXECUTOR_INSTR_ERR_MODIFIED_PROGRAM_ID: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MODIFIED_PROGRAM_ID; 72 0 : case FD_EXECUTOR_INSTR_ERR_EXTERNAL_ACCOUNT_LAMPORT_SPEND: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_EXTERNAL_ACCOUNT_LAMPORT_SPEND; 73 0 : case FD_EXECUTOR_INSTR_ERR_EXTERNAL_DATA_MODIFIED: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_EXTERNAL_DATA_MODIFIED; 74 0 : case FD_EXECUTOR_INSTR_ERR_READONLY_LAMPORT_CHANGE: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_READONLY_LAMPORT_CHANGE; 75 0 : case FD_EXECUTOR_INSTR_ERR_READONLY_DATA_MODIFIED: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_READONLY_DATA_MODIFIED; 76 0 : case FD_EXECUTOR_INSTR_ERR_EXECUTABLE_MODIFIED: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_EXECUTABLE_MODIFIED; 77 0 : case FD_EXECUTOR_INSTR_ERR_NOT_ENOUGH_ACC_KEYS: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_NOT_ENOUGH_ACC_KEYS; 78 0 : case FD_EXECUTOR_INSTR_ERR_ACC_DATA_SIZE_CHANGED: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_DATA_SIZE_CHANGED; 79 0 : case FD_EXECUTOR_INSTR_ERR_ACC_BORROW_FAILED: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_BORROW_FAILED; 80 0 : case FD_EXECUTOR_INSTR_ERR_ACC_BORROW_OUTSTANDING: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_BORROW_OUTSTANDING; 81 0 : case FD_EXECUTOR_INSTR_ERR_CUSTOM_ERR: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_CUSTOM_ERR; 82 0 : case FD_EXECUTOR_INSTR_ERR_INVALID_ERR: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_ERR; 83 0 : case FD_EXECUTOR_INSTR_ERR_EXECUTABLE_ACCOUNT_NOT_RENT_EXEMPT: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_EXECUTABLE_ACCOUNT_NOT_RENT_EXEMPT; 84 0 : case FD_EXECUTOR_INSTR_ERR_UNSUPPORTED_PROGRAM_ID: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_UNSUPPORTED_PROGRAM_ID; 85 0 : case FD_EXECUTOR_INSTR_ERR_CALL_DEPTH: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_CALL_DEPTH; 86 0 : case FD_EXECUTOR_INSTR_ERR_MISSING_ACC: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MISSING_ACC; 87 0 : case FD_EXECUTOR_INSTR_ERR_REENTRANCY_NOT_ALLOWED: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_REENTRANCY_NOT_ALLOWED; 88 0 : case FD_EXECUTOR_INSTR_ERR_MAX_SEED_LENGTH_EXCEEDED: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MAX_SEED_LENGTH_EXCEEDED; 89 0 : case FD_EXECUTOR_INSTR_ERR_INVALID_SEEDS: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_SEEDS; 90 0 : case FD_EXECUTOR_INSTR_ERR_INVALID_REALLOC: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_REALLOC; 91 0 : case FD_EXECUTOR_INSTR_ERR_COMPUTE_BUDGET_EXCEEDED: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_COMPUTE_BUDGET_EXCEEDED; 92 0 : case FD_EXECUTOR_INSTR_ERR_PRIVILEGE_ESCALATION: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_PRIVILEGE_ESCALATION; 93 0 : case FD_EXECUTOR_INSTR_ERR_PROGRAM_ENVIRONMENT_SETUP_FAILURE: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_PROGRAM_ENVIRONMENT_SETUP_FAILURE; 94 0 : case FD_EXECUTOR_INSTR_ERR_PROGRAM_FAILED_TO_COMPLETE: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_PROGRAM_FAILED_TO_COMPLETE; 95 0 : case FD_EXECUTOR_INSTR_ERR_ACC_IMMUTABLE: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_IMMUTABLE; 96 0 : case FD_EXECUTOR_INSTR_ERR_INCORRECT_AUTHORITY: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INCORRECT_AUTHORITY; 97 0 : case FD_EXECUTOR_INSTR_ERR_BORSH_IO_ERROR: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_BORSH_IO_ERROR; 98 0 : case FD_EXECUTOR_INSTR_ERR_ACC_NOT_RENT_EXEMPT: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_NOT_RENT_EXEMPT; 99 0 : case FD_EXECUTOR_INSTR_ERR_INVALID_ACC_OWNER: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_ACC_OWNER; 100 0 : case FD_EXECUTOR_INSTR_ERR_ARITHMETIC_OVERFLOW: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ARITHMETIC_OVERFLOW; 101 0 : case FD_EXECUTOR_INSTR_ERR_UNSUPPORTED_SYSVAR: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_UNSUPPORTED_SYSVAR; 102 0 : case FD_EXECUTOR_INSTR_ERR_ILLEGAL_OWNER: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ILLEGAL_OWNER; 103 0 : case FD_EXECUTOR_INSTR_ERR_MAX_ACCS_DATA_ALLOCS_EXCEEDED: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MAX_ACCS_DATA_ALLOCS_EXCEEDED; 104 0 : case FD_EXECUTOR_INSTR_ERR_MAX_ACCS_EXCEEDED: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MAX_ACCS_EXCEEDED; 105 0 : case FD_EXECUTOR_INSTR_ERR_MAX_INSN_TRACE_LENS_EXCEEDED: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MAX_INSN_TRACE_LENS_EXCEEDED; 106 0 : case FD_EXECUTOR_INSTR_ERR_BUILTINS_MUST_CONSUME_CUS: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_BUILTINS_MUST_CONSUME_CUS; 107 0 : default: FD_LOG_ERR(( "unmapped instruction exec err %d", err )); 108 0 : } 109 0 : } 110 : 111 : static inline int 112 0 : fd_event_exec_err_kind_from_exec_err_kind( int kind ) { 113 0 : switch( kind ) { 114 0 : case FD_EXECUTOR_ERR_KIND_NONE: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_KIND_NONE; 115 0 : case FD_EXECUTOR_ERR_KIND_EBPF: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_KIND_EBPF; 116 0 : case FD_EXECUTOR_ERR_KIND_SYSCALL: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_KIND_SYSCALL; 117 0 : case FD_EXECUTOR_ERR_KIND_INSTR: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_KIND_INSTR; 118 0 : default: FD_LOG_ERR(( "unmapped exec err kind %d", kind )); 119 0 : } 120 0 : } 121 : 122 : /* Build a runtime_txn event from (txn_in, txn_out, bank) and publish 123 : it on the calling tile's event link. No-op when the tile has no 124 : event link. */ 125 : 126 : void 127 : fd_event_runtime_txn_emit( fd_txn_in_t const * txn_in, 128 : fd_txn_out_t const * txn_out, 129 : fd_bank_t const * bank ); 130 : 131 : /* Build a runtime_stake_delegation event for the cache mutation the 132 : caller just applied (stake_state is the upserted entry's parsed 133 : state, or NULL for a removal) and publish it on the calling tile's 134 : event link. Called by fd_stakes_update_stake_delegation. No-op 135 : when the tile has no event link. */ 136 : 137 : void 138 : fd_event_runtime_stake_delegation_emit( fd_txn_in_t const * txn_in, 139 : fd_bank_t const * bank, 140 : fd_pubkey_t const * pubkey, 141 : fd_stake_state_t const * stake_state ); 142 : 143 : /* Build a runtime_stake_delegation event for a baseline stake 144 : delegation cache entry loaded at boot (streamed from the snapshot 145 : accounts by snapin, or loaded from genesis) and publish it on the 146 : calling tile's event link. slot/epoch are the snapshot slot and its 147 : epoch (0/0 for genesis). No-op when the tile has no event link. */ 148 : 149 : void 150 : fd_event_runtime_stake_delegation_bootup_emit( ulong slot, 151 : ulong epoch, 152 : uchar const * stake_account, 153 : uchar const * vote_account, 154 : ulong stake, 155 : ulong activation_epoch, 156 : ulong deactivation_epoch, 157 : ulong credits_observed ); 158 : 159 : /* Record the StakeHistory sysvar entry for the new epoch. */ 160 : 161 : void 162 : fd_event_runtime_epoch_stake_history( fd_stake_history_entry_t const * entry ); 163 : 164 : /* Record the EpochRewards sysvar values initialized at this boundary */ 165 : 166 : void 167 : fd_event_runtime_epoch_rewards( fd_sysvar_epoch_rewards_t const * epoch_rewards ); 168 : 169 : /* Record the boundary vote-account counts. */ 170 : 171 : void 172 : fd_event_runtime_epoch_votes( ulong staked_vote_accounts, 173 : ulong top_votes_eligible ); 174 : 175 : /* Build a runtime_vote_account event for a vote account in the final 176 : boundary snapshot and publish it on the calling tile's event link. 177 : No-op when the tile has no event link. */ 178 : 179 : void 180 : fd_event_runtime_vote_account_emit( fd_bank_t const * bank, 181 : uchar const * pubkey, 182 : uchar const * node_account, 183 : ulong stake, 184 : uint commission_bps, 185 : int has_commission_t_2, 186 : uint commission_t_2_bps, 187 : int has_commission_t_3, 188 : uint commission_t_3_bps, 189 : uint reward_commission_bps, 190 : fd_epoch_credits_t const * epoch_credits ); 191 : 192 : /* Record a feature id newly activated at this boundary. */ 193 : 194 : void 195 : fd_event_runtime_epoch_feature( uchar const * feature_id ); 196 : 197 : /* Record the per-vote-account VAT burn applied at this epoch boundary 198 : for the runtime_epoch event. No-op when the tile has no event 199 : link. */ 200 : 201 : void 202 : fd_event_runtime_epoch_vat_burn( ulong burn_per_vote_account ); 203 : 204 : /* Per-bank accumulator region for the runtime_block account diffs, 205 : owned by the replay tile (the only tile running the non-txn account 206 : write paths) and indexed by bank->idx. All the fd_event_runtime_* 207 : functions taking a bank no-op until _init is called, so the region 208 : only exists when runtime diffs are enabled. */ 209 : 210 >1844*10^16 : #define FD_EVENT_RUNTIME_SLOT_DIFFS_FOOTPRINT (8192UL) 211 : 212 : void 213 : fd_event_runtime_slot_diffs_init( void * mem, /* bank_max*FD_EVENT_RUNTIME_SLOT_DIFFS_FOOTPRINT bytes, 8 aligned */ 214 : ulong bank_max ); 215 : 216 : /* Reset the accumulator for a (new or recycled) bank index. No-op 217 : when _init has not been called. */ 218 : 219 : void 220 : fd_event_runtime_slot_diffs_reset( ulong bank_idx ); 221 : 222 : /* Build the runtime_epoch event from bank and publish it on the calling tile's event link. 223 : No-op when the tile has no event link. */ 224 : 225 : void 226 : fd_event_runtime_epoch_emit( fd_bank_t const * bank ); 227 : 228 : /* Discard any accumulated runtime_epoch state without emitting. Called 229 : after genesis boot: initializing the bank from genesis runs the same 230 : vote-account refresh and feature-activation paths as an epoch 231 : boundary, which would otherwise pollute the first real boundary's 232 : summary counts. */ 233 : 234 : void 235 : fd_event_runtime_epoch_reset( void ); 236 : 237 : /* Build a runtime_rooted event for the newly rooted bank and publish 238 : it on the calling tile's event link. The delta stats cover every 239 : bank on (prev_root_slot, bank slot]. No-op when the tile has no event link. */ 240 : 241 : void 242 : fd_event_runtime_rooted_emit( fd_bank_t const * bank, 243 : ulong prev_root_slot, 244 : fd_stake_delegations_t const * stake_delegations, 245 : fd_stake_delegations_delta_stats_t const * stake_delegations_delta_stats ); 246 : 247 : /* Emit a runtime_stake_delegation remove event for a non-transaction 248 : removal (e.g. an epoch-boundary prune). Only the stake account is set 249 : (no signature, index_in_slot = UInt64 max). No-op when the tile has 250 : no event link. */ 251 : 252 : void 253 : fd_event_runtime_stake_delegation_remove_emit( fd_bank_t const * bank, 254 : uchar const * stake_account ); 255 : 256 : /* Build a runtime_stake_delegation event from a reward payout 257 : and publish it on the calling tile's event link. No-op when the tile has no event link. */ 258 : 259 : void 260 : fd_event_runtime_stake_delegation_payout_emit( fd_bank_t const * bank, 261 : uchar const * stake_account, 262 : uchar const * vote_account, 263 : ulong stake, 264 : ulong activation_epoch, 265 : ulong deactivation_epoch, 266 : ulong credits_observed ); 267 : 268 : /* Record a block-level account diff in the bank. */ 269 : 270 : void 271 : fd_event_runtime_block_account( fd_bank_t * bank, 272 : uchar const * pubkey, 273 : uchar const * prev_owner, 274 : uchar const * owner, 275 : ulong prev_lamports, 276 : ulong lamports, 277 : ulong prev_data_sz, 278 : ulong data_sz, 279 : int executable ); 280 : 281 : /* Build a runtime_reward event and publish it on the calling tile's 282 : event link. No-op when the tile has no event link. */ 283 : 284 : void 285 : fd_event_runtime_reward_emit( fd_bank_t const * bank, 286 : int kind, 287 : uchar const * pubkey, 288 : uchar const * owner, 289 : ulong prev_lamports, 290 : ulong lamports, 291 : ulong partition_idx, 292 : ulong credits_observed, 293 : ulong stake ); 294 : 295 : /* Build the runtime_block event for a finalized bank from the bank 296 : state and its accumulated diffs and publish it on the calling 297 : tile's event link. No-op when the tile has no event link. */ 298 : 299 : void 300 : fd_event_runtime_block_emit( fd_bank_t const * bank, 301 : uchar const * block_id, 302 : uchar const * parent_block_id, 303 : uchar const * leader, 304 : ulong execution_fees, 305 : ulong priority_fees, 306 : ulong tips, 307 : ulong num_shreds, 308 : fd_sol_sysvar_clock_t const * clock, 309 : fd_hash_t const * fec_mrs, 310 : ulong fec_mr_cnt ); 311 : 312 : FD_PROTOTYPES_END 313 : 314 : #endif /* HEADER_fd_src_flamenco_events_fd_event_runtime_h */