LCOV - code coverage report
Current view: top level - flamenco/events - fd_event_runtime.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 0 101 0.0 %
Date: 2026-11-12 04:25:03 Functions: 0 51 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             : #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 */

Generated by: LCOV version 1.14