COOPENOMICS  v1
Кооперативная Экономика
exit_helpers.hpp
См. документацию.
1#pragma once
2
3#include <eosio/asset.hpp>
4#include <eosio/eosio.hpp>
5
6#include "../../../lib/index.hpp"
7
16namespace Registrator {
17
18using namespace eosio;
19
33inline void consolidate_share_to_main(name coopname, name username, name wallet_name, asset amount, checksum256 exit_hash) {
34 if (wallet_name == ledger2_wallets::SHARE_FUND_PAY) return; // уже на главном паевом
35
36 eosio::name op;
37 if (wallet_name == ledger2_wallets::MIN_SHARE_FUND) {
38 op = operations::registrator::MOVE_MINSHARE; // w.reg.minshr → w.wal.share
39 } else if (wallet_name == ledger2_wallets::BLAGOROST_FUND) {
40 op = operations::capital::WITHDRAW_FROM_CAPITAL; // w.cap.blago → w.wal.share
41 } else if (wallet_name == ledger2_wallets::MARKETPLACE_SHARE_FUND) {
42 op = operations::marketplace::RECALL_SHARE; // w.mkt.share → w.wal.share
43 } else {
44 eosio::check(false,
45 std::string{"Нет операции консолидации паевого кошелька "} + wallet_name.to_string() +
46 " на главный при выходе — добавьте маппинг в consolidate_share_to_main");
47 }
48
49 // Нитку называет её инициатор — выход из кооператива, поэтому имя одно на
50 // все консолидируемые кошельки. Иначе у одного exit_hash оказалось бы два
51 // имени (p.wal.wthdrw и p.cap.wthcap), и какое победит, зависело бы от того,
52 // на каком кошельке у пайщика ненулевой остаток. Операция возврата из
53 // «Благороста» при этом остаётся собственной операцией — в чужой нитке она
54 // идёт по тому же правилу, что членский взнос КУ внутри поставки.
55 std::string memo = "Консолидация паевого взноса при выходе, кошелёк=" +
56 wallet_name.to_string() + ", username=" + username.to_string();
58 amount, username, exit_hash, memo);
59}
60
61// Проверки программ перед выходом и закрытие их членских кошельков при
62// состоявшемся выходе — в shared-слое (lib/core/registrator/exit.hpp): код
63// контракта чужих таблиц не читает (задача 99D-16).
64
73inline void finalize_member_exit(name coopname, name username) {
74 // удаляем пайщика из реестра совета (уменьшит счётчик активных пайщиков)
75 action(
76 permission_level{_registrator, "active"_n},
77 _soviet,
78 "delpartcpnt"_n,
79 std::make_tuple(coopname, username)
80 ).send();
81
82 // блокируем аккаунт в картотеке registrator
84 auto account = accounts.find(username.value);
85 eosio::check(account != accounts.end(), "Аккаунт не найден");
86 accounts.modify(account, RamPayer::of(accounts, coopname), [&](auto &a) {
87 a.status = "blocked"_n;
88 });
89}
90
91} // namespace Registrator
static void apply(eosio::name actor, eosio::name coopname, eosio::name operation_code, eosio::name process_type, eosio::asset amount, eosio::name username, eosio::checksum256 process_hash, std::string memo)
Отправить inline action ledger2::apply.
Definition: ledger2.hpp:42
static constexpr eosio::name _registrator
Definition: consts.hpp:178
static constexpr eosio::name _soviet
Definition: consts.hpp:177
permission_level
Definition: eosio.msig_tests.cpp:896
share_type amount
Definition: eosio.token_tests.cpp:174
void send(name contract, name action_name, name actor, Args &&... args)
Definition: actions.hpp:10
eosio::name of(const Table &table, eosio::name coopname)
Definition: ram_payer.hpp:78
Вспомогательные функции процедуры выхода пайщика из кооператива.
Definition: table_registrator_candidates.hpp:15
void finalize_member_exit(name coopname, name username)
Финализация выхода: удаление пайщика из реестра совета и блокировка аккаунта в registrator.
Definition: exit_helpers.hpp:73
void consolidate_share_to_main(name coopname, name username, name wallet_name, asset amount, checksum256 exit_hash)
Консолидация доступного паевого кошелька пайщика на главный (w.wal.share) перед резервом возврата при...
Definition: exit_helpers.hpp:33
Definition: eosio.msig.hpp:34
constexpr eosio::name WITHDRAW_FROM_CAPITAL
Возврат паевого из ЦПП «Благорост» в кошелёк пайщика (TRANSFER BLAGOROST_FUND → SHARE_FUND_PAY,...
Definition: operations.hpp:87
constexpr eosio::name RECALL_SHARE
Консолидация свободного паевого «Стола заказов» в общий паевой Цифрового кошелька при выходе пайщика ...
Definition: operations.hpp:113
constexpr eosio::name MOVE_MINSHARE
Перенос минимального паевого на главный паевой при выходе из кооператива (TRANSFER MIN_SHARE_FUND → S...
Definition: operations.hpp:64
constexpr eosio::name WITHDRAW
Возврат паевого взноса пайщику.
Definition: processes.hpp:58
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
static constexpr eosio::name MIN_SHARE_FUND
Минимальный паевой взнос пайщика (USER_SHARED, без сверки соглашений)
Definition: wallets.hpp:54
static constexpr eosio::name MARKETPLACE_SHARE_FUND
ЦПП «Стол Заказов» — свободный паевой пайщика в программе (USER_SHARED, счёт 80). Сюда возвращается о...
Definition: wallets.hpp:74
static constexpr eosio::name BLAGOROST_FUND
Благорост — единый агрегированный кошелёк программы (USER_SHARED; ADR-009)
Definition: wallets.hpp:67
static constexpr eosio::name SHARE_FUND_PAY
Паевой взнос пайщика (USER_SHARED)
Definition: wallets.hpp:48
eosio::multi_index< "accounts"_n, account, eosio::indexed_by<"byreferer"_n, eosio::const_mem_fun< account, uint64_t, &account::by_referer > >, eosio::indexed_by<"bytype"_n, eosio::const_mem_fun< account, uint64_t, &account::by_type > >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun< account, uint64_t, &account::by_status > >, eosio::indexed_by<"byregistr"_n, eosio::const_mem_fun< account, uint64_t, &account::by_registr > >, eosio::indexed_by<"byregistred"_n, eosio::const_mem_fun< account, uint64_t, &account::by_registered_at > >, eosio::indexed_by<"byverif"_n, eosio::const_mem_fun< account, uint64_t, &account::is_verified_index > > > accounts_index
Definition: table_registrator_accounts.hpp:70