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