LCOV - code coverage report
Current view: top level - flamenco/events - fd_event_runtime.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 1 100 1.0 %
Date: 2026-10-23 17:13:25 Functions: 0 45 0.0 %

          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 */

Generated by: LCOV version 1.14