Skip to content

Commit 14c4245

Browse files
runtime: txn_ctx cleanup pt 1
1 parent 958c1f8 commit 14c4245

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+956
-985
lines changed

book/api/metrics-generated.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,6 +1045,10 @@
10451045
| <span class="metrics-name">bankf_&#8203;transaction_&#8203;result</span><br/>{transaction_&#8203;result="<span class="metrics-enum">insufficient_&#8203;funds_&#8203;for_&#8203;rent</span>"} | counter | Result of loading and executing a transaction. (The transaction would leave an account with a lower balance than the rent-exempt minimum) |
10461046
| <span class="metrics-name">bankf_&#8203;transaction_&#8203;result</span><br/>{transaction_&#8203;result="<span class="metrics-enum">unbalanced_&#8203;transaction</span>"} | counter | Result of loading and executing a transaction. (The total referenced account lamports before and after the transaction was unbalanced) |
10471047
| <span class="metrics-name">bankf_&#8203;transaction_&#8203;result</span><br/>{transaction_&#8203;result="<span class="metrics-enum">bundle_&#8203;peer</span>"} | counter | Result of loading and executing a transaction. (The transaction was part of a bundle and an earlier transaction in the bundle failed) |
1048+
| <span class="metrics-name">bankf_&#8203;transaction_&#8203;landed</span><br/>{transaction_&#8203;landed="<span class="metrics-enum">landed_&#8203;success</span>"} | counter | Whether a transaction landed in the block or not. (Transaction landed) |
1049+
| <span class="metrics-name">bankf_&#8203;transaction_&#8203;landed</span><br/>{transaction_&#8203;landed="<span class="metrics-enum">landed_&#8203;fees_&#8203;only</span>"} | counter | Whether a transaction landed in the block or not. (Transaction landed, but was fees only and did not execute) |
1050+
| <span class="metrics-name">bankf_&#8203;transaction_&#8203;landed</span><br/>{transaction_&#8203;landed="<span class="metrics-enum">landed_&#8203;failed</span>"} | counter | Whether a transaction landed in the block or not. (Transaction landed, but failed to execute) |
1051+
| <span class="metrics-name">bankf_&#8203;transaction_&#8203;landed</span><br/>{transaction_&#8203;landed="<span class="metrics-enum">unlanded</span>"} | counter | Whether a transaction landed in the block or not. (Transaction did not land) |
10481052

10491053
</div>
10501054

src/disco/gui/fd_gui.c

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -434,32 +434,11 @@ fd_gui_txn_waterfall_snap( fd_gui_t * gui,
434434
cur->out.bank_invalid +=
435435
bank_metrics[ MIDX( COUNTER, BANK, PROCESSING_FAILED ) ];
436436
} else {
437-
cur->out.block_success += bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_SUCCESS ) ];
438-
cur->out.block_fail +=
439-
bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_INSTRUCTON_ERROR ) ];
440-
441-
cur->out.bank_invalid +=
442-
bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_ACCOUNT_NOT_FOUND ) ]
443-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_PROGRAM_ACCOUNT_NOT_FOUND ) ]
444-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_INSUFFICIENT_FUNDS_FOR_FEE ) ]
445-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_INVALID_ACCOUNT_FOR_FEE ) ]
446-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_ALREADY_PROCESSED ) ]
447-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_BLOCKHASH_NOT_FOUND ) ]
448-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_INVALID_PROGRAM_FOR_EXECUTION ) ]
449-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_ADDRESS_LOOKUP_TABLE_NOT_FOUND ) ]
450-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_INVALID_ADDRESS_LOOKUP_TABLE_OWNER ) ]
451-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_INVALID_ADDRESS_LOOKUP_TABLE_DATA ) ]
452-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_INVALID_ADDRESS_LOOKUP_TABLE_INDEX ) ]
453-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_MAX_LOADED_ACCOUNTS_DATA_SIZE_EXCEEDED ) ]
454-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_DUPLICATE_INSTRUCTION ) ]
455-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_INVALID_LOADED_ACCOUNTS_DATA_SIZE_LIMIT ) ]
456-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_ACCOUNT_IN_USE ) ]
457-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_ACCOUNT_LOADED_TWICE ) ]
458-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_SIGNATURE_FAILURE ) ]
459-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_TOO_MANY_ACCOUNT_LOCKS ) ]
460-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_BUNDLE_PEER ) ]
461-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_INSUFFICIENT_FUNDS_FOR_RENT ) ]
462-
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_UNBALANCED_TRANSACTION ) ];
437+
cur->out.block_success += bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_LANDED_LANDED_SUCCESS ) ];
438+
cur->out.block_fail +=
439+
bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_LANDED_LANDED_FEES_ONLY ) ]
440+
+ bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_LANDED_LANDED_FAILED ) ];
441+
cur->out.bank_invalid += bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_LANDED_UNLANDED ) ];
463442

464443
cur->out.bank_nonce_already_advanced = bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_NONCE_ALREADY_ADVANCED ) ];
465444
cur->out.bank_nonce_advance_failed = bank_metrics[ MIDX( COUNTER, BANKF, TRANSACTION_RESULT_NONCE_ADVANCE_FAILED ) ];

src/disco/metrics/generated/fd_metrics_bankf.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,8 @@ const fd_metrics_meta_t FD_METRICS_BANKF[FD_METRICS_BANKF_TOTAL] = {
2828
DECLARE_METRIC_ENUM( BANKF_TRANSACTION_RESULT, COUNTER, TRANSACTION_RESULT, INSUFFICIENT_FUNDS_FOR_RENT ),
2929
DECLARE_METRIC_ENUM( BANKF_TRANSACTION_RESULT, COUNTER, TRANSACTION_RESULT, UNBALANCED_TRANSACTION ),
3030
DECLARE_METRIC_ENUM( BANKF_TRANSACTION_RESULT, COUNTER, TRANSACTION_RESULT, BUNDLE_PEER ),
31+
DECLARE_METRIC_ENUM( BANKF_TRANSACTION_LANDED, COUNTER, TRANSACTION_LANDED, LANDED_SUCCESS ),
32+
DECLARE_METRIC_ENUM( BANKF_TRANSACTION_LANDED, COUNTER, TRANSACTION_LANDED, LANDED_FEES_ONLY ),
33+
DECLARE_METRIC_ENUM( BANKF_TRANSACTION_LANDED, COUNTER, TRANSACTION_LANDED, LANDED_FAILED ),
34+
DECLARE_METRIC_ENUM( BANKF_TRANSACTION_LANDED, COUNTER, TRANSACTION_LANDED, UNLANDED ),
3135
};

src/disco/metrics/generated/fd_metrics_bankf.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,19 @@
4040
#define FD_METRICS_COUNTER_BANKF_TRANSACTION_RESULT_UNBALANCED_TRANSACTION_OFF (40UL)
4141
#define FD_METRICS_COUNTER_BANKF_TRANSACTION_RESULT_BUNDLE_PEER_OFF (41UL)
4242

43-
#define FD_METRICS_BANKF_TOTAL (26UL)
43+
#define FD_METRICS_COUNTER_BANKF_TRANSACTION_LANDED_OFF (42UL)
44+
#define FD_METRICS_COUNTER_BANKF_TRANSACTION_LANDED_NAME "bankf_transaction_landed"
45+
#define FD_METRICS_COUNTER_BANKF_TRANSACTION_LANDED_TYPE (FD_METRICS_TYPE_COUNTER)
46+
#define FD_METRICS_COUNTER_BANKF_TRANSACTION_LANDED_DESC "Whether a transaction landed in the block or not."
47+
#define FD_METRICS_COUNTER_BANKF_TRANSACTION_LANDED_CVT (FD_METRICS_CONVERTER_NONE)
48+
#define FD_METRICS_COUNTER_BANKF_TRANSACTION_LANDED_CNT (4UL)
49+
50+
#define FD_METRICS_COUNTER_BANKF_TRANSACTION_LANDED_LANDED_SUCCESS_OFF (42UL)
51+
#define FD_METRICS_COUNTER_BANKF_TRANSACTION_LANDED_LANDED_FEES_ONLY_OFF (43UL)
52+
#define FD_METRICS_COUNTER_BANKF_TRANSACTION_LANDED_LANDED_FAILED_OFF (44UL)
53+
#define FD_METRICS_COUNTER_BANKF_TRANSACTION_LANDED_UNLANDED_OFF (45UL)
54+
55+
#define FD_METRICS_BANKF_TOTAL (30UL)
4456
extern const fd_metrics_meta_t FD_METRICS_BANKF[FD_METRICS_BANKF_TOTAL];
4557

4658
#endif /* HEADER_fd_src_disco_metrics_generated_fd_metrics_bankf_h */

src/disco/metrics/generated/fd_metrics_enums.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,17 @@
546546
#define FD_METRICS_ENUM_TRANSACTION_RESULT_V_BUNDLE_PEER_IDX 25
547547
#define FD_METRICS_ENUM_TRANSACTION_RESULT_V_BUNDLE_PEER_NAME "bundle_peer"
548548

549+
#define FD_METRICS_ENUM_TRANSACTION_LANDED_NAME "transaction_landed"
550+
#define FD_METRICS_ENUM_TRANSACTION_LANDED_CNT (4UL)
551+
#define FD_METRICS_ENUM_TRANSACTION_LANDED_V_LANDED_SUCCESS_IDX 0
552+
#define FD_METRICS_ENUM_TRANSACTION_LANDED_V_LANDED_SUCCESS_NAME "landed_success"
553+
#define FD_METRICS_ENUM_TRANSACTION_LANDED_V_LANDED_FEES_ONLY_IDX 1
554+
#define FD_METRICS_ENUM_TRANSACTION_LANDED_V_LANDED_FEES_ONLY_NAME "landed_fees_only"
555+
#define FD_METRICS_ENUM_TRANSACTION_LANDED_V_LANDED_FAILED_IDX 2
556+
#define FD_METRICS_ENUM_TRANSACTION_LANDED_V_LANDED_FAILED_NAME "landed_failed"
557+
#define FD_METRICS_ENUM_TRANSACTION_LANDED_V_UNLANDED_IDX 3
558+
#define FD_METRICS_ENUM_TRANSACTION_LANDED_V_UNLANDED_NAME "unlanded"
559+
549560
#define FD_METRICS_ENUM_SHRED_PROCESSING_RESULT_NAME "shred_processing_result"
550561
#define FD_METRICS_ENUM_SHRED_PROCESSING_RESULT_CNT (6UL)
551562
#define FD_METRICS_ENUM_SHRED_PROCESSING_RESULT_V_BAD_SLOT_IDX 0

src/disco/metrics/metrics.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,8 +681,16 @@ metric introduced.
681681
<int value="25" name="BundlePeer" label="The transaction was part of a bundle and an earlier transaction in the bundle failed" />
682682
</enum>
683683

684+
<enum name="TransactionLanded">
685+
<int value="0" name="LandedSuccess" label="Transaction landed" />
686+
<int value="1" name="LandedFeesOnly" label="Transaction landed, but was fees only and did not execute" />
687+
<int value="2" name="LandedFailed" label="Transaction landed, but failed to execute" />
688+
<int value="3" name="Unlanded" label="Transaction did not land" />
689+
</enum>
690+
684691
<tile name="bankf">
685692
<counter name="TransactionResult" enum="TransactionResult" summary="Result of loading and executing a transaction." />
693+
<counter name="TransactionLanded" enum="TransactionLanded" summary="Whether a transaction landed in the block or not." />
686694
</tile>
687695

688696
<tile name="bank">

src/discof/bank/fd_bank_tile.c

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ typedef struct {
6060

6161
struct {
6262
ulong txn_result[ FD_METRICS_ENUM_TRANSACTION_RESULT_CNT ];
63+
ulong txn_landed[ FD_METRICS_ENUM_TRANSACTION_LANDED_CNT ];
6364
} metrics;
6465
} fd_bank_ctx_t;
6566

@@ -83,6 +84,7 @@ scratch_footprint( fd_topo_tile_t const * tile ) {
8384
static inline void
8485
metrics_write( fd_bank_ctx_t * ctx ) {
8586
FD_MCNT_ENUM_COPY( BANKF, TRANSACTION_RESULT, ctx->metrics.txn_result );
87+
FD_MCNT_ENUM_COPY( BANKF, TRANSACTION_LANDED, ctx->metrics.txn_landed );
8688
}
8789

8890
static int
@@ -180,32 +182,37 @@ handle_microblock( fd_bank_ctx_t * ctx,
180182
txn->flags &= ~FD_TXN_P_FLAGS_SANITIZE_SUCCESS;
181183
txn->flags &= ~FD_TXN_P_FLAGS_EXECUTE_SUCCESS;
182184

183-
txn_ctx->exec_err = fd_runtime_prepare_and_execute_txn( ctx->banks,
184-
ctx->_bank_idx,
185-
txn_ctx,
186-
txn,
187-
NULL,
188-
&ctx->exec_stack,
189-
&ctx->exec_accounts[0],
190-
NULL,
191-
NULL );
185+
fd_bank_t * bank = fd_banks_bank_query( ctx->banks, ctx->_bank_idx );
186+
FD_TEST( bank );
187+
txn_ctx->err.exec_err = fd_runtime_prepare_and_execute_txn( bank,
188+
txn_ctx,
189+
txn,
190+
NULL,
191+
&ctx->exec_stack,
192+
&ctx->exec_accounts[0],
193+
NULL,
194+
NULL );
192195

193196
/* Stash the result in the flags value so that pack can inspect it. */
194-
txn->flags = (txn->flags & 0x00FFFFFFU) | ((uint)(-txn_ctx->exec_err)<<24);
197+
txn->flags = (txn->flags & 0x00FFFFFFU) | ((uint)(-txn_ctx->err.exec_err)<<24);
195198

196-
if( FD_UNLIKELY( !(txn_ctx->flags & FD_TXN_P_FLAGS_SANITIZE_SUCCESS ) ) ) {
199+
if( FD_UNLIKELY( !txn_ctx->err.is_committable ) ) {
200+
FD_TEST( !txn_ctx->err.is_fees_only );
197201
fd_pack_rebate_sum_add_txn( ctx->rebater, txn, NULL, 1UL );
198-
ctx->metrics.txn_result[ fd_bank_err_from_runtime_err( txn_ctx->exec_err ) ]++;
202+
ctx->metrics.txn_landed[ FD_METRICS_ENUM_TRANSACTION_LANDED_V_UNLANDED_IDX ]++;
203+
ctx->metrics.txn_result[ fd_bank_err_from_runtime_err( txn_ctx->err.exec_err ) ]++;
199204
continue;
200205
}
201206

207+
if( FD_UNLIKELY( txn_ctx->err.is_fees_only ) ) ctx->metrics.txn_landed[ FD_METRICS_ENUM_TRANSACTION_LANDED_V_LANDED_FEES_ONLY_IDX ]++;
208+
else if( FD_UNLIKELY( txn_ctx->err.txn_err ) ) ctx->metrics.txn_landed[ FD_METRICS_ENUM_TRANSACTION_LANDED_V_LANDED_FAILED_IDX ]++;
209+
else ctx->metrics.txn_landed[ FD_METRICS_ENUM_TRANSACTION_LANDED_V_LANDED_SUCCESS_IDX ]++;
210+
202211
/* TXN_P_FLAGS_EXECUTE_SUCCESS means that it should be included in
203212
the block. It's a bit of a misnomer now that there are fee-only
204213
transactions. */
205-
FD_TEST( txn_ctx->flags & FD_TXN_P_FLAGS_EXECUTE_SUCCESS );
206214
txn->flags |= FD_TXN_P_FLAGS_EXECUTE_SUCCESS | FD_TXN_P_FLAGS_SANITIZE_SUCCESS;
207-
208-
ctx->metrics.txn_result[ fd_bank_err_from_runtime_err( txn_ctx->exec_err ) ]++;
215+
ctx->metrics.txn_result[ fd_bank_err_from_runtime_err( txn_ctx->err.exec_err ) ]++;
209216

210217
/* Commit must succeed so no failure path. Once commit is called,
211218
the transactions MUST be mixed into the PoH otherwise we will
@@ -221,10 +228,10 @@ handle_microblock( fd_bank_ctx_t * ctx,
221228
in finalize anyway. */
222229
fd_runtime_finalize_txn( ctx->txn_ctx->funk, ctx->txn_ctx->progcache, txn_ctx->status_cache, txn_ctx->xid, txn_ctx, bank, NULL, &tips );
223230

224-
if( FD_UNLIKELY( !txn_ctx->flags ) ) {
231+
if( FD_UNLIKELY( !txn_ctx->err.is_committable ) ) {
225232
/* If the transaction failed to fit into the block, we need to
226233
updated the transaction flag with the error code. */
227-
txn->flags = (txn->flags & 0x00FFFFFFU) | ((uint)(-txn_ctx->exec_err)<<24);
234+
txn->flags = (txn->flags & 0x00FFFFFFU) | ((uint)(-txn_ctx->err.exec_err)<<24);
228235
fd_cost_tracker_t * cost_tracker = fd_bank_cost_tracker_locking_modify( bank );
229236
uchar * signature = (uchar *)txn_ctx->txn.payload + TXN( &txn_ctx->txn )->signature_off;
230237
int res = fd_cost_tracker_calculate_cost_and_add( cost_tracker, txn_ctx );
@@ -238,8 +245,8 @@ handle_microblock( fd_bank_ctx_t * ctx,
238245
cost_tracker->account_cost_limit ));
239246
}
240247

241-
uint actual_execution_cus = (uint)(txn_ctx->compute_budget_details.compute_unit_limit - txn_ctx->compute_budget_details.compute_meter);
242-
uint actual_acct_data_cus = (uint)(txn_ctx->loaded_accounts_data_size_cost);
248+
uint actual_execution_cus = (uint)(txn_ctx->details.compute_budget.compute_unit_limit - txn_ctx->details.compute_budget.compute_meter);
249+
uint actual_acct_data_cus = (uint)(txn_ctx->details.loaded_accounts_data_size_cost);
243250

244251
int is_simple_vote = 0;
245252
if( FD_UNLIKELY( is_simple_vote = fd_txn_is_simple_vote_transaction( TXN(txn), txn->payload ) ) ) {
@@ -261,7 +268,7 @@ handle_microblock( fd_bank_ctx_t * ctx,
261268
that first the non-alt accounts are laid out, then the writable
262269
alt accounts, and finally the read-only alt accounts. */
263270
fd_txn_t * txn_descriptor = TXN( &txn_ctx->txn );
264-
fd_acct_addr_t const * writable_alt = fd_type_pun_const( txn_ctx->account_keys+txn_descriptor->acct_addr_cnt );
271+
fd_acct_addr_t const * writable_alt = fd_type_pun_const( txn_ctx->accounts.account_keys+txn_descriptor->acct_addr_cnt );
265272
fd_pack_rebate_sum_add_txn( ctx->rebater, txn, &writable_alt, 1UL );
266273

267274
/* The VM will stop executing and fail an instruction immediately if
@@ -273,7 +280,7 @@ handle_microblock( fd_bank_ctx_t * ctx,
273280
FD_LOG_ERR(( "Actual CUs unexpectedly exceeded requested amount. actual_execution_cus (%u) actual_acct_data_cus "
274281
"(%u) requested_exec_plus_acct_data_cus (%u) is_simple_vote (%i) exec_failed (%i)",
275282
actual_execution_cus, actual_acct_data_cus, requested_exec_plus_acct_data_cus, is_simple_vote,
276-
txn_ctx->exec_err ));
283+
txn_ctx->err.exec_err ));
277284
}
278285

279286
}
@@ -364,15 +371,17 @@ handle_bundle( fd_bank_ctx_t * ctx,
364371
txn->flags = (txn->flags & 0x00FFFFFFU) | ((uint)(-FD_RUNTIME_TXN_ERR_BUNDLE_PEER)<<24);
365372
continue;
366373
}
367-
368-
txn_ctx->exec_err = fd_runtime_prepare_and_execute_txn( ctx->banks, ctx->_bank_idx, txn_ctx, txn, NULL, &ctx->exec_stack, &ctx->exec_accounts[ i ], NULL, NULL );
369-
txn->flags = (txn->flags & 0x00FFFFFFU) | ((uint)(-txn_ctx->exec_err)<<24);
370-
if( FD_UNLIKELY( !(txn_ctx->flags & FD_TXN_P_FLAGS_SANITIZE_SUCCESS ) || txn_ctx->exec_err ) ) {
374+
fd_bank_t * bank = fd_banks_bank_query( ctx->banks, ctx->_bank_idx );
375+
FD_TEST( bank );
376+
txn_ctx->bundle.is_bundle = 1;
377+
txn_ctx->err.exec_err = fd_runtime_prepare_and_execute_txn( bank, txn_ctx, txn, NULL, &ctx->exec_stack, &ctx->exec_accounts[ i ], NULL, NULL );
378+
txn->flags = (txn->flags & 0x00FFFFFFU) | ((uint)(-txn_ctx->err.exec_err)<<24);
379+
if( FD_UNLIKELY( !txn_ctx->err.is_committable || txn_ctx->err.exec_err!=FD_RUNTIME_EXECUTE_SUCCESS ) ) {
371380
execution_success = 0;
372381
continue;
373382
}
374383

375-
writable_alt[i] = fd_type_pun_const( txn_ctx->account_keys+TXN( &txn_ctx->txn )->acct_addr_cnt );
384+
writable_alt[i] = fd_type_pun_const( txn_ctx->accounts.account_keys+TXN( &txn_ctx->txn )->acct_addr_cnt );
376385
}
377386

378387
/* If all of the transactions in the bundle executed successfully, we
@@ -388,8 +397,8 @@ handle_bundle( fd_bank_ctx_t * ctx,
388397

389398
txns[ i ].flags |= FD_TXN_P_FLAGS_EXECUTE_SUCCESS | FD_TXN_P_FLAGS_SANITIZE_SUCCESS;
390399
fd_runtime_finalize_txn( txn_ctx->funk, txn_ctx->progcache, txn_ctx->status_cache, txn_ctx->xid, txn_ctx, bank, NULL, &tips[ i ] );
391-
if( FD_UNLIKELY( !txn_ctx->flags ) ) {
392-
txns[ i ].flags = (txns[ i ].flags & 0x00FFFFFFU) | ((uint)(-txn_ctx->exec_err)<<24);
400+
if( FD_UNLIKELY( !txn_ctx->err.is_committable ) ) {
401+
txns[ i ].flags = (txns[ i ].flags & 0x00FFFFFFU) | ((uint)(-txn_ctx->err.exec_err)<<24);
393402
fd_cost_tracker_t * cost_tracker = fd_bank_cost_tracker_locking_modify( bank );
394403
int res = fd_cost_tracker_calculate_cost_and_add( cost_tracker, txn_ctx );
395404
FD_LOG_HEXDUMP_WARNING(( "txn", txns[ i ].payload, txns[ i ].payload_sz ));
@@ -402,8 +411,8 @@ handle_bundle( fd_bank_ctx_t * ctx,
402411
cost_tracker->account_cost_limit ));
403412
}
404413

405-
uint actual_execution_cus = (uint)(txn_ctx->compute_budget_details.compute_unit_limit - txn_ctx->compute_budget_details.compute_meter);
406-
uint actual_acct_data_cus = (uint)(txn_ctx->loaded_accounts_data_size_cost);
414+
uint actual_execution_cus = (uint)(txn_ctx->details.compute_budget.compute_unit_limit - txn_ctx->details.compute_budget.compute_meter);
415+
uint actual_acct_data_cus = (uint)(txn_ctx->details.loaded_accounts_data_size_cost);
407416
if( FD_UNLIKELY( fd_txn_is_simple_vote_transaction( TXN( &txns[ i ] ), txns[ i ].payload ) ) ) {
408417
actual_execution_cus = FD_PACK_VOTE_DEFAULT_COMPUTE_UNITS;
409418
actual_acct_data_cus = 0U;

0 commit comments

Comments
 (0)