COOPENOMICS  v1
Кооперативная Экономика
capital.hpp
См. документацию.
1#pragma once
2#include <cstdint>
3
37const double AUTHOR_BASE_COEFFICIENT = 0.618;
38const double AUTHOR_BONUS_COEFFICIENT = 1;
39const double CONTRIBUTORS_BONUS_COEFFICIENT = 0.618;
40const uint32_t MAX_PROJECT_AUTHORS = 12;
41const uint64_t MAX_RATE_PER_HOUR = 30000000;
42const uint64_t MAX_HOURS_PER_DAY = 12;
43constexpr uint128_t CRPS_PRECISION_FACTOR = 100000000000000ULL;
44
47#include <eosio/eosio.hpp>
48#include <eosio/asset.hpp>
49#include "../lib/index.hpp"
50#include "domain/index.hpp"
51#include "../expense/expense.hpp" // ExpenseDomain::item / callback_handler — для inline-action в шасси
52
53
54using namespace eosio;
55using std::string;
56
62class [[eosio::contract]] capital : public coop_contract {
63public:
65
71 void setconfig(name coopname, Capital::config config);
72
74 void migrate();
77 void cleanup();
78
79 // Создать проект
81 void createproj (
82 eosio::name coopname,
83 checksum256 project_hash,
84 checksum256 parent_hash,
85 std::string title,
86 std::string description,
87 std::string invite,
88 std::string meta,
89 std::string data
90 );
91
92 // Редактировать проект
94 void editproj (
95 eosio::name coopname,
96 checksum256 project_hash,
97 std::string title,
98 std::string description,
99 std::string invite,
100 std::string meta,
101 std::string data
102 );
103
104
105 // Открыть проект на приём инвестиций
106 [[eosio::action]]
107 void openproject(name coopname, checksum256 project_hash);
108
109 // Закрыть проект от приёма инвестиций
110 [[eosio::action]]
111 void closeproject(name coopname, checksum256 project_hash);
112
113 // Запустить проект на приём коммитов
114 [[eosio::action]]
115 void startproject(name coopname, checksum256 project_hash);
116
117 // Остановить проект
118 [[eosio::action]]
119 void stopproject(name coopname, checksum256 project_hash);
120
121 // Финализировать проект (после всех конвертаций)
122 [[eosio::action]]
123 void finalizeproj(name coopname, checksum256 project_hash);
124
125 // Возврат неиспользованных инвестиций в глобальный пул (трекинговое действие)
126 [[eosio::action]]
127 void returntopool(name coopname, checksum256 project_hash, asset amount);
128
129 // Завершить проект и начать голосование
130 [[eosio::action]]
131 void startvoting(name coopname, checksum256 project_hash);
132
133 // Завершить голосование
134 [[eosio::action]]
135 void cmpltvoting(name coopname, checksum256 project_hash);
136
137 // Подсчитать результаты голосования для участника
138 [[eosio::action]]
139 void calcvotes(name coopname, name username, checksum256 project_hash);
140
141 // Проголосовать по методу Водянова
142 [[eosio::action]]
143 void submitvote(name coopname, name voter, checksum256 project_hash, std::vector<Capital::vote_input> votes);
144
145 // Удалить проект
146 [[eosio::action]]
147 void delproject(name coopname, checksum256 project_hash);
148
149 // Конвертация сегмента
150 [[eosio::action]]
151 void convertsegm(eosio::name coopname, eosio::name username, checksum256 project_hash, checksum256 result_hash, asset wallet_amount, asset capital_amount, document2 convert_statement);
152
153 // Очистка сегмента чистого инвестора
154 [[eosio::action]]
155 void purgesegment(eosio::name coopname, eosio::name username, checksum256 project_hash);
156
157 // results
158 [[eosio::action]]
159 void pushrslt(name coopname, name username, checksum256 project_hash, checksum256 result_hash,
160 eosio::asset contribution_amount, eosio::asset debt_amount, document2 statement, std::vector<checksum256> debt_hashes);
161
162 [[eosio::action]]
163 void authrslt(eosio::name coopname, checksum256 result_hash, document2 decision);
164
165 [[eosio::action]]
166 void approverslt(eosio::name coopname, eosio::name username, checksum256 result_hash, document2 approved_statement);
167
168 [[eosio::action]]
169 void declrslt(eosio::name coopname, checksum256 result_hash, std::string reason);
170
171 [[eosio::action]]
172 void signact1(eosio::name coopname, eosio::name username, checksum256 result_hash, document2 act);
173
174 [[eosio::action]]
175 void signact2(eosio::name coopname, eosio::name chairman, checksum256 result_hash, document2 act);
176
177 // конвертация
178
179 [[eosio::action]]
180 void addauthor(name coopname, checksum256 project_hash, name author);
181
182 // Коммиты
183 [[eosio::action]]
184 void createcmmt(eosio::name coopname, eosio::name username, checksum256 project_hash, checksum256 commit_hash, uint64_t creator_hours, std::string description, std::string meta);
185 [[eosio::action]]
186 void approvecmmt(eosio::name coopname, eosio::name master, checksum256 commit_hash);
187 [[eosio::action]]
188 void declinecmmt(eosio::name coopname, eosio::name master, checksum256 commit_hash, std::string reason);
189
190 // Регистрация
191 [[eosio::action]]
192 void regcontrib(eosio::name coopname, eosio::name username, checksum256 contributor_hash, eosio::asset rate_per_hour, uint64_t hours_per_day, bool is_external_contract, document2 storage_agreement, std::optional<document2> contract, std::optional<document2> blagorost_agreement, std::optional<document2> generator_agreement);
193 [[eosio::action]]
194 void approvereg(eosio::name coopname, eosio::name username, checksum256 contributor_hash, document2 contract);
195 [[eosio::action]]
196 void declinereg(eosio::name coopname, eosio::name username, checksum256 contributor_hash, std::string reason);
197
198 // Редактирование участников
199 [[eosio::action]]
200 void editcontrib(eosio::name coopname, eosio::name username, eosio::asset rate_per_hour, uint64_t hours_per_day);
201
202 // Обновление энергии участника (геймификация)
203 [[eosio::action]]
204 void refreshcontr(eosio::name coopname, eosio::name username);
205
206 // Уведомление о переходе на новый уровень (геймификация)
207 [[eosio::action]]
208 void lvlnotify(eosio::name coopname, eosio::name username, uint32_t prev_level, uint32_t new_level);
209
210 // Импорт участников
211 [[eosio::action]]
212 void importcontrib(eosio::name coopname, eosio::name username, checksum256 contributor_hash, eosio::asset contribution_amount, std::string memo);
213
214 // Приложения к договору УХД
215 [[eosio::action]]
216 void getclearance(eosio::name coopname, eosio::name username, checksum256 project_hash, checksum256 appendix_hash, document2 document);
217 [[eosio::action]]
218 void apprvappndx(eosio::name coopname, eosio::name username, checksum256 appendix_hash, document2 approved_document);
219 [[eosio::action]]
220 void dclineappndx(eosio::name coopname, eosio::name username, checksum256 appendix_hash, std::string reason);
221
222
223 // Планирование
224 [[eosio::action]] void setmaster(name coopname, checksum256 project_hash, name master);
225 [[eosio::action]] void setplan(name coopname, name master, checksum256 project_hash, uint64_t plan_creators_hours, asset plan_expenses, asset plan_hour_cost);
226 [[eosio::action]] void expandexpnss(name coopname, checksum256 project_hash, asset additional_expenses);
227
228 // CRPS
229 [[eosio::action]] void rfrshsegment(name coopname, checksum256 project_hash, name username);
230
231 // Кошельки проектов
232 [[eosio::action]] void regshare(name coopname, checksum256 project_hash, name username, eosio::asset user_shares);
233
234
235 // Инвестиции
236 [[eosio::action]]
237 void createinvest(name coopname, name username, checksum256 project_hash, checksum256 invest_hash, asset amount, document2 statement);
238
239 // Программные инвестиции
240 [[eosio::action]]
241 void createpinv(name coopname, name username, checksum256 invest_hash, asset amount, document2 statement);
242
243 // Аллокация программных инвестиций
244 [[eosio::action]]
245 void allocate(eosio::name coopname, checksum256 project_hash, eosio::asset amount);
246
247 [[eosio::action]]
248 void diallocate(eosio::name coopname, checksum256 project_hash, eosio::asset amount);
249
250
251 // Расходы
252 [[eosio::action]]
253 void createexpnse(eosio::name coopname, checksum256 expense_hash, checksum256 project_hash, name creator, asset amount, std::string description, document2 statement);
254
255 [[eosio::action]]
256 void approveexpns(name coopname, name approver, checksum256 expense_hash, document2 approved_statement);
257
258 [[eosio::action]]
259 void capauthexpns(eosio::name coopname, checksum256 expense_hash, document2 authorization);
260
261 [[eosio::action]]
262 void capdeclexpns(eosio::name coopname, checksum256 expense_hash);
263
264 [[eosio::action]]
265 void exppaycnfrm(eosio::name coopname, checksum256 expense_hash);
266
267 // Членские взносы
268 [[eosio::action]] void fundprog(eosio::name coopname, asset amount, std::string memo);
269 [[eosio::action]] void refreshprog(name coopname, name username);
270
271 // Возврат из программы
272 [[eosio::action]]
273 void createwthd3(name coopname, name username, checksum256 withdraw_hash, asset amount, document2 return_statement);
274
275 [[eosio::action]]
276 void capauthwthd3(eosio::name coopname, checksum256 withdraw_hash, document2 authorization);
277
278 [[eosio::action]]
279 void approvewthd3(name coopname, name approver, checksum256 withdraw_hash, document2 approved_return_statement);
280
281 [[eosio::action]]
282 void capdeclwthd3(name coopname, checksum256 withdraw_hash, std::string reason);
283
284
285 // Проектные имущественные взносы
286 [[eosio::action]]
287 void createpjprp(eosio::name coopname, eosio::name username, checksum256 project_hash, checksum256 property_hash, eosio::asset property_amount, std::string property_description);
288 [[eosio::action]]
289 void approvepjprp(eosio::name coopname, eosio::name username, checksum256 property_hash, document2 empty_document);
290 [[eosio::action]]
291 void declinepjprp(eosio::name coopname, eosio::name username, checksum256 property_hash, std::string reason);
292
293 // Программные имущественные взносы
294 [[eosio::action]]
295 void createpgprp(eosio::name coopname, eosio::name username, checksum256 property_hash, eosio::asset property_amount, std::string property_description, document2 statement);
296 [[eosio::action]]
297 void approvepgprp(eosio::name coopname, eosio::name username, checksum256 property_hash, document2 approved_statement);
298 [[eosio::action]]
299 void declinepgprp(eosio::name coopname, eosio::name username, checksum256 property_hash, std::string reason);
300 [[eosio::action]]
301 void authpgprp(eosio::name coopname, checksum256 property_hash, document2 decision);
302 [[eosio::action]]
303 void act1pgprp(eosio::name coopname, eosio::name username, checksum256 property_hash, document2 act);
304 [[eosio::action]]
305 void act2pgprp(eosio::name coopname, eosio::name username, checksum256 property_hash, document2 act);
306
307 // Долги
308 [[eosio::action]]
309 void createdebt(name coopname, name username, checksum256 project_hash, checksum256 debt_hash, asset amount, time_point_sec repaid_at, document2 statement);
310
311 [[eosio::action]]
312 void approvedebt(eosio::name coopname, eosio::name username, checksum256 debt_hash, document2 approved_statement);
313
314 [[eosio::action]]
315 void debtauthcnfr(eosio::name coopname, checksum256 debt_hash, document2 decision);
316
317 [[eosio::action]]
318 void debtpaycnfrm(name coopname, checksum256 debt_hash);
319
320 [[eosio::action]]
321 void debtpaydcln(name coopname, checksum256 debt_hash, std::string reason);
322
323 [[eosio::action]]
324 void declinedebt(name coopname, eosio::name username, checksum256 debt_hash, std::string reason);
325
326 [[eosio::action]]
327 void settledebt(name coopname, name username, eosio::asset amount, document2 statement);
328
329 // Программные расходы через шасси expense.
330 // capital — инициатор + получатель callback, шасси держит весь flow расхода.
331
332 [[eosio::action]]
333 void topupprogexp(name coopname, eosio::asset amount);
334
344 [[eosio::action]]
345 void createpgexp(name coopname, checksum256 expense_hash, name creator,
346 std::vector<ExpenseDomain::item> items,
347 std::string description, document2 statement);
348
359 [[eosio::action]]
360 void onpgexpdone(name coopname, checksum256 expense_hash, uint8_t status,
361 eosio::asset total_actual, std::vector<char> data);
362
363};
Контракт Capital управляет вкладами, распределением вознаграждений и выводом средств для участников....
Definition: capital.hpp:62
Базовый класс контрактов платформы.
Definition: coop_contract.hpp:33
coop_contract(eosio::name receiver, eosio::name code, eosio::datastream< const char * > ds)
Definition: coop_contract.hpp:35
contract
Definition: eosio.msig_tests.cpp:977
action act
Definition: eosio.msig_tests.cpp:974
share_type amount
Definition: eosio.token_tests.cpp:174
const uint64_t MAX_HOURS_PER_DAY
Максимальное количество часов в день
Definition: capital.hpp:42
const uint32_t MAX_PROJECT_AUTHORS
Максимальное количество авторов в проекте
Definition: capital.hpp:40
const double CREATORS_BONUS_COEFFICIENT
Коэффициент премий создателей от своей себестоимости (100%)
Definition: capital.hpp:36
const double CONTRIBUTORS_BONUS_COEFFICIENT
Коэффициент премий участников от себестоимостей создателей, авторов и координаторов (161....
Definition: capital.hpp:39
const double AUTHOR_BONUS_COEFFICIENT
Коэффициент премий авторов от своей себестоимости (100%)
Definition: capital.hpp:38
constexpr uint128_t CRPS_PRECISION_FACTOR
Масштаб для CRPS (10^14)
Definition: capital.hpp:43
const uint64_t MAX_RATE_PER_HOUR
Максимальная ставка за час
Definition: capital.hpp:41
const double AUTHOR_BASE_COEFFICIENT
Коэффициент авторской себестоимости от себестоимости создателя (61.8%)
Definition: capital.hpp:37
fc::mutable_variant_object voter(account_name acct)
Definition: eosio.system_tester.hpp:1183
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: global_state.hpp:20
Definition: table_soviet_decisions.hpp:22
Definition: document_core.hpp:27
Definition: document_core.hpp:10