mirror of
				https://github.com/ton-blockchain/ton
				synced 2025-03-09 15:40:10 +00:00 
			
		
		
		
	Merge branch 'testnet' into block-generation
# Conflicts: # adnl/adnl-query.cpp # crypto/block/block.tlb # crypto/block/mc-config.h # lite-client/lite-client.cpp # overlay/overlay-manager.h # overlay/overlay-peers.cpp # overlay/overlay.cpp # overlay/overlay.h # overlay/overlay.hpp # overlay/overlays.h # rldp-http-proxy/DNSResolver.cpp # rldp-http-proxy/rldp-http-proxy.cpp # tl/generate/scheme/ton_api.tl # tl/generate/scheme/ton_api.tlo # tl/generate/scheme/tonlib_api.tlo # ton/ton-types.h # tonlib/tonlib/ExtClient.cpp # tonlib/tonlib/ExtClient.h # tonlib/tonlib/ExtClientLazy.cpp # tonlib/tonlib/ExtClientOutbound.h # tonlib/tonlib/ExtClientRaw.h # tonlib/tonlib/TonlibClient.cpp # tonlib/tonlib/TonlibClient.h # tonlib/tonlib/tonlib-cli.cpp # validator/impl/collator.cpp # validator/impl/validate-query.cpp # validator/impl/validate-query.hpp # validator/manager.cpp # validator/state-serializer.cpp # validator/state-serializer.hpp # validator/validator-group.cpp # validator/validator-group.hpp # validator/validator.h
This commit is contained in:
		
						commit
						d652f7d706
					
				
					 200 changed files with 13492 additions and 2997 deletions
				
			
		| 
						 | 
				
			
			@ -36,13 +36,45 @@ void ValidatorGroup::generate_block_candidate(td::uint32 round_id, td::Promise<B
 | 
			
		|||
    promise.set_error(td::Status::Error(ErrorCode::notready, "cannot collate block: group not started"));
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  if (cached_collated_block_) {
 | 
			
		||||
    if (cached_collated_block_->result) {
 | 
			
		||||
      promise.set_result(cached_collated_block_->result.value().clone());
 | 
			
		||||
    } else {
 | 
			
		||||
      cached_collated_block_->promises.push_back(std::move(promise));
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  cached_collated_block_ = std::make_shared<CachedCollatedBlock>();
 | 
			
		||||
  cached_collated_block_->promises.push_back(std::move(promise));
 | 
			
		||||
  td::Promise<BlockCandidate> P = [SelfId = actor_id(this),
 | 
			
		||||
                                   cache = cached_collated_block_](td::Result<BlockCandidate> R) {
 | 
			
		||||
    td::actor::send_closure(SelfId, &ValidatorGroup::generated_block_candidate, std::move(cache), std::move(R));
 | 
			
		||||
  };
 | 
			
		||||
  if (lite_mode_) {
 | 
			
		||||
    send_collate_query(round_id, td::Timestamp::in(10.0), std::move(promise));
 | 
			
		||||
    send_collate_query(round_id, td::Timestamp::in(10.0), std::move(P));
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  run_collate_query(shard_, min_masterchain_block_id_, prev_block_ids_,
 | 
			
		||||
                    Ed25519_PublicKey{local_id_full_.ed25519_value().raw()}, validator_set_, manager_,
 | 
			
		||||
                    td::Timestamp::in(20.0), std::move(promise));
 | 
			
		||||
                    td::Timestamp::in(10.0), std::move(P));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ValidatorGroup::generated_block_candidate(std::shared_ptr<CachedCollatedBlock> cache,
 | 
			
		||||
                                               td::Result<BlockCandidate> R) {
 | 
			
		||||
  if (R.is_error()) {
 | 
			
		||||
    for (auto &p : cache->promises) {
 | 
			
		||||
      p.set_error(R.error().clone());
 | 
			
		||||
    }
 | 
			
		||||
    if (cache == cached_collated_block_) {
 | 
			
		||||
      cached_collated_block_ = nullptr;
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    cache->result = R.move_as_ok();
 | 
			
		||||
    for (auto &p : cache->promises) {
 | 
			
		||||
      p.set_value(cache->result.value().clone());
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  cache->promises.clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ValidatorGroup::validate_block_candidate(td::uint32 round_id, BlockCandidate block,
 | 
			
		||||
| 
						 | 
				
			
			@ -101,18 +133,12 @@ void ValidatorGroup::validate_block_candidate(td::uint32 round_id, BlockCandidat
 | 
			
		|||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  VLOG(VALIDATOR_DEBUG) << "validating block candidate " << next_block_id;
 | 
			
		||||
  block.id = next_block_id;
 | 
			
		||||
  run_validate_query(shard_, min_masterchain_block_id_, prev_block_ids_, std::move(block), validator_set_, manager_,
 | 
			
		||||
                     td::Timestamp::in(10.0), std::move(P),
 | 
			
		||||
                     td::Timestamp::in(15.0), std::move(P),
 | 
			
		||||
                     collator_config_.full_collated_data ? ValidateMode::full_collated_data : 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ValidatorGroup::update_approve_cache(td::uint32 round_id, CacheKey key, UnixTime value) {
 | 
			
		||||
  if (approved_candidates_cache_round_ != round_id) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  approved_candidates_cache_[key] = value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ValidatorGroup::accept_block_candidate(td::uint32 round_id, PublicKeyHash src, td::BufferSlice block_data,
 | 
			
		||||
                                            RootHash root_hash, FileHash file_hash,
 | 
			
		||||
                                            std::vector<BlockSignature> signatures,
 | 
			
		||||
| 
						 | 
				
			
			@ -139,6 +165,7 @@ void ValidatorGroup::accept_block_candidate(td::uint32 round_id, PublicKeyHash s
 | 
			
		|||
  accept_block_query(next_block_id, std::move(block), std::move(prev_block_ids_), std::move(sig_set),
 | 
			
		||||
                     std::move(approve_sig_set), src == local_id_, std::move(promise));
 | 
			
		||||
  prev_block_ids_ = std::vector<BlockIdExt>{next_block_id};
 | 
			
		||||
  cached_collated_block_ = nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ValidatorGroup::accept_block_query(BlockIdExt block_id, td::Ref<BlockData> block, std::vector<BlockIdExt> prev,
 | 
			
		||||
| 
						 | 
				
			
			@ -306,6 +333,7 @@ void ValidatorGroup::create_session() {
 | 
			
		|||
void ValidatorGroup::start(std::vector<BlockIdExt> prev, BlockIdExt min_masterchain_block_id) {
 | 
			
		||||
  prev_block_ids_ = prev;
 | 
			
		||||
  min_masterchain_block_id_ = min_masterchain_block_id;
 | 
			
		||||
  cached_collated_block_ = nullptr;
 | 
			
		||||
  started_ = true;
 | 
			
		||||
 | 
			
		||||
  if (init_) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue