Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
19 changes: 9 additions & 10 deletions validator-session/candidate-serializer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,7 @@ td::Result<td::BufferSlice> serialize_candidate(const tl_object_ptr<ton_api::val

td::Result<tl_object_ptr<ton_api::validatorSession_candidate>> deserialize_candidate(td::Slice data,
bool compression_enabled,
int max_decompressed_data_size,
int proto_version) {
int max_decompressed_data_size) {
if (!compression_enabled) {
auto t_decompression_start = td::Time::now();
TRY_RESULT(res, fetch_tl_object<ton_api::validatorSession_candidate>(data, true));
Expand All @@ -68,7 +67,7 @@ td::Result<tl_object_ptr<ton_api::validatorSession_candidate>> deserialize_candi
return td::Status::Error("decompressed size is too big");
}
TRY_RESULT(p, decompress_candidate_data(c.data_, false, c.decompressed_size_,
max_decompressed_data_size, proto_version, c.root_hash_));
max_decompressed_data_size, c.root_hash_));
return create_tl_object<ton_api::validatorSession_candidate>(c.src_, c.round_, c.root_hash_,
std::move(p.first), std::move(p.second));
}();
Expand All @@ -78,8 +77,7 @@ td::Result<tl_object_ptr<ton_api::validatorSession_candidate>> deserialize_candi
if (c.data_.size() > max_decompressed_data_size) {
return td::Status::Error("Compressed data is too big");
}
TRY_RESULT(p, decompress_candidate_data(c.data_, true, 0, max_decompressed_data_size, proto_version,
c.root_hash_));
TRY_RESULT(p, decompress_candidate_data(c.data_, true, 0, max_decompressed_data_size, c.root_hash_));
return create_tl_object<ton_api::validatorSession_candidate>(c.src_, c.round_, c.root_hash_,
std::move(p.first), std::move(p.second));
}();
Expand Down Expand Up @@ -110,9 +108,11 @@ td::Result<td::BufferSlice> compress_candidate_data(td::Slice block, td::Slice c
return compressed;
}

td::Result<std::pair<td::BufferSlice, td::BufferSlice>> decompress_candidate_data(
td::Slice compressed, bool improved_compression, int decompressed_size, int max_decompressed_size,
int proto_version, td::Bits256 root_hash) {
td::Result<std::pair<td::BufferSlice, td::BufferSlice>> decompress_candidate_data(td::Slice compressed,
bool improved_compression,
int decompressed_size,
int max_decompressed_size,
td::Bits256 root_hash) {
std::vector<td::Ref<vm::Cell>> roots;
auto t_decompression_start = td::Time::now();
if (!improved_compression) {
Expand All @@ -135,8 +135,7 @@ td::Result<std::pair<td::BufferSlice, td::BufferSlice>> decompress_candidate_dat
}
TRY_RESULT(block_data, vm::std_boc_serialize(roots[0], 31));
roots.erase(roots.begin());
int collated_data_mode = proto_version >= 5 ? 2 : 31;
TRY_RESULT(collated_data, vm::std_boc_serialize_multi(std::move(roots), collated_data_mode));
TRY_RESULT(collated_data, vm::std_boc_serialize_multi(std::move(roots), 2));
LOG(DEBUG) << "Decompressing block candidate " << (improved_compression ? "V2:" : ":") << compressed.size() << " -> "
<< block_data.size() + collated_data.size();
return std::make_pair(std::move(block_data), std::move(collated_data));
Expand Down
11 changes: 6 additions & 5 deletions validator-session/candidate-serializer.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,14 @@ td::Result<td::BufferSlice> serialize_candidate(const tl_object_ptr<ton_api::val
bool compression_enabled);
td::Result<tl_object_ptr<ton_api::validatorSession_candidate>> deserialize_candidate(td::Slice data,
bool compression_enabled,
int max_decompressed_data_size,
int proto_version);
int max_decompressed_data_size);

td::Result<td::BufferSlice> compress_candidate_data(td::Slice block, td::Slice collated_data, size_t& decompressed_size,
td::Bits256 root_hash);
td::Result<std::pair<td::BufferSlice, td::BufferSlice>> decompress_candidate_data(
td::Slice compressed, bool improved_compression, int decompressed_size, int max_decompressed_size,
int proto_version, td::Bits256 root_hash);
td::Result<std::pair<td::BufferSlice, td::BufferSlice>> decompress_candidate_data(td::Slice compressed,
bool improved_compression,
int decompressed_size,
int max_decompressed_size,
td::Bits256 root_hash);

} // namespace ton::validatorsession
3 changes: 1 addition & 2 deletions validator-session/validator-session.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -242,8 +242,7 @@ void ValidatorSessionImpl::process_broadcast(PublicKeyHash src, td::BufferSlice
td::Timer deserialize_timer;
auto R =
deserialize_candidate(data, compress_block_candidates_,
description().opts().max_block_size + description().opts().max_collated_data_size + 1024,
description().opts().proto_version);
description().opts().max_block_size + description().opts().max_collated_data_size + 1024);
double deserialize_time = deserialize_timer.elapsed();
if (R.is_error()) {
VLOG(VALIDATOR_SESSION_WARNING) << this << "[node " << src << "][broadcast " << sha256_bits256(data.as_slice())
Expand Down
16 changes: 7 additions & 9 deletions validator/collation-manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ void CollationManager::collate_block(ShardIdFull shard, BlockIdExt min_mastercha
std::vector<BlockIdExt> prev, Ed25519_PublicKey creator,
BlockCandidatePriority priority, td::Ref<ValidatorSet> validator_set,
td::uint64 max_answer_size, td::CancellationToken cancellation_token,
td::Promise<GeneratedCandidate> promise, int proto_version) {
td::Promise<GeneratedCandidate> promise) {
if (shard.is_masterchain()) {
run_collate_query(
CollateParams{.shard = shard,
Expand All @@ -74,16 +74,15 @@ void CollationManager::collate_block(ShardIdFull shard, BlockIdExt min_mastercha
return;
}
collate_shard_block(shard, min_masterchain_block_id, std::move(prev), creator, priority, std::move(validator_set),
max_answer_size, std::move(cancellation_token), std::move(promise), td::Timestamp::in(10.0),
proto_version);
max_answer_size, std::move(cancellation_token), std::move(promise), td::Timestamp::in(10.0));
}

void CollationManager::collate_block_optimistic(ShardIdFull shard, BlockIdExt min_masterchain_block_id,
BlockIdExt prev_block_id, td::BufferSlice prev_block,
Ed25519_PublicKey creator, BlockCandidatePriority priority,
td::Ref<ValidatorSet> validator_set, td::uint64 max_answer_size,
td::CancellationToken cancellation_token,
td::Promise<GeneratedCandidate> promise, int proto_version) {
td::Promise<GeneratedCandidate> promise) {
if (shard.is_masterchain()) {
TRY_RESULT_PROMISE(promise, prev_block_data, create_block(prev_block_id, std::move(prev_block)));
run_collate_query(
Expand Down Expand Up @@ -118,15 +117,15 @@ void CollationManager::collate_block_optimistic(ShardIdFull shard, BlockIdExt mi

collate_shard_block(shard, min_masterchain_block_id, {prev_block_id}, creator, priority, std::move(validator_set),
max_answer_size, std::move(cancellation_token), std::move(promise), td::Timestamp::in(10.0),
proto_version, true);
true);
}

void CollationManager::collate_shard_block(ShardIdFull shard, BlockIdExt min_masterchain_block_id,
std::vector<BlockIdExt> prev, Ed25519_PublicKey creator,
BlockCandidatePriority priority, td::Ref<ValidatorSet> validator_set,
td::uint64 max_answer_size, td::CancellationToken cancellation_token,
td::Promise<GeneratedCandidate> promise, td::Timestamp timeout,
int proto_version, bool is_optimistic) {
bool is_optimistic) {
TRY_STATUS_PROMISE(promise, cancellation_token.check());
ShardInfo* s = select_shard_info(shard);
if (s == nullptr) {
Expand Down Expand Up @@ -246,7 +245,7 @@ void CollationManager::collate_shard_block(ShardIdFull shard, BlockIdExt min_mas
[=, promise = std::move(promise)]() mutable {
td::actor::send_closure(SelfId, &CollationManager::collate_shard_block, shard, min_masterchain_block_id, prev,
creator, priority, validator_set, max_answer_size, cancellation_token,
std::move(promise), timeout, proto_version, is_optimistic);
std::move(promise), timeout, is_optimistic);
},
retry_at);
};
Expand Down Expand Up @@ -279,8 +278,7 @@ void CollationManager::collate_shard_block(ShardIdFull shard, BlockIdExt min_mas
return;
}
TRY_RESULT_PROMISE(P, f, fetch_tl_object<ton_api::collatorNode_Candidate>(data, true));
TRY_RESULT_PROMISE(P, candidate,
deserialize_candidate(std::move(f), td::narrow_cast<int>(max_answer_size), proto_version));
TRY_RESULT_PROMISE(P, candidate, deserialize_candidate(std::move(f), td::narrow_cast<int>(max_answer_size)));
if (candidate.pubkey.as_bits256() != creator.as_bits256()) {
P.set_error(td::Status::Error("collate query: block candidate source mismatch"));
return;
Expand Down
7 changes: 3 additions & 4 deletions validator/collation-manager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,12 @@ class CollationManager : public td::actor::Actor {
void collate_block(ShardIdFull shard, BlockIdExt min_masterchain_block_id, std::vector<BlockIdExt> prev,
Ed25519_PublicKey creator, BlockCandidatePriority priority, td::Ref<ValidatorSet> validator_set,
td::uint64 max_answer_size, td::CancellationToken cancellation_token,
td::Promise<GeneratedCandidate> promise, int proto_version);
td::Promise<GeneratedCandidate> promise);

void collate_block_optimistic(ShardIdFull shard, BlockIdExt min_masterchain_block_id, BlockIdExt prev_block_id,
td::BufferSlice prev_block, Ed25519_PublicKey creator, BlockCandidatePriority priority,
td::Ref<ValidatorSet> validator_set, td::uint64 max_answer_size,
td::CancellationToken cancellation_token, td::Promise<GeneratedCandidate> promise,
int proto_version);
td::CancellationToken cancellation_token, td::Promise<GeneratedCandidate> promise);

void update_options(td::Ref<ValidatorManagerOptions> opts);

Expand All @@ -68,7 +67,7 @@ class CollationManager : public td::actor::Actor {
Ed25519_PublicKey creator, BlockCandidatePriority priority,
td::Ref<ValidatorSet> validator_set, td::uint64 max_answer_size,
td::CancellationToken cancellation_token, td::Promise<GeneratedCandidate> promise,
td::Timestamp timeout, int proto_version, bool is_optimistic = false);
td::Timestamp timeout, bool is_optimistic = false);

void update_collators_list(const CollatorsList& collators_list);

Expand Down
3 changes: 1 addition & 2 deletions validator/collator-node/collator-node-session.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -293,8 +293,7 @@ void CollatorNodeSession::process_request_optimistic_cont2(BlockIdExt prev_block
"failed to download prev block data for optimistic collation: ");
TRY_RESULT_PROMISE_PREFIX(promise, f, fetch_tl_object<ton_api::collatorNode_Candidate>(response, true),
"failed to download prev block data for optimistic collation: ");
TRY_RESULT_PROMISE_PREFIX(promise, candidate,
deserialize_candidate(std::move(f), max_candidate_size_, proto_version_),
TRY_RESULT_PROMISE_PREFIX(promise, candidate, deserialize_candidate(std::move(f), max_candidate_size_),
"failed to download prev block data for optimistic collation: ");
TRY_RESULT_PROMISE_PREFIX(promise, prev_block, create_block(prev_block_id, std::move(candidate.data)),
"invalid prev block data from validator: ");
Expand Down
Loading
Loading