Scorum
process_account_registration_bonus_expiration.cpp
Go to the documentation of this file.
2 
7 
9 
10 namespace scorum {
11 namespace chain {
12 namespace database_ns {
13 
15 {
16  debug_log(ctx.get_block_info(), "process_account_registration_bonus_expiration BEGIN");
17 
18  account_registration_bonus_service_i& account_registration_bonus_service
19  = ctx.services().account_registration_bonus_service();
20  dynamic_global_property_service_i& dgp_service = ctx.services().dynamic_global_property_service();
21 
22  const auto& accounts = account_registration_bonus_service.get_by_expiration_time(dgp_service.head_block_time());
23  for (const account_registration_bonus_object& account : accounts)
24  {
25  return_funds(ctx, account);
26  account_registration_bonus_service.remove(account);
27  }
28 
29  debug_log(ctx.get_block_info(), "process_account_registration_bonus_expiration END");
30 }
31 
32 void process_account_registration_bonus_expiration::return_funds(block_task_context& ctx,
33  const account_registration_bonus_object& account)
34 {
35  registration_pool_service_i& registration_pool_service = ctx.services().registration_pool_service();
36  account_service_i& account_service = ctx.services().account_service();
37 
38  asset bonus = account.bonus;
39 
40  const account_object& account_obj = account_service.get_account(account.account);
41 
42  asset actual_returned_bonus
43  = std::max(asset(0, SP_SYMBOL), std::min(bonus, account_obj.scorumpower - account_obj.delegated_scorumpower));
44  if (actual_returned_bonus < bonus)
45  {
46  wlog("Account '${a}' has insufficient funds to return scorumpower ${f}. Actually returned is ${r}.",
47  ("a", account_obj.name)("f", bonus)("r", actual_returned_bonus));
48  }
49 
50  account_service.decrease_scorumpower(account_obj, actual_returned_bonus);
51 
52  registration_pool_service.update(
53  [&](registration_pool_object& r) { r.balance += asset(actual_returned_bonus.amount, SCORUM_SYMBOL); });
54 }
55 }
56 }
57 }
data_service_factory_i & services() const
Definition: block_tasks.hpp:25
#define SP_SYMBOL
Definition: config.hpp:104
#define SCORUM_SYMBOL
Definition: config.hpp:102
#define debug_log(CTX, FORMAT,...)
Definition: debug_log.hpp:3
Definition: asset.cpp:15
virtual account_registration_bonus_refs_type get_by_expiration_time(const fc::time_point_sec &until) const =0
virtual const account_object & get_account(const account_name_type &) const =0
virtual void decrease_scorumpower(const account_object &account, const asset &amount)=0
virtual void update(const modifier_type &modifier)=0
virtual fc::time_point_sec head_block_time() const =0
share_type amount
Definition: asset.hpp:31