Skip to content

Commit f86def8

Browse files
committed
flamenco: nonce program use previous blockhash entry lamports-per-sig instead of current
1 parent 31e1c3a commit f86def8

File tree

5 files changed

+31
-24
lines changed

5 files changed

+31
-24
lines changed

src/discof/replay/fd_replay_tile.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,7 @@ publish_slot_completed( fd_replay_tile_t * ctx,
755755
}
756756

757757
fd_hash_t const * bank_hash = fd_bank_bank_hash_query( bank );
758-
fd_hash_t const * block_hash = fd_blockhashes_peek_last( fd_bank_block_hash_queue_query( bank ) );
758+
fd_hash_t const * block_hash = fd_blockhashes_peek_last_hash( fd_bank_block_hash_queue_query( bank ) );
759759
FD_TEST( bank_hash );
760760
FD_TEST( block_hash );
761761

@@ -1379,7 +1379,7 @@ publish_reset( fd_replay_tile_t * ctx,
13791379
fd_bank_t * bank ) {
13801380
if( FD_UNLIKELY( ctx->replay_out->idx==ULONG_MAX ) ) return;
13811381

1382-
fd_hash_t const * block_hash = fd_blockhashes_peek_last( fd_bank_block_hash_queue_query( bank ) );
1382+
fd_hash_t const * block_hash = fd_blockhashes_peek_last_hash( fd_bank_block_hash_queue_query( bank ) );
13831383
FD_TEST( block_hash );
13841384

13851385
fd_poh_reset_t * reset = fd_chunk_to_laddr( ctx->replay_out->mem, ctx->replay_out->chunk );
@@ -1439,7 +1439,7 @@ boot_genesis( fd_replay_tile_t * ctx,
14391439
static const fd_txncache_fork_id_t txncache_root = { .val = USHORT_MAX };
14401440
bank->txncache_fork_id = fd_txncache_attach_child( ctx->txncache, txncache_root );
14411441

1442-
fd_hash_t const * block_hash = fd_blockhashes_peek_last( fd_bank_block_hash_queue_query( bank ) );
1442+
fd_hash_t const * block_hash = fd_blockhashes_peek_last_hash( fd_bank_block_hash_queue_query( bank ) );
14431443
fd_txncache_finalize_fork( ctx->txncache, bank->txncache_fork_id, 0UL, block_hash->uc );
14441444

14451445
publish_stake_weights( ctx, stem, bank, 0 );
@@ -2180,7 +2180,7 @@ process_tower_slot_done( fd_replay_tile_t * ctx,
21802180
fd_memcpy( reset->completed_block_id, &block_id_ele->block_id, sizeof(fd_hash_t) );
21812181

21822182
fd_blockhashes_t const * block_hash_queue = fd_bank_block_hash_queue_query( bank );
2183-
fd_hash_t const * last_hash = fd_blockhashes_peek_last( block_hash_queue );
2183+
fd_hash_t const * last_hash = fd_blockhashes_peek_last_hash( block_hash_queue );
21842184
FD_TEST( last_hash );
21852185
fd_memcpy( reset->completed_blockhash, last_hash->uc, sizeof(fd_hash_t) );
21862186

src/discof/restore/utils/fd_ssload.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ fd_ssload_recover( fd_snapshot_manifest_t * manifest,
126126

127127
/* PoH */
128128
fd_blockhashes_t const * bhq = fd_bank_block_hash_queue_query( bank );
129-
fd_hash_t const * last_hash = fd_blockhashes_peek_last( bhq );
129+
fd_hash_t const * last_hash = fd_blockhashes_peek_last_hash( bhq );
130130
if( FD_LIKELY( last_hash ) ) fd_bank_poh_set( bank, *last_hash );
131131

132132
fd_bank_capitalization_set( bank, manifest->capitalization );

src/flamenco/runtime/fd_blockhashes.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,18 @@ fd_blockhashes_check_age( fd_blockhashes_t const * blockhashes,
106106
ulong max_age );
107107

108108
FD_FN_PURE static inline fd_hash_t const *
109-
fd_blockhashes_peek_last( fd_blockhashes_t const * blockhashes ) {
109+
fd_blockhashes_peek_last_hash( fd_blockhashes_t const * blockhashes ) {
110110
if( FD_UNLIKELY( fd_blockhash_deq_empty( blockhashes->d.deque ) ) ) return 0;
111111
return &fd_blockhash_deq_peek_tail_const( blockhashes->d.deque )->hash;
112112
}
113113

114+
115+
FD_FN_PURE static inline fd_blockhash_info_t const *
116+
fd_blockhashes_peek_last( fd_blockhashes_t const * blockhashes ) {
117+
if( FD_UNLIKELY( fd_blockhash_deq_empty( blockhashes->d.deque ) ) ) return 0;
118+
return fd_blockhash_deq_peek_tail_const( blockhashes->d.deque );
119+
}
120+
114121
FD_PROTOTYPES_END
115122

116123
#endif /* HEADER_fd_src_flamenco_runtime_fd_blockhashes_h */

src/flamenco/runtime/fd_runtime.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1342,7 +1342,7 @@ fd_runtime_process_new_epoch( fd_banks_t * banks,
13421342
/* Distribute rewards. This involves calculating the rewards for
13431343
every vote and stake account. */
13441344

1345-
fd_hash_t const * parent_blockhash = fd_blockhashes_peek_last( fd_bank_block_hash_queue_query( bank ) );
1345+
fd_hash_t const * parent_blockhash = fd_blockhashes_peek_last_hash( fd_bank_block_hash_queue_query( bank ) );
13461346
fd_begin_partitioned_rewards( bank,
13471347
accdb,
13481348
xid,

src/flamenco/runtime/program/fd_system_program_nonce.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,19 @@ require_acct_recent_blockhashes( fd_exec_instr_ctx_t * ctx,
5959

6060
static int
6161
most_recent_block_hash( fd_exec_instr_ctx_t * ctx,
62-
fd_hash_t * out ) {
62+
fd_blockhash_info_t * out ) {
6363
/* The environment config blockhash comes from `bank.last_blockhash_and_lamports_per_signature()`,
6464
which takes the top element from the blockhash queue.
6565
https://github.com/anza-xyz/agave/blob/v2.1.6/programs/system/src/system_instruction.rs#L47 */
66-
fd_blockhashes_t const * blockhashes = fd_bank_block_hash_queue_query( ctx->txn_ctx->bank );
67-
fd_hash_t const * last_hash = fd_blockhashes_peek_last( blockhashes );
68-
if( FD_UNLIKELY( last_hash==NULL ) ) {
66+
fd_blockhashes_t const * blockhashes = fd_bank_block_hash_queue_query( ctx->txn_ctx->bank );
67+
fd_blockhash_info_t const * last_bhash_info = fd_blockhashes_peek_last( blockhashes );
68+
if( FD_UNLIKELY( last_bhash_info==NULL ) ) {
6969
// Agave panics if this blockhash was never set at the start of the txn batch
7070
ctx->txn_ctx->err.custom_err = FD_SYSTEM_PROGRAM_ERR_NONCE_NO_RECENT_BLOCKHASHES;
7171
return FD_EXECUTOR_INSTR_ERR_CUSTOM_ERR;
7272
}
7373

74-
*out = *last_hash;
74+
*out = *last_bhash_info;
7575
return FD_EXECUTOR_INSTR_SUCCESS;
7676
}
7777

@@ -181,14 +181,14 @@ fd_system_program_advance_nonce_account( fd_exec_instr_ctx_t * ctx,
181181

182182
/* https://github.com/solana-labs/solana/blob/v1.17.23/programs/system/src/system_instruction.rs#L45 */
183183

184-
fd_hash_t blockhash;
184+
fd_blockhash_info_t blockhash[1];
185185
do {
186-
int err = most_recent_block_hash( ctx, &blockhash );
186+
int err = most_recent_block_hash( ctx, blockhash );
187187
if( FD_UNLIKELY( err ) ) return err;
188188
} while(0);
189189

190190
fd_hash_t next_durable_nonce;
191-
fd_durable_nonce_from_blockhash( &next_durable_nonce, &blockhash );
191+
fd_durable_nonce_from_blockhash( &next_durable_nonce, &blockhash->hash );
192192

193193
/* https://github.com/solana-labs/solana/blob/v1.17.23/programs/system/src/system_instruction.rs#L46-L52 */
194194

@@ -208,7 +208,7 @@ fd_system_program_advance_nonce_account( fd_exec_instr_ctx_t * ctx,
208208
.authority = data->authority,
209209
.durable_nonce = next_durable_nonce,
210210
.fee_calculator = {
211-
.lamports_per_signature = fd_bank_rbh_lamports_per_sig_get( ctx->txn_ctx->bank )
211+
.lamports_per_signature = blockhash->fee_calculator.lamports_per_signature
212212
}
213213
} }
214214
} }
@@ -364,14 +364,14 @@ fd_system_program_withdraw_nonce_account( fd_exec_instr_ctx_t * ctx,
364364

365365
/* https://github.com/solana-labs/solana/blob/v1.17.23/programs/system/src/system_instruction.rs#L109 */
366366

367-
fd_hash_t blockhash;
367+
fd_blockhash_info_t blockhash[1];
368368
do {
369-
int err = most_recent_block_hash( ctx, &blockhash );
369+
int err = most_recent_block_hash( ctx, blockhash );
370370
if( FD_UNLIKELY( err ) ) return err;
371371
} while(0);
372372

373373
fd_hash_t next_durable_nonce;
374-
fd_durable_nonce_from_blockhash( &next_durable_nonce, &blockhash );
374+
fd_durable_nonce_from_blockhash( &next_durable_nonce, &blockhash->hash );
375375

376376
/* https://github.com/solana-labs/solana/blob/v1.17.23/programs/system/src/system_instruction.rs#L110-L116 */
377377

@@ -554,14 +554,14 @@ fd_system_program_initialize_nonce_account( fd_exec_instr_ctx_t * ctx,
554554

555555
/* https://github.com/solana-labs/solana/blob/v1.17.23/programs/system/src/system_instruction.rs#L180 */
556556

557-
fd_hash_t blockhash;
557+
fd_blockhash_info_t blockhash[1];
558558
do {
559-
int err = most_recent_block_hash( ctx, &blockhash );
559+
int err = most_recent_block_hash( ctx, blockhash );
560560
if( FD_UNLIKELY( err ) ) return err;
561561
} while(0);
562562

563563
fd_hash_t durable_nonce;
564-
fd_durable_nonce_from_blockhash( &durable_nonce, &blockhash );
564+
fd_durable_nonce_from_blockhash( &durable_nonce, &blockhash->hash );
565565

566566
/* https://github.com/anza-xyz/agave/blob/v3.0.3/programs/system/src/system_instruction.rs#L185-L191 */
567567

@@ -573,7 +573,7 @@ fd_system_program_initialize_nonce_account( fd_exec_instr_ctx_t * ctx,
573573
.authority = *authorized,
574574
.durable_nonce = durable_nonce,
575575
.fee_calculator = {
576-
.lamports_per_signature = fd_bank_rbh_lamports_per_sig_get( ctx->txn_ctx->bank )
576+
.lamports_per_signature = blockhash->fee_calculator.lamports_per_signature
577577
}
578578
} }
579579
} }
@@ -877,7 +877,7 @@ fd_system_program_exec_upgrade_nonce_account( fd_exec_instr_ctx_t * ctx ) {
877877
int
878878
fd_check_transaction_age( fd_exec_txn_ctx_t * txn_ctx ) {
879879
fd_blockhashes_t const * block_hash_queue = fd_bank_block_hash_queue_query( txn_ctx->bank );
880-
fd_hash_t const * last_blockhash = fd_blockhashes_peek_last( block_hash_queue );
880+
fd_hash_t const * last_blockhash = fd_blockhashes_peek_last_hash( block_hash_queue );
881881
if( FD_UNLIKELY( !last_blockhash ) ) {
882882
FD_LOG_CRIT(( "blockhash queue is empty" ));
883883
}

0 commit comments

Comments
 (0)