From 4f8a64cd55c9d9b850b2de67da9c20f9c02cf6b5 Mon Sep 17 00:00:00 2001 From: vlbos Date: Thu, 14 Mar 2019 19:34:00 +0800 Subject: [PATCH 1/9] blacklist --- libraries/chain/chain_config.cpp | 6 + libraries/chain/controller.cpp | 112 ++++++++++++++++++ .../include/eosio/chain/chain_config.hpp | 11 ++ .../chain/include/eosio/chain/controller.hpp | 14 +++ .../eosio/chain/global_property_object.hpp | 20 ++++ libraries/chain/wasm_interface.cpp | 18 +++ 6 files changed, 181 insertions(+) diff --git a/libraries/chain/chain_config.cpp b/libraries/chain/chain_config.cpp index 35c77f8325d..c39d89cee46 100644 --- a/libraries/chain/chain_config.cpp +++ b/libraries/chain/chain_config.cpp @@ -43,4 +43,10 @@ namespace eosio { namespace chain { "max authority depth should be at least 1" ); } +void chain_config2::validate() const{ + EOS_ASSERT(std::numeric_limits::max() > actor_blacklist.size(), action_validate_exception, "Overflow in blacklist when adding actor blacklist!"); + EOS_ASSERT(std::numeric_limits::max() > contract_blacklist.size(), action_validate_exception, "Overflow in blacklist when adding contract blacklist!"); + EOS_ASSERT(std::numeric_limits::max() > resource_greylist.size(), action_validate_exception, "Overflow in greylistwhen adding resource greylist!"); +} + } } // namespace eosio::chain diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index f3b0a841981..9e26e7896cf 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -32,6 +32,7 @@ using controller_index_set = index_set< account_index, account_sequence_index, global_property_multi_index, + global_property2_multi_index, dynamic_global_property_multi_index, block_summary_multi_index, transaction_multi_index, @@ -124,6 +125,7 @@ struct controller_impl { resource_limits_manager resource_limits; authorization_manager authorization; controller::config conf; + controller::config conf_from_system_contract;///< backup blacklist from system contract,distinguish from config.ini,command line and chain api chain_id_type chain_id; bool replaying= false; optional replay_head_time; @@ -400,6 +402,9 @@ struct controller_impl { ilog( "database initialized with hash: ${hash}", ("hash", hash) ); } + sync_name_list(list_type::actor_blacklist_type); + sync_name_list(list_type::contract_blacklist_type); + sync_name_list(list_type::resource_greylist_type); } ~controller_impl() { @@ -666,7 +671,106 @@ struct controller_impl { conf.genesis.initial_timestamp ); } + void set_name_list(list_type list, list_action_type action, std::vector name_list) + { + //set list from set_name_list action in system contract + int64_t lst = static_cast(list); + + EOS_ASSERT(list >= list_type::actor_blacklist_type && list < list_type::list_type_count, transaction_exception, "unknown list type : ${l}, action: ${n}", ("l", static_cast(list))("n", static_cast(action))); + vector *> lists = {&conf.actor_blacklist, &conf.contract_blacklist, &conf.resource_greylist}; + vector *> clists = {&conf_from_system_contract.actor_blacklist, &conf_from_system_contract.contract_blacklist, &conf_from_system_contract.resource_greylist}; + const auto &gprops2 = db.get(); + vector*> dblists = { + &gprops2.cfg.actor_blacklist, &gprops2.cfg.contract_blacklist, + &gprops2.cfg.resource_greylist}; + EOS_ASSERT(lists.size() == static_cast(list_type::list_type_count) - 1, transaction_exception, " list size wrong : ${l}, action: ${n}", ("l", static_cast(list))("n", static_cast(action))); + const shared_vector &dblo = *dblists[lst - 1]; + flat_set &clo = *clists[lst - 1]; + flat_set &lo = *lists[lst - 1]; + + for (auto &a : dblo) { + clo.insert(a); + } + + auto update_lists = [&](auto& lsto){ + if (action == list_action_type::insert_type) + { + lsto.insert(name_list.begin(), name_list.end()); + } + else if (action == list_action_type::remove_type) + { + flat_set name_set(name_list.begin(), name_list.end()); + + flat_set results; + results.reserve(lsto.size()); + set_difference(lsto.begin(), lsto.end(), + name_set.begin(), name_set.end(), + std::inserter(results,results.begin())); + + lsto = results; + } + }; + + update_lists(lo); + update_lists(clo);//save list from contract to memory, + + auto insert_list = [&](auto &o) { + vector *> olists = { + &o.cfg.actor_blacklist, + &o.cfg.contract_blacklist, + &o.cfg.resource_greylist}; + shared_vector &olo = *olists[lst - 1]; + // clear list from db and save merge result to db object + olo.clear(); + for (auto &a : clo) { + olo.push_back(a); + } + }; + + db.modify(gprops2, [&](auto &gp2) { + insert_list(gp2); + }); + } + void check_list_in_contract_db(list_type list,account_name account) { + + int64_t lst = static_cast(list); + + EOS_ASSERT(list >= list_type::actor_blacklist_type && list < list_type::list_type_count, transaction_exception, "unknown list type : ${l}, action: ${n}", ("l", static_cast(list))("n", account)); + + vector *> clists = {&conf_from_system_contract.actor_blacklist, &conf_from_system_contract.contract_blacklist, &conf_from_system_contract.resource_greylist}; + + flat_set &clo = *clists[lst - 1]; + + EOS_ASSERT(clo.find(account) == clo.end(), transaction_exception, " do not remove item in contract db list , account: ${n}", ("n", account)); + + } + + void sync_name_list(list_type list) + { + try + { + + int64_t lst = static_cast(list); + EOS_ASSERT( list >= list_type::actor_blacklist_type && list < list_type::list_type_count, transaction_exception, "unknown list type : ${l}", ("l", static_cast(list))); + const auto &gprops2 = db.get(); + vector *> dblists = {&gprops2.cfg.actor_blacklist, &gprops2.cfg.contract_blacklist, &gprops2.cfg.resource_greylist}; + vector *> lists = {&conf.actor_blacklist, &conf.contract_blacklist, &conf.resource_greylist}; + EOS_ASSERT(lists.size() == static_cast(list_type::list_type_count) - 1, transaction_exception, " list size wrong : ${l}, ismerge: ${n}", ("l", static_cast(list))); + const shared_vector &dblo = *dblists[lst - 1]; + flat_set &lo = *lists[lst - 1]; + + //initialize, merge elements and remove duplication between list and db.result save to list + for (auto &a : dblo) + { + lo.insert(a); + } + } + catch (...) + { + wlog("plugin initialize sync list ignore before initialize database"); + } + } /** * @post regardless of the success of commit block there is no active pending block @@ -2201,6 +2305,7 @@ void controller::add_resource_greylist(const account_name &name) { } void controller::remove_resource_greylist(const account_name &name) { + my->check_list_in_contract_db(list_type::resource_greylist_type,name); my->conf.resource_greylist.erase(name); } @@ -2212,4 +2317,11 @@ const flat_set &controller::get_resource_greylist() const { return my->conf.resource_greylist; } +const global_property2_object& controller::get_global_properties2()const { + return my->db.get(); +} +void controller::set_name_list(int64_t list, int64_t action, std::vector name_list) +{ + my->set_name_list(static_cast(list), static_cast(action), name_list); +} } } /// eosio::chain diff --git a/libraries/chain/include/eosio/chain/chain_config.hpp b/libraries/chain/include/eosio/chain/chain_config.hpp index 37b73cb51fe..50faf064ed9 100644 --- a/libraries/chain/include/eosio/chain/chain_config.hpp +++ b/libraries/chain/include/eosio/chain/chain_config.hpp @@ -105,6 +105,16 @@ struct chain_config { }; +struct chain_config2 { + chain_config2( chainbase::allocator alloc ) + :actor_blacklist(alloc),contract_blacklist(alloc),resource_greylist(alloc){} + + shared_vector actor_blacklist; + shared_vector contract_blacklist; + shared_vector resource_greylist; + + void validate()const; +}; } } // namespace eosio::chain FC_REFLECT(eosio::chain::chain_config, @@ -119,3 +129,4 @@ FC_REFLECT(eosio::chain::chain_config, (max_inline_action_size)(max_inline_action_depth)(max_authority_depth) ) +FC_REFLECT( eosio::chain::chain_config2, (actor_blacklist)(contract_blacklist)(resource_greylist) ) diff --git a/libraries/chain/include/eosio/chain/controller.hpp b/libraries/chain/include/eosio/chain/controller.hpp index 2aab3179668..a75a7de4337 100644 --- a/libraries/chain/include/eosio/chain/controller.hpp +++ b/libraries/chain/include/eosio/chain/controller.hpp @@ -50,6 +50,18 @@ namespace eosio { namespace chain { FULL, LIGHT }; + enum class list_type:int64_t { + actor_blacklist_type=1, + contract_blacklist_type, + resource_greylist_type, + list_type_count + }; + enum class list_action_type:int64_t + { + insert_type = 1, + remove_type, + list_action_type_count + }; class controller { public: @@ -213,6 +225,8 @@ namespace eosio { namespace chain { void add_resource_greylist(const account_name &name); void remove_resource_greylist(const account_name &name); + const global_property2_object& get_global_properties2()const; + void set_name_list(int64_t list, int64_t action, std::vector name_list); bool is_resource_greylisted(const account_name &name) const; const flat_set &get_resource_greylist() const; diff --git a/libraries/chain/include/eosio/chain/global_property_object.hpp b/libraries/chain/include/eosio/chain/global_property_object.hpp index 7f3c09cccf5..48a01cdbdac 100644 --- a/libraries/chain/include/eosio/chain/global_property_object.hpp +++ b/libraries/chain/include/eosio/chain/global_property_object.hpp @@ -34,6 +34,14 @@ namespace eosio { namespace chain { chain_config configuration; }; + class global_property2_object : public chainbase::object + { + OBJECT_CTOR(global_property2_object, (cfg)) + + id_type id; + chain_config2 cfg; + + }; /** @@ -71,11 +79,20 @@ namespace eosio { namespace chain { > >; + using global_property2_multi_index = chainbase::shared_multi_index_container< + global_property2_object, + indexed_by< + ordered_unique, + BOOST_MULTI_INDEX_MEMBER(global_property2_object, global_property2_object::id_type, id) + > + > + >; }} CHAINBASE_SET_INDEX_TYPE(eosio::chain::global_property_object, eosio::chain::global_property_multi_index) CHAINBASE_SET_INDEX_TYPE(eosio::chain::dynamic_global_property_object, eosio::chain::dynamic_global_property_multi_index) +CHAINBASE_SET_INDEX_TYPE(eosio::chain::global_property2_object, eosio::chain::global_property2_multi_index) FC_REFLECT(eosio::chain::dynamic_global_property_object, (global_action_sequence) @@ -84,3 +101,6 @@ FC_REFLECT(eosio::chain::dynamic_global_property_object, FC_REFLECT(eosio::chain::global_property_object, (proposed_schedule_block_num)(proposed_schedule)(configuration) ) +FC_REFLECT(eosio::chain::global_property2_object, + (cfg) + ) \ No newline at end of file diff --git a/libraries/chain/wasm_interface.cpp b/libraries/chain/wasm_interface.cpp index feb9efbef8a..9134646982c 100644 --- a/libraries/chain/wasm_interface.cpp +++ b/libraries/chain/wasm_interface.cpp @@ -193,6 +193,23 @@ class privileged_api : public context_aware_api { }); } + void set_name_list_packed(int64_t list, int64_t action, array_ptr packed_name_list, size_t datalen) + { + int64_t lstbegin = static_cast(list_type::actor_blacklist_type ); + int64_t lstend = static_cast(list_type::list_type_count); + int64_t actbegin = static_cast(list_action_type::insert_type); + int64_t actend = static_cast(list_action_type::list_action_type_count); + EOS_ASSERT(list >= lstbegin && list < lstend, wasm_execution_error, "unkown name list!"); + EOS_ASSERT(action >= actbegin && action < actend, wasm_execution_error, "unkown action"); + + datastream ds(packed_name_list, datalen); + std::vector name_list; // TODO std::set dosen't work, bug. + fc::raw::unpack(ds, name_list); + + context.control.set_name_list(list, action, name_list); + + + } bool is_privileged( account_name n )const { return context.db.get( n ).privileged; } @@ -1700,6 +1717,7 @@ REGISTER_INTRINSICS(privileged_api, (set_proposed_producers, int64_t(int,int) ) (get_blockchain_parameters_packed, int(int, int) ) (set_blockchain_parameters_packed, void(int,int) ) + (set_name_list_packed, void(int64_t,int64_t,int,int) ) (is_privileged, int(int64_t) ) (set_privileged, void(int64_t, int) ) ); From b51d5598d98985a3a3019be21dfe92c6042b71d0 Mon Sep 17 00:00:00 2001 From: vlbos Date: Thu, 14 Mar 2019 19:45:39 +0800 Subject: [PATCH 2/9] blacklist --- libraries/chain/include/eosio/chain/types.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/chain/include/eosio/chain/types.hpp b/libraries/chain/include/eosio/chain/types.hpp index 21fbf216c43..f67fd858ee5 100644 --- a/libraries/chain/include/eosio/chain/types.hpp +++ b/libraries/chain/include/eosio/chain/types.hpp @@ -163,6 +163,7 @@ namespace eosio { namespace chain { index_double_object_type, index_long_double_object_type, global_property_object_type, + global_property2_object_type, dynamic_global_property_object_type, block_summary_object_type, transaction_object_type, From 0ca6d84be065599b03012964ceffee39a1dd72ae Mon Sep 17 00:00:00 2001 From: vlbos Date: Thu, 14 Mar 2019 21:18:31 +0800 Subject: [PATCH 3/9] blacklist --- libraries/chain/chain_config.cpp | 6 + libraries/chain/controller.cpp | 112 ++++++++++++++++++ .../include/eosio/chain/chain_config.hpp | 11 ++ .../chain/include/eosio/chain/controller.hpp | 15 +++ .../eosio/chain/global_property_object.hpp | 20 ++++ libraries/chain/include/eosio/chain/types.hpp | 1 + libraries/chain/wasm_interface.cpp | 18 +++ 7 files changed, 183 insertions(+) diff --git a/libraries/chain/chain_config.cpp b/libraries/chain/chain_config.cpp index 35c77f8325d..c39d89cee46 100644 --- a/libraries/chain/chain_config.cpp +++ b/libraries/chain/chain_config.cpp @@ -43,4 +43,10 @@ namespace eosio { namespace chain { "max authority depth should be at least 1" ); } +void chain_config2::validate() const{ + EOS_ASSERT(std::numeric_limits::max() > actor_blacklist.size(), action_validate_exception, "Overflow in blacklist when adding actor blacklist!"); + EOS_ASSERT(std::numeric_limits::max() > contract_blacklist.size(), action_validate_exception, "Overflow in blacklist when adding contract blacklist!"); + EOS_ASSERT(std::numeric_limits::max() > resource_greylist.size(), action_validate_exception, "Overflow in greylistwhen adding resource greylist!"); +} + } } // namespace eosio::chain diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index f3b0a841981..9e26e7896cf 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -32,6 +32,7 @@ using controller_index_set = index_set< account_index, account_sequence_index, global_property_multi_index, + global_property2_multi_index, dynamic_global_property_multi_index, block_summary_multi_index, transaction_multi_index, @@ -124,6 +125,7 @@ struct controller_impl { resource_limits_manager resource_limits; authorization_manager authorization; controller::config conf; + controller::config conf_from_system_contract;///< backup blacklist from system contract,distinguish from config.ini,command line and chain api chain_id_type chain_id; bool replaying= false; optional replay_head_time; @@ -400,6 +402,9 @@ struct controller_impl { ilog( "database initialized with hash: ${hash}", ("hash", hash) ); } + sync_name_list(list_type::actor_blacklist_type); + sync_name_list(list_type::contract_blacklist_type); + sync_name_list(list_type::resource_greylist_type); } ~controller_impl() { @@ -666,7 +671,106 @@ struct controller_impl { conf.genesis.initial_timestamp ); } + void set_name_list(list_type list, list_action_type action, std::vector name_list) + { + //set list from set_name_list action in system contract + int64_t lst = static_cast(list); + + EOS_ASSERT(list >= list_type::actor_blacklist_type && list < list_type::list_type_count, transaction_exception, "unknown list type : ${l}, action: ${n}", ("l", static_cast(list))("n", static_cast(action))); + vector *> lists = {&conf.actor_blacklist, &conf.contract_blacklist, &conf.resource_greylist}; + vector *> clists = {&conf_from_system_contract.actor_blacklist, &conf_from_system_contract.contract_blacklist, &conf_from_system_contract.resource_greylist}; + const auto &gprops2 = db.get(); + vector*> dblists = { + &gprops2.cfg.actor_blacklist, &gprops2.cfg.contract_blacklist, + &gprops2.cfg.resource_greylist}; + EOS_ASSERT(lists.size() == static_cast(list_type::list_type_count) - 1, transaction_exception, " list size wrong : ${l}, action: ${n}", ("l", static_cast(list))("n", static_cast(action))); + const shared_vector &dblo = *dblists[lst - 1]; + flat_set &clo = *clists[lst - 1]; + flat_set &lo = *lists[lst - 1]; + + for (auto &a : dblo) { + clo.insert(a); + } + + auto update_lists = [&](auto& lsto){ + if (action == list_action_type::insert_type) + { + lsto.insert(name_list.begin(), name_list.end()); + } + else if (action == list_action_type::remove_type) + { + flat_set name_set(name_list.begin(), name_list.end()); + + flat_set results; + results.reserve(lsto.size()); + set_difference(lsto.begin(), lsto.end(), + name_set.begin(), name_set.end(), + std::inserter(results,results.begin())); + + lsto = results; + } + }; + + update_lists(lo); + update_lists(clo);//save list from contract to memory, + + auto insert_list = [&](auto &o) { + vector *> olists = { + &o.cfg.actor_blacklist, + &o.cfg.contract_blacklist, + &o.cfg.resource_greylist}; + shared_vector &olo = *olists[lst - 1]; + // clear list from db and save merge result to db object + olo.clear(); + for (auto &a : clo) { + olo.push_back(a); + } + }; + + db.modify(gprops2, [&](auto &gp2) { + insert_list(gp2); + }); + } + void check_list_in_contract_db(list_type list,account_name account) { + + int64_t lst = static_cast(list); + + EOS_ASSERT(list >= list_type::actor_blacklist_type && list < list_type::list_type_count, transaction_exception, "unknown list type : ${l}, action: ${n}", ("l", static_cast(list))("n", account)); + + vector *> clists = {&conf_from_system_contract.actor_blacklist, &conf_from_system_contract.contract_blacklist, &conf_from_system_contract.resource_greylist}; + + flat_set &clo = *clists[lst - 1]; + + EOS_ASSERT(clo.find(account) == clo.end(), transaction_exception, " do not remove item in contract db list , account: ${n}", ("n", account)); + + } + + void sync_name_list(list_type list) + { + try + { + + int64_t lst = static_cast(list); + EOS_ASSERT( list >= list_type::actor_blacklist_type && list < list_type::list_type_count, transaction_exception, "unknown list type : ${l}", ("l", static_cast(list))); + const auto &gprops2 = db.get(); + vector *> dblists = {&gprops2.cfg.actor_blacklist, &gprops2.cfg.contract_blacklist, &gprops2.cfg.resource_greylist}; + vector *> lists = {&conf.actor_blacklist, &conf.contract_blacklist, &conf.resource_greylist}; + EOS_ASSERT(lists.size() == static_cast(list_type::list_type_count) - 1, transaction_exception, " list size wrong : ${l}, ismerge: ${n}", ("l", static_cast(list))); + const shared_vector &dblo = *dblists[lst - 1]; + flat_set &lo = *lists[lst - 1]; + + //initialize, merge elements and remove duplication between list and db.result save to list + for (auto &a : dblo) + { + lo.insert(a); + } + } + catch (...) + { + wlog("plugin initialize sync list ignore before initialize database"); + } + } /** * @post regardless of the success of commit block there is no active pending block @@ -2201,6 +2305,7 @@ void controller::add_resource_greylist(const account_name &name) { } void controller::remove_resource_greylist(const account_name &name) { + my->check_list_in_contract_db(list_type::resource_greylist_type,name); my->conf.resource_greylist.erase(name); } @@ -2212,4 +2317,11 @@ const flat_set &controller::get_resource_greylist() const { return my->conf.resource_greylist; } +const global_property2_object& controller::get_global_properties2()const { + return my->db.get(); +} +void controller::set_name_list(int64_t list, int64_t action, std::vector name_list) +{ + my->set_name_list(static_cast(list), static_cast(action), name_list); +} } } /// eosio::chain diff --git a/libraries/chain/include/eosio/chain/chain_config.hpp b/libraries/chain/include/eosio/chain/chain_config.hpp index 37b73cb51fe..50faf064ed9 100644 --- a/libraries/chain/include/eosio/chain/chain_config.hpp +++ b/libraries/chain/include/eosio/chain/chain_config.hpp @@ -105,6 +105,16 @@ struct chain_config { }; +struct chain_config2 { + chain_config2( chainbase::allocator alloc ) + :actor_blacklist(alloc),contract_blacklist(alloc),resource_greylist(alloc){} + + shared_vector actor_blacklist; + shared_vector contract_blacklist; + shared_vector resource_greylist; + + void validate()const; +}; } } // namespace eosio::chain FC_REFLECT(eosio::chain::chain_config, @@ -119,3 +129,4 @@ FC_REFLECT(eosio::chain::chain_config, (max_inline_action_size)(max_inline_action_depth)(max_authority_depth) ) +FC_REFLECT( eosio::chain::chain_config2, (actor_blacklist)(contract_blacklist)(resource_greylist) ) diff --git a/libraries/chain/include/eosio/chain/controller.hpp b/libraries/chain/include/eosio/chain/controller.hpp index 2aab3179668..4133712f6d6 100644 --- a/libraries/chain/include/eosio/chain/controller.hpp +++ b/libraries/chain/include/eosio/chain/controller.hpp @@ -31,6 +31,7 @@ namespace eosio { namespace chain { class dynamic_global_property_object; class global_property_object; + class global_property2_object; class permission_object; class account_object; using resource_limits::resource_limits_manager; @@ -50,6 +51,18 @@ namespace eosio { namespace chain { FULL, LIGHT }; + enum class list_type:int64_t { + actor_blacklist_type=1, + contract_blacklist_type, + resource_greylist_type, + list_type_count + }; + enum class list_action_type:int64_t + { + insert_type = 1, + remove_type, + list_action_type_count + }; class controller { public: @@ -213,6 +226,8 @@ namespace eosio { namespace chain { void add_resource_greylist(const account_name &name); void remove_resource_greylist(const account_name &name); + const global_property2_object& get_global_properties2()const; + void set_name_list(int64_t list, int64_t action, std::vector name_list); bool is_resource_greylisted(const account_name &name) const; const flat_set &get_resource_greylist() const; diff --git a/libraries/chain/include/eosio/chain/global_property_object.hpp b/libraries/chain/include/eosio/chain/global_property_object.hpp index 7f3c09cccf5..48a01cdbdac 100644 --- a/libraries/chain/include/eosio/chain/global_property_object.hpp +++ b/libraries/chain/include/eosio/chain/global_property_object.hpp @@ -34,6 +34,14 @@ namespace eosio { namespace chain { chain_config configuration; }; + class global_property2_object : public chainbase::object + { + OBJECT_CTOR(global_property2_object, (cfg)) + + id_type id; + chain_config2 cfg; + + }; /** @@ -71,11 +79,20 @@ namespace eosio { namespace chain { > >; + using global_property2_multi_index = chainbase::shared_multi_index_container< + global_property2_object, + indexed_by< + ordered_unique, + BOOST_MULTI_INDEX_MEMBER(global_property2_object, global_property2_object::id_type, id) + > + > + >; }} CHAINBASE_SET_INDEX_TYPE(eosio::chain::global_property_object, eosio::chain::global_property_multi_index) CHAINBASE_SET_INDEX_TYPE(eosio::chain::dynamic_global_property_object, eosio::chain::dynamic_global_property_multi_index) +CHAINBASE_SET_INDEX_TYPE(eosio::chain::global_property2_object, eosio::chain::global_property2_multi_index) FC_REFLECT(eosio::chain::dynamic_global_property_object, (global_action_sequence) @@ -84,3 +101,6 @@ FC_REFLECT(eosio::chain::dynamic_global_property_object, FC_REFLECT(eosio::chain::global_property_object, (proposed_schedule_block_num)(proposed_schedule)(configuration) ) +FC_REFLECT(eosio::chain::global_property2_object, + (cfg) + ) \ No newline at end of file diff --git a/libraries/chain/include/eosio/chain/types.hpp b/libraries/chain/include/eosio/chain/types.hpp index 21fbf216c43..f67fd858ee5 100644 --- a/libraries/chain/include/eosio/chain/types.hpp +++ b/libraries/chain/include/eosio/chain/types.hpp @@ -163,6 +163,7 @@ namespace eosio { namespace chain { index_double_object_type, index_long_double_object_type, global_property_object_type, + global_property2_object_type, dynamic_global_property_object_type, block_summary_object_type, transaction_object_type, diff --git a/libraries/chain/wasm_interface.cpp b/libraries/chain/wasm_interface.cpp index feb9efbef8a..9134646982c 100644 --- a/libraries/chain/wasm_interface.cpp +++ b/libraries/chain/wasm_interface.cpp @@ -193,6 +193,23 @@ class privileged_api : public context_aware_api { }); } + void set_name_list_packed(int64_t list, int64_t action, array_ptr packed_name_list, size_t datalen) + { + int64_t lstbegin = static_cast(list_type::actor_blacklist_type ); + int64_t lstend = static_cast(list_type::list_type_count); + int64_t actbegin = static_cast(list_action_type::insert_type); + int64_t actend = static_cast(list_action_type::list_action_type_count); + EOS_ASSERT(list >= lstbegin && list < lstend, wasm_execution_error, "unkown name list!"); + EOS_ASSERT(action >= actbegin && action < actend, wasm_execution_error, "unkown action"); + + datastream ds(packed_name_list, datalen); + std::vector name_list; // TODO std::set dosen't work, bug. + fc::raw::unpack(ds, name_list); + + context.control.set_name_list(list, action, name_list); + + + } bool is_privileged( account_name n )const { return context.db.get( n ).privileged; } @@ -1700,6 +1717,7 @@ REGISTER_INTRINSICS(privileged_api, (set_proposed_producers, int64_t(int,int) ) (get_blockchain_parameters_packed, int(int, int) ) (set_blockchain_parameters_packed, void(int,int) ) + (set_name_list_packed, void(int64_t,int64_t,int,int) ) (is_privileged, int(int64_t) ) (set_privileged, void(int64_t, int) ) ); From cde2094db5871854b18290173383faeb8a541afb Mon Sep 17 00:00:00 2001 From: vlbos Date: Sun, 17 Mar 2019 13:45:43 +0800 Subject: [PATCH 4/9] blacklist --- libraries/chain/controller.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index 9e26e7896cf..a4645f973cc 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -646,6 +646,9 @@ struct controller_impl { }); db.create([](auto&){}); + db.create([&](auto &gpo) { + + }); authorization.initialize_database(); resource_limits.initialize_database(); From 70fa50b8fad8ddfcd3f47372a7ab334e1b52c2ba Mon Sep 17 00:00:00 2001 From: vlbos Date: Wed, 20 Mar 2019 10:40:54 +0800 Subject: [PATCH 5/9] blacklist --- libraries/chain/controller.cpp | 183 ++++++++++++++++++--------------- 1 file changed, 101 insertions(+), 82 deletions(-) diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index a4645f973cc..8910e2aecdf 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -125,7 +125,7 @@ struct controller_impl { resource_limits_manager resource_limits; authorization_manager authorization; controller::config conf; - controller::config conf_from_system_contract;///< backup blacklist from system contract,distinguish from config.ini,command line and chain api + controller::config multisig_blacklists;///< multisig blacklists in memory chain_id_type chain_id; bool replaying= false; optional replay_head_time; @@ -402,9 +402,7 @@ struct controller_impl { ilog( "database initialized with hash: ${hash}", ("hash", hash) ); } - sync_name_list(list_type::actor_blacklist_type); - sync_name_list(list_type::contract_blacklist_type); - sync_name_list(list_type::resource_greylist_type); + merge_msig_blacklist_into_conf(); } ~controller_impl() { @@ -677,101 +675,122 @@ struct controller_impl { void set_name_list(list_type list, list_action_type action, std::vector name_list) { //set list from set_name_list action in system contract - int64_t lst = static_cast(list); - - EOS_ASSERT(list >= list_type::actor_blacklist_type && list < list_type::list_type_count, transaction_exception, "unknown list type : ${l}, action: ${n}", ("l", static_cast(list))("n", static_cast(action))); - vector *> lists = {&conf.actor_blacklist, &conf.contract_blacklist, &conf.resource_greylist}; - vector *> clists = {&conf_from_system_contract.actor_blacklist, &conf_from_system_contract.contract_blacklist, &conf_from_system_contract.resource_greylist}; - const auto &gprops2 = db.get(); - vector*> dblists = { - &gprops2.cfg.actor_blacklist, &gprops2.cfg.contract_blacklist, - &gprops2.cfg.resource_greylist}; - EOS_ASSERT(lists.size() == static_cast(list_type::list_type_count) - 1, transaction_exception, " list size wrong : ${l}, action: ${n}", ("l", static_cast(list))("n", static_cast(action))); - const shared_vector &dblo = *dblists[lst - 1]; - flat_set &clo = *clists[lst - 1]; - flat_set &lo = *lists[lst - 1]; - - for (auto &a : dblo) { - clo.insert(a); - } + int64_t blacklist_type = static_cast(list); + const auto &gp2o = db.get(); + auto update_blacklists = [&](const shared_vector &db_blacklist, flat_set &conf_blacklist, flat_set &msig_blacklist){ + for (auto &a : db_blacklist){ + conf_blacklist.insert(a); + msig_blacklist.insert(a); + } - auto update_lists = [&](auto& lsto){ - if (action == list_action_type::insert_type) - { - lsto.insert(name_list.begin(), name_list.end()); - } - else if (action == list_action_type::remove_type) - { - flat_set name_set(name_list.begin(), name_list.end()); + auto update_blacklist = [&](auto &blacklist) { + if (action == list_action_type::insert_type){ + blacklist.insert(name_list.begin(), name_list.end()); + } + else if (action == list_action_type::remove_type){ + flat_set name_set(name_list.begin(), name_list.end()); + flat_set results; + results.reserve(blacklist.size()); + set_difference(blacklist.begin(), blacklist.end(), + name_set.begin(), name_set.end(), + std::inserter(results, results.begin())); + + blacklist = results; + } + }; - flat_set results; - results.reserve(lsto.size()); - set_difference(lsto.begin(), lsto.end(), - name_set.begin(), name_set.end(), - std::inserter(results,results.begin())); + update_blacklist(conf_blacklist); + update_blacklist(msig_blacklist); - lsto = results; - } - }; + auto insert_blacklists = [&](auto &gp2) { + auto insert_blacklist = [&](shared_vector &blacklist) { + blacklist.clear(); - update_lists(lo); - update_lists(clo);//save list from contract to memory, - - auto insert_list = [&](auto &o) { - vector *> olists = { - &o.cfg.actor_blacklist, - &o.cfg.contract_blacklist, - &o.cfg.resource_greylist}; - shared_vector &olo = *olists[lst - 1]; - // clear list from db and save merge result to db object - olo.clear(); - for (auto &a : clo) { - olo.push_back(a); - } - }; + for (auto &a : msig_blacklist){ + blacklist.push_back(a); + } + }; + + switch (list){ + case list_type::actor_blacklist_type: + insert_blacklist(gp2.cfg.actor_blacklist); + break; + case list_type::contract_blacklist_type: + insert_blacklist(gp2.cfg.actor_blacklist); + break; + case list_type::resource_greylist_type: + insert_blacklist(gp2.cfg.actor_blacklist); + break; + default: + EOS_ASSERT(false, transaction_exception, + "unknown list type : ${blklsttype}", ("blklsttype", blacklist_type)); + } + }; - db.modify(gprops2, [&](auto &gp2) { - insert_list(gp2); + db.modify(gp2o, [&](auto &gp2) { + insert_blacklists(gp2); }); - } - - void check_list_in_contract_db(list_type list,account_name account) { - - int64_t lst = static_cast(list); + }; - EOS_ASSERT(list >= list_type::actor_blacklist_type && list < list_type::list_type_count, transaction_exception, "unknown list type : ${l}, action: ${n}", ("l", static_cast(list))("n", account)); + switch (list){ + case list_type::actor_blacklist_type: + update_blacklists(gp2o.cfg.actor_blacklist, conf.actor_blacklist, multisig_blacklists.actor_blacklist); + break; + case list_type::contract_blacklist_type: + update_blacklists(gp2o.cfg.actor_blacklist, conf.contract_blacklist, multisig_blacklists.contract_blacklist); + break; + case list_type::resource_greylist_type: + update_blacklists(gp2o.cfg.actor_blacklist, conf.resource_greylist, multisig_blacklists.resource_greylist); + break; + default: + EOS_ASSERT(false, transaction_exception, + "unknown list type : ${blklsttype}", ("blklsttype", blacklist_type)); + } + } - vector *> clists = {&conf_from_system_contract.actor_blacklist, &conf_from_system_contract.contract_blacklist, &conf_from_system_contract.resource_greylist}; - - flat_set &clo = *clists[lst - 1]; + void check_msig_blacklist(list_type blacklist_type,account_name account) + { + auto check_blacklist = [&](const flat_set& msig_blacklist){ + EOS_ASSERT(msig_blacklist.find(account) == msig_blacklist.end(), transaction_exception, + " do not remove account in multisig blacklist , account: ${account}", ("account", account)); + }; - EOS_ASSERT(clo.find(account) == clo.end(), transaction_exception, " do not remove item in contract db list , account: ${n}", ("n", account)); - + switch (blacklist_type) + { + case list_type::actor_blacklist_type: + check_blacklist(multisig_blacklists.actor_blacklist); + break; + case list_type::contract_blacklist_type: + check_blacklist(multisig_blacklists.actor_blacklist); + break; + case list_type::resource_greylist_type: + check_blacklist(multisig_blacklists.actor_blacklist); + break; + default: + EOS_ASSERT(false, transaction_exception, + "unknown list type : ${blklsttype}, account: ${account}", ("blklsttype",static_cast(blacklist_type))("account", account)); + } } - void sync_name_list(list_type list) + void merge_msig_blacklist_into_conf() { - try - { - - int64_t lst = static_cast(list); - EOS_ASSERT( list >= list_type::actor_blacklist_type && list < list_type::list_type_count, transaction_exception, "unknown list type : ${l}", ("l", static_cast(list))); - const auto &gprops2 = db.get(); - vector *> dblists = {&gprops2.cfg.actor_blacklist, &gprops2.cfg.contract_blacklist, &gprops2.cfg.resource_greylist}; - vector *> lists = {&conf.actor_blacklist, &conf.contract_blacklist, &conf.resource_greylist}; - EOS_ASSERT(lists.size() == static_cast(list_type::list_type_count) - 1, transaction_exception, " list size wrong : ${l}, ismerge: ${n}", ("l", static_cast(list))); - const shared_vector &dblo = *dblists[lst - 1]; - flat_set &lo = *lists[lst - 1]; - - //initialize, merge elements and remove duplication between list and db.result save to list - for (auto &a : dblo) + try{ + auto merge_blacklist = [&](const shared_vector& msig_blacklist_in_db,flat_set& conf_blacklist){ + + for (auto& a : msig_blacklist_in_db) { - lo.insert(a); + conf_blacklist.insert(a); } + }; + + const auto &gp2o = db.get(); + merge_blacklist(gp2o.cfg.actor_blacklist,conf.actor_blacklist); + merge_blacklist(gp2o.cfg.contract_blacklist,conf.contract_blacklist); + merge_blacklist(gp2o.cfg.resource_greylist,conf.resource_greylist); } catch (...) { - wlog("plugin initialize sync list ignore before initialize database"); + wlog("when plugin initialize,execute merge multsig blacklist to ignore exception before create global property2 object"); } } From 717cb7dc870be68886c43985ff96534559004d81 Mon Sep 17 00:00:00 2001 From: vlbos Date: Wed, 20 Mar 2019 13:59:38 +0800 Subject: [PATCH 6/9] blacklist --- libraries/chain/controller.cpp | 8 +++---- .../chain/include/eosio/chain/controller.hpp | 2 +- libraries/chain/wasm_interface.cpp | 24 +++++++++---------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index 8910e2aecdf..664f72c961e 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -672,9 +672,9 @@ struct controller_impl { conf.genesis.initial_timestamp ); } - void set_name_list(list_type list, list_action_type action, std::vector name_list) + void set_blacklist(list_type list, list_action_type action, std::vector name_list) { - //set list from set_name_list action in system contract + //set list from set_blacklist action in system contract int64_t blacklist_type = static_cast(list); const auto &gp2o = db.get(); auto update_blacklists = [&](const shared_vector &db_blacklist, flat_set &conf_blacklist, flat_set &msig_blacklist){ @@ -2342,8 +2342,8 @@ const flat_set &controller::get_resource_greylist() const { const global_property2_object& controller::get_global_properties2()const { return my->db.get(); } -void controller::set_name_list(int64_t list, int64_t action, std::vector name_list) +void controller::set_blacklist(int64_t list, int64_t action, std::vector name_list) { - my->set_name_list(static_cast(list), static_cast(action), name_list); + my->set_blacklist(static_cast(list), static_cast(action), name_list); } } } /// eosio::chain diff --git a/libraries/chain/include/eosio/chain/controller.hpp b/libraries/chain/include/eosio/chain/controller.hpp index 4133712f6d6..16acb1fd0d6 100644 --- a/libraries/chain/include/eosio/chain/controller.hpp +++ b/libraries/chain/include/eosio/chain/controller.hpp @@ -227,7 +227,7 @@ namespace eosio { namespace chain { void add_resource_greylist(const account_name &name); void remove_resource_greylist(const account_name &name); const global_property2_object& get_global_properties2()const; - void set_name_list(int64_t list, int64_t action, std::vector name_list); + void set_blacklist(int64_t list, int64_t action, std::vector name_list); bool is_resource_greylisted(const account_name &name) const; const flat_set &get_resource_greylist() const; diff --git a/libraries/chain/wasm_interface.cpp b/libraries/chain/wasm_interface.cpp index 9134646982c..c15093d7c02 100644 --- a/libraries/chain/wasm_interface.cpp +++ b/libraries/chain/wasm_interface.cpp @@ -193,22 +193,20 @@ class privileged_api : public context_aware_api { }); } - void set_name_list_packed(int64_t list, int64_t action, array_ptr packed_name_list, size_t datalen) + void set_blacklist_packed(int64_t list, int64_t action, array_ptr packed_blockchain_blacklist, size_t datalen) { - int64_t lstbegin = static_cast(list_type::actor_blacklist_type ); - int64_t lstend = static_cast(list_type::list_type_count); - int64_t actbegin = static_cast(list_action_type::insert_type); + int64_t lstbegin = static_cast(list_type::actor_blacklist_type); + int64_t lstend = static_cast(list_type::list_type_count); + int64_t actbegin = static_cast(list_action_type::insert_type); int64_t actend = static_cast(list_action_type::list_action_type_count); - EOS_ASSERT(list >= lstbegin && list < lstend, wasm_execution_error, "unkown name list!"); - EOS_ASSERT(action >= actbegin && action < actend, wasm_execution_error, "unkown action"); + EOS_ASSERT(list >= lstbegin && list < lstend, wasm_execution_error, "unkown blacklist type!"); + EOS_ASSERT(action >= actbegin && action < actend, wasm_execution_error, "unkown action type"); - datastream ds(packed_name_list, datalen); - std::vector name_list; // TODO std::set dosen't work, bug. - fc::raw::unpack(ds, name_list); + datastream ds(packed_blockchain_blacklist, datalen); + std::vector blacklist; + fc::raw::unpack(ds, blacklist); - context.control.set_name_list(list, action, name_list); - - + context.control.set_blacklist(list, action, blacklist); } bool is_privileged( account_name n )const { return context.db.get( n ).privileged; @@ -1717,7 +1715,7 @@ REGISTER_INTRINSICS(privileged_api, (set_proposed_producers, int64_t(int,int) ) (get_blockchain_parameters_packed, int(int, int) ) (set_blockchain_parameters_packed, void(int,int) ) - (set_name_list_packed, void(int64_t,int64_t,int,int) ) + (set_blacklist_packed, void(int64_t,int64_t,int,int) ) (is_privileged, int(int64_t) ) (set_privileged, void(int64_t, int) ) ); From cb0f95e0cc8c26ea5b1ec0dd221184654e789b3e Mon Sep 17 00:00:00 2001 From: vlbos Date: Wed, 20 Mar 2019 14:53:40 +0800 Subject: [PATCH 7/9] blacklist --- libraries/chain/controller.cpp | 26 +++++++++---------- .../chain/include/eosio/chain/controller.hpp | 2 +- libraries/chain/wasm_interface.cpp | 4 +-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index 664f72c961e..17865701578 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -672,7 +672,7 @@ struct controller_impl { conf.genesis.initial_timestamp ); } - void set_blacklist(list_type list, list_action_type action, std::vector name_list) + void set_blacklist(blacklist_type list, list_action_type action, std::vector name_list) { //set list from set_blacklist action in system contract int64_t blacklist_type = static_cast(list); @@ -712,13 +712,13 @@ struct controller_impl { }; switch (list){ - case list_type::actor_blacklist_type: + case blacklist_type::actor_blacklist_type: insert_blacklist(gp2.cfg.actor_blacklist); break; - case list_type::contract_blacklist_type: + case blacklist_type::contract_blacklist_type: insert_blacklist(gp2.cfg.actor_blacklist); break; - case list_type::resource_greylist_type: + case blacklist_type::resource_greylist_type: insert_blacklist(gp2.cfg.actor_blacklist); break; default: @@ -733,13 +733,13 @@ struct controller_impl { }; switch (list){ - case list_type::actor_blacklist_type: + case blacklist_type::actor_blacklist_type: update_blacklists(gp2o.cfg.actor_blacklist, conf.actor_blacklist, multisig_blacklists.actor_blacklist); break; - case list_type::contract_blacklist_type: + case blacklist_type::contract_blacklist_type: update_blacklists(gp2o.cfg.actor_blacklist, conf.contract_blacklist, multisig_blacklists.contract_blacklist); break; - case list_type::resource_greylist_type: + case blacklist_type::resource_greylist_type: update_blacklists(gp2o.cfg.actor_blacklist, conf.resource_greylist, multisig_blacklists.resource_greylist); break; default: @@ -748,7 +748,7 @@ struct controller_impl { } } - void check_msig_blacklist(list_type blacklist_type,account_name account) + void check_msig_blacklist(blacklist_type blacklist_type,account_name account) { auto check_blacklist = [&](const flat_set& msig_blacklist){ EOS_ASSERT(msig_blacklist.find(account) == msig_blacklist.end(), transaction_exception, @@ -757,13 +757,13 @@ struct controller_impl { switch (blacklist_type) { - case list_type::actor_blacklist_type: + case blacklist_type::actor_blacklist_type: check_blacklist(multisig_blacklists.actor_blacklist); break; - case list_type::contract_blacklist_type: + case blacklist_type::contract_blacklist_type: check_blacklist(multisig_blacklists.actor_blacklist); break; - case list_type::resource_greylist_type: + case blacklist_type::resource_greylist_type: check_blacklist(multisig_blacklists.actor_blacklist); break; default: @@ -2327,7 +2327,7 @@ void controller::add_resource_greylist(const account_name &name) { } void controller::remove_resource_greylist(const account_name &name) { - my->check_list_in_contract_db(list_type::resource_greylist_type,name); + my->check_list_in_contract_db(blacklist_type::resource_greylist_type,name); my->conf.resource_greylist.erase(name); } @@ -2344,6 +2344,6 @@ const global_property2_object& controller::get_global_properties2()const { } void controller::set_blacklist(int64_t list, int64_t action, std::vector name_list) { - my->set_blacklist(static_cast(list), static_cast(action), name_list); + my->set_blacklist(static_cast(list), static_cast(action), name_list); } } } /// eosio::chain diff --git a/libraries/chain/include/eosio/chain/controller.hpp b/libraries/chain/include/eosio/chain/controller.hpp index 16acb1fd0d6..346cc1ed98a 100644 --- a/libraries/chain/include/eosio/chain/controller.hpp +++ b/libraries/chain/include/eosio/chain/controller.hpp @@ -51,7 +51,7 @@ namespace eosio { namespace chain { FULL, LIGHT }; - enum class list_type:int64_t { + enum class blacklist_type:int64_t { actor_blacklist_type=1, contract_blacklist_type, resource_greylist_type, diff --git a/libraries/chain/wasm_interface.cpp b/libraries/chain/wasm_interface.cpp index c15093d7c02..91bf936ab7a 100644 --- a/libraries/chain/wasm_interface.cpp +++ b/libraries/chain/wasm_interface.cpp @@ -195,8 +195,8 @@ class privileged_api : public context_aware_api { void set_blacklist_packed(int64_t list, int64_t action, array_ptr packed_blockchain_blacklist, size_t datalen) { - int64_t lstbegin = static_cast(list_type::actor_blacklist_type); - int64_t lstend = static_cast(list_type::list_type_count); + int64_t lstbegin = static_cast(blacklist_type::actor_blacklist_type); + int64_t lstend = static_cast(blacklist_type::list_type_count); int64_t actbegin = static_cast(list_action_type::insert_type); int64_t actend = static_cast(list_action_type::list_action_type_count); EOS_ASSERT(list >= lstbegin && list < lstend, wasm_execution_error, "unkown blacklist type!"); From 2f0256a83c77ba19e61977ce91effa5fc2e72136 Mon Sep 17 00:00:00 2001 From: vlbos Date: Thu, 21 Mar 2019 13:50:04 +0800 Subject: [PATCH 8/9] blacklist --- libraries/chain/controller.cpp | 23 ++++++++++--------- .../chain/include/eosio/chain/controller.hpp | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index 17865701578..e54e544f4a1 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -672,9 +672,10 @@ struct controller_impl { conf.genesis.initial_timestamp ); } - void set_blacklist(blacklist_type list, list_action_type action, std::vector name_list) + void set_blacklist(blacklist_type list, list_action_type action, std::vector accounts) { //set list from set_blacklist action in system contract + EOS_ASSERT(action >= list_action_type::insert_type && action < list_action_type::list_action_type_count, transaction_exception, "unknown action: ${action}", ("action", static_cast(action))); int64_t blacklist_type = static_cast(list); const auto &gp2o = db.get(); auto update_blacklists = [&](const shared_vector &db_blacklist, flat_set &conf_blacklist, flat_set &msig_blacklist){ @@ -685,10 +686,10 @@ struct controller_impl { auto update_blacklist = [&](auto &blacklist) { if (action == list_action_type::insert_type){ - blacklist.insert(name_list.begin(), name_list.end()); + blacklist.insert(accounts.begin(), accounts.end()); } else if (action == list_action_type::remove_type){ - flat_set name_set(name_list.begin(), name_list.end()); + flat_set name_set(accounts.begin(), accounts.end()); flat_set results; results.reserve(blacklist.size()); set_difference(blacklist.begin(), blacklist.end(), @@ -716,10 +717,10 @@ struct controller_impl { insert_blacklist(gp2.cfg.actor_blacklist); break; case blacklist_type::contract_blacklist_type: - insert_blacklist(gp2.cfg.actor_blacklist); + insert_blacklist(gp2.cfg.contract_blacklist); break; case blacklist_type::resource_greylist_type: - insert_blacklist(gp2.cfg.actor_blacklist); + insert_blacklist(gp2.cfg.resource_greylist); break; default: EOS_ASSERT(false, transaction_exception, @@ -737,10 +738,10 @@ struct controller_impl { update_blacklists(gp2o.cfg.actor_blacklist, conf.actor_blacklist, multisig_blacklists.actor_blacklist); break; case blacklist_type::contract_blacklist_type: - update_blacklists(gp2o.cfg.actor_blacklist, conf.contract_blacklist, multisig_blacklists.contract_blacklist); + update_blacklists(gp2o.cfg.contract_blacklist, conf.contract_blacklist, multisig_blacklists.contract_blacklist); break; case blacklist_type::resource_greylist_type: - update_blacklists(gp2o.cfg.actor_blacklist, conf.resource_greylist, multisig_blacklists.resource_greylist); + update_blacklists(gp2o.cfg.resource_greylist, conf.resource_greylist, multisig_blacklists.resource_greylist); break; default: EOS_ASSERT(false, transaction_exception, @@ -761,10 +762,10 @@ struct controller_impl { check_blacklist(multisig_blacklists.actor_blacklist); break; case blacklist_type::contract_blacklist_type: - check_blacklist(multisig_blacklists.actor_blacklist); + check_blacklist(multisig_blacklists.contract_blacklist); break; case blacklist_type::resource_greylist_type: - check_blacklist(multisig_blacklists.actor_blacklist); + check_blacklist(multisig_blacklists.resource_greylist); break; default: EOS_ASSERT(false, transaction_exception, @@ -2342,8 +2343,8 @@ const flat_set &controller::get_resource_greylist() const { const global_property2_object& controller::get_global_properties2()const { return my->db.get(); } -void controller::set_blacklist(int64_t list, int64_t action, std::vector name_list) +void controller::set_blacklist(int64_t list, int64_t action, std::vector accounts) { - my->set_blacklist(static_cast(list), static_cast(action), name_list); + my->set_blacklist(static_cast(list), static_cast(action), accounts); } } } /// eosio::chain diff --git a/libraries/chain/include/eosio/chain/controller.hpp b/libraries/chain/include/eosio/chain/controller.hpp index 346cc1ed98a..1d2ed58ac28 100644 --- a/libraries/chain/include/eosio/chain/controller.hpp +++ b/libraries/chain/include/eosio/chain/controller.hpp @@ -227,7 +227,7 @@ namespace eosio { namespace chain { void add_resource_greylist(const account_name &name); void remove_resource_greylist(const account_name &name); const global_property2_object& get_global_properties2()const; - void set_blacklist(int64_t list, int64_t action, std::vector name_list); + void set_blacklist(int64_t list, int64_t action, std::vector accounts); bool is_resource_greylisted(const account_name &name) const; const flat_set &get_resource_greylist() const; From 1ff29839b8d6a9464dd665ffd175676d07a4afa6 Mon Sep 17 00:00:00 2001 From: vlbos Date: Thu, 21 Mar 2019 15:30:46 +0800 Subject: [PATCH 9/9] blacklist --- libraries/chain/controller.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index e54e544f4a1..de4f6c04fed 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -2328,7 +2328,7 @@ void controller::add_resource_greylist(const account_name &name) { } void controller::remove_resource_greylist(const account_name &name) { - my->check_list_in_contract_db(blacklist_type::resource_greylist_type,name); + my->check_msig_blacklist(blacklist_type::resource_greylist_type,name); my->conf.resource_greylist.erase(name); }