LCOV - code coverage report
Current view: top level - flamenco/events - fd_event_runtime.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 0 99 0.0 %
Date: 2026-08-15 04:34:25 Functions: 0 18 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 "../../disco/events/generated/fd_event_gen.h"
      13             : 
      14             : FD_PROTOTYPES_BEGIN
      15             : 
      16             : static inline int
      17           0 : fd_event_txn_err_from_txn_err( int err ) {
      18           0 :   switch( err ) {
      19           0 :     case FD_RUNTIME_EXECUTE_SUCCESS:                                 return FD_EVENT_RUNTIME_TXN_TXN_ERR_SUCCESS;
      20           0 :     case FD_RUNTIME_TXN_ERR_ACCOUNT_LOADED_TWICE:                    return FD_EVENT_RUNTIME_TXN_TXN_ERR_ACCOUNT_LOADED_TWICE;
      21           0 :     case FD_RUNTIME_TXN_ERR_ACCOUNT_NOT_FOUND:                       return FD_EVENT_RUNTIME_TXN_TXN_ERR_ACCOUNT_NOT_FOUND;
      22           0 :     case FD_RUNTIME_TXN_ERR_PROGRAM_ACCOUNT_NOT_FOUND:               return FD_EVENT_RUNTIME_TXN_TXN_ERR_PROGRAM_ACCOUNT_NOT_FOUND;
      23           0 :     case FD_RUNTIME_TXN_ERR_INSUFFICIENT_FUNDS_FOR_FEE:              return FD_EVENT_RUNTIME_TXN_TXN_ERR_INSUFFICIENT_FUNDS_FOR_FEE;
      24           0 :     case FD_RUNTIME_TXN_ERR_INVALID_ACCOUNT_FOR_FEE:                 return FD_EVENT_RUNTIME_TXN_TXN_ERR_INVALID_ACCOUNT_FOR_FEE;
      25           0 :     case FD_RUNTIME_TXN_ERR_ALREADY_PROCESSED:                       return FD_EVENT_RUNTIME_TXN_TXN_ERR_ALREADY_PROCESSED;
      26           0 :     case FD_RUNTIME_TXN_ERR_BLOCKHASH_NOT_FOUND:                     return FD_EVENT_RUNTIME_TXN_TXN_ERR_BLOCKHASH_NOT_FOUND;
      27           0 :     case FD_RUNTIME_TXN_ERR_INSTRUCTION_ERROR:                       return FD_EVENT_RUNTIME_TXN_TXN_ERR_INSTRUCTION_ERROR;
      28           0 :     case FD_RUNTIME_TXN_ERR_SIGNATURE_FAILURE:                       return FD_EVENT_RUNTIME_TXN_TXN_ERR_SIGNATURE_FAILURE;
      29           0 :     case FD_RUNTIME_TXN_ERR_INVALID_PROGRAM_FOR_EXECUTION:           return FD_EVENT_RUNTIME_TXN_TXN_ERR_INVALID_PROGRAM_FOR_EXECUTION;
      30           0 :     case FD_RUNTIME_TXN_ERR_SANITIZE_FAILURE:                        return FD_EVENT_RUNTIME_TXN_TXN_ERR_SANITIZE_FAILURE;
      31           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;
      32           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;
      33           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;
      34           0 :     case FD_RUNTIME_TXN_ERR_TOO_MANY_ACCOUNT_LOCKS:                  return FD_EVENT_RUNTIME_TXN_TXN_ERR_TOO_MANY_ACCOUNT_LOCKS;
      35           0 :     case FD_RUNTIME_TXN_ERR_ADDRESS_LOOKUP_TABLE_NOT_FOUND:          return FD_EVENT_RUNTIME_TXN_TXN_ERR_ADDRESS_LOOKUP_TABLE_NOT_FOUND;
      36           0 :     case FD_RUNTIME_TXN_ERR_INVALID_ADDRESS_LOOKUP_TABLE_OWNER:      return FD_EVENT_RUNTIME_TXN_TXN_ERR_INVALID_ADDRESS_LOOKUP_TABLE_OWNER;
      37           0 :     case FD_RUNTIME_TXN_ERR_INVALID_ADDRESS_LOOKUP_TABLE_DATA:       return FD_EVENT_RUNTIME_TXN_TXN_ERR_INVALID_ADDRESS_LOOKUP_TABLE_DATA;
      38           0 :     case FD_RUNTIME_TXN_ERR_INVALID_ADDRESS_LOOKUP_TABLE_INDEX:      return FD_EVENT_RUNTIME_TXN_TXN_ERR_INVALID_ADDRESS_LOOKUP_TABLE_INDEX;
      39           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;
      40           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;
      41           0 :     case FD_RUNTIME_TXN_ERR_DUPLICATE_INSTRUCTION:                   return FD_EVENT_RUNTIME_TXN_TXN_ERR_DUPLICATE_INSTRUCTION;
      42           0 :     case FD_RUNTIME_TXN_ERR_INSUFFICIENT_FUNDS_FOR_RENT:             return FD_EVENT_RUNTIME_TXN_TXN_ERR_INSUFFICIENT_FUNDS_FOR_RENT;
      43           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;
      44           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;
      45           0 :     case FD_RUNTIME_TXN_ERR_UNBALANCED_TRANSACTION:                  return FD_EVENT_RUNTIME_TXN_TXN_ERR_UNBALANCED_TRANSACTION;
      46           0 :     case FD_RUNTIME_TXN_ERR_BUNDLE_PEER:                             return FD_EVENT_RUNTIME_TXN_TXN_ERR_BUNDLE_PEER;
      47           0 :     case FD_RUNTIME_TXN_ERR_BLOCKHASH_NONCE_ALREADY_ADVANCED:        return FD_EVENT_RUNTIME_TXN_TXN_ERR_BLOCKHASH_NONCE_ALREADY_ADVANCED;
      48           0 :     case FD_RUNTIME_TXN_ERR_BLOCKHASH_FAIL_ADVANCE_NONCE_INSTR:      return FD_EVENT_RUNTIME_TXN_TXN_ERR_BLOCKHASH_FAIL_ADVANCE_NONCE_INSTR;
      49           0 :     case FD_RUNTIME_TXN_ERR_BLOCKHASH_FAIL_WRONG_NONCE:              return FD_EVENT_RUNTIME_TXN_TXN_ERR_BLOCKHASH_FAIL_WRONG_NONCE;
      50           0 :     case FD_RUNTIME_TXN_ERR_UNSUPPORTED_VERSION:                     return FD_EVENT_RUNTIME_TXN_TXN_ERR_UNSUPPORTED_VERSION;
      51           0 :     default:                                                         FD_LOG_ERR(( "unmapped runtime txn err %d", err ));
      52           0 :   }
      53           0 : }
      54             : 
      55             : static inline int
      56           0 : fd_event_exec_err_from_exec_err( int err ) {
      57           0 :   switch( err ) {
      58           0 :     case FD_EXECUTOR_INSTR_SUCCESS:                                return FD_EVENT_RUNTIME_TXN_EXEC_ERR_SUCCESS;
      59           0 :     case FD_EXECUTOR_INSTR_ERR_GENERIC_ERR:                        return FD_EVENT_RUNTIME_TXN_EXEC_ERR_GENERIC_ERR;
      60           0 :     case FD_EXECUTOR_INSTR_ERR_INVALID_ARG:                        return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_ARG;
      61           0 :     case FD_EXECUTOR_INSTR_ERR_INVALID_INSTR_DATA:                 return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_INSTR_DATA;
      62           0 :     case FD_EXECUTOR_INSTR_ERR_INVALID_ACC_DATA:                   return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_ACC_DATA;
      63           0 :     case FD_EXECUTOR_INSTR_ERR_ACC_DATA_TOO_SMALL:                 return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_DATA_TOO_SMALL;
      64           0 :     case FD_EXECUTOR_INSTR_ERR_INSUFFICIENT_FUNDS:                 return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INSUFFICIENT_FUNDS;
      65           0 :     case FD_EXECUTOR_INSTR_ERR_INCORRECT_PROGRAM_ID:               return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INCORRECT_PROGRAM_ID;
      66           0 :     case FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE:         return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MISSING_REQUIRED_SIGNATURE;
      67           0 :     case FD_EXECUTOR_INSTR_ERR_ACC_ALREADY_INITIALIZED:            return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_ALREADY_INITIALIZED;
      68           0 :     case FD_EXECUTOR_INSTR_ERR_UNINITIALIZED_ACCOUNT:              return FD_EVENT_RUNTIME_TXN_EXEC_ERR_UNINITIALIZED_ACCOUNT;
      69           0 :     case FD_EXECUTOR_INSTR_ERR_UNBALANCED_INSTR:                   return FD_EVENT_RUNTIME_TXN_EXEC_ERR_UNBALANCED_INSTR;
      70           0 :     case FD_EXECUTOR_INSTR_ERR_MODIFIED_PROGRAM_ID:                return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MODIFIED_PROGRAM_ID;
      71           0 :     case FD_EXECUTOR_INSTR_ERR_EXTERNAL_ACCOUNT_LAMPORT_SPEND:     return FD_EVENT_RUNTIME_TXN_EXEC_ERR_EXTERNAL_ACCOUNT_LAMPORT_SPEND;
      72           0 :     case FD_EXECUTOR_INSTR_ERR_EXTERNAL_DATA_MODIFIED:             return FD_EVENT_RUNTIME_TXN_EXEC_ERR_EXTERNAL_DATA_MODIFIED;
      73           0 :     case FD_EXECUTOR_INSTR_ERR_READONLY_LAMPORT_CHANGE:            return FD_EVENT_RUNTIME_TXN_EXEC_ERR_READONLY_LAMPORT_CHANGE;
      74           0 :     case FD_EXECUTOR_INSTR_ERR_READONLY_DATA_MODIFIED:             return FD_EVENT_RUNTIME_TXN_EXEC_ERR_READONLY_DATA_MODIFIED;
      75           0 :     case FD_EXECUTOR_INSTR_ERR_EXECUTABLE_MODIFIED:                return FD_EVENT_RUNTIME_TXN_EXEC_ERR_EXECUTABLE_MODIFIED;
      76           0 :     case FD_EXECUTOR_INSTR_ERR_NOT_ENOUGH_ACC_KEYS:                return FD_EVENT_RUNTIME_TXN_EXEC_ERR_NOT_ENOUGH_ACC_KEYS;
      77           0 :     case FD_EXECUTOR_INSTR_ERR_ACC_DATA_SIZE_CHANGED:              return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_DATA_SIZE_CHANGED;
      78           0 :     case FD_EXECUTOR_INSTR_ERR_ACC_BORROW_FAILED:                  return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_BORROW_FAILED;
      79           0 :     case FD_EXECUTOR_INSTR_ERR_ACC_BORROW_OUTSTANDING:             return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_BORROW_OUTSTANDING;
      80           0 :     case FD_EXECUTOR_INSTR_ERR_CUSTOM_ERR:                         return FD_EVENT_RUNTIME_TXN_EXEC_ERR_CUSTOM_ERR;
      81           0 :     case FD_EXECUTOR_INSTR_ERR_INVALID_ERR:                        return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_ERR;
      82           0 :     case FD_EXECUTOR_INSTR_ERR_EXECUTABLE_ACCOUNT_NOT_RENT_EXEMPT: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_EXECUTABLE_ACCOUNT_NOT_RENT_EXEMPT;
      83           0 :     case FD_EXECUTOR_INSTR_ERR_UNSUPPORTED_PROGRAM_ID:             return FD_EVENT_RUNTIME_TXN_EXEC_ERR_UNSUPPORTED_PROGRAM_ID;
      84           0 :     case FD_EXECUTOR_INSTR_ERR_CALL_DEPTH:                         return FD_EVENT_RUNTIME_TXN_EXEC_ERR_CALL_DEPTH;
      85           0 :     case FD_EXECUTOR_INSTR_ERR_MISSING_ACC:                        return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MISSING_ACC;
      86           0 :     case FD_EXECUTOR_INSTR_ERR_REENTRANCY_NOT_ALLOWED:             return FD_EVENT_RUNTIME_TXN_EXEC_ERR_REENTRANCY_NOT_ALLOWED;
      87           0 :     case FD_EXECUTOR_INSTR_ERR_MAX_SEED_LENGTH_EXCEEDED:           return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MAX_SEED_LENGTH_EXCEEDED;
      88           0 :     case FD_EXECUTOR_INSTR_ERR_INVALID_SEEDS:                      return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_SEEDS;
      89           0 :     case FD_EXECUTOR_INSTR_ERR_INVALID_REALLOC:                    return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_REALLOC;
      90           0 :     case FD_EXECUTOR_INSTR_ERR_COMPUTE_BUDGET_EXCEEDED:            return FD_EVENT_RUNTIME_TXN_EXEC_ERR_COMPUTE_BUDGET_EXCEEDED;
      91           0 :     case FD_EXECUTOR_INSTR_ERR_PRIVILEGE_ESCALATION:               return FD_EVENT_RUNTIME_TXN_EXEC_ERR_PRIVILEGE_ESCALATION;
      92           0 :     case FD_EXECUTOR_INSTR_ERR_PROGRAM_ENVIRONMENT_SETUP_FAILURE:  return FD_EVENT_RUNTIME_TXN_EXEC_ERR_PROGRAM_ENVIRONMENT_SETUP_FAILURE;
      93           0 :     case FD_EXECUTOR_INSTR_ERR_PROGRAM_FAILED_TO_COMPLETE:         return FD_EVENT_RUNTIME_TXN_EXEC_ERR_PROGRAM_FAILED_TO_COMPLETE;
      94           0 :     case FD_EXECUTOR_INSTR_ERR_ACC_IMMUTABLE:                      return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_IMMUTABLE;
      95           0 :     case FD_EXECUTOR_INSTR_ERR_INCORRECT_AUTHORITY:                return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INCORRECT_AUTHORITY;
      96           0 :     case FD_EXECUTOR_INSTR_ERR_BORSH_IO_ERROR:                     return FD_EVENT_RUNTIME_TXN_EXEC_ERR_BORSH_IO_ERROR;
      97           0 :     case FD_EXECUTOR_INSTR_ERR_ACC_NOT_RENT_EXEMPT:                return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ACC_NOT_RENT_EXEMPT;
      98           0 :     case FD_EXECUTOR_INSTR_ERR_INVALID_ACC_OWNER:                  return FD_EVENT_RUNTIME_TXN_EXEC_ERR_INVALID_ACC_OWNER;
      99           0 :     case FD_EXECUTOR_INSTR_ERR_ARITHMETIC_OVERFLOW:                return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ARITHMETIC_OVERFLOW;
     100           0 :     case FD_EXECUTOR_INSTR_ERR_UNSUPPORTED_SYSVAR:                 return FD_EVENT_RUNTIME_TXN_EXEC_ERR_UNSUPPORTED_SYSVAR;
     101           0 :     case FD_EXECUTOR_INSTR_ERR_ILLEGAL_OWNER:                      return FD_EVENT_RUNTIME_TXN_EXEC_ERR_ILLEGAL_OWNER;
     102           0 :     case FD_EXECUTOR_INSTR_ERR_MAX_ACCS_DATA_ALLOCS_EXCEEDED:      return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MAX_ACCS_DATA_ALLOCS_EXCEEDED;
     103           0 :     case FD_EXECUTOR_INSTR_ERR_MAX_ACCS_EXCEEDED:                  return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MAX_ACCS_EXCEEDED;
     104           0 :     case FD_EXECUTOR_INSTR_ERR_MAX_INSN_TRACE_LENS_EXCEEDED:       return FD_EVENT_RUNTIME_TXN_EXEC_ERR_MAX_INSN_TRACE_LENS_EXCEEDED;
     105           0 :     case FD_EXECUTOR_INSTR_ERR_BUILTINS_MUST_CONSUME_CUS:          return FD_EVENT_RUNTIME_TXN_EXEC_ERR_BUILTINS_MUST_CONSUME_CUS;
     106           0 :     default:                                                       FD_LOG_ERR(( "unmapped instruction exec err %d", err ));
     107           0 :   }
     108           0 : }
     109             : 
     110             : static inline int
     111           0 : fd_event_exec_err_kind_from_exec_err_kind( int kind ) {
     112           0 :   switch( kind ) {
     113           0 :     case FD_EXECUTOR_ERR_KIND_NONE:    return FD_EVENT_RUNTIME_TXN_EXEC_ERR_KIND_NONE;
     114           0 :     case FD_EXECUTOR_ERR_KIND_EBPF:    return FD_EVENT_RUNTIME_TXN_EXEC_ERR_KIND_EBPF;
     115           0 :     case FD_EXECUTOR_ERR_KIND_SYSCALL: return FD_EVENT_RUNTIME_TXN_EXEC_ERR_KIND_SYSCALL;
     116           0 :     case FD_EXECUTOR_ERR_KIND_INSTR:   return FD_EVENT_RUNTIME_TXN_EXEC_ERR_KIND_INSTR;
     117           0 :     default:                           FD_LOG_ERR(( "unmapped exec err kind %d", kind ));
     118           0 :   }
     119           0 : }
     120             : 
     121             : /* Build a runtime_txn event from (txn_in, txn_out, bank) and publish
     122             :    it on the calling tile's event link.  No-op when the tile has no
     123             :    event link. */
     124             : 
     125             : void
     126             : fd_event_runtime_txn_emit( fd_txn_in_t  const * txn_in,
     127             :                            fd_txn_out_t const * txn_out,
     128             :                            fd_bank_t    const * bank );
     129             : 
     130             : FD_PROTOTYPES_END
     131             : 
     132             : #endif /* HEADER_fd_src_flamenco_events_fd_event_runtime_h */

Generated by: LCOV version 1.14