COOPENOMICS  v1
Кооперативная Экономика
contributor.hpp
См. документацию.
1// contributor.hpp
2
3#pragma once
4
5
6#include "../lib/core/ram_payer.hpp"
7#include <eosio/eosio.hpp>
8#include <eosio/asset.hpp>
9#include "../lib/index.hpp"
10
11using namespace eosio;
12using std::string;
13
19class [[eosio::contract]] contributor : public coop_contract {
20public:
22
24 [[eosio::action]] void cleanup();
25
32 void init(name coopname);
33
42 void contribute(name coopname, name username, asset amount, name type);
43
50 void refresh(name coopname, name username);
51
61 void withdraw1(name coopname, name username, asset amount); // Вывод для интеллектуальных вкладов
62
72 void withdraw2(name coopname, name username, asset amount); // Вывод через очередь из членских взносов
73
82 void addfee(name coopname, asset amount); // Добавление входящих членских взносов
83
84private:
85 static constexpr symbol TOKEN_SYMBOL = _root_govern_symbol;
86
87
92 struct [[eosio::table]] participant {
93 uint64_t id;
94 name account;
95 asset share_balance = asset(0, _root_govern_symbol);
96 asset pending_rewards = asset(0, _root_symbol);
97 asset intellectual_contributions = asset(0, _root_govern_symbol);
98 asset property_contributions = asset(0, _root_govern_symbol);
99 asset total_contributions = asset(0, _root_govern_symbol);
100 int64_t reward_per_share_last = 0;
101 asset withdrawed = asset(0, _root_symbol);
102 asset queued_withdrawal = asset(0, _root_symbol);
103
104 uint64_t primary_key() const { return id; }
105 uint64_t by_account() const { return account.value; }
106 };
107
108 typedef eosio::multi_index<"participants"_n, participant,
109 indexed_by<"byaccount"_n, const_mem_fun<participant, uint64_t, &participant::by_account>>
111
112
113
118 struct [[eosio::table]] global_state {
119 eosio::name coopname;
120 asset total_shares = asset(0, _root_govern_symbol);
121 asset total_contributions = asset(0, _root_govern_symbol);
122 asset total_rewards_distributed = asset(0, _root_symbol);
123 asset total_withdrawed = asset(0, _root_symbol);
124 asset total_intellectual_contributions = asset(0, _root_govern_symbol);
125 asset total_property_contributions = asset(0, _root_govern_symbol);
126 asset accumulated_fees = asset(0, TOKEN_SYMBOL);
127 int64_t cumulative_reward_per_share = 0;
128
129 uint64_t primary_key() const { return coopname.value; }
130 };
131
132 typedef eosio::multi_index<"globalstate"_n, global_state> global_state_table;
133
134
139 struct [[eosio::table]] withdrawal_request {
140 uint64_t id;
141 name account;
142 asset amount = asset(0, TOKEN_SYMBOL);
143 uint64_t timestamp;
144
145 uint64_t primary_key() const { return id; }
146 uint64_t by_account() const { return account.value; }
147 uint64_t by_timestamp() const { return timestamp; }
148 };
149
150 typedef eosio::multi_index<"withdrawals"_n, withdrawal_request,
151 indexed_by<"byaccount"_n, const_mem_fun<withdrawal_request, uint64_t, &withdrawal_request::by_account>>,
152 indexed_by<"bytimestamp"_n, const_mem_fun<withdrawal_request, uint64_t, &withdrawal_request::by_timestamp>>
154
161 void process_property(const name& coopname, const name& username, const asset& amount);
162
169 void process_intellectual(const name& coopname, const name& username, const asset& amount);
170
176 void update_global_state(const global_state& gs);
177
184 global_state_table global_state_inst(_self, _self.value);
185 auto itr = global_state_inst.find(coopname.value);
186 eosio::check(itr != global_state_inst.end(), "Контракт не инициализирован");
187 return *itr;
188 }
189
193 void process_withdrawals(const name& coopname); // Обработка очереди на вывод
194};
195
196// Плательщик за оперативную память строк таблицы — правило в lib/core/ram_payer.hpp.
Контракт Contributor управляет вкладами, распределением вознаграждений и выводом средств для участник...
Definition: contributor.hpp:19
global_state get_global_state(name coopname)
Получает текущее глобальное состояние.
Definition: contributor.hpp:183
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:153
eosio::multi_index<"globalstate"_n, global_state > global_state_table
Таблица для хранения глобального состояния.
Definition: contributor.hpp:132
eosio::multi_index<"participants"_n, participant, indexed_by<"byaccount"_n, const_mem_fun< participant, uint64_t, &participant::by_account > > > participants_table
Таблица для хранения участников.
Definition: contributor.hpp:110
Базовый класс контрактов платформы.
Definition: coop_contract.hpp:33
coop_contract(eosio::name receiver, eosio::name code, eosio::datastream< const char * > ds)
Definition: coop_contract.hpp:35
static constexpr eosio::symbol _root_govern_symbol
Definition: consts.hpp:236
static constexpr eosio::symbol _root_symbol
Definition: consts.hpp:235
RAM_PAYER_CLASS(contributor::participant, contract)
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:102
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: table_registrator_accounts.hpp:16
Структура глобального состояния, хранящая общие данные контракта.
Definition: contributor.hpp:118
eosio::name coopname
Имя кооператива глобального состояния.
Definition: contributor.hpp:119
uint64_t primary_key() const
Основной ключ.
Definition: contributor.hpp:129
Структура участника, хранящая данные индивидуального участника.
Definition: contributor.hpp:92
name account
Имя аккаунта участника.
Definition: contributor.hpp:94
uint64_t id
Уникальный ID участника.
Definition: contributor.hpp:93
uint64_t primary_key() const
Основной ключ.
Definition: contributor.hpp:104
uint64_t by_account() const
Вторичный индекс по аккаунту.
Definition: contributor.hpp:105
Структура запроса на вывод для обработки очереди на вывод.
Definition: contributor.hpp:139
name account
Имя аккаунта участника, запрашивающего вывод.
Definition: contributor.hpp:141
uint64_t id
Уникальный ID запроса на вывод.
Definition: contributor.hpp:140
uint64_t by_account() const
Вторичный индекс по аккаунту.
Definition: contributor.hpp:146
uint64_t primary_key() const
Основной ключ.
Definition: contributor.hpp:145
uint64_t timestamp
Время создания запроса.
Definition: contributor.hpp:143
uint64_t by_timestamp() const
Вторичный индекс по времени.
Definition: contributor.hpp:147
Definition: table_soviet_participants.hpp:18