diff --git a/libraries/appbase b/libraries/appbase index 028da3b1e8ad612865676734c54db3f6197f338d..87e40d90bb0228241a9356cfad58ad76cb358ab3 160000 --- a/libraries/appbase +++ b/libraries/appbase @@ -1 +1 @@ -Subproject commit 028da3b1e8ad612865676734c54db3f6197f338d +Subproject commit 87e40d90bb0228241a9356cfad58ad76cb358ab3 diff --git a/libraries/net/node.cpp b/libraries/net/node.cpp index c5f6274223ea0b15429f279ea5d8251ad57e4a5b..8aeb019c860a76fd964bfcb5ddaa43456c4d517c 100644 --- a/libraries/net/node.cpp +++ b/libraries/net/node.cpp @@ -86,10 +86,10 @@ //#define ENABLE_DEBUG_ULOGS -//#ifdef DEFAULT_LOGGER -//# undef DEFAULT_LOGGER -//#endif -//#define DEFAULT_LOGGER "p2p" +#ifdef DEFAULT_LOGGER +# undef DEFAULT_LOGGER +#endif +#define DEFAULT_LOGGER "p2p" #define P2P_IN_DEDICATED_THREAD 1 diff --git a/plugins/p2p_plugin/include/eos/p2p_plugin/p2p_plugin.hpp b/plugins/p2p_plugin/include/eos/p2p_plugin/p2p_plugin.hpp index 015b302fad1cad3090c4dcf0d09276e1caa34a60..6c68801616575cf2857561157e74533220ee031a 100644 --- a/plugins/p2p_plugin/include/eos/p2p_plugin/p2p_plugin.hpp +++ b/plugins/p2p_plugin/include/eos/p2p_plugin/p2p_plugin.hpp @@ -44,6 +44,8 @@ public: virtual void plugin_startup(); virtual void plugin_shutdown(); + void broadcast_block(const chain::signed_block& block); + private: std::unique_ptr my; }; diff --git a/plugins/p2p_plugin/p2p_plugin.cpp b/plugins/p2p_plugin/p2p_plugin.cpp index 60cd4ad63f98f8d7baca8e529186d008a7618347..0241afcfb4bf2d6df93729a2db48f08ee0239bc8 100644 --- a/plugins/p2p_plugin/p2p_plugin.cpp +++ b/plugins/p2p_plugin/p2p_plugin.cpp @@ -53,7 +53,7 @@ public: // node_delegate interface virtual bool has_item(const net::item_id& id) override; - virtual bool handle_block(const net::block_message& blk_msg, bool sync_mode, std::vector& contained_transaction_message_ids) override; + virtual bool handle_block(const net::block_message& blk_msg, bool sync_mode, std::vector&) override; virtual void handle_transaction(const net::trx_message& trx_msg) override; virtual void handle_message(const net::message& message_to_process) override; virtual std::vector get_block_ids(const std::vector& blockchain_synopsis, uint32_t& remaining_item_count, uint32_t limit) override; @@ -127,10 +127,16 @@ void p2p_plugin::plugin_startup() { } void p2p_plugin::plugin_shutdown() { + ilog("Shutting down P2P Plugin"); my->node->close(); my->node.reset(); } +void p2p_plugin::broadcast_block(const chain::signed_block& block) { + ilog("Broadcasting block #${n}", ("n", block.block_num())); + my->node->broadcast(eos::net::block_message(block)); +} + ////////////////////////////// Begin node_delegate Implementation ////////////////////////////// bool p2p_plugin_impl::node_delegate::has_item(const net::item_id& id) { switch (id.item_type) { @@ -146,8 +152,9 @@ bool p2p_plugin_impl::node_delegate::has_item(const net::item_id& id) { } bool p2p_plugin_impl::node_delegate::handle_block(const net::block_message& blk_msg, bool sync_mode, - std::vector& contained_transaction_message_ids) { + std::vector&) { try { + if (!sync_mode) ilog("Received block ${num} from peer", ("num", blk_msg.block.block_num())); return chain.accept_block(blk_msg.block, sync_mode); } catch (eos::chain::unlinkable_block_exception& e) { FC_THROW_EXCEPTION(net::unlinkable_block_exception, "Unlinkable block: ${e}", ("e", e.to_detail_string())); @@ -185,8 +192,10 @@ vector p2p_plugin_impl::node_delegate::get_block_ids(const std vector ids; ids.reserve(last_block_num_to_return - last_known_block_num); for (unsigned num = last_known_block_num; num <= last_block_num_to_return; ++num) - ids.emplace_back(chain.db().get_block_id_for_num(num)); + if (BOOST_LIKELY(num > 0)) + ids.emplace_back(chain.db().get_block_id_for_num(num)); + ilog("Exiting ${f} with ${r}", ("f", __FUNCTION__)("r", ids)); return ids; } FC_CAPTURE_AND_RETHROW((blockchain_synopsis)) } diff --git a/plugins/producer_plugin/CMakeLists.txt b/plugins/producer_plugin/CMakeLists.txt index edab90f609c759b7a4ee01999eed3df4c38e4195..317e8daa2d17fa8afb847c40c025efa07298df8c 100644 --- a/plugins/producer_plugin/CMakeLists.txt +++ b/plugins/producer_plugin/CMakeLists.txt @@ -2,9 +2,10 @@ file(GLOB HEADERS "include/eos/producer_plugin/*.hpp") add_library( producer_plugin producer_plugin.cpp + ${HEADERS} ) -target_link_libraries( producer_plugin chain_plugin appbase eos_chain eos_utilities ) +target_link_libraries( producer_plugin p2p_plugin chain_plugin appbase eos_chain eos_utilities ) target_include_directories( producer_plugin PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" ) diff --git a/plugins/producer_plugin/include/eos/producer_plugin/producer_plugin.hpp b/plugins/producer_plugin/include/eos/producer_plugin/producer_plugin.hpp index d0d28607364f44a8da8fa3d01eba450b08b7283b..8b9fee07b730d7da35a6c3968192db4964734112 100644 --- a/plugins/producer_plugin/include/eos/producer_plugin/producer_plugin.hpp +++ b/plugins/producer_plugin/include/eos/producer_plugin/producer_plugin.hpp @@ -24,6 +24,7 @@ #pragma once #include +#include #include @@ -46,7 +47,7 @@ namespace block_production_condition { class producer_plugin : public appbase::plugin { public: - APPBASE_PLUGIN_REQUIRES((chain_plugin)) + APPBASE_PLUGIN_REQUIRES((chain_plugin)(p2p_plugin)) producer_plugin(); virtual ~producer_plugin(); diff --git a/plugins/producer_plugin/producer_plugin.cpp b/plugins/producer_plugin/producer_plugin.cpp index d2b518c3a5dab9663d4673c18cabfb2df673de9e..78e6e3900c461e2f7e5ea2e76a1bf48bafba742a 100644 --- a/plugins/producer_plugin/producer_plugin.cpp +++ b/plugins/producer_plugin/producer_plugin.cpp @@ -306,9 +306,7 @@ block_production_condition::block_production_condition_enum producer_plugin_impl ); capture("n", block.block_num())("t", block.timestamp)("c", now); -// fc::async( [this,block](){ p2p_node().broadcast(net::block_message(block)); } ); -#warning TODO: broadcast the new block - + app().get_plugin().broadcast_block(block); return block_production_condition::produced; }