9 #include <graphene/schema/schema.hpp>
10 #include <graphene/schema/schema_impl.hpp>
13 namespace account_by_key {
33 void cache_auths(
const account_authority_object& a);
91 return &work.input.worker_account;
112 _plugin.
my->update_key_lookup(*acct_itr);
119 _plugin.
my->update_key_lookup(*acct_itr);
126 _plugin.
my->update_key_lookup(*acct_itr);
133 _plugin.
my->update_key_lookup(*acct_itr);
140 _plugin.
my->update_key_lookup(*acct_itr);
156 for (
const auto& item : a.owner.key_auths)
158 for (
const auto& item : a.active.key_auths)
160 for (
const auto& item : a.posting.key_auths)
167 flat_set<public_key_type> new_keys;
170 for (
const auto& item : a.owner.key_auths)
171 new_keys.insert(item.first);
172 for (
const auto& item : a.active.key_auths)
173 new_keys.insert(item.first);
174 for (
const auto& item : a.posting.key_auths)
175 new_keys.insert(item.first);
178 for (
const auto& key : new_keys)
183 auto lookup_itr = db.find<
key_lookup_object, by_key>(std::make_tuple(key, a.account));
185 if (lookup_itr ==
nullptr)
189 o.account = a.account;
203 auto lookup_itr = db.find<
key_lookup_object, by_key>(std::make_tuple(key, a.account));
205 if (lookup_itr !=
nullptr)
207 db.remove(*lookup_itr);
228 , my(new detail::account_by_key_plugin_impl(*this))
233 boost::program_options::options_description& cfg)
248 FC_CAPTURE_AND_RETHROW()
258 auto it_pair = db.get_index<account_index>().indices().get<by_created_by_genesis>().equal_range(
true);
259 auto it = it_pair.first;
260 const auto it_end = it_pair.second;
263 auto it_2_pair = db.get_index<account_authority_index>().indices().get<by_account>().equal_range(it->name);
264 auto it_2 = it_2_pair.first;
265 const auto it_2_end = it_2_pair.second;
266 while (it_2 != it_2_end)
268 my->update_key_lookup(*it_2);
std::unique_ptr< detail::account_by_key_plugin_impl > my
virtual void plugin_set_program_options(boost::program_options::options_description &cli, boost::program_options::options_description &cfg) override
Fill in command line parameters used by the plugin.
account_by_key_plugin(scorum::app::application *app)
virtual void plugin_startup() override
Begin normal runtime operations.
virtual void plugin_initialize(const boost::program_options::variables_map &options) override
Perform early startup routines and register plugin indexes, callbacks, etc.
scorum::chain::database & database()
flat_set< public_key_type > cached_keys
account_by_key_plugin & _self
void pre_operation(const operation_notification &op_obj)
void post_operation(const operation_notification &op_obj)
void cache_auths(const account_authority_object &a)
account_by_key_plugin_impl(account_by_key_plugin &_plugin)
void update_key_lookup(const account_authority_object &a)
void register_api_factory(const std::string &name, std::function< fc::api_ptr(const api_context &)> factory)
application & app() const
chain::database & database()
tracks the blockchain state in an extensible manner
fc::signal< void(const operation_notification &)> post_apply_operation
fc::signal< void(const operation_notification &)> pre_apply_operation
shared_multi_index_container< key_lookup_object, indexed_by< ordered_unique< tag< by_id >, member< key_lookup_object, key_lookup_id_type, &key_lookup_object::id > >, ordered_unique< tag< by_key >, composite_key< key_lookup_object, member< key_lookup_object, public_key_type, &key_lookup_object::key >, member< key_lookup_object, account_name_type, &key_lookup_object::account > > > > > key_lookup_index
fc::fixed_string_16 account_name_type
#define SCORUM_DEFINE_PLUGIN(plugin_name, plugin_class)
void operator()(const account_create_by_committee_operation &op) const
account_by_key_plugin & _plugin
void operator()(const hardfork_operation &op) const
post_operation_visitor(account_by_key_plugin &plugin)
void operator()(const recover_account_operation &op) const
void operator()(const account_create_operation &op) const
void operator()(const account_update_operation &op) const
void operator()(const T &) const
void operator()(const account_create_with_delegation_operation &op) const
const account_name_type * result_type
result_type operator()(const WorkType &work) const
pre_operation_visitor(account_by_key_plugin &plugin)
void operator()(const T &) const
void operator()(const recover_account_operation &op) const
void operator()(const account_create_by_committee_operation &op) const
void operator()(const account_create_with_delegation_operation &op) const
void operator()(const account_update_operation &op) const
account_by_key_plugin & _plugin
void operator()(const account_create_operation &op) const
const protocol::operation & op
Creates new account by registration committee.
account_name_type new_account_name
account_name_type new_account_name
Creates new account with delegation.
account_name_type new_account_name
Updates account keys or/and metadata.
account_name_type account
Recovers an account to a new authority using a previous authority.
account_name_type account_to_recover
The account to be recovered.