Scorum
budget_objects.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <fc/fixed_string.hpp>
4 #include <fc/static_variant.hpp>
5 #include <fc/shared_containers.hpp>
6 
9 
12 
13 #include <boost/multi_index/composite_key.hpp>
14 #include <boost/multi_index/hashed_index.hpp>
15 #include <boost/uuid/uuid.hpp>
16 
17 #include <numeric>
18 
19 namespace scorum {
20 namespace chain {
21 
23 
24 class fund_budget_object : public object<fund_budget_object_type, fund_budget_object>
25 {
26 public:
27  CHAINBASE_DEFAULT_CONSTRUCTOR(fund_budget_object)
28 
30 
31  id_type id;
32 
33  time_point_sec created = time_point_sec::min();
34  time_point_sec start = time_point_sec::min();
35  time_point_sec deadline = time_point_sec::maximum();
36 
39 };
40 
41 template <budget_type> struct budget_traits;
42 
43 template <> struct budget_traits<budget_type::banner>
44 {
45  static constexpr uint16_t object_type_v = banner_budget_object_type;
46 };
47 
48 template <> struct budget_traits<budget_type::post>
49 {
50  static constexpr uint16_t object_type_v = post_budget_object_type;
51 };
52 
55 template <budget_type budget_type_v>
56 class adv_budget_object : public object<budget_traits<budget_type_v>::object_type_v, adv_budget_object<budget_type_v>>
57 {
58 public:
59  CHAINBASE_DEFAULT_DYNAMIC_CONSTRUCTOR(adv_budget_object, (json_metadata))
60 
61  using id_type = oid<adv_budget_object<budget_type_v>>;
62 
63  id_type id;
64  uuid_type uuid;
65 
67  fc::shared_string json_metadata;
68 
69  time_point_sec created = time_point_sec::min();
70  time_point_sec start = time_point_sec::min();
71  time_point_sec deadline = time_point_sec::maximum();
72 
75 
76  fc::time_point_sec cashout_time = time_point_sec::min();
77  asset owner_pending_income = asset(0, SCORUM_SYMBOL);
78  asset budget_pending_outgo = asset(0, SCORUM_SYMBOL);
79 
80  bool is_positive_balance() const
81  {
82  return balance.amount != 0;
83  }
84 };
86 
87 struct by_owner_name;
88 struct by_per_block;
89 
90 template <typename TBudgetObject> using id_t = typename TBudgetObject::id_type;
91 
92 // clang-format off
94  = shared_multi_index_container<fund_budget_object,
95  indexed_by<ordered_unique<tag<by_id>,
96  member<fund_budget_object,
99 
100 struct by_cashout_time;
101 struct by_balances;
102 struct by_uuid;
103 
104 template <budget_type budget_type_v>
106  = shared_multi_index_container<adv_budget_object<budget_type_v>,
107  indexed_by<ordered_unique<tag<by_id>,
108  member<adv_budget_object<budget_type_v>,
111  hashed_unique<tag<by_uuid>,
112  member<adv_budget_object<budget_type_v>,
113  uuid_type,
115  ordered_non_unique<tag<by_owner_name>,
116  member<adv_budget_object<budget_type_v>,
119  ordered_non_unique<tag<by_balances>,
120  composite_key<adv_budget_object<budget_type_v>,
121  member<adv_budget_object<budget_type_v>,
122  asset,
124  member<adv_budget_object<budget_type_v>,
125  asset,
127  member<adv_budget_object<budget_type_v>,
128  asset,
130  ordered_non_unique<tag<by_cashout_time>,
131  member<adv_budget_object<budget_type_v>,
132  fc::time_point_sec,
134  ordered_unique<tag<by_per_block>,
135  composite_key<adv_budget_object<budget_type_v>,
136  const_mem_fun<adv_budget_object<budget_type_v>,
137  bool,
139  member<adv_budget_object<budget_type_v>,
140  asset,
142  member<adv_budget_object<budget_type_v>,
145  composite_key_compare<std::greater<bool>,
146  std::greater<asset>,
147  std::less<id_t<adv_budget_object<budget_type_v>>>>>>>;
148 // clang-format on
149 
152 
155 
156 } // namespace chain
157 } // namespace scorum
158 
159 // clang-format off
160 FC_REFLECT(scorum::chain::fund_budget_object, (id)(created)(start)(deadline)(balance)(per_block))
162  (id)
163  (uuid)
164  (owner)
165  (json_metadata)
166  (created)
167  (start)
168  (deadline)
169  (balance)
170  (per_block)
171  (cashout_time)
172  (owner_pending_income)
173  (budget_pending_outgo))
175  (id)
176  (uuid)
177  (owner)
178  (json_metadata)
179  (created)
180  (start)
181  (deadline)
182  (balance)
183  (per_block)
184  (cashout_time)
185  (owner_pending_income)
186  (budget_pending_outgo))
187 // clang-format on
188 
object< fund_budget_object_type, fund_budget_object >::id_type id_type
#define SP_SYMBOL
Definition: config.hpp:104
#define SCORUM_SYMBOL
Definition: config.hpp:102
FC_REFLECT(appender_args,(appender)(stream)) FC_REFLECT_DERIVED(file_appender_args
Definition: game.cpp:4
shared_multi_index_container< fund_budget_object, indexed_by< ordered_unique< tag< by_id >, member< fund_budget_object, fund_budget_object::id_type, &fund_budget_object::id > >> > fund_budget_index
shared_multi_index_container< adv_budget_object< budget_type_v >, indexed_by< ordered_unique< tag< by_id >, member< adv_budget_object< budget_type_v >, id_t< adv_budget_object< budget_type_v > >, &adv_budget_object< budget_type_v >::id > >, hashed_unique< tag< by_uuid >, member< adv_budget_object< budget_type_v >, uuid_type, &adv_budget_object< budget_type_v >::uuid > >, ordered_non_unique< tag< by_owner_name >, member< adv_budget_object< budget_type_v >, account_name_type, &adv_budget_object< budget_type_v >::owner > >, ordered_non_unique< tag< by_balances >, composite_key< adv_budget_object< budget_type_v >, member< adv_budget_object< budget_type_v >, asset, &adv_budget_object< budget_type_v >::balance >, member< adv_budget_object< budget_type_v >, asset, &adv_budget_object< budget_type_v >::owner_pending_income >, member< adv_budget_object< budget_type_v >, asset, &adv_budget_object< budget_type_v >::budget_pending_outgo > >>, ordered_non_unique< tag< by_cashout_time >, member< adv_budget_object< budget_type_v >, fc::time_point_sec, &adv_budget_object< budget_type_v >::cashout_time > >, ordered_unique< tag< by_per_block >, composite_key< adv_budget_object< budget_type_v >, const_mem_fun< adv_budget_object< budget_type_v >, bool, &adv_budget_object< budget_type_v >::is_positive_balance >, member< adv_budget_object< budget_type_v >, asset, &adv_budget_object< budget_type_v >::per_block >, member< adv_budget_object< budget_type_v >, id_t< adv_budget_object< budget_type_v > >, &adv_budget_object< budget_type_v >::id > >, composite_key_compare< std::greater< bool >, std::greater< asset >, std::less< id_t< adv_budget_object< budget_type_v > >> >> >> adv_budget_index
adv_budget_index< budget_type::banner > banner_budget_index
typename TBudgetObject::id_type id_t
adv_budget_index< budget_type::post > post_budget_index
@ post
Rate limiting posting reward eligibility over time.
fc::fixed_string_16 account_name_type
Definition: types.hpp:62
Definition: asset.cpp:15
boost::uuids::uuid uuid_type
Definition: types.hpp:53
share_type amount
Definition: asset.hpp:31