mirror of
				https://github.com/ton-blockchain/ton
				synced 2025-03-09 15:40:10 +00:00 
			
		
		
		
	Send only first block candidate optimistically (#1260)
* Broadcast only the first block candidate * Fix sending block broadcast --------- Co-authored-by: SpyCheese <mikle98@yandex.ru>
This commit is contained in:
		
							parent
							
								
									8364a2425f
								
							
						
					
					
						commit
						1da94e62ad
					
				
					 22 changed files with 164 additions and 82 deletions
				
			
		| 
						 | 
				
			
			@ -41,7 +41,7 @@ using namespace std::literals::string_literals;
 | 
			
		|||
 | 
			
		||||
AcceptBlockQuery::AcceptBlockQuery(BlockIdExt id, td::Ref<BlockData> data, std::vector<BlockIdExt> prev,
 | 
			
		||||
                                   td::Ref<ValidatorSet> validator_set, td::Ref<BlockSignatureSet> signatures,
 | 
			
		||||
                                   td::Ref<BlockSignatureSet> approve_signatures, bool send_broadcast,
 | 
			
		||||
                                   td::Ref<BlockSignatureSet> approve_signatures, int send_broadcast_mode,
 | 
			
		||||
                                   td::actor::ActorId<ValidatorManager> manager, td::Promise<td::Unit> promise)
 | 
			
		||||
    : id_(id)
 | 
			
		||||
    , data_(std::move(data))
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +51,7 @@ AcceptBlockQuery::AcceptBlockQuery(BlockIdExt id, td::Ref<BlockData> data, std::
 | 
			
		|||
    , approve_signatures_(std::move(approve_signatures))
 | 
			
		||||
    , is_fake_(false)
 | 
			
		||||
    , is_fork_(false)
 | 
			
		||||
    , send_broadcast_(send_broadcast)
 | 
			
		||||
    , send_broadcast_mode_(send_broadcast_mode)
 | 
			
		||||
    , manager_(manager)
 | 
			
		||||
    , promise_(std::move(promise))
 | 
			
		||||
    , perf_timer_("acceptblock", 0.1, [manager](double duration) {
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +72,6 @@ AcceptBlockQuery::AcceptBlockQuery(AcceptBlockQuery::IsFake fake, BlockIdExt id,
 | 
			
		|||
    , validator_set_(std::move(validator_set))
 | 
			
		||||
    , is_fake_(true)
 | 
			
		||||
    , is_fork_(false)
 | 
			
		||||
    , send_broadcast_(false)
 | 
			
		||||
    , manager_(manager)
 | 
			
		||||
    , promise_(std::move(promise))
 | 
			
		||||
    , perf_timer_("acceptblock", 0.1, [manager](double duration) {
 | 
			
		||||
| 
						 | 
				
			
			@ -90,7 +89,6 @@ AcceptBlockQuery::AcceptBlockQuery(ForceFork ffork, BlockIdExt id, td::Ref<Block
 | 
			
		|||
    , data_(std::move(data))
 | 
			
		||||
    , is_fake_(true)
 | 
			
		||||
    , is_fork_(true)
 | 
			
		||||
    , send_broadcast_(false)
 | 
			
		||||
    , manager_(manager)
 | 
			
		||||
    , promise_(std::move(promise))
 | 
			
		||||
    , perf_timer_("acceptblock", 0.1, [manager](double duration) {
 | 
			
		||||
| 
						 | 
				
			
			@ -928,6 +926,10 @@ void AcceptBlockQuery::written_block_info_2() {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void AcceptBlockQuery::applied() {
 | 
			
		||||
  if (send_broadcast_mode_ == 0) {
 | 
			
		||||
    finish_query();
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  BlockBroadcast b;
 | 
			
		||||
  b.data = data_->data();
 | 
			
		||||
  b.block_id = id_;
 | 
			
		||||
| 
						 | 
				
			
			@ -947,8 +949,7 @@ void AcceptBlockQuery::applied() {
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  // do not wait for answer
 | 
			
		||||
  td::actor::send_closure_later(manager_, &ValidatorManager::send_block_broadcast, std::move(b),
 | 
			
		||||
                                /* custom_overlays_only = */ !send_broadcast_);
 | 
			
		||||
  td::actor::send_closure_later(manager_, &ValidatorManager::send_block_broadcast, std::move(b), send_broadcast_mode_);
 | 
			
		||||
 | 
			
		||||
  finish_query();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,7 +50,7 @@ class AcceptBlockQuery : public td::actor::Actor {
 | 
			
		|||
  struct ForceFork {};
 | 
			
		||||
  AcceptBlockQuery(BlockIdExt id, td::Ref<BlockData> data, std::vector<BlockIdExt> prev,
 | 
			
		||||
                   td::Ref<ValidatorSet> validator_set, td::Ref<BlockSignatureSet> signatures,
 | 
			
		||||
                   td::Ref<BlockSignatureSet> approve_signatures, bool send_broadcast,
 | 
			
		||||
                   td::Ref<BlockSignatureSet> approve_signatures, int send_broadcast_mode,
 | 
			
		||||
                   td::actor::ActorId<ValidatorManager> manager, td::Promise<td::Unit> promise);
 | 
			
		||||
  AcceptBlockQuery(IsFake fake, BlockIdExt id, td::Ref<BlockData> data, std::vector<BlockIdExt> prev,
 | 
			
		||||
                   td::Ref<ValidatorSet> validator_set, td::actor::ActorId<ValidatorManager> manager,
 | 
			
		||||
| 
						 | 
				
			
			@ -99,7 +99,7 @@ class AcceptBlockQuery : public td::actor::Actor {
 | 
			
		|||
  Ref<BlockSignatureSetQ> approve_signatures_;
 | 
			
		||||
  bool is_fake_;
 | 
			
		||||
  bool is_fork_;
 | 
			
		||||
  bool send_broadcast_;
 | 
			
		||||
  int send_broadcast_mode_{0};
 | 
			
		||||
  bool ancestors_split_{false}, is_key_block_{false};
 | 
			
		||||
  td::Timestamp timeout_ = td::Timestamp::in(600.0);
 | 
			
		||||
  td::actor::ActorId<ValidatorManager> manager_;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -131,11 +131,11 @@ td::Result<td::Ref<IhrMessage>> create_ihr_message(td::BufferSlice data) {
 | 
			
		|||
 | 
			
		||||
void run_accept_block_query(BlockIdExt id, td::Ref<BlockData> data, std::vector<BlockIdExt> prev,
 | 
			
		||||
                            td::Ref<ValidatorSet> validator_set, td::Ref<BlockSignatureSet> signatures,
 | 
			
		||||
                            td::Ref<BlockSignatureSet> approve_signatures, bool send_broadcast,
 | 
			
		||||
                            td::Ref<BlockSignatureSet> approve_signatures, int send_broadcast_mode,
 | 
			
		||||
                            td::actor::ActorId<ValidatorManager> manager, td::Promise<td::Unit> promise) {
 | 
			
		||||
  td::actor::create_actor<AcceptBlockQuery>(PSTRING() << "accept" << id.id.to_str(), id, std::move(data), prev,
 | 
			
		||||
                                            std::move(validator_set), std::move(signatures),
 | 
			
		||||
                                            std::move(approve_signatures), send_broadcast, manager, std::move(promise))
 | 
			
		||||
  td::actor::create_actor<AcceptBlockQuery>(
 | 
			
		||||
      PSTRING() << "accept" << id.id.to_str(), id, std::move(data), prev, std::move(validator_set),
 | 
			
		||||
      std::move(signatures), std::move(approve_signatures), send_broadcast_mode, manager, std::move(promise))
 | 
			
		||||
      .release();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue