Skip to content

Commit 4762fb8

Browse files
ibhatt-jumptradingmmcgee-jump
authored andcommitted
firedancer: bank correctly report error codes
1 parent a43175e commit 4762fb8

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

src/discof/bank/fd_bank_tile.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,10 @@ handle_microblock( fd_bank_ctx_t * ctx,
173173
txn->flags &= ~FD_TXN_P_FLAGS_EXECUTE_SUCCESS;
174174

175175
txn_ctx->exec_err = fd_runtime_prepare_and_execute_txn( ctx->banks, ctx->_bank_idx, txn_ctx, txn, NULL, &ctx->exec_stack, NULL );
176+
177+
/* Stash the result in the flags value so that pack can inspect it. */
178+
txn->flags = (txn->flags & 0x00FFFFFFU) | ((uint)(-txn_ctx->exec_err)<<24);
179+
176180
if( FD_UNLIKELY( !(txn_ctx->flags & FD_TXN_P_FLAGS_SANITIZE_SUCCESS ) ) ) {
177181
fd_pack_rebate_sum_add_txn( ctx->rebater, txn, NULL, 1UL );
178182
ctx->metrics.txn_result[ fd_bank_err_from_runtime_err( txn_ctx->exec_err ) ]++;
@@ -185,11 +189,6 @@ handle_microblock( fd_bank_ctx_t * ctx,
185189
FD_TEST( txn_ctx->flags & FD_TXN_P_FLAGS_EXECUTE_SUCCESS );
186190
txn->flags |= FD_TXN_P_FLAGS_EXECUTE_SUCCESS | FD_TXN_P_FLAGS_SANITIZE_SUCCESS;
187191

188-
/* Stash the result in the flags value so that pack can inspect it. */
189-
/* TODO: Need to translate the err to a hacky Frankendancer style err
190-
that pack and GUI expect ... */
191-
txn->flags = (txn->flags & 0x00FFFFFFU) | ((uint)(-txn_ctx->exec_err)<<24);
192-
193192
ctx->metrics.txn_result[ fd_bank_err_from_runtime_err( txn_ctx->exec_err ) ]++;
194193

195194
/* Commit must succeed so no failure path. Once commit is called,
@@ -207,6 +206,9 @@ handle_microblock( fd_bank_ctx_t * ctx,
207206
fd_runtime_finalize_txn( ctx->txn_ctx->funk, ctx->txn_ctx->progcache, txn_ctx->status_cache, txn_ctx->xid, txn_ctx, bank, NULL );
208207

209208
if( FD_UNLIKELY( !txn_ctx->flags ) ) {
209+
/* If the transaction failed to fit into the block, we need to
210+
updated the transaction flag with the error code. */
211+
txn->flags = (txn->flags & 0x00FFFFFFU) | ((uint)(-txn_ctx->exec_err)<<24);
210212
fd_cost_tracker_t * cost_tracker = fd_bank_cost_tracker_locking_modify( bank );
211213
uchar * signature = (uchar *)txn_ctx->txn.payload + TXN( &txn_ctx->txn )->signature_off;
212214
int res = fd_cost_tracker_calculate_cost_and_add( cost_tracker, txn_ctx );

src/flamenco/runtime/fd_cost_tracker.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,26 @@ typedef struct fd_cost_tracker fd_cost_tracker_t;
8484

8585
FD_PROTOTYPES_BEGIN
8686

87+
static inline int
88+
fd_cost_tracker_err_to_runtime_err( int err ) {
89+
switch( err ) {
90+
case FD_COST_TRACKER_SUCCESS:
91+
return FD_RUNTIME_EXECUTE_SUCCESS;
92+
case FD_COST_TRACKER_ERROR_WOULD_EXCEED_BLOCK_MAX_LIMIT:
93+
return FD_RUNTIME_TXN_ERR_WOULD_EXCEED_MAX_BLOCK_COST_LIMIT;
94+
case FD_COST_TRACKER_ERROR_WOULD_EXCEED_VOTE_MAX_LIMIT:
95+
return FD_RUNTIME_TXN_ERR_WOULD_EXCEED_MAX_VOTE_COST_LIMIT;
96+
case FD_COST_TRACKER_ERROR_WOULD_EXCEED_ACCOUNT_MAX_LIMIT:
97+
return FD_RUNTIME_TXN_ERR_WOULD_EXCEED_MAX_ACCOUNT_COST_LIMIT;
98+
case FD_COST_TRACKER_ERROR_WOULD_EXCEED_ACCOUNT_DATA_BLOCK_LIMIT:
99+
return FD_RUNTIME_TXN_ERR_WOULD_EXCEED_ACCOUNT_DATA_BLOCK_LIMIT;
100+
case FD_COST_TRACKER_ERROR_WOULD_EXCEED_ACCOUNT_DATA_TOTAL_LIMIT:
101+
return FD_RUNTIME_TXN_ERR_WOULD_EXCEED_ACCOUNT_DATA_TOTAL_LIMIT;
102+
default:
103+
__builtin_unreachable();
104+
}
105+
}
106+
87107
FD_FN_CONST ulong
88108
fd_cost_tracker_align( void );
89109

src/flamenco/runtime/fd_runtime.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -982,7 +982,8 @@ fd_runtime_finalize_txn( fd_funk_t * funk,
982982
fd_cost_tracker_t * cost_tracker = fd_bank_cost_tracker_locking_modify( bank );
983983
int res = fd_cost_tracker_calculate_cost_and_add( cost_tracker, txn_ctx );
984984
if( FD_UNLIKELY( res!=FD_COST_TRACKER_SUCCESS ) ) {
985-
txn_ctx->flags = 0U;
985+
txn_ctx->exec_err = fd_cost_tracker_err_to_runtime_err( res );
986+
txn_ctx->flags = 0U;
986987
}
987988
fd_bank_cost_tracker_end_locking_modify( bank );
988989

0 commit comments

Comments
 (0)