Improved peerplays_sidechain_plugin_impl

This commit is contained in:
Srdjan Obucina 2019-12-17 14:54:26 +01:00
parent c79b215aa0
commit fb7c48fb20
4 changed files with 94 additions and 35 deletions

View file

@ -14,6 +14,8 @@ public:
sidechain_net_handler(peerplays_sidechain_plugin &_plugin, const boost::program_options::variables_map& options); sidechain_net_handler(peerplays_sidechain_plugin &_plugin, const boost::program_options::variables_map& options);
virtual ~sidechain_net_handler(); virtual ~sidechain_net_handler();
graphene::chain::database& get_database();
std::vector<std::string> get_sidechain_addresses(); std::vector<std::string> get_sidechain_addresses();
protected: protected:

View file

@ -83,7 +83,6 @@ private:
std::unique_ptr<zmq_listener> listener; std::unique_ptr<zmq_listener> listener;
std::unique_ptr<bitcoin_rpc_client> bitcoin_client; std::unique_ptr<bitcoin_rpc_client> bitcoin_client;
graphene::chain::database* db;
void handle_event( const std::string& event_data); void handle_event( const std::string& event_data);

View file

@ -1,6 +1,7 @@
#include <graphene/peerplays_sidechain/peerplays_sidechain_plugin.hpp> #include <graphene/peerplays_sidechain/peerplays_sidechain_plugin.hpp>
#include <fc/log/logger.hpp> #include <fc/log/logger.hpp>
#include <graphene/chain/sidechain_address_object.hpp>
#include <graphene/peerplays_sidechain/sidechain_net_manager.hpp> #include <graphene/peerplays_sidechain/sidechain_net_manager.hpp>
#include <graphene/utilities/key_conversion.hpp> #include <graphene/utilities/key_conversion.hpp>
@ -14,44 +15,45 @@ namespace detail
class peerplays_sidechain_plugin_impl class peerplays_sidechain_plugin_impl
{ {
public: public:
peerplays_sidechain_plugin_impl(peerplays_sidechain_plugin& _plugin) : peerplays_sidechain_plugin_impl(peerplays_sidechain_plugin& _plugin);
_self( _plugin ),
_net_manager( _plugin )
{ }
virtual ~peerplays_sidechain_plugin_impl(); 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; 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() peerplays_sidechain_plugin_impl::~peerplays_sidechain_plugin_impl()
{ {
return;
} }
} // end namespace detail graphene::chain::database& peerplays_sidechain_plugin_impl::get_database()
peerplays_sidechain_plugin::peerplays_sidechain_plugin() :
my( new detail::peerplays_sidechain_plugin_impl(*this) )
{ {
return _self.database();
} }
peerplays_sidechain_plugin::~peerplays_sidechain_plugin() void peerplays_sidechain_plugin_impl::plugin_set_program_options(
{
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& 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"))); 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)); 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); 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" ) config_ready_bitcoin = options.count( "bitcoin-node-ip" ) &&
&& options.count( "bitcoin-node-ip" ) && options.count( "bitcoin-node-zmq-port" ) && options.count( "bitcoin-node-rpc-port" ) 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-node-rpc-user" ) && options.count( "bitcoin-node-rpc-password" ) &&
&& options.count( "bitcoin-address" ) && options.count( "bitcoin-public-key" ) && options.count( "bitcoin-private-key" ) ) options.count( "bitcoin-address" ) && options.count( "bitcoin-public-key" ) && options.count( "bitcoin-private-key" );
{ if (config_ready_bitcoin) {
my->_net_manager.create_handler(sidechain_type::bitcoin, options); _net_manager.create_handler(sidechain_type::bitcoin, options);
ilog("Bitcoin sidechain handler created");
} else { } else {
wlog("Haven't set up bitcoin sidechain parameters"); 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() void peerplays_sidechain_plugin::plugin_startup()
{ {
ilog("peerplays sidechain plugin: plugin_startup()"); ilog("peerplays sidechain plugin: plugin_startup()");
my->plugin_startup();
} }
} } // graphene::peerplays_sidechain } } // graphene::peerplays_sidechain

View file

@ -7,20 +7,28 @@
namespace graphene { namespace peerplays_sidechain { namespace graphene { namespace peerplays_sidechain {
sidechain_net_handler::sidechain_net_handler(peerplays_sidechain_plugin &_plugin, const boost::program_options::variables_map& options) : 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() { sidechain_net_handler::~sidechain_net_handler() {
} }
graphene::chain::database& sidechain_net_handler::get_database()
{
return plugin.database();
}
std::vector<std::string> sidechain_net_handler::get_sidechain_addresses() { std::vector<std::string> sidechain_net_handler::get_sidechain_addresses() {
std::vector<std::string> result; std::vector<std::string> result;
switch (sidechain) { switch (sidechain) {
case sidechain_type::bitcoin: case sidechain_type::bitcoin:
{ {
const auto& sidechain_addresses_range = plugin.database().get_index_type<sidechain_address_index>().indices().get<by_sidechain>().equal_range(sidechain); const auto& sidechain_addresses_idx = get_database().get_index_type<sidechain_address_index>();
std::for_each(sidechain_addresses_range.first, sidechain_addresses_range.second, const auto& sidechain_addresses_by_sidechain_idx = sidechain_addresses_idx.indices().get<by_sidechain>();
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] (const sidechain_address_object& sao) {
result.push_back(sao.address); result.push_back(sao.address);
}); });