COOPENOMICS  v1
Кооперативная Экономика
contributor.hpp
См. документацию.
1// contributor.hpp
2
3#pragma once
4
5#include <eosio/eosio.hpp>
6#include <eosio/asset.hpp>
7#include "../lib/common.hpp"
8
9using namespace eosio;
10using std::string;
11
18public:
20
27 void init(name coopname);
28
37 void contribute(name coopname, name username, asset amount, name type);
38
45 void refresh(name coopname, name username);
46
56 void withdraw1(name coopname, name username, asset amount); // Вывод для интеллектуальных вкладов
57
67 void withdraw2(name coopname, name username, asset amount); // Вывод через очередь из членских взносов
68
77 void addfee(name coopname, asset amount); // Добавление входящих членских взносов
78
79private:
80 static constexpr symbol TOKEN_SYMBOL = _root_govern_symbol;
81
82
87 struct [[eosio::table]] participant {
88 uint64_t id;
89 name account;
90 asset share_balance = asset(0, _root_govern_symbol);
91 asset pending_rewards = asset(0, _root_symbol);
92 asset intellectual_contributions = asset(0, _root_govern_symbol);
93 asset property_contributions = asset(0, _root_govern_symbol);
94 asset total_contributions = asset(0, _root_govern_symbol);
95 int64_t reward_per_share_last = 0;
96 asset withdrawed = asset(0, _root_symbol);
97 asset queued_withdrawal = asset(0, _root_symbol);
98
99 uint64_t primary_key() const { return id; }
100 uint64_t by_account() const { return account.value; }
101 };
102
103 typedef eosio::multi_index<"participants"_n, participant,
104 indexed_by<"byaccount"_n, const_mem_fun<participant, uint64_t, &participant::by_account>>
106
107
108
113 struct [[eosio::table]] global_state {
114 eosio::name coopname;
115 asset total_shares = asset(0, _root_govern_symbol);
116 asset total_contributions = asset(0, _root_govern_symbol);
117 asset total_rewards_distributed = asset(0, _root_symbol);
118 asset total_withdrawed = asset(0, _root_symbol);
119 asset total_intellectual_contributions = asset(0, _root_govern_symbol);
120 asset total_property_contributions = asset(0, _root_govern_symbol);
121 asset accumulated_fees = asset(0, TOKEN_SYMBOL);
122 int64_t cumulative_reward_per_share = 0;
123
124 uint64_t primary_key() const { return coopname.value; }
125 };
126
127 typedef eosio::multi_index<"globalstate"_n, global_state> global_state_table;
128
129
134 struct [[eosio::table]] withdrawal_request {
135 uint64_t id;
136 name account;
137 asset amount = asset(0, TOKEN_SYMBOL);
138 uint64_t timestamp;
139
140 uint64_t primary_key() const { return id; }
141 uint64_t by_account() const { return account.value; }
142 uint64_t by_timestamp() const { return timestamp; }
143 };
144
145 typedef eosio::multi_index<"withdrawals"_n, withdrawal_request,
146 indexed_by<"byaccount"_n, const_mem_fun<withdrawal_request, uint64_t, &withdrawal_request::by_account>>,
147 indexed_by<"bytimestamp"_n, const_mem_fun<withdrawal_request, uint64_t, &withdrawal_request::by_timestamp>>
149
156 void process_property(const name& coopname, const name& username, const asset& amount);
157
164 void process_intellectual(const name& coopname, const name& username, const asset& amount);
165
171 void update_global_state(const global_state& gs);
172
179 global_state_table global_state_inst(_self, _self.value);
180 auto itr = global_state_inst.find(coopname.value);
181 eosio::check(itr != global_state_inst.end(), "Контракт не инициализирован");
182 return *itr;
183 }
184
188 void process_withdrawals(const name& coopname); // Обработка очереди на вывод
189};
Контракт Contributor управляет вкладами, распределением вознаграждений и выводом средств для участник...
Definition: contributor.hpp:17
global_state get_global_state(name coopname)
Получает текущее глобальное состояние.
Definition: contributor.hpp:178
eosio::multi_index<"withdrawals"_n, withdrawal_request, indexed_by<"byaccount"_n, const_mem_fun< withdrawal_request, uint64_t, &withdrawal_request::by_account > >, indexed_by<"bytimestamp"_n, const_mem_fun< withdrawal_request, uint64_t, &withdrawal_request::by_timestamp > > > withdrawals_table
Таблица для хранения запросов на вывод.
Definition: contributor.hpp:148
eosio::multi_index<"globalstate"_n, global_state > global_state_table
Таблица для хранения глобального состояния.
Definition: contributor.hpp:127
eosio::multi_index<"participants"_n, participant, indexed_by<"byaccount"_n, const_mem_fun< participant, uint64_t, &participant::by_account > > > participants_table
Таблица для хранения участников.
Definition: contributor.hpp:105
static constexpr eosio::symbol _root_govern_symbol
Definition: consts.hpp:210
static constexpr eosio::symbol _root_symbol
Definition: consts.hpp:209
contract
Definition: eosio.msig_tests.cpp:977
share_type amount
Definition: eosio.token_tests.cpp:174
void update_global_state(const global_state &gs)
Обновляет глобальное состояние новыми значениями.
Definition: global_state.hpp:52
Definition: eosio.msig.hpp:34
action(permission_level{ _gateway, "active"_n}, _gateway, "adduser"_n, std::make_tuple(coopname, deposit->username, to_spread, to_circulation, eosio::current_time_point(), true)).send()
Структура, представляющая учетные записи аккаунтов.
Definition: accounts.hpp:60
Структура глобального состояния, хранящая общие данные контракта.
Definition: contributor.hpp:113
eosio::name coopname
Имя кооператива глобального состояния.
Definition: contributor.hpp:114
uint64_t primary_key() const
Основной ключ.
Definition: contributor.hpp:124
Структура участника, хранящая данные индивидуального участника.
Definition: contributor.hpp:87
name account
Имя аккаунта участника.
Definition: contributor.hpp:89
uint64_t id
Уникальный ID участника.
Definition: contributor.hpp:88
uint64_t primary_key() const
Основной ключ.
Definition: contributor.hpp:99
uint64_t by_account() const
Вторичный индекс по аккаунту.
Definition: contributor.hpp:100
Структура запроса на вывод для обработки очереди на вывод.
Definition: contributor.hpp:134
name account
Имя аккаунта участника, запрашивающего вывод.
Definition: contributor.hpp:136
uint64_t id
Уникальный ID запроса на вывод.
Definition: contributor.hpp:135
uint64_t by_account() const
Вторичный индекс по аккаунту.
Definition: contributor.hpp:141
uint64_t primary_key() const
Основной ключ.
Definition: contributor.hpp:140
uint64_t timestamp
Время создания запроса.
Definition: contributor.hpp:138
uint64_t by_timestamp() const
Вторичный индекс по времени.
Definition: contributor.hpp:142
Таблица участников кооператива
Definition: coops.hpp:181