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