Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/ballet/txn/fd_txn.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,10 @@
transaction, using fd_txn_parse() verification rules. */
#define FD_TXN_MIN_SERIALIZED_SZ (134UL)

/* FD_TXN_MAX_BLOCK_HEIGHT: Max number of accepted blockhashes before a
transaction expires. */
#define FD_TXN_MAX_BLOCK_HEIGHT 151UL

/* BEGIN Agave limits */

/* "Maximum number of accounts that a transaction may lock.
Expand Down
24 changes: 12 additions & 12 deletions src/disco/bundle/fd_bundle_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -462,12 +462,12 @@ fd_bundle_tile_publish_bundle_txn(

fd_txn_m_t * txnm = fd_chunk_to_laddr( ctx->verify_out.mem, ctx->verify_out.chunk );
*txnm = (fd_txn_m_t) {
.reference_slot = 0UL,
.payload_sz = (ushort)txn_sz,
.txn_t_sz = 0U,
.source_ipv4 = source_ipv4,
.source_tpu = FD_TXN_M_TPU_SOURCE_BUNDLE,
.block_engine = {
.reference_block_height = 0UL,
.payload_sz = (ushort)txn_sz,
.txn_t_sz = 0U,
.source_ipv4 = source_ipv4,
.source_tpu = FD_TXN_M_TPU_SOURCE_BUNDLE,
.block_engine = {
.bundle_id = ctx->bundle_seq,
.bundle_txn_cnt = bundle_txn_cnt,
.commission = (uchar)ctx->builder_commission
Expand Down Expand Up @@ -500,12 +500,12 @@ fd_bundle_tile_publish_txn(
) {
fd_txn_m_t * txnm = fd_chunk_to_laddr( ctx->verify_out.mem, ctx->verify_out.chunk );
*txnm = (fd_txn_m_t) {
.reference_slot = 0UL,
.payload_sz = (ushort)txn_sz,
.txn_t_sz = 0U,
.source_ipv4 = source_ipv4,
.source_tpu = FD_TXN_M_TPU_SOURCE_BUNDLE,
.block_engine = {
.reference_block_height = 0UL,
.payload_sz = (ushort)txn_sz,
.txn_t_sz = 0U,
.source_ipv4 = source_ipv4,
.source_tpu = FD_TXN_M_TPU_SOURCE_BUNDLE,
.block_engine = {
.bundle_id = 0UL,
.bundle_txn_cnt = 1UL,
.commission = 0U,
Expand Down
8 changes: 4 additions & 4 deletions src/disco/fd_txn_m.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@
#define FD_TXN_M_TPU_SOURCE_SEND (5UL)

struct fd_txn_m {
/* The computed slot that this transaction is referencing, aka. the
slot number of the reference_blockhash. If it could not be
determined, this will be the current slot. */
ulong reference_slot;
/* The computed block height that this transaction is referencing, aka. the
block height of the slot having the reference_blockhash. If it could not be
determined, this will be block height of the current slot. */
ulong reference_block_height;

ushort payload_sz;

Expand Down
2 changes: 1 addition & 1 deletion src/disco/fd_txn_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ struct __attribute__((aligned(64))) fd_txn_p {
uint rebated_cus; /* requested_exec_plus_acct_data_cus-actual used CUs. Pack reads this for CU rebating. */
uint actual_consumed_cus; /* non_execution_cus+real execution CUs+real account data cus. PoH reads this for block CU counting. */
} bank_cu; /* Populated by bank. */
ulong blockhash_slot; /* Slot provided by resolv tile when txn arrives at the pack tile. Used when txn is in extra storage in pack. */
ulong block_height; /* Block height provided by resolv tile when txn arrives at the pack tile. Used when txn is in extra storage in pack. */
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the blockhash_block_height, not block_height

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, I missed that because this field seems only used when FD_PACK_USE_EXTRA_STORAGE is on.

};
/* The time that the transaction arrived to the pack tile in ticks. Set by pack and intended to be read from a transaction on a pack->bank link. */
long scheduler_arrival_time_nanos;
Expand Down
2 changes: 1 addition & 1 deletion src/disco/pack/fd_pack.c
Original file line number Diff line number Diff line change
Expand Up @@ -1977,7 +1977,7 @@ fd_pack_schedule_impl( fd_pack_t * pack,
/* Copied out to 1280 bytes, which copies some other fields we needed to
copy anyway. */
FD_STATIC_ASSERT( offsetof(fd_txn_p_t, payload_sz )+sizeof(((fd_txn_p_t*)NULL)->payload_sz )<=1280UL, nt_memcpy );
FD_STATIC_ASSERT( offsetof(fd_txn_p_t, blockhash_slot )+sizeof(((fd_txn_p_t*)NULL)->blockhash_slot)<=1280UL, nt_memcpy );
FD_STATIC_ASSERT( offsetof(fd_txn_p_t, block_height )+sizeof(((fd_txn_p_t*)NULL)->block_height )<=1280UL, nt_memcpy );
FD_STATIC_ASSERT( offsetof(fd_txn_p_t, scheduler_arrival_time_nanos )+sizeof(((fd_txn_p_t*)NULL)->scheduler_arrival_time_nanos )<=1280UL, nt_memcpy );
FD_STATIC_ASSERT( offsetof(fd_txn_p_t, source_tpu )+sizeof(((fd_txn_p_t*)NULL)->source_tpu )<=1280UL, nt_memcpy );
FD_STATIC_ASSERT( offsetof(fd_txn_p_t, source_ipv4 )+sizeof(((fd_txn_p_t*)NULL)->source_ipv4 )<=1280UL, nt_memcpy );
Expand Down
41 changes: 17 additions & 24 deletions src/disco/pack/fd_pack_tile.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,6 @@
transactions/microblock, that's 62k txn/sec/bank. */
#define MICROBLOCK_DURATION_NS (0L)

/* There are 151 accepted blockhashes, but those don't include skips.
This check is neither precise nor accurate, but just good enough.
The bank tile does the final check. We give a little margin for a
few percent skip rate. */
#define TRANSACTION_LIFETIME_SLOTS 160UL

/* Time is normally a long, but pack expects a ulong. Add -LONG_MIN to
the time values so that LONG_MIN maps to 0, LONG_MAX maps to
ULONG_MAX, and everything in between maps linearly with a slope of 1.
Expand Down Expand Up @@ -213,10 +207,9 @@ typedef struct {
successful transaction insert. */
long last_successful_insert;

/* highest_observed_slot stores the highest slot number we've seen
from any transaction coming from the resolv tile. When this
increases, we expire old transactions. */
ulong highest_observed_slot;
/* root_block_height stores the block height of the last rooted slot we've seen
coming from the resolv tile. When this increases, we expire old transactions. */
ulong root_block_height;

/* microblock_duration_ns, and wait_duration
respectively scaled to be in ticks instead of nanoseconds */
Expand Down Expand Up @@ -276,7 +269,7 @@ typedef struct {
ulong id;
ulong txn_cnt;
ulong txn_received;
ulong min_blockhash_slot;
ulong min_block_height;
fd_txn_e_t * _txn[ FD_PACK_MAX_TXN_PER_BUNDLE ];
fd_txn_e_t * const * bundle; /* points to _txn when non-NULL */
} current_bundle[1];
Expand Down Expand Up @@ -861,17 +854,17 @@ during_frag( fd_pack_ctx_t * ctx,
ulong addr_table_sz = 32UL*txn->addr_table_adtl_cnt;
FD_TEST( addr_table_sz<=32UL*FD_TXN_ACCT_ADDR_MAX );

if( FD_UNLIKELY( (ctx->leader_slot==ULONG_MAX) & (sig>ctx->highest_observed_slot) ) ) {
/* Using the resolv tile's knowledge of the current slot is a bit
if( FD_UNLIKELY( (ctx->leader_slot==ULONG_MAX) & (sig>ctx->root_block_height) ) ) {
/* Using the resolv tile's knowledge of the current last root block height is a bit
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rewrap to 72 columns

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. Comments are 72-wide but not the code ?

of a hack, since we don't get any info if there are no
transactions and we're not leader. We're actually in exactly
the case where that's okay though. The point of calling
expire_before long before we become leader is so that we don't
drop new but low-fee-paying transactions when pack is clogged
with expired but high-fee-paying transactions. That can only
happen if we are getting transactions. */
ctx->highest_observed_slot = sig;
ulong exp_cnt = fd_pack_expire_before( ctx->pack, fd_ulong_max( ctx->highest_observed_slot, TRANSACTION_LIFETIME_SLOTS )-TRANSACTION_LIFETIME_SLOTS );
ctx->root_block_height = sig;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't the root block height though? It's the block height of the referenced blockhash, I don't think this logic works

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea is to pass the root block height as the sig, and use it to discard already buffered txs, and the reference (= blockhash) block height of the sent tx in the reference_block_height of the fd_txn_m.
Why do you think it won't work ?

ulong exp_cnt = fd_pack_expire_before( ctx->pack, fd_ulong_max( ctx->root_block_height, FD_TXN_MAX_BLOCK_HEIGHT )-FD_TXN_MAX_BLOCK_HEIGHT );
FD_MCNT_INC( PACK, TRANSACTION_EXPIRED, exp_cnt );
}

Expand All @@ -886,7 +879,7 @@ during_frag( fd_pack_ctx_t * ctx,
}
ctx->current_bundle->id = bundle_id;
ctx->current_bundle->txn_cnt = txnm->block_engine.bundle_txn_cnt;
ctx->current_bundle->min_blockhash_slot = ULONG_MAX;
ctx->current_bundle->min_block_height = ULONG_MAX;
ctx->current_bundle->txn_received = 0UL;

if( FD_UNLIKELY( ctx->current_bundle->txn_cnt==0UL ) ) {
Expand All @@ -899,8 +892,8 @@ during_frag( fd_pack_ctx_t * ctx,

ctx->current_bundle->bundle = fd_pack_insert_bundle_init( ctx->pack, ctx->current_bundle->_txn, ctx->current_bundle->txn_cnt );
}
ctx->cur_spot = ctx->current_bundle->bundle[ ctx->current_bundle->txn_received ];
ctx->current_bundle->min_blockhash_slot = fd_ulong_min( ctx->current_bundle->min_blockhash_slot, sig );
ctx->cur_spot = ctx->current_bundle->bundle[ ctx->current_bundle->txn_received ];
ctx->current_bundle->min_block_height = fd_ulong_min( ctx->current_bundle->min_block_height, txnm->reference_block_height );
} else {
ctx->is_bundle = 0;
#if FD_PACK_USE_EXTRA_STORAGE
Expand All @@ -916,7 +909,7 @@ during_frag( fd_pack_ctx_t * ctx,
/* We want to store the current time in cur_spot so that we can
track its expiration better. We just stash it in the CU
fields, since those aren't important right now. */
ctx->cur_spot->txnp->blockhash_slot = sig;
ctx->cur_spot->txnp->blockhash_block_height = sig;
ctx->insert_to_extra = 1;
FD_MCNT_INC( PACK, TRANSACTION_INSERTED_TO_EXTRA, 1UL );
}
Expand Down Expand Up @@ -1006,7 +999,7 @@ after_frag( fd_pack_ctx_t * ctx,
}
ctx->leader_slot = leader_slot;

ulong exp_cnt = fd_pack_expire_before( ctx->pack, fd_ulong_max( ctx->leader_slot, TRANSACTION_LIFETIME_SLOTS )-TRANSACTION_LIFETIME_SLOTS );
ulong exp_cnt = fd_pack_expire_before( ctx->pack, fd_ulong_max( ctx->_became_leader->block_height, FD_TXN_MAX_BLOCK_HEIGHT )-FD_TXN_MAX_BLOCK_HEIGHT );
FD_MCNT_INC( PACK, TRANSACTION_EXPIRED, exp_cnt );

ctx->leader_bank = ctx->_became_leader->bank;
Expand Down Expand Up @@ -1076,18 +1069,18 @@ after_frag( fd_pack_ctx_t * ctx,
if( FD_UNLIKELY( ++(ctx->current_bundle->txn_received)==ctx->current_bundle->txn_cnt ) ) {
ulong deleted;
long insert_duration = -fd_tickcount();
int result = fd_pack_insert_bundle_fini( ctx->pack, ctx->current_bundle->bundle, ctx->current_bundle->txn_cnt, ctx->current_bundle->min_blockhash_slot, 0, ctx->blk_engine_cfg, &deleted );
int result = fd_pack_insert_bundle_fini( ctx->pack, ctx->current_bundle->bundle, ctx->current_bundle->txn_cnt, ctx->current_bundle->min_block_height, 0, ctx->blk_engine_cfg, &deleted );
insert_duration += fd_tickcount();
FD_MCNT_INC( PACK, TRANSACTION_DELETED, deleted );
ctx->insert_result[ result + FD_PACK_INSERT_RETVAL_OFF ] += ctx->current_bundle->txn_received;
fd_histf_sample( ctx->insert_duration, (ulong)insert_duration );
ctx->current_bundle->bundle = NULL;
}
} else {
ulong blockhash_slot = sig;
ulong block_height = sig;
ulong deleted;
long insert_duration = -fd_tickcount();
int result = fd_pack_insert_txn_fini( ctx->pack, ctx->cur_spot, blockhash_slot, &deleted );
int result = fd_pack_insert_txn_fini( ctx->pack, ctx->cur_spot, block_height, &deleted );
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a problem here though. fd_pack_insert_txn_fini should be called with the reference block hash, not the root block hash passed using sig.
Couldn't we remove this third argument and use ctx->cur_spot->txnp->reference_block_height instead, ctx->cur_sport being the second argument ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pushed a new commit where the reference block height is read by fd_pack_insert_fini from reference_block_height, when the tx come from extra storage or directly from resolv.

insert_duration += fd_tickcount();
FD_MCNT_INC( PACK, TRANSACTION_DELETED, deleted );
ctx->insert_result[ result + FD_PACK_INSERT_RETVAL_OFF ]++;
Expand Down Expand Up @@ -1270,7 +1263,7 @@ unprivileged_init( fd_topo_t * topo,
ctx->rng = rng;
ctx->ticks_per_ns = fd_tempo_tick_per_ns( NULL );
ctx->last_successful_insert = 0L;
ctx->highest_observed_slot = 0UL;
ctx->root_block_height = 0UL;
ctx->microblock_duration_ticks = (ulong)(fd_tempo_tick_per_ns( NULL )*(double)MICROBLOCK_DURATION_NS + 0.5);
#if FD_PACK_USE_EXTRA_STORAGE
ctx->insert_to_extra = 0;
Expand Down
6 changes: 4 additions & 2 deletions src/disco/tiles.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ struct __attribute__((aligned(FD_CHUNK_ALIGN))) fd_shred34 {
typedef struct fd_shred34 fd_shred34_t;

struct fd_became_leader {
ulong slot;
ulong slot;
ulong block_height;

/* Start and end time of the slot in nanoseconds (from
fd_log_wallclock()). */
Expand Down Expand Up @@ -105,12 +106,13 @@ typedef struct fd_became_leader fd_became_leader_t;
struct fd_rooted_bank {
void * bank;
ulong slot;
ulong block_height;
};

typedef struct fd_rooted_bank fd_rooted_bank_t;

struct fd_completed_bank {
ulong slot;
ulong block_height;
uchar hash[32];
};

Expand Down
1 change: 1 addition & 0 deletions src/discof/replay/fd_replay_tile.c
Original file line number Diff line number Diff line change
Expand Up @@ -1065,6 +1065,7 @@ publish_root_advanced( fd_replay_tile_t * ctx,

fd_replay_root_advanced_t * msg = fd_chunk_to_laddr( ctx->replay_out->mem, ctx->replay_out->chunk );
msg->bank_idx = bank->idx;
msg->block_height = fd_bank_block_height_get( bank );

fd_stem_publish( stem, ctx->replay_out->idx, REPLAY_SIG_ROOT_ADVANCED, ctx->replay_out->chunk, sizeof(fd_replay_root_advanced_t), 0UL, 0UL, fd_frag_meta_ts_comp( fd_tickcount() ) );
ctx->replay_out->chunk = fd_dcache_compact_next( ctx->replay_out->chunk, sizeof(fd_replay_root_advanced_t), ctx->replay_out->chunk0, ctx->replay_out->wmark );
Expand Down
1 change: 1 addition & 0 deletions src/discof/replay/fd_replay_tile.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ typedef struct fd_replay_slot_completed fd_replay_slot_completed_t;

struct fd_replay_root_advanced {
ulong bank_idx;
ulong block_height;
};

typedef struct fd_replay_root_advanced fd_replay_root_advanced_t;
Expand Down
28 changes: 15 additions & 13 deletions src/discof/resolv/fd_resolv_tile.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ typedef struct blockhash blockhash_t;

struct blockhash_map {
blockhash_t key;
ulong slot;
ulong block_height;
};

typedef struct blockhash_map blockhash_map_t;
Expand Down Expand Up @@ -133,7 +133,7 @@ typedef struct {

blockhash_map_t * blockhash_map;

ulong flushing_slot;
ulong flushing_block_height;
ulong flush_pool_idx;

/* In the full client, the resolv tile is passed only a rooted bank
Expand All @@ -154,7 +154,8 @@ typedef struct {
map_chain_t * map_chain;
lru_list_t lru_list[1];

ulong completed_slot;
ulong completed_block_height;
ulong root_block_height;
ulong blockhash_ring_idx;
blockhash_t blockhash_ring[ BLOCKHASH_RING_LEN ];

Expand Down Expand Up @@ -345,7 +346,7 @@ publish_txn( fd_resolv_ctx_t * ctx,

fd_txn_t const * txnt = fd_txn_m_txn_t( txnm );

txnm->reference_slot = ctx->flushing_slot;
txnm->reference_block_height = ctx->flushing_block_height;

if( FD_UNLIKELY( txnt->addr_table_adtl_cnt ) ) {
if( FD_UNLIKELY( !ctx->bank ) ) {
Expand All @@ -358,7 +359,7 @@ publish_txn( fd_resolv_ctx_t * ctx,

ulong realized_sz = fd_txn_m_realized_footprint( txnm, 1, 1 );
ulong tspub = fd_frag_meta_ts_comp( fd_tickcount() );
fd_stem_publish( stem, 0UL, txnm->reference_slot, ctx->out_pack->chunk, realized_sz, 0UL, 0UL, tspub );
fd_stem_publish( stem, 0UL, ctx->root_block_height, ctx->out_pack->chunk, realized_sz, 0UL, 0UL, tspub );
ctx->out_pack->chunk = fd_dcache_compact_next( ctx->out_pack->chunk, realized_sz, ctx->out_pack->chunk0, ctx->out_pack->wmark );

return 1;
Expand Down Expand Up @@ -435,13 +436,13 @@ after_frag( fd_resolv_ctx_t * ctx,
ctx->blockhash_ring_idx++;

blockhash_map_t * blockhash = map_insert( ctx->blockhash_map, *(blockhash_t *)msg->block_hash.uc );
blockhash->slot = msg->slot;
blockhash->block_height = msg->block_height;

blockhash_t * hash = (blockhash_t *)msg->block_hash.uc;
ctx->flush_pool_idx = map_chain_idx_query_const( ctx->map_chain, &hash, ULONG_MAX, ctx->pool );
ctx->flushing_slot = msg->slot;
ctx->flushing_block_height = msg->block_height;

ctx->completed_slot = msg->slot;
ctx->completed_block_height = msg->block_height;
break;
}
case REPLAY_SIG_ROOT_ADVANCED: {
Expand Down Expand Up @@ -509,11 +510,11 @@ after_frag( fd_resolv_ctx_t * ctx,
return;
}

txnm->reference_slot = ctx->completed_slot;
txnm->reference_block_height = ctx->completed_block_height;
blockhash_map_t const * blockhash = map_query_const( ctx->blockhash_map, *(blockhash_t*)( fd_txn_m_payload( txnm )+txnt->recent_blockhash_off ), NULL );
if( FD_LIKELY( blockhash ) ) {
txnm->reference_slot = blockhash->slot;
if( FD_UNLIKELY( txnm->reference_slot+151UL<ctx->completed_slot ) ) {
txnm->reference_block_height = blockhash->block_height;
if( FD_UNLIKELY( txnm->reference_block_height+FD_TXN_MAX_BLOCK_HEIGHT<ctx->root_block_height ) ) {
if( FD_UNLIKELY( txnm->block_engine.bundle_id ) ) ctx->bundle_failed = 1;
ctx->metrics.blockhash_expired++;
return;
Expand Down Expand Up @@ -569,7 +570,7 @@ after_frag( fd_resolv_ctx_t * ctx,

ulong realized_sz = fd_txn_m_realized_footprint( txnm, 1, 1 );
ulong tspub = fd_frag_meta_ts_comp( fd_tickcount() );
fd_stem_publish( stem, 0UL, txnm->reference_slot, ctx->out_pack->chunk, realized_sz, 0UL, tsorig, tspub );
fd_stem_publish( stem, 0UL, ctx->root_block_height, ctx->out_pack->chunk, realized_sz, 0UL, tsorig, tspub );
ctx->out_pack->chunk = fd_dcache_compact_next( ctx->out_pack->chunk, realized_sz, ctx->out_pack->chunk0, ctx->out_pack->wmark );
}

Expand All @@ -587,7 +588,8 @@ unprivileged_init( fd_topo_t * topo,
ctx->bundle_failed = 0;
ctx->bundle_id = 0UL;

ctx->completed_slot = 0UL;
ctx->completed_block_height = 0UL;
ctx->root_block_height = 0UL;
ctx->blockhash_ring_idx = 0UL;

ctx->flush_pool_idx = ULONG_MAX;
Expand Down
5 changes: 4 additions & 1 deletion src/discoh/poh/fd_poh_tile.c
Original file line number Diff line number Diff line change
Expand Up @@ -978,6 +978,7 @@ fd_ext_bank_load_account( void const * bank,
CALLED_FROM_RUST static void
publish_became_leader( fd_poh_ctx_t * ctx,
ulong slot,
ulong block_height,
ulong epoch ) {
double tick_per_ns = fd_tempo_tick_per_ns( NULL );
fd_histf_sample( ctx->begin_leader_delay, (ulong)((double)(fd_log_wallclock()-ctx->reset_slot_start_ns)/tick_per_ns) );
Expand Down Expand Up @@ -1035,6 +1036,7 @@ publish_became_leader( fd_poh_ctx_t * ctx,
leader->max_microblocks_in_slot = ctx->max_microblocks_per_slot;
leader->ticks_per_slot = ctx->ticks_per_slot;
leader->total_skipped_ticks = ctx->ticks_per_slot*(slot-ctx->reset_slot);
leader->block_height = block_height;
leader->epoch = epoch;
leader->bundle->config[0] = config[0];

Expand Down Expand Up @@ -1068,6 +1070,7 @@ publish_became_leader( fd_poh_ctx_t * ctx,
CALLED_FROM_RUST void
fd_ext_poh_begin_leader( void const * bank,
ulong slot,
ulong block_height,
ulong epoch,
ulong hashcnt_per_tick,
ulong cus_block_limit,
Expand Down Expand Up @@ -1150,7 +1153,7 @@ fd_ext_poh_begin_leader( void const * bank,
FD_TEST( ctx->highwater_leader_slot==ULONG_MAX || slot>=ctx->highwater_leader_slot );
ctx->highwater_leader_slot = fd_ulong_max( fd_ulong_if( ctx->highwater_leader_slot==ULONG_MAX, 0UL, ctx->highwater_leader_slot ), slot );

publish_became_leader( ctx, slot, epoch );
publish_became_leader( ctx, slot, block_height, epoch );
FD_LOG_INFO(( "fd_ext_poh_begin_leader(slot=%lu, highwater_leader_slot=%lu, last_slot=%lu, last_hashcnt=%lu)", slot, ctx->highwater_leader_slot, ctx->last_slot, ctx->last_hashcnt ));

fd_ext_poh_write_unlock();
Expand Down
Loading
Loading