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
29 inline std::optional<progwallet> get_program_capital_wallet(eosio::name coopname, eosio::name username) {
30
31 auto program_id = get_program_id(_capital_program);
32
33 auto program = get_program_or_fail(coopname, program_id);
34
35 auto capital_wallet = get_program_wallet(coopname, username, _capital_program);
36
37 if (!capital_wallet.has_value()) {
38 return std::nullopt;
39 }
40
41 return capital_wallet.value();
42
43 }
44
48 inline std::optional<capital_wallet> get_capital_wallet_by_username(eosio::name coopname, eosio::name username) {
49 capital_wallets_index capital_wallets(_capital, coopname.value);
50 auto idx = capital_wallets.get_index<"byusername"_n>();
51
52 auto itr = idx.find(username.value);
53 if (itr == idx.end()) {
54 return std::nullopt;
55 }
56
57 return capital_wallet(*itr);
58 }
59
63 inline capital_wallet get_capital_wallet_or_fail(eosio::name coopname, eosio::name username, const char* msg = "Кошелек благороста не найден") {
64 auto wallet_opt = get_capital_wallet_by_username(coopname, username);
65 eosio::check(wallet_opt.has_value(), msg);
66 return wallet_opt.value();
67 }
68
72 inline void upsert_capital_wallet(eosio::name coopname,
73 eosio::name username,
74 int64_t last_program_crps,
75 eosio::asset capital_available) {
76 capital_wallets_index capital_wallets(_capital, coopname.value);
77 auto idx = capital_wallets.get_index<"byusername"_n>();
78
79 auto itr = idx.find(username.value);
80 if (itr == idx.end()) {
81 // Создаем новый кошелек
82 capital_wallets.emplace(coopname, [&](auto &w) {
83 w.id = get_global_id_in_scope(_capital, coopname, "capwallets"_n);
84 w.coopname = coopname;
85 w.username = username;
86 w.last_program_crps = last_program_crps;
87 w.capital_available = capital_available;
88 });
89 } else {
90 // Обновляем существующий
91 idx.modify(itr, coopname, [&](auto &w) {
92 if (last_program_crps != 0) w.last_program_crps = last_program_crps;
93 if (capital_available.amount != 0) w.capital_available += capital_available;
94 });
95 }
96 }
97
98} //namespace Capital::Wallet
99} // namespace Capital
100
static constexpr eosio::name _capital
Definition: consts.hpp:150
static constexpr eosio::symbol _root_govern_symbol
Definition: consts.hpp:209
static constexpr eosio::name _capital_program
Кошелёк программы "Благорост".
Definition: consts.hpp:83
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:72
std::optional< progwallet > get_program_capital_wallet(eosio::name coopname, eosio::name username)
Definition: wallets.hpp:29
capital_wallet get_capital_wallet_or_fail(eosio::name coopname, eosio::name username, const char *msg="Кошелек благороста не найден")
Получает кошелек благороста или падает с ошибкой
Definition: wallets.hpp:63
std::optional< capital_wallet > get_capital_wallet_by_username(eosio::name coopname, eosio::name username)
Получает кошелек благороста по имени пользователя
Definition: wallets.hpp:48
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
program get_program_or_fail(eosio::name coopname, uint64_t program_id)
Definition: programs.hpp:16
uint64_t get_program_id(const eosio::name &type)
Definition: programs.hpp:93
std::optional< progwallet > get_program_wallet(eosio::name coopname, eosio::name username, eosio::name type)
Definition: programs.hpp:105
Кошелек программы благороста для учёта 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
Definition: table_soviet_programs.hpp:15
uint64_t get_global_id_in_scope(eosio::name _me, eosio::name scope, eosio::name key)
Definition: table_counts.hpp:58