COOPENOMICS  v1
Кооперативная Экономика
soviet.hpp
См. документацию.
1// #pragma once
2
3
4#include "../lib/core/ram_payer.hpp"
5#include <eosio/binary_extension.hpp>
6#include <eosio/eosio.hpp>
7#include <eosio/ignore.hpp>
8#include <eosio/transaction.hpp>
9#include <eosio/asset.hpp>
10#include <eosio/singleton.hpp>
11
12#include "../lib/index.hpp"
13
14
49 eosio::name decision_type;
50 eosio::name follow;
51};
52
53class [[eosio::contract(SOVIET)]] soviet : public coop_contract {
54public:
56
57 [[eosio::action]] void init();
58 [[eosio::action]] void migrate();
60 [[eosio::action]] void cleanup();
61
86 [[eosio::action]] void repairdec(
87 eosio::name coopname,
88 uint64_t decision_id,
89 eosio::name username,
90 eosio::name type,
91 uint64_t batch_id,
92 document2 statement,
93 std::vector<eosio::name> votes_for,
94 std::vector<eosio::name> votes_against,
95 bool validated,
96 bool approved,
97 bool authorized,
98 eosio::name authorized_by,
99 document2 authorization,
100 eosio::time_point_sec created_at,
101 eosio::time_point_sec expired_at,
102 std::string meta,
103 eosio::name callback_contract,
104 eosio::name confirm_callback,
105 eosio::name decline_callback,
106 checksum256 hash
107 );
108
115 [[eosio::action]] void converttoaxn(eosio::name coopname, eosio::asset amount, document2 statement, checksum256 process_hash);
116
117 //agenda.cpp
118 [[eosio::action]] void createagenda(CREATEAGENDA_SIGNATURE);
119 void authorize_action_effect(eosio::name executer, eosio::name coopname, uint64_t decision_id);
120
121
122 //soviet.cpp
123 [[eosio::action]] void exec(eosio::name executer, eosio::name coopname, uint64_t decision_id);
124
125 //ниже реестр хранилища документов
126
127
128 //документ
129 [[eosio::action]] void newsubmitted(NEWSUBMITTED_SIGNATURE);
130 [[eosio::action]] void newresolved(NEWRESOLVED_SIGNATURE);
131 [[eosio::action]] void newdecision(NEWDECISION_SIGNATURE);
132 [[eosio::action]] void newagreement(NEWAGREEMENT_SIGNATURE);
133 [[eosio::action]] void newpackage(NEWPACKAGE_SIGNATURE);
134
135 [[eosio::action]] void newact(NEWACT_SIGNATURE);
136 [[eosio::action]] void newlink(NEWLINK_SIGNATURE);
137 [[eosio::action]] void newdeclined(NEWDECLINED_SIGNATURE);
138
139 [[eosio::action]] void declinedoc(eosio::name coopname, eosio::name username, checksum256 hash, document2 document);
140
141 //approves
142 [[eosio::action]] void createapprv(CREATEAPPRV_SIGNATURE);
143
144 [[eosio::action]]
145 void confirmapprv(eosio::name coopname, eosio::name username, checksum256 approval_hash, std::optional<document2> approved_document);
146
147 [[eosio::action]]
148 void declineapprv(eosio::name coopname, eosio::name username, checksum256 approval_hash, std::string reason);
149
150
151 //registrator.cpp
152 [[eosio::action]] void cancelreg(eosio::name coopname, eosio::name username, std::string message);
153
154 //regaccount.cpp
155 [[eosio::action]] void addpartcpnt(eosio::name coopname, eosio::name username, eosio::name braname, eosio::name type, eosio::time_point_sec created_at, eosio::asset initial, eosio::asset minimum, bool spread_initial);
156
157 //delparticipant.cpp
158 [[eosio::action]] void delpartcpnt(eosio::name coopname, eosio::name username);
159
160 //setminamt.cpp
161 [[eosio::action]] void setminamt(eosio::name coopname, eosio::name username, eosio::asset minimum);
162
163 //automator.cpp — реестр автоматизаций робота решений совета
164 [[eosio::action]] void automate(eosio::name coopname, uint64_t board_id, eosio::name member, eosio::name permission_name, std::vector<eosio::name> vote_types, std::vector<follow_rule> follow_rules, std::vector<eosio::name> authorize_types, eosio::asset limit, eosio::time_point_sec expires_at);
165 [[eosio::action]] void disautomate(eosio::name coopname, uint64_t board_id, eosio::name member);
166 static void make_base_coagreements(eosio::name coopname, eosio::symbol govern_symbol);
167
168 //chairman.cpp
169 [[eosio::action]] void authorize(eosio::name coopname, eosio::name chairman, uint64_t decision_id, document2 document, eosio::name permission);
170 [[eosio::action]] void createboard(eosio::name coopname, eosio::name username, eosio::name type, std::vector<board_member> members, std::string name, std::string description);
171 [[eosio::action]] void updateboard(eosio::name coopname, eosio::name username, uint64_t board_id, std::vector<board_member> members, std::string name, std::string description);
172
173 //admin.cpp
174 [[eosio::action]] void addstaff(eosio::name coopname, eosio::name chairman, eosio::name username, std::vector<right> rights, std::string position_title);
175 [[eosio::action]] void rmstaff(eosio::name coopname, eosio::name chairman, eosio::name username);
176 [[eosio::action]] void setrights(eosio::name coopname, eosio::name chairman, eosio::name username, std::vector<right> rights);
177 [[eosio::action]] void validate(eosio::name coopname, eosio::name username, uint64_t decision_id);
178
179 //programs
180 [[eosio::action]] void openprogwall(name coopname, name username, name program_type, uint64_t agreement_id);
181
182 //voting.cpp
183 [[eosio::action]] void votefor(
184 std::string version,
185 eosio::name coopname,
186 eosio::name username,
187 uint64_t decision_id,
188 eosio::time_point_sec signed_at,
189 checksum256 signed_hash,
190 eosio::signature signature,
191 eosio::public_key public_key,
192 eosio::name permission
193 );
194
195 [[eosio::action]] void voteagainst(
196 std::string version,
197 eosio::name coopname,
198 eosio::name username,
199 uint64_t decision_id,
200 eosio::time_point_sec signed_at,
201 checksum256 signed_hash,
202 eosio::signature signature,
203 eosio::public_key public_key,
204 eosio::name permission
205 );
206
207 [[eosio::action]] void cancelvote(eosio::name coopname, eosio::name member, uint64_t decision_id);
208
209 //programs.cpp
210 [[eosio::action]] void createprog(eosio::name coopname, eosio::name username, eosio::name type, std::string title, std::string announce, std::string description, std::string preview, std::string images, eosio::name calculation_type, eosio::asset fixed_membership_contribution, uint64_t membership_percent_fee, bool is_can_coop_spend_share_contributions, std::string meta);
211 [[eosio::action]] void editprog(eosio::name coopname, eosio::name username, uint64_t program_id, uint64_t draft_id, std::string title, std::string announce, std::string description, std::string preview, std::string images, std::string meta);
212 [[eosio::action]] void disableprog(eosio::name coopname, uint64_t program_id);
213
214 //agreements.cpp
215 [[eosio::action]] void sndagreement(eosio::name coopname, eosio::name administrator, eosio::name username, eosio::name agreement_type, document2 document);
216 [[eosio::action]] void confirmagree(eosio::name coopname, eosio::name administrator, eosio::name username, uint64_t agreement_id);
217 [[eosio::action]] void declineagree(eosio::name coopname, eosio::name administrator, eosio::name username, uint64_t agreement_id, std::string comment);
218 [[eosio::action]] void migrateagree(eosio::name coopname, uint64_t agreement_id);
219
220
221 //decisions
222 [[eosio::action]] void withdraw(eosio::name coopname, eosio::name username, uint64_t withdraw_id, document2 statement);
223 [[eosio::action]] void cancelexprd(eosio::name coopname, uint64_t decision_id);
224 [[eosio::action]] void declinedec(eosio::name coopname, uint64_t decision_id);
225
226 void withdraw_effect(eosio::name executer, eosio::name coopname, uint64_t decision_id, uint64_t batch_id);
227
228 [[eosio::action]] void addbal(eosio::name coopname, eosio::name username, uint64_t program_id, eosio::asset quantity, std::string memo);
229 [[eosio::action]] void subbal(eosio::name coopname, eosio::name username, uint64_t program_id, eosio::asset quantity, bool skip_available_check, std::string memo);
230 [[eosio::action]] void blockbal(eosio::name coopname, eosio::name username, uint64_t program_id, eosio::asset quantity, std::string memo);
231 [[eosio::action]] void unblockbal(eosio::name coopname, eosio::name username, uint64_t program_id, eosio::asset quantity, std::string memo);
232 [[eosio::action]] void addmemberfee(eosio::name coopname, eosio::name username, uint64_t program_id, eosio::asset quantity, std::string memo);
233 [[eosio::action]] void submemberfee(eosio::name coopname, eosio::name username, uint64_t program_id, eosio::asset quantity, std::string memo);
234
235 //addresses.cpp
236 [[eosio::action]] void creaddress(eosio::name coopname, eosio::name chairman, eosio::name braname, address_data data);
237 [[eosio::action]] void deladdress(eosio::name coopname, eosio::name chairman, uint64_t address_id);
238 [[eosio::action]] void editaddress(eosio::name coopname, eosio::name chairman, eosio::name braname, uint64_t address_id, address_data data);
239
240
241 //fund.cpp
242 void subaccum_effect(eosio::name executer, eosio::name coopname, uint64_t decision_id, uint64_t program_id);
243 [[eosio::action]] void fundwithdraw(eosio::name coopname, eosio::name username, eosio::name type, uint64_t withdraw_id, document2 document);
244
245 //participants.cpp
246 [[eosio::action]] void block(eosio::name coopname, eosio::name admin, eosio::name username, std::string message);
247 [[eosio::action]] void unblock(eosio::name coopname, eosio::name admin, eosio::name username, bool is_registration, std::string message);
248
249 //branches.cpp
250 [[eosio::action]] void selectbranch(eosio::name coopname, eosio::name username, eosio::name braname, document2 document);
251
252 //decisions.cpp
253 void freedecision_effect(eosio::name executer, eosio::name coopname, uint64_t decision_id);
254 [[eosio::action]] void freedecision(eosio::name coopname, eosio::name username, document2 document, std::string meta);
255
256 //branch.cpp
257 [[eosio::action]] void deletebranch(eosio::name coopname, eosio::name braname);
258
265 [[eosio::action]] void createtax(eosio::name coopname,
266 eosio::checksum256 tax_hash,
267 eosio::asset amount,
268 std::string meta);
269
275 [[eosio::action]] void taxconfirm(eosio::name coopname,
276 eosio::checksum256 outcome_hash);
277
283 [[eosio::action]] void taxdecline(eosio::name coopname,
284 eosio::checksum256 outcome_hash,
285 std::string reason);
286
287 [[eosio::action]] void setbranch(eosio::name coopname, eosio::name username, eosio::name braname);
288
289};
290
291
302 struct [[eosio::table, eosio::contract(SOVIET)]] counts : counts_base {};
303
319struct [[eosio::table, eosio::contract(SOVIET)]] automator {
320 uint64_t id;
321 eosio::name coopname;
322 uint64_t board_id;
323 eosio::name member;
324 eosio::name permission_name;
325 std::vector<eosio::name> vote_types;
326 std::vector<follow_rule> follow_rules;
327 std::vector<eosio::name> authorize_types;
328 eosio::asset limit;
329 eosio::time_point_sec expires_at;
330 eosio::time_point_sec created_at;
331 eosio::time_point_sec updated_at;
332
333 uint64_t primary_key() const { return id; }
334 uint64_t by_member() const { return member.value; }
335
336 bool is_expired() const {
337 return expires_at.sec_since_epoch() != 0 && expires_at <= eosio::time_point_sec(eosio::current_time_point().sec_since_epoch());
338 }
339
341 bool allows_vote(eosio::name decision_type) const {
342 if (std::find(vote_types.begin(), vote_types.end(), decision_type) != vote_types.end()) return true;
343 for (const auto& rule : follow_rules) {
344 if (rule.decision_type == decision_type) return true;
345 }
346 return false;
347 }
348
349 bool allows_authorize(eosio::name decision_type) const {
350 return std::find(authorize_types.begin(), authorize_types.end(), decision_type) != authorize_types.end();
351 }
352};
353
354 typedef eosio::multi_index< "automator"_n, automator,
355 eosio::indexed_by<"bymember"_n, eosio::const_mem_fun<automator, uint64_t, &automator::by_member>>
357
358
370 struct [[eosio::table, eosio::contract(SOVIET)]] autosigner {
371 uint64_t decision_id;
372 uint64_t primary_key() const { return decision_id; }
373 };
374
375 typedef eosio::multi_index< "autosigner"_n, autosigner> autosigner_index;
376
377
389 struct [[eosio::table, eosio::contract(SOVIET)]] joincoops {
390 uint64_t id;
391 eosio::name username;
392 bool is_paid = false;
393 std::string notice;
394
395 eosio::binary_extension<eosio::name> braname;
396
397 uint64_t primary_key() const {
398 return id;
399 };
400
401 uint64_t byusername() const {return username.value;}
402
403 };
404
405 typedef eosio::multi_index<"joincoops"_n, joincoops,
406 eosio::indexed_by<"byusername"_n, eosio::const_mem_fun<joincoops, uint64_t, &joincoops::byusername>>
408
420 struct [[eosio::table, eosio::contract(SOVIET)]] changes {
421 uint64_t id;
422 uint64_t exchange_id;
425
426
427 uint64_t primary_key() const {
428 return id;
429 };
430
431 uint64_t byexchange() const {
432 return exchange_id;
433 };
434 };
435
436 typedef eosio::multi_index<"changes"_n, changes,
437 eosio::indexed_by<"byexchange"_n, eosio::const_mem_fun<changes, uint64_t, &changes::byexchange>>
439
440// Плательщик за оперативную память строк таблицы — правило в lib/core/ram_payer.hpp.
Базовый класс контрактов платформы.
Definition: coop_contract.hpp:33
coop_contract(eosio::name receiver, eosio::name code, eosio::datastream< const char * > ds)
Definition: coop_contract.hpp:35
Definition: soviet.hpp:53
#define SOVIET
Definition: consts.hpp:150
const auto admin
Definition: eosio.limitauth_tests.cpp:18
contract
Definition: eosio.msig_tests.cpp:977
share_type amount
Definition: eosio.token_tests.cpp:174
#define NEWSUBMITTED_SIGNATURE
Definition: soviet.hpp:31
#define NEWAGREEMENT_SIGNATURE
Definition: soviet.hpp:49
#define NEWLINK_SIGNATURE
Definition: soviet.hpp:46
#define NEWDECISION_SIGNATURE
Definition: soviet.hpp:37
#define NEWRESOLVED_SIGNATURE
Definition: soviet.hpp:34
#define NEWACT_SIGNATURE
Definition: soviet.hpp:43
#define NEWDECLINED_SIGNATURE
Definition: soviet.hpp:40
#define CREATEAGENDA_SIGNATURE
Definition: soviet.hpp:13
#define NEWPACKAGE_SIGNATURE
Definition: soviet.hpp:52
#define CREATEAPPRV_SIGNATURE
Definition: soviet.hpp:16
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()
eosio::multi_index< "automator"_n, automator, eosio::indexed_by<"bymember"_n, eosio::const_mem_fun< automator, uint64_t, &automator::by_member > > > automator_index
Definition: soviet.hpp:356
eosio::multi_index< "autosigner"_n, autosigner > autosigner_index
Definition: soviet.hpp:375
RAM_PAYER_CLASS(counts, contract)
eosio::multi_index<"changes"_n, changes, eosio::indexed_by<"byexchange"_n, eosio::const_mem_fun< changes, uint64_t, &changes::byexchange > > > changes_index
Definition: soviet.hpp:438
eosio::multi_index<"joincoops"_n, joincoops, eosio::indexed_by<"byusername"_n, eosio::const_mem_fun< joincoops, uint64_t, &joincoops::byusername > > > joincoops_index
Definition: soviet.hpp:407
Definition: table_soviet_addresses.hpp:10
Реестр автоматизаций робота решений совета
Definition: soviet.hpp:319
eosio::name coopname
Имя кооператива
Definition: soviet.hpp:321
bool allows_vote(eosio::name decision_type) const
Тип решения делегирован роботу для голосования — сразу или вслед за другим членом совета
Definition: soviet.hpp:341
eosio::asset limit
Лимит суммы на одно решение; нулевая сумма — без лимита (соблюдается роботом)
Definition: soviet.hpp:328
bool is_expired() const
Definition: soviet.hpp:336
eosio::name permission_name
Разрешение аккаунта члена совета с ключом робота (не active и не owner)
Definition: soviet.hpp:324
bool allows_authorize(eosio::name decision_type) const
Definition: soviet.hpp:349
eosio::time_point_sec updated_at
Момент последнего изменения
Definition: soviet.hpp:331
eosio::name member
Член совета, делегировавший подпись роботу
Definition: soviet.hpp:323
uint64_t id
Уникальный идентификатор записи
Definition: soviet.hpp:320
eosio::time_point_sec created_at
Момент включения автоматизации
Definition: soviet.hpp:330
std::vector< follow_rule > follow_rules
Типы решений, по которым робот повторяет голос другого члена совета
Definition: soviet.hpp:326
eosio::time_point_sec expires_at
Срок действия автоматизации; нулевое значение — бессрочно
Definition: soviet.hpp:329
std::vector< eosio::name > authorize_types
Типы решений, протоколы которых робот подписывает от имени председателя (только для председателя)
Definition: soviet.hpp:327
uint64_t by_member() const
Индекс по члену совета
Definition: soviet.hpp:334
uint64_t primary_key() const
Definition: soviet.hpp:333
uint64_t board_id
Идентификатор совета
Definition: soviet.hpp:322
std::vector< eosio::name > vote_types
Типы решений, по которым робот голосует «за» сразу при появлении повестки
Definition: soviet.hpp:325
Таблица автоподписанта
Definition: soviet.hpp:370
uint64_t primary_key() const
Definition: soviet.hpp:372
uint64_t decision_id
Идентификатор решения для автоподписания
Definition: soviet.hpp:371
Таблица изменений обменов
Definition: soviet.hpp:420
uint64_t id
Уникальный идентификатор изменения
Definition: soviet.hpp:421
uint64_t primary_key() const
Definition: soviet.hpp:427
uint64_t return_product_decision_id
Идентификатор решения о возврате продукта
Definition: soviet.hpp:424
uint64_t contribution_product_decision_id
Идентификатор решения о внесении продукта
Definition: soviet.hpp:423
uint64_t exchange_id
Идентификатор обмена в контракте marketplace.
Definition: soviet.hpp:422
uint64_t byexchange() const
Definition: soviet.hpp:431
Definition: table_registrator_orgs.hpp:17
Definition: table_counts.hpp:8
Таблица счетчиков
Definition: soviet.hpp:302
Definition: document_core.hpp:27
Definition: document_core.hpp:10
Правило повтора: по какому типу решения и за кем член совета повторяет голос
Definition: soviet.hpp:48
eosio::name decision_type
Тип решения совета
Definition: soviet.hpp:49
eosio::name follow
Член совета, за голосом которого робот повторяет
Definition: soviet.hpp:50
Таблица заявок на вступление в кооператив
Definition: soviet.hpp:389
eosio::binary_extension< eosio::name > braname
Имя кооперативного участка
Definition: soviet.hpp:395
std::string notice
Примечание к заявке
Definition: soviet.hpp:393
uint64_t primary_key() const
Definition: soviet.hpp:397
uint64_t byusername() const
Индекс по имени пользователя
Definition: soviet.hpp:401
uint64_t id
Уникальный идентификатор заявки
Definition: soviet.hpp:390
eosio::name username
Имя пользователя, подавшего заявку
Definition: soviet.hpp:391