From fb7c48fb205df6a9dec3cb2710025bf6d84c2538 Mon Sep 17 00:00:00 2001 From: Srdjan Obucina Date: Tue, 17 Dec 2019 14:54:26 +0100 Subject: [PATCH] Improved peerplays_sidechain_plugin_impl --- .../sidechain_net_handler.hpp | 2 + .../sidechain_net_handler_bitcoin.hpp | 1 - .../peerplays_sidechain_plugin.cpp | 112 +++++++++++++----- .../sidechain_net_handler.cpp | 14 ++- 4 files changed, 94 insertions(+), 35 deletions(-) diff --git a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler.hpp b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler.hpp index ad2ffdc6..a8695a5f 100644 --- a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler.hpp +++ b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler.hpp @@ -14,6 +14,8 @@ public: sidechain_net_handler(peerplays_sidechain_plugin &_plugin, const boost::program_options::variables_map& options); virtual ~sidechain_net_handler(); + graphene::chain::database& get_database(); + std::vector get_sidechain_addresses(); protected: diff --git a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler_bitcoin.hpp b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler_bitcoin.hpp index cbdcfbef..01b452dd 100644 --- a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler_bitcoin.hpp +++ b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler_bitcoin.hpp @@ -83,7 +83,6 @@ private: std::unique_ptr listener; std::unique_ptr bitcoin_client; - graphene::chain::database* db; void handle_event( const std::string& event_data); diff --git a/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp b/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp index c3f4d48f..38a714ca 100644 --- a/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp +++ b/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp @@ -1,6 +1,7 @@ #include #include +#include #include #include @@ -14,44 +15,45 @@ namespace detail class peerplays_sidechain_plugin_impl { public: - peerplays_sidechain_plugin_impl(peerplays_sidechain_plugin& _plugin) : - _self( _plugin ), - _net_manager( _plugin ) - { } + peerplays_sidechain_plugin_impl(peerplays_sidechain_plugin& _plugin); virtual ~peerplays_sidechain_plugin_impl(); - peerplays_sidechain_plugin& _self; + graphene::chain::database& get_database(); + void plugin_set_program_options( + boost::program_options::options_description& cli, + boost::program_options::options_description& cfg); + void plugin_initialize(const boost::program_options::variables_map& options); + void plugin_startup(); + +private: + peerplays_sidechain_plugin& _self; peerplays_sidechain::sidechain_net_manager _net_manager; + bool config_ready_son; + bool config_ready_bitcoin; }; +peerplays_sidechain_plugin_impl::peerplays_sidechain_plugin_impl(peerplays_sidechain_plugin& _plugin) : + _self( _plugin ), + _net_manager( _plugin ), + config_ready_son(false), + config_ready_bitcoin(false) +{ +} + peerplays_sidechain_plugin_impl::~peerplays_sidechain_plugin_impl() { - return; } -} // end namespace detail - -peerplays_sidechain_plugin::peerplays_sidechain_plugin() : - my( new detail::peerplays_sidechain_plugin_impl(*this) ) +graphene::chain::database& peerplays_sidechain_plugin_impl::get_database() { + return _self.database(); } -peerplays_sidechain_plugin::~peerplays_sidechain_plugin() -{ - return; -} - -std::string peerplays_sidechain_plugin::plugin_name()const -{ - return "peerplays_sidechain"; -} - -void peerplays_sidechain_plugin::plugin_set_program_options( +void peerplays_sidechain_plugin_impl::plugin_set_program_options( boost::program_options::options_description& cli, - boost::program_options::options_description& cfg - ) + boost::program_options::options_description& cfg) { auto default_priv_key = fc::ecc::private_key::regenerate(fc::sha256::hash(std::string("nathan"))); string son_id_example = fc::json::to_string(chain::son_id_type(5)); @@ -74,24 +76,72 @@ void peerplays_sidechain_plugin::plugin_set_program_options( cfg.add(cli); } -void peerplays_sidechain_plugin::plugin_initialize(const boost::program_options::variables_map& options) +void peerplays_sidechain_plugin_impl::plugin_initialize(const boost::program_options::variables_map& options) { - ilog("peerplays sidechain plugin: plugin_initialize()"); + config_ready_son = options.count( "son-id" ) && options.count( "peerplays-private-key" ); + if (config_ready_son) { + } else { + wlog("Haven't set up SON parameters"); + } - if ( options.count( "son-id" ) && options.count( "peerplays-private-key" ) - && options.count( "bitcoin-node-ip" ) && options.count( "bitcoin-node-zmq-port" ) && options.count( "bitcoin-node-rpc-port" ) - && options.count( "bitcoin-node-rpc-user" ) && options.count( "bitcoin-node-rpc-password" ) - && options.count( "bitcoin-address" ) && options.count( "bitcoin-public-key" ) && options.count( "bitcoin-private-key" ) ) - { - my->_net_manager.create_handler(sidechain_type::bitcoin, options); + config_ready_bitcoin = options.count( "bitcoin-node-ip" ) && + options.count( "bitcoin-node-zmq-port" ) && options.count( "bitcoin-node-rpc-port" ) && + options.count( "bitcoin-node-rpc-user" ) && options.count( "bitcoin-node-rpc-password" ) && + options.count( "bitcoin-address" ) && options.count( "bitcoin-public-key" ) && options.count( "bitcoin-private-key" ); + if (config_ready_bitcoin) { + _net_manager.create_handler(sidechain_type::bitcoin, options); + ilog("Bitcoin sidechain handler created"); } else { wlog("Haven't set up bitcoin sidechain parameters"); } } +void peerplays_sidechain_plugin_impl::plugin_startup() +{ + if (config_ready_son) { + ilog("SON running"); + } + + if (config_ready_bitcoin) { + ilog("Bitcoin sidechain handler running"); + } +} + +} // end namespace detail + +peerplays_sidechain_plugin::peerplays_sidechain_plugin() : + my( new detail::peerplays_sidechain_plugin_impl(*this) ) +{ +} + +peerplays_sidechain_plugin::~peerplays_sidechain_plugin() +{ + return; +} + +std::string peerplays_sidechain_plugin::plugin_name()const +{ + return "peerplays_sidechain"; +} + +void peerplays_sidechain_plugin::plugin_set_program_options( + boost::program_options::options_description& cli, + boost::program_options::options_description& cfg) +{ + ilog("peerplays sidechain plugin: plugin_set_program_options()"); + my->plugin_set_program_options(cli, cfg); +} + +void peerplays_sidechain_plugin::plugin_initialize(const boost::program_options::variables_map& options) +{ + ilog("peerplays sidechain plugin: plugin_initialize()"); + my->plugin_initialize(options); +} + void peerplays_sidechain_plugin::plugin_startup() { ilog("peerplays sidechain plugin: plugin_startup()"); + my->plugin_startup(); } } } // graphene::peerplays_sidechain diff --git a/libraries/plugins/peerplays_sidechain/sidechain_net_handler.cpp b/libraries/plugins/peerplays_sidechain/sidechain_net_handler.cpp index 92da90b8..3a25bdf6 100644 --- a/libraries/plugins/peerplays_sidechain/sidechain_net_handler.cpp +++ b/libraries/plugins/peerplays_sidechain/sidechain_net_handler.cpp @@ -7,20 +7,28 @@ namespace graphene { namespace peerplays_sidechain { sidechain_net_handler::sidechain_net_handler(peerplays_sidechain_plugin &_plugin, const boost::program_options::variables_map& options) : - plugin( _plugin ) { + plugin( _plugin ) +{ } sidechain_net_handler::~sidechain_net_handler() { } +graphene::chain::database& sidechain_net_handler::get_database() +{ + return plugin.database(); +} + std::vector sidechain_net_handler::get_sidechain_addresses() { std::vector result; switch (sidechain) { case sidechain_type::bitcoin: { - const auto& sidechain_addresses_range = plugin.database().get_index_type().indices().get().equal_range(sidechain); - std::for_each(sidechain_addresses_range.first, sidechain_addresses_range.second, + const auto& sidechain_addresses_idx = get_database().get_index_type(); + const auto& sidechain_addresses_by_sidechain_idx = sidechain_addresses_idx.indices().get(); + const auto& sidechain_addresses_by_sidechain_range = sidechain_addresses_by_sidechain_idx.equal_range(sidechain); + std::for_each(sidechain_addresses_by_sidechain_range.first, sidechain_addresses_by_sidechain_range.second, [&result] (const sidechain_address_object& sao) { result.push_back(sao.address); });