Scorum
process_active_sp_holders_cashout.cpp
Go to the documentation of this file.
2 
5 
6 namespace scorum {
7 namespace chain {
8 namespace database_ns {
9 
11 {
12  debug_log(ctx.get_block_info(), "process_active_sp_holders_cashout BEGIN");
13 
14  dynamic_global_property_service_i& dgp_service = ctx.services().dynamic_global_property_service();
15  account_service_i& account_service = ctx.services().account_service();
16 
17  account_service_i::account_refs_type accounts = account_service.get_by_cashout_time(dgp_service.head_block_time());
18  for (const account_object& account : accounts)
19  {
20  auto reward_scr = account.active_sp_holders_pending_scr_reward;
21  if (reward_scr.amount > 0)
22  {
23  account_service.decrease_pending_balance(account, reward_scr);
24  account_service.increase_balance(account, reward_scr);
25  }
26  auto reward_sp = account.active_sp_holders_pending_sp_reward;
27  if (reward_sp.amount > 0)
28  {
29  account_service.decrease_pending_scorumpower(account, reward_sp);
30  account_service.create_scorumpower(account, reward_sp);
31  }
32  account_service.update(
33  account, [&](account_object& obj) { obj.active_sp_holders_cashout_time = fc::time_point_sec::maximum(); });
34  if (reward_scr.amount > 0)
35  {
36  ctx.push_virtual_operation(active_sp_holders_reward_operation(account.name, reward_scr));
37  }
38  if (reward_sp.amount > 0)
39  {
40  ctx.push_virtual_operation(active_sp_holders_reward_operation(account.name, reward_sp));
41  }
42  if (account.voting_power_restoring_time > dgp_service.head_block_time())
43  {
44  account_service.update_active_sp_holders_cashout_time(account);
45  }
46  }
47 
48  debug_log(ctx.get_block_info(), "process_active_sp_holders_cashout END");
49 }
50 }
51 }
52 }
data_service_factory_i & services() const
Definition: block_tasks.hpp:25
virtual void push_virtual_operation(const operation &op)
Definition: block_tasks.cpp:22
#define debug_log(CTX, FORMAT,...)
Definition: debug_log.hpp:3
Definition: asset.cpp:15
virtual account_refs_type get_by_cashout_time(const fc::time_point_sec &until) const =0
virtual const asset create_scorumpower(const account_object &to_account, const asset &scorum)=0
virtual void increase_balance(const account_object &account, const asset &amount)=0
virtual void decrease_pending_balance(const account_object &account, const asset &amount)=0
std::vector< cref_type > account_refs_type
Definition: account.hpp:167
virtual void decrease_pending_scorumpower(const account_object &account, const asset &amount)=0
virtual void update_active_sp_holders_cashout_time(const account_object &account)=0
virtual void update(const modifier_type &modifier)=0
virtual fc::time_point_sec head_block_time() const =0