Skip to content

Commit 220890f

Browse files
committed
Add msg import info to collatedBlock session stats
1 parent a13be2e commit 220890f

File tree

10 files changed

+124
-33
lines changed

10 files changed

+124
-33
lines changed

crypto/block/block.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,15 @@ bool BlockLimitStatus::would_fit(unsigned cls, ton::LogicalTime end_lt, td::uint
768768
limits.collated_data.fits(cls, collated_data_size_estimate));
769769
}
770770

771+
double BlockLimitStatus::load_fraction(unsigned cls) const {
772+
if (cls >= ParamLimits::limits_cnt) {
773+
return 0.0;
774+
}
775+
return std::max({(double)estimate_block_size() / (double)limits.bytes.limit(cls),
776+
(double)gas_used / (double)limits.gas.limit(cls),
777+
(double)collated_data_size_estimate / (double)limits.collated_data.limit(cls)});
778+
}
779+
771780
// SETS: account_dict, shard_libraries_, mc_state_extra
772781
// total_balance{,_extra}, total_validator_fees
773782
// SETS: out_msg_queue, processed_upto_, ihr_pending (via unpack_out_msg_queue_info)

crypto/block/block.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,9 @@ struct ParamLimits {
242242
td::uint32 hard() const {
243243
return limits_[3];
244244
}
245+
td::uint32 limit(unsigned cls) const {
246+
return limits_[cls];
247+
}
245248
bool compute_medium_limit() {
246249
limits_[2] = soft() + ((hard() - soft()) >> 1);
247250
return true;
@@ -299,6 +302,7 @@ struct BlockLimitStatus {
299302
bool fits(unsigned cls) const;
300303
bool would_fit(unsigned cls, ton::LogicalTime end_lt, td::uint64 more_gas,
301304
const vm::NewCellStorageStat::Stat* extra = nullptr) const;
305+
double load_fraction(unsigned cls) const;
302306
bool add_cell(Ref<vm::Cell> cell) {
303307
st_stat.add_cell(std::move(cell));
304308
return true;

crypto/smartcont/CreateState.fif

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,16 @@ variable special-dict
179179
// bytes-limits gas-limits lt-limits -- c
180180
{ <b x{5d} s, 3 roll param_limits, rot param_limits, swap param_limits, b>
181181
} : make-block-limits
182+
// bytes-limits gas-limits lt-limits collated-data-limits imported_queue_bytes imported_queue_msgs -- c
183+
{ <b x{5e} s,
184+
6 roll param_limits, 5 roll param_limits, 4 roll param_limits, 3 roll param_limits,
185+
x{d3} s, 2 roll 32 u, 1 roll 32 u, b>
186+
} : make-block-limits-v2
187+
182188
{ make-block-limits 22 config! } : config.mc_block_limits!
183189
{ make-block-limits 23 config! } : config.block_limits!
190+
{ make-block-limits-v2 22 config! } : config.mc_block_limits_v2!
191+
{ make-block-limits-v2 23 config! } : config.block_limits_v2!
184192

185193
// mc-block-create-fee bc-block-create-fee
186194
{ <b x{6b} s, rot Gram, swap Gram, b> } : make-block-create-fees

tl/generate/scheme/ton_api.tl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -933,11 +933,18 @@ validatorStats.stats flags:#
933933
validatorStats.blockLimitsStatus
934934
bytes:int gas:int lt_delta:int collated_data_bytes:int
935935
cat_bytes:int cat_gas:int cat_lt_delta:int cat_collated_data_bytes:int
936+
load_fraction_queue_cleanup:double load_fraction_dispatch:double
937+
load_fraction_internals:double load_fraction_externals:double
938+
load_fraction_new_msgs:double
936939
limits_log:string = validatorStats.BlockLimitsStatus;
937-
validatorStats.extMsgsStats
940+
validatorStats.blockStats.extMsgsStats
938941
ext_msgs_total:int ext_msgs_filtered:int ext_msgs_accepted:int ext_msgs_rejected:int = validatorStats.ExtMsgsStats;
942+
validatorStats.blockStats.neighborStats shard:tonNode.shardId is_trivial:Bool is_local:Bool msg_limit:int
943+
processed_msgs:int skipped_msgs:int limit_reached:Bool = validatorStats.blockStats.NeighborStats;
939944
validatorStats.blockStats
940-
ext_msgs:validatorStats.extMsgsStats transactions:int shard_configuration:(vector tonNode.blockIdExt) = validatorStats.BlockStats;
945+
ext_msgs:validatorStats.blockStats.extMsgsStats transactions:int shard_configuration:(vector tonNode.blockIdExt)
946+
old_out_msg_queue_size:long new_out_msg_queue_size:long msg_queue_cleaned:int
947+
neighbors:(vector validatorStats.blockStats.neighborStats) = validatorStats.BlockStats;
941948

942949
validatorStats.collatedBlock
943950
block_id:tonNode.blockIdExt collated_data_hash:int256 cc_seqno:int collated_at:double

tl/generate/scheme/ton_api.tlo

860 Bytes
Binary file not shown.

validator/impl/collator-impl.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,7 @@ class Collator final : public td::actor::Actor {
335335
int process_one_new_message(block::NewOutMsg msg, bool enqueue_only = false, Ref<vm::Cell>* is_special = nullptr);
336336
bool process_inbound_internal_messages();
337337
bool precheck_inbound_message(Ref<vm::CellSlice> msg, ton::LogicalTime lt);
338-
bool process_inbound_message(Ref<vm::CellSlice> msg, ton::LogicalTime lt, td::ConstBitPtr key,
339-
const block::McShardDescr& src_nb);
338+
bool process_inbound_message(Ref<vm::CellSlice> msg, ton::LogicalTime lt, td::ConstBitPtr key, int src_nb_idx);
340339
bool process_inbound_external_messages();
341340
int process_external_message(Ref<vm::Cell> msg);
342341
bool process_dispatch_queue();

validator/impl/collator.cpp

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,7 @@ void Collator::got_neighbor_msg_queues(td::Result<std::map<BlockIdExt, Ref<OutMs
919919
LOG(INFO) << "neighbor output queues fetched, took " << duration << "s";
920920
auto res = R.move_as_ok();
921921
unsigned i = 0;
922+
stats_.neighbors.resize(neighbors_.size());
922923
for (block::McShardDescr& descr : neighbors_) {
923924
LOG(DEBUG) << "neighbor #" << i << " : " << descr.blk_.to_str();
924925
auto it = res.find(descr.blk_);
@@ -937,6 +938,13 @@ void Collator::got_neighbor_msg_queue(unsigned i, Ref<OutMsgQueueProof> res) {
937938
if (res->block_state_proof_.not_null() && !block_id.is_masterchain()) {
938939
block_state_proofs_.emplace(block_id.root_hash, res->block_state_proof_);
939940
}
941+
942+
auto &neighbor_stats = stats_.neighbors.at(i);
943+
neighbor_stats.shard = block_id.shard_full();
944+
neighbor_stats.is_trivial = shard_intersects(block_id.shard_full(), shard_);
945+
neighbor_stats.is_local = res->is_local_;
946+
neighbor_stats.msg_limit = res->msg_count_;
947+
940948
Ref<vm::Cell> state_root;
941949
if (block_id.is_masterchain()) {
942950
state_root = res->state_root_;
@@ -1000,18 +1008,16 @@ void Collator::got_neighbor_msg_queue(unsigned i, Ref<OutMsgQueueProof> res) {
10001008
return;
10011009
}
10021010
outq_descr.clear();
1003-
do {
1004-
// require masterchain blocks referred to in ProcessedUpto
1005-
// TODO: perform this only if there are messages for this shard in our output queue
1006-
// .. (have to check the above condition and perform a `break` here) ..
1007-
// ..
1008-
for (const auto& entry : descr.processed_upto->list) {
1009-
Ref<MasterchainStateQ> state;
1010-
if (!request_aux_mc_state(entry.mc_seqno, state)) {
1011-
return;
1012-
}
1011+
// require masterchain blocks referred to in ProcessedUpto
1012+
// TODO: perform this only if there are messages for this shard in our output queue
1013+
// .. (have to check the above condition and perform a `break` here) ..
1014+
// ..
1015+
for (const auto& entry : descr.processed_upto->list) {
1016+
Ref<MasterchainStateQ> state;
1017+
if (!request_aux_mc_state(entry.mc_seqno, state)) {
1018+
return;
10131019
}
1014-
} while (false);
1020+
}
10151021
}
10161022

10171023
/**
@@ -1940,7 +1946,7 @@ bool Collator::try_collate() {
19401946
last_proc_int_msg_.second.set_zero();
19411947
first_unproc_int_msg_.first = ~0ULL;
19421948
first_unproc_int_msg_.second.set_ones();
1943-
old_out_msg_queue_size_ = out_msg_queue_size_;
1949+
stats_.old_out_msg_queue_size = old_out_msg_queue_size_ = out_msg_queue_size_;
19441950
if (is_masterchain()) {
19451951
LOG(DEBUG) << "getting the list of special smart contracts";
19461952
auto res = config_->get_special_smartcontracts();
@@ -2407,6 +2413,9 @@ bool Collator::dequeue_message(Ref<vm::Cell> msg_envelope, ton::LogicalTime deli
24072413
* @returns True if the cleanup operation was successful, false otherwise.
24082414
*/
24092415
bool Collator::out_msg_queue_cleanup() {
2416+
SCOPE_EXIT {
2417+
stats_.load_fraction_queue_cleanup = block_limit_status_->load_fraction(block::ParamLimits::cl_normal);
2418+
};
24102419
LOG(INFO) << "cleaning outbound queue from messages already imported by neighbors";
24112420
if (verbosity >= 2) {
24122421
FLOG(INFO) {
@@ -2492,6 +2501,7 @@ bool Collator::out_msg_queue_cleanup() {
24922501
}
24932502
return true;
24942503
});
2504+
stats_.msg_queue_cleaned = deleted;
24952505
LOG(WARNING) << "deleted " << deleted << " messages from out_msg_queue after merge, remaining queue size is "
24962506
<< out_msg_queue_size_;
24972507
if (!ok) {
@@ -2572,6 +2582,7 @@ bool Collator::out_msg_queue_cleanup() {
25722582
std::swap(queue_parts[i], queue_parts.back());
25732583
queue_parts.pop_back();
25742584
}
2585+
stats_.msg_queue_cleaned = deleted;
25752586
LOG(WARNING) << "deleted " << deleted << " messages from out_msg_queue, remaining queue size is "
25762587
<< out_msg_queue_size_;
25772588
}
@@ -3712,12 +3723,13 @@ bool Collator::precheck_inbound_message(Ref<vm::CellSlice> enq_msg, ton::Logical
37123723
* @param enq_msg The inbound message serialized using EnqueuedMsg TLB-scheme.
37133724
* @param lt The logical time of the message.
37143725
* @param key The 32+64+256-bit key of the message.
3715-
* @param src_nb The description of the source neighbor shard.
3726+
* @param src_nb_idx The index of the source neighbor shard.
37163727
*
37173728
* @returns True if the message was processed successfully, false otherwise.
37183729
*/
37193730
bool Collator::process_inbound_message(Ref<vm::CellSlice> enq_msg, ton::LogicalTime lt, td::ConstBitPtr key,
3720-
const block::McShardDescr& src_nb) {
3731+
int src_nb_idx) {
3732+
const auto& src_nb = neighbors_.at(src_nb_idx);
37213733
ton::LogicalTime enqueued_lt = enq_msg->prefetch_ulong(64);
37223734
auto msg_env = enq_msg->prefetch_ref();
37233735
// 1. unpack MsgEnvelope
@@ -3815,6 +3827,8 @@ bool Collator::process_inbound_message(Ref<vm::CellSlice> enq_msg, ton::LogicalT
38153827
<< " enqueued_lt=" << enq_msg_descr.enqueued_lt_ << " has been already processed by us before, skipping";
38163828
// should we dequeue the message if it is ours (after a merge?)
38173829
// (it should have been dequeued by out_msg_queue_cleanup() before)
3830+
auto &neighbor_stats = stats_.neighbors.at(src_nb_idx);
3831+
++neighbor_stats.skipped_msgs;
38183832
return true;
38193833
}
38203834
// 6.1. check whether we have already processed this message by IHR
@@ -3901,12 +3915,17 @@ static std::string block_full_comment(const block::BlockLimitStatus& block_limit
39013915
* @returns True if the processing was successful, false otherwise.
39023916
*/
39033917
bool Collator::process_inbound_internal_messages() {
3918+
SCOPE_EXIT {
3919+
stats_.load_fraction_internals = block_limit_status_->load_fraction(block::ParamLimits::cl_normal);
3920+
};
39043921
while (!nb_out_msgs_->is_eof()) {
39053922
block_full_ = !block_limit_status_->fits(block::ParamLimits::cl_normal);
39063923
auto kv = nb_out_msgs_->extract_cur();
39073924
CHECK(kv && kv->msg.not_null());
3925+
auto &neighbor_stats = stats_.neighbors.at(kv->source);
39083926
if (kv->limit_exceeded) {
39093927
LOG(INFO) << "limit for imported messages is reached, stop processing inbound internal messages";
3928+
neighbor_stats.limit_reached = true;
39103929
block::EnqueuedMsgDescr enq;
39113930
enq.unpack(kv->msg.write()); // Visit cells to include it in proof
39123931
break;
@@ -3941,13 +3960,14 @@ bool Collator::process_inbound_internal_messages() {
39413960
}
39423961
LOG(DEBUG) << "processing inbound message with (lt,hash)=(" << kv->lt << "," << kv->key.to_hex()
39433962
<< ") from neighbor #" << kv->source;
3963+
++neighbor_stats.processed_msgs;
39443964
if (verbosity > 2) {
39453965
FLOG(INFO) {
39463966
sb << "inbound message: lt=" << kv->lt << " from=" << kv->source << " key=" << kv->key.to_hex() << " msg=";
39473967
block::gen::t_EnqueuedMsg.print(sb, kv->msg);
39483968
};
39493969
}
3950-
if (!process_inbound_message(kv->msg, kv->lt, kv->key.cbits(), neighbors_.at(kv->source))) {
3970+
if (!process_inbound_message(kv->msg, kv->lt, kv->key.cbits(), kv->source)) {
39513971
if (verbosity > 1) {
39523972
FLOG(INFO) {
39533973
sb << "invalid inbound message: lt=" << kv->lt << " from=" << kv->source << " key=" << kv->key.to_hex()
@@ -3970,6 +3990,9 @@ bool Collator::process_inbound_internal_messages() {
39703990
* @returns True if the processing was successful, false otherwise.
39713991
*/
39723992
bool Collator::process_inbound_external_messages() {
3993+
SCOPE_EXIT {
3994+
stats_.load_fraction_externals = block_limit_status_->load_fraction(block::ParamLimits::cl_soft);
3995+
};
39733996
if (skip_extmsg_) {
39743997
LOG(INFO) << "skipping processing of inbound external messages";
39753998
return true;
@@ -4089,6 +4112,9 @@ int Collator::process_external_message(Ref<vm::Cell> msg) {
40894112
* @returns True if the processing was successful, false otherwise.
40904113
*/
40914114
bool Collator::process_dispatch_queue() {
4115+
SCOPE_EXIT {
4116+
stats_.load_fraction_dispatch = block_limit_status_->load_fraction(block::ParamLimits::cl_normal);
4117+
};
40924118
if (out_msg_queue_size_ > defer_out_queue_size_limit_ && old_out_msg_queue_size_ > hard_defer_out_queue_size_limit_) {
40934119
return true;
40944120
}
@@ -4548,6 +4574,9 @@ bool Collator::enqueue_message(block::NewOutMsg msg, td::RefInt256 fwd_fees_rema
45484574
* @returns True if all new messages were processed successfully, false otherwise.
45494575
*/
45504576
bool Collator::process_new_messages(bool enqueue_only) {
4577+
SCOPE_EXIT {
4578+
stats_.load_fraction_new_msgs = block_limit_status_->load_fraction(block::ParamLimits::cl_normal);
4579+
};
45514580
while (!new_msgs.empty()) {
45524581
block::NewOutMsg msg = new_msgs.top();
45534582
new_msgs.pop();
@@ -6380,6 +6409,7 @@ void Collator::finalize_stats() {
63806409
return 0;
63816410
});
63826411
}
6412+
stats_.new_out_msg_queue_size = out_msg_queue_size_;
63836413
}
63846414

63856415
/**

validator/impl/out-msg-queue-proof.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ td::Result<std::vector<td::Ref<OutMsgQueueProof>>> OutMsgQueueProof::fetch(Shard
196196
if (state_root->get_hash().as_slice() != state_root_hash.as_slice()) {
197197
return td::Status::Error("state root hash mismatch");
198198
}
199-
res.emplace_back(true, blocks[i], state_root, block_state_proof, f.msg_counts_[i]);
199+
res.emplace_back(true, blocks[i], state_root, block_state_proof, false, f.msg_counts_[i]);
200200

201201
data[i].first = blocks[i];
202202
TRY_RESULT(state, ShardStateQ::fetch(blocks[i], {}, state_root));
@@ -346,7 +346,7 @@ void OutMsgQueueImporter::get_proof_local(std::shared_ptr<CacheEntry> entry, Blo
346346
auto state = R.move_as_ok();
347347
if (block.seqno() == 0) {
348348
std::vector<td::Ref<OutMsgQueueProof>> proof = {
349-
td::Ref<OutMsgQueueProof>(true, block, state->root_cell(), td::Ref<vm::Cell>{})};
349+
td::Ref<OutMsgQueueProof>(true, block, state->root_cell(), td::Ref<vm::Cell>{}, true)};
350350
td::actor::send_closure(SelfId, &OutMsgQueueImporter::got_proof, entry, std::move(proof), ProofSource::Local);
351351
return;
352352
}
@@ -362,7 +362,7 @@ void OutMsgQueueImporter::get_proof_local(std::shared_ptr<CacheEntry> entry, Blo
362362
}
363363
Ref<vm::Cell> block_state_proof = create_block_state_proof(R.ok()->root_cell()).move_as_ok();
364364
std::vector<td::Ref<OutMsgQueueProof>> proof = {
365-
td::Ref<OutMsgQueueProof>(true, block, state->root_cell(), std::move(block_state_proof))};
365+
td::Ref<OutMsgQueueProof>(true, block, state->root_cell(), std::move(block_state_proof), true)};
366366
td::actor::send_closure(SelfId, &OutMsgQueueImporter::got_proof, entry, std::move(proof),
367367
ProofSource::Local);
368368
});

validator/interfaces/out-msg-queue-proof.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,19 @@ namespace validator {
2626
using td::Ref;
2727

2828
struct OutMsgQueueProof : public td::CntObject {
29-
OutMsgQueueProof(BlockIdExt block_id, Ref<vm::Cell> state_root, Ref<vm::Cell> block_state_proof,
29+
OutMsgQueueProof(BlockIdExt block_id, Ref<vm::Cell> state_root, Ref<vm::Cell> block_state_proof, bool is_local,
3030
td::int32 msg_count = -1)
3131
: block_id_(block_id)
3232
, state_root_(std::move(state_root))
3333
, block_state_proof_(std::move(block_state_proof))
34+
, is_local_(is_local)
3435
, msg_count_(msg_count) {
3536
}
3637

3738
BlockIdExt block_id_;
3839
Ref<vm::Cell> state_root_;
3940
Ref<vm::Cell> block_state_proof_;
41+
bool is_local_ = false;
4042
td::int32 msg_count_; // -1 - no limit
4143

4244
static td::Result<std::vector<td::Ref<OutMsgQueueProof>>> fetch(ShardIdFull dst_shard, std::vector<BlockIdExt> blocks,

validator/interfaces/validator-manager.h

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -69,31 +69,63 @@ struct CollationStats {
6969
td::uint32 estimated_bytes = 0, gas = 0, lt_delta = 0, estimated_collated_data_bytes = 0;
7070
int cat_bytes = 0, cat_gas = 0, cat_lt_delta = 0, cat_collated_data_bytes = 0;
7171
std::string limits_log;
72+
double total_time = 0.0, work_time = 0.0, cpu_work_time = 0.0;
73+
std::string time_stats;
74+
7275
td::uint32 transactions = 0;
7376
std::vector<BlockIdExt> shard_configuration;
7477
td::uint32 ext_msgs_total = 0;
7578
td::uint32 ext_msgs_filtered = 0;
7679
td::uint32 ext_msgs_accepted = 0;
7780
td::uint32 ext_msgs_rejected = 0;
78-
double total_time = 0.0, work_time = 0.0, cpu_work_time = 0.0;
79-
std::string time_stats;
81+
82+
td::uint64 old_out_msg_queue_size = 0;
83+
td::uint64 new_out_msg_queue_size = 0;
84+
td::uint32 msg_queue_cleaned = 0;
85+
struct NeighborStats {
86+
ShardIdFull shard;
87+
bool is_trivial = false;
88+
bool is_local = false;
89+
int msg_limit = -1;
90+
td::uint32 processed_msgs = 0;
91+
td::uint32 skipped_msgs = 0;
92+
bool limit_reached = false;
93+
94+
tl_object_ptr<ton_api::validatorStats_blockStats_neighborStats> tl() const {
95+
return create_tl_object<ton_api::validatorStats_blockStats_neighborStats>(
96+
create_tl_shard_id(shard), is_trivial, is_local, msg_limit, processed_msgs, skipped_msgs, limit_reached);
97+
}
98+
};
99+
std::vector<NeighborStats> neighbors;
100+
101+
double load_fraction_queue_cleanup = -1.0;
102+
double load_fraction_dispatch = -1.0;
103+
double load_fraction_internals = -1.0;
104+
double load_fraction_externals = -1.0;
105+
double load_fraction_new_msgs = -1.0;
80106

81107
tl_object_ptr<ton_api::validatorStats_collatedBlock> tl() const {
82-
std::vector<tl_object_ptr<ton_api::tonNode_blockIdExt>> shards;
108+
std::vector<tl_object_ptr<ton_api::tonNode_blockIdExt>> shards_obj;
83109
for (const BlockIdExt& block_id : shard_configuration) {
84-
shards.push_back(create_tl_block_id(block_id));
110+
shards_obj.push_back(create_tl_block_id(block_id));
111+
}
112+
std::vector<tl_object_ptr<ton_api::validatorStats_blockStats_neighborStats>> neighbors_obj;
113+
for (const NeighborStats& neighbor : neighbors) {
114+
neighbors_obj.push_back(neighbor.tl());
85115
}
86116
auto block_stats = create_tl_object<ton_api::validatorStats_blockStats>(
87-
create_tl_object<ton_api::validatorStats_extMsgsStats>(ext_msgs_total, ext_msgs_filtered, ext_msgs_accepted,
88-
ext_msgs_rejected),
89-
transactions, std::move(shards));
117+
create_tl_object<ton_api::validatorStats_blockStats_extMsgsStats>(ext_msgs_total, ext_msgs_filtered,
118+
ext_msgs_accepted, ext_msgs_rejected),
119+
transactions, std::move(shards_obj), old_out_msg_queue_size, new_out_msg_queue_size, msg_queue_cleaned,
120+
std::move(neighbors_obj));
90121
return create_tl_object<ton_api::validatorStats_collatedBlock>(
91122
create_tl_block_id(block_id), collated_data_hash, cc_seqno, collated_at, actual_bytes,
92123
actual_collated_data_bytes, attempt, self.bits256_value(), is_validator, total_time, work_time, cpu_work_time,
93124
time_stats,
94-
create_tl_object<ton_api::validatorStats_blockLimitsStatus>(estimated_bytes, gas, lt_delta,
95-
estimated_collated_data_bytes, cat_bytes, cat_gas,
96-
cat_lt_delta, cat_collated_data_bytes, limits_log),
125+
create_tl_object<ton_api::validatorStats_blockLimitsStatus>(
126+
estimated_bytes, gas, lt_delta, estimated_collated_data_bytes, cat_bytes, cat_gas, cat_lt_delta,
127+
cat_collated_data_bytes, load_fraction_queue_cleanup, load_fraction_dispatch, load_fraction_internals,
128+
load_fraction_externals, load_fraction_new_msgs, limits_log),
97129
std::move(block_stats));
98130
}
99131
};

0 commit comments

Comments
 (0)