COOPENOMICS  v1
Кооперативная Экономика
wallets.hpp
См. документацию.
1namespace Capital {
2
11 struct [[eosio::table, eosio::contract(CAPITAL)]] capital_wallet {
12 uint64_t id;
13 eosio::name coopname;
14 eosio::name username;
15 double last_program_crps = 0.0;
16 eosio::asset capital_available = asset(0, _root_govern_symbol);
17
18 uint64_t primary_key() const { return id; }
19 uint64_t by_username() const { return username.value; }
20 };
21
22 typedef eosio::multi_index<
23 "capwallets"_n, capital_wallet,
24 indexed_by<"byusername"_n, const_mem_fun<capital_wallet, uint64_t, &capital_wallet::by_username>>
26
27namespace Wallets {
28
34 inline bool has_program_capital_wallet(eosio::name coopname, eosio::name username) {
35 auto program_id = get_program_id(_capital_program);
36 // Программа должна существовать в реестре кооператива.
37 get_program_or_fail(coopname, program_id);
38 return has_program_wallet(coopname, username, _capital_program);
39 }
40
44 inline std::optional<capital_wallet> get_capital_wallet_by_username(eosio::name coopname, eosio::name username) {
45 capital_wallets_index capital_wallets(_capital, coopname.value);
46 auto idx = capital_wallets.get_index<"byusername"_n>();
47
48 auto itr = idx.find(username.value);
49 if (itr == idx.end()) {
50 return std::nullopt;
51 }
52
53 return capital_wallet(*itr);
54 }
55
59 inline capital_wallet get_capital_wallet_or_fail(eosio::name coopname, eosio::name username, const char* msg = "Кошелек благороста не найден") {
60 auto wallet_opt = get_capital_wallet_by_username(coopname, username);
61 eosio::check(wallet_opt.has_value(), msg);
62 return wallet_opt.value();
63 }
64
68 inline void upsert_capital_wallet(eosio::name coopname,
69 eosio::name username,
70 int64_t last_program_crps,
71 eosio::asset capital_available) {
72 capital_wallets_index capital_wallets(_capital, coopname.value);
73 auto idx = capital_wallets.get_index<"byusername"_n>();
74
75 auto itr = idx.find(username.value);
76 if (itr == idx.end()) {
77 // Создаем новый кошелек
78 capital_wallets.emplace(coopname, [&](auto &w) {
79 w.id = get_global_id_in_scope(_capital, coopname, "capwallets"_n);
80 w.coopname = coopname;
81 w.username = username;
82 w.last_program_crps = last_program_crps;
83 w.capital_available = capital_available;
84 });
85 } else {
86 // Обновляем существующий
87 idx.modify(itr, coopname, [&](auto &w) {
88 if (last_program_crps != 0) w.last_program_crps = last_program_crps;
89 if (capital_available.amount != 0) w.capital_available += capital_available;
90 });
91 }
92 }
93
94} //namespace Capital::Wallet
95} // namespace Capital
96
static constexpr eosio::name _capital
Definition: consts.hpp:166
static constexpr eosio::symbol _root_govern_symbol
Definition: consts.hpp:231
static constexpr eosio::name _capital_program
Кошелёк программы "Благорост".
Definition: consts.hpp:87
contract
Definition: eosio.msig_tests.cpp:977
void upsert_capital_wallet(eosio::name coopname, eosio::name username, int64_t last_program_crps, eosio::asset capital_available)
Создает или обновляет кошелек благороста
Definition: wallets.hpp:68
bool has_program_capital_wallet(eosio::name coopname, eosio::name username)
Definition: wallets.hpp:34
capital_wallet get_capital_wallet_or_fail(eosio::name coopname, eosio::name username, const char *msg="Кошелек благороста не найден")
Получает кошелек благороста или падает с ошибкой
Definition: wallets.hpp:59
std::optional< capital_wallet > get_capital_wallet_by_username(eosio::name coopname, eosio::name username)
Получает кошелек благороста по имени пользователя
Definition: wallets.hpp:44
Definition: balances.cpp:6
eosio::multi_index< "capwallets"_n, capital_wallet, indexed_by<"byusername"_n, const_mem_fun< capital_wallet, uint64_t, &capital_wallet::by_username > > > capital_wallets_index
Definition: wallets.hpp:25
Definition: eosio.msig.hpp:34
bool has_program_wallet(eosio::name coopname, eosio::name username, eosio::name type)
Definition: programs.hpp:119
program get_program_or_fail(eosio::name coopname, uint64_t program_id)
Definition: programs.hpp:24
uint64_t get_program_id(const eosio::name &type)
Definition: programs.hpp:99
Кошелек программы благороста для учёта CRPS и доступных средств от членских взносов
Definition: wallets.hpp:11
uint64_t primary_key() const
Первичный ключ (1)
Definition: wallets.hpp:18
uint64_t id
ID кошелька (внутренний ключ)
Definition: wallets.hpp:12
eosio::name username
Имя пользователя
Definition: wallets.hpp:14
eosio::name coopname
Имя кооператива
Definition: wallets.hpp:13
uint64_t by_username() const
Индекс по имени пользователя (2)
Definition: wallets.hpp:19
uint64_t get_global_id_in_scope(eosio::name _me, eosio::name scope, eosio::name key)
Definition: table_counts.hpp:58