Skip to content
This repository has been archived by the owner on Aug 2, 2022. It is now read-only.

Relay block on accepted header - 1.8 #8705

Merged
merged 5 commits into from
Feb 27, 2020
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
6 changes: 5 additions & 1 deletion libraries/chain/controller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1831,7 +1831,7 @@ struct controller_impl {

fork_db.add( bsp );

if (conf.trusted_producers.count(b->producer)) {
if (self.is_trusted_producer(b->producer)) {
trusted_producer_light_validation = true;
};

Expand Down Expand Up @@ -2886,6 +2886,10 @@ bool controller::skip_trx_checks() const {
return light_validation_allowed(my->conf.disable_replay_opts);
}

bool controller::is_trusted_producer( const account_name& producer) const {
return get_validation_mode() == chain::validation_mode::LIGHT || my->conf.trusted_producers.count(producer);
}

bool controller::contracts_console()const {
return my->conf.contracts_console;
}
Expand Down
1 change: 1 addition & 0 deletions libraries/chain/include/eosio/chain/controller.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,7 @@ namespace eosio { namespace chain {
bool skip_db_sessions( )const;
bool skip_db_sessions( block_status bs )const;
bool skip_trx_checks()const;
bool is_trusted_producer( const account_name& producer) const;

bool contracts_console()const;

Expand Down
28 changes: 20 additions & 8 deletions plugins/net_plugin/net_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ namespace eosio {
void send_transaction_to_all( const std::shared_ptr<std::vector<char>>& send_buffer, VerifierFunc verify );

void accepted_block(const block_state_ptr&);
void pre_accepted_block(const signed_block_ptr&);
void transaction_ack(const std::pair<fc::exception_ptr, transaction_metadata_ptr>&);

bool is_valid( const handshake_message &msg);
Expand Down Expand Up @@ -698,7 +699,7 @@ namespace eosio {

void bcast_transaction(const transaction_metadata_ptr& trx);
void rejected_transaction(const transaction_id_type& msg);
void bcast_block(const block_state_ptr& bs);
void bcast_block(const signed_block_ptr& b, const block_id_type& id);
void rejected_block(const block_id_type& id);

void recv_block(const connection_ptr& conn, const block_id_type& msg, uint32_t bnum);
Expand Down Expand Up @@ -1661,16 +1662,16 @@ namespace eosio {

//------------------------------------------------------------------------

void dispatch_manager::bcast_block(const block_state_ptr& bs) {
void dispatch_manager::bcast_block(const signed_block_ptr& b, const block_id_type& id) {
std::set<connection_ptr> skips;
auto range = received_blocks.equal_range(bs->id);
auto range = received_blocks.equal_range(id);
for (auto org = range.first; org != range.second; ++org) {
skips.insert(org->second);
}
received_blocks.erase(range.first, range.second);

uint32_t bnum = bs->block_num;
peer_block_state pbstate{bs->id, bnum};
uint32_t bnum = b->block_num();
peer_block_state pbstate{id, bnum};

std::shared_ptr<std::vector<char>> send_buffer;
for( auto& cp : my_impl->connections ) {
Expand All @@ -1684,7 +1685,7 @@ namespace eosio {
continue;
}
if( !send_buffer ) {
send_buffer = create_send_buffer( bs->block );
send_buffer = create_send_buffer( b );
}
fc_dlog(logger, "bcast block ${b} to ${p}", ("b", bnum)("p", cp->peer_name()));
cp->enqueue_buffer( send_buffer, true, no_reason );
Expand Down Expand Up @@ -2805,8 +2806,18 @@ namespace eosio {
}

void net_plugin_impl::accepted_block(const block_state_ptr& block) {
fc_dlog(logger,"signaled, id = ${id}",("id", block->id));
dispatcher->bcast_block(block);
controller& cc = chain_plug->chain();
fc_dlog(logger,"signaled accepted_block, id = ${id}",("id", block->id));
dispatcher->bcast_block(block->block, block->id);
}

void net_plugin_impl::pre_accepted_block(const signed_block_ptr& block) {
controller& cc = chain_plug->chain();
if( cc.is_trusted_producer(block->producer) ) {
auto id = block->id();
fc_dlog(logger,"signaled accepted_block_header, id = ${id}",("id", id));
dispatcher->bcast_block(block, id);
}
}

void net_plugin_impl::transaction_ack(const std::pair<fc::exception_ptr, transaction_metadata_ptr>& results) {
Expand Down Expand Up @@ -3135,6 +3146,7 @@ namespace eosio {
chain::controller&cc = my->chain_plug->chain();
{
cc.accepted_block.connect( boost::bind(&net_plugin_impl::accepted_block, my.get(), _1));
cc.pre_accepted_block.connect( boost::bind(&net_plugin_impl::pre_accepted_block, my.get(), _1) );
}

my->keepalive_timer.reset( new boost::asio::steady_timer( my->thread_pool->get_executor() ) );
Expand Down