Scorum
chain_api.cpp
Go to the documentation of this file.
16 
17 namespace scorum {
18 namespace app {
19 
20 using namespace scorum::chain;
21 
23  : _db(*ctx.app.chain_database())
24 {
25 }
26 
28 {
29 }
30 
32 {
33  return _db.with_read_lock([&]() {
34 
36 
37  if (_db.has_index<witness::reserve_ratio_index>())
38  {
39  const auto& r = _db.find(witness::reserve_ratio_id_type());
40 
41  if (BOOST_LIKELY(r != nullptr))
42  {
43  ret_val = *r;
44  }
45  }
46 
48 
49  ret_val.head_block_id = dpo.head_block_id;
50  ret_val.head_block_number = dpo.head_block_number;
51  ret_val.last_irreversible_block_number = dpo.last_irreversible_block_num;
52  ret_val.current_aslot = dpo.current_aslot;
53  ret_val.time = dpo.time;
54  ret_val.current_witness = dpo.current_witness;
55  ret_val.majority_version = dpo.majority_version;
56  ret_val.median_chain_props = dpo.median_chain_props;
57  ret_val.chain_id = _db.get_chain_id();
58  ret_val.hf_version = _db.obtain_service<dbs_hardfork_property>().get().current_hardfork_version;
59 
60  return ret_val;
61  });
62 }
63 
64 scheduled_hardfork_api_obj chain_api::get_next_scheduled_hardfork() const
65 {
66  return _db.with_read_lock([&]() {
68  const auto& hpo = _db.obtain_service<dbs_hardfork_property>().get();
69  shf.hf_version = hpo.next_hardfork;
70  shf.live_time = hpo.next_hardfork_time;
71  return shf;
72  });
73 }
74 
75 reward_fund_api_obj chain_api::get_reward_fund(reward_fund_type type_of_fund) const
76 {
77  return _db.with_read_lock([&]() {
78  switch (type_of_fund)
79  {
80  case reward_fund_type::content_reward_fund_scr:
81  {
82  auto& rf_service = _db.obtain_service<dbs_content_reward_fund_scr>();
83  FC_ASSERT(rf_service.is_exists(), "${f} object does not exist", ("f", type_of_fund));
84  return reward_fund_api_obj(rf_service.get());
85  }
86  case reward_fund_type::content_reward_fund_sp:
87  {
88  auto& rf_service = _db.obtain_service<dbs_content_reward_fund_sp>();
89  FC_ASSERT(rf_service.is_exists(), "${f} object does not exist", ("f", type_of_fund));
90  return reward_fund_api_obj(rf_service.get());
91  }
92  case reward_fund_type::content_fifa_world_cup_2018_bounty_reward_fund:
93  {
94  auto& rf_service = _db.obtain_service<dbs_content_fifa_world_cup_2018_bounty_reward_fund>();
95  FC_ASSERT(rf_service.is_exists(), "${f} object does not exist", ("f", type_of_fund));
96  return reward_fund_api_obj(rf_service.get());
97  }
98  default:
99  FC_ASSERT(false, "Unknown fund");
100  return reward_fund_api_obj();
101  }
102  });
103 }
104 
105 chain_capital_api_obj chain_api::get_chain_capital() const
106 {
107  return _db.with_read_lock([&]() {
108 
109  // clang-format off
110  chain_capital_api_obj capital;
111 
112  const dynamic_global_property_object& dpo = _db.obtain_service<dbs_dynamic_global_property>().get();
113 
114  capital.head_block_number = dpo.head_block_number;
115  capital.head_block_id = dpo.head_block_id;
116  capital.head_block_time = dpo.time;
117  capital.current_witness = dpo.current_witness;
118 
119  capital.total_supply = dpo.total_supply;
122  capital.total_scorumpower = dpo.total_scorumpower;
125 
126  if (_db.obtain_service<dbs_registration_pool>().is_exists())
127  {
128  capital.registration_pool_balance = _db.obtain_service<dbs_registration_pool>().get().balance;
129  capital.registration_pool_delegated = _db.obtain_service<dbs_registration_pool>().get().delegated;
130  }
131 
132  if (_db.obtain_service<dbs_fund_budget>().is_exists())
133  {
134  capital.fund_budget_balance = _db.obtain_service<dbs_fund_budget>().get().balance;
135  }
136 
137  capital.dev_pool_scr_balance = _db.obtain_service<dbs_development_committee>().get().scr_balance;
138  capital.dev_pool_sp_balance = _db.obtain_service<dbs_development_committee>().get().sp_balance;
139 
140  if (_db.obtain_service<dbs_content_reward_scr>().is_exists())
141  {
142  capital.content_balancer_scr = _db.obtain_service<dbs_content_reward_scr>().get().balance;
143  }
144 
145  if (_db.obtain_service<dbs_voters_reward_scr>().is_exists())
146  {
147  capital.active_voters_balancer_scr = _db.obtain_service<dbs_voters_reward_scr>().get().balance;
148  }
149 
150  if (_db.obtain_service<dbs_voters_reward_sp>().is_exists())
151  {
152  capital.active_voters_balancer_sp = _db.obtain_service<dbs_voters_reward_sp>().get().balance;
153  }
154 
155  if (_db.obtain_service<dbs_content_reward_fund_scr>().is_exists())
156  {
157  capital.content_reward_fund_scr_balance = _db.obtain_service<dbs_content_reward_fund_scr>().get().activity_reward_balance;
158  }
159 
160  if (_db.obtain_service<dbs_content_reward_fund_sp>().is_exists())
161  {
162  capital.content_reward_fund_sp_balance = _db.obtain_service<dbs_content_reward_fund_sp>().get().activity_reward_balance;
163  }
164 
165 
166  const auto& fifa_world_cup_2018_bounty_fund_service = _db.obtain_service<dbs_content_fifa_world_cup_2018_bounty_reward_fund>();
167  if (fifa_world_cup_2018_bounty_fund_service.is_exists())
168  {
169  capital.content_reward_fifa_world_cup_2018_bounty_fund_sp_balance = fifa_world_cup_2018_bounty_fund_service.get().activity_reward_balance;
170  }
171 
172  const auto& migration_service = _db.obtain_service<dbs_witness_reward_in_sp_migration>();
173  if (migration_service.is_exists())
174  {
175  capital.witness_reward_in_sp_migration_fund = asset(migration_service.get().balance, SP_SYMBOL);
176  }
177 
178  capital.total_pending_scr = dpo.total_pending_scr;
179  capital.total_pending_sp = dpo.total_pending_sp;
180 
182  + capital.content_balancer_scr
184  + capital.dev_pool_scr_balance
185  + capital.registration_pool_balance
186  + capital.total_scr
187  + capital.total_pending_scr;
188 
189  capital.circulating_sp = capital.active_voters_balancer_sp
190  + capital.fund_budget_balance
193  + capital.dev_pool_sp_balance
196  + capital.total_scorumpower
197  + capital.total_pending_sp;
198 
199  if (capital.total_supply.amount != capital.circulating_scr.amount + capital.circulating_sp.amount)
200  {
201  wlog("total_supply != circulating_scr + circulating_sp",
202  ("capital.total_supply", capital.total_supply)
203  ("capital.circulating_scr", capital.circulating_scr)
204  ("capital.circulating_sp", capital.circulating_sp));
205  }
206 
207  capital.advertising = dpo.advertising;
208  capital.betting_stats = dpo.betting_stats;
209 
210  // clang-format on
211 
212  return capital;
213  });
214 }
215 }
216 }
chain_properties_api_obj get_chain_properties() const
Definition: chain_api.cpp:31
chain_api(const api_context &a)
Definition: chain_api.cpp:22
chain_id_type get_chain_id() const
Definition: database.cpp:533
virtual bool is_exists() const override
adv_total_stats advertising
this section display information about advertising totals
uint32_t last_irreversible_block_num
last irreversible block num
betting_total_stats betting_stats
this section display information about betting totals
asset total_scorumpower
Total SP on accounts scorumpower.
asset circulating_capital
Total SCR and SP on circulating (on account balances). circulating_capital <= total_supply.
account_name_type current_witness
Head block signed by current witness.
asset total_supply
Total SCR and SP (circulating_scr + circulating_sp)
asset total_witness_reward_sp
Total amount of SP received by witnesses.
asset total_witness_reward_scr
Total amount of SCR received by witnesses.
#define SP_SYMBOL
Definition: config.hpp:104
shared_multi_index_container< reserve_ratio_object, indexed_by< ordered_unique< tag< by_id >, member< reserve_ratio_object, reserve_ratio_id_type, &reserve_ratio_object::id > > > > reserve_ratio_index
Definition: asset.cpp:15
asset circulating_sp
Total amount of SP.
asset total_supply
Total SCR and SP (circulating_capital + pools supply)
asset circulating_scr
Total amount of SCR.
asset total_scorumpower
Total SP on accounts.
asset circulating_capital
Total SCR and SP on circulating (on account balances). circulating_capital <= total_supply.
asset total_scr
Total SCR on accounts.
asset total_pending_scr
Total amount of pending SCR (planned rewards for account)
scorum::chain::betting_total_stats betting_stats
asset total_pending_sp
Total amount of pending SP (planned rewards for account)
scorum::chain::adv_total_stats advertising
asset_symbol_type symbol() const
Definition: asset.hpp:32
share_type amount
Definition: asset.hpp:31