diff --git a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/peerplays_sidechain_plugin.hpp b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/peerplays_sidechain_plugin.hpp index c69efaf4..b6719e0c 100644 --- a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/peerplays_sidechain_plugin.hpp +++ b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/peerplays_sidechain_plugin.hpp @@ -31,6 +31,7 @@ public: const son_object get_current_son_object(); const son_object get_son_object(son_id_type son_id); bool is_active_son(son_id_type son_id); + bool is_son_deleted(son_id_type son_id); fc::ecc::private_key get_private_key(son_id_type son_id); fc::ecc::private_key get_private_key(chain::public_key_type public_key); }; diff --git a/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp b/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp index 026cb3b5..b51354a1 100644 --- a/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp +++ b/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp @@ -37,6 +37,7 @@ public: const son_object get_current_son_object(); const son_object get_son_object(son_id_type son_id); bool is_active_son(son_id_type son_id); + bool is_son_deleted(son_id_type son_id); bool is_son_delete_op_valid(const chain::operation &op); bool is_son_down_op_valid(const chain::operation &op); bool is_valid_son_proposal(const chain::proposal_object &proposal); @@ -268,6 +269,15 @@ bool peerplays_sidechain_plugin_impl::is_active_son(son_id_type son_id) { return (it != active_son_ids.end()); } +bool peerplays_sidechain_plugin_impl::is_son_deleted(son_id_type son_id) { + const auto &idx = plugin.database().get_index_type().indices().get(); + auto son_obj = idx.find(son_id); + if (son_obj == idx.end()) + return true; + + return false; +} + bool peerplays_sidechain_plugin_impl::is_son_delete_op_valid(const chain::operation &op) { son_delete_operation delete_op = op.get(); return plugin.database().is_son_dereg_valid(delete_op.son_id); @@ -375,6 +385,9 @@ void peerplays_sidechain_plugin_impl::son_processing() { ("scheduled_son_id", scheduled_son_id)("now", now)); for (son_id_type son_id : plugin.get_sons()) { + if (plugin.is_son_deleted(son_id)) { + continue; + } current_son_id = son_id; // These tasks are executed by @@ -646,6 +659,10 @@ bool peerplays_sidechain_plugin::is_active_son(son_id_type son_id) { return my->is_active_son(son_id); } +bool peerplays_sidechain_plugin::is_son_deleted(son_id_type son_id) { + return my->is_son_deleted(son_id); +} + fc::ecc::private_key peerplays_sidechain_plugin::get_private_key(son_id_type son_id) { return my->get_private_key(son_id); }