COOPENOMICS  v1
Кооперативная Экономика
shared_wallet.hpp
См. документацию.
1#define COMPLETEWTHD_SIGNATURE name coopname, checksum256 withdraw_hash
2#define DECLINEWTHD_SIGNATURE name coopname, checksum256 withdraw_hash, std::string reason
3
6
7static const std::set<eosio::name> wallet_callback_actions = {
8 "authwthd"_n, // авторизация возврата паевого взноса
9 "declinewthd"_n, // отклонение возврата паевого взноса
10 "completewthd"_n, // завершение возврата паевого взноса
11};
12
13
14
15class Wallet {
16public:
21 struct [[eosio::table, eosio::contract(WALLET)]] deposit {
22 uint64_t id;
23 eosio::name coopname;
24 eosio::name username;
25 checksum256 deposit_hash;
26
27 eosio::asset quantity;
28 eosio::name status;
30 eosio::time_point_sec created_at = current_time_point();
31
32 uint64_t primary_key() const { return id; }
33 uint64_t by_username() const { return username.value; }
34 checksum256 by_hash() const { return deposit_hash; }
35 uint64_t by_status() const { return status.value; }
36 uint64_t by_created() const { return created_at.sec_since_epoch(); }
37 };
38
39 typedef eosio::multi_index<
40 "deposits"_n, deposit,
41 eosio::indexed_by<"byhash"_n, eosio::const_mem_fun<deposit, checksum256, &deposit::by_hash>>,
42 eosio::indexed_by<"byusername"_n, eosio::const_mem_fun<deposit, uint64_t, &deposit::by_username>>,
43 eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun<deposit, uint64_t, &deposit::by_status>>,
44 eosio::indexed_by<"bycreated"_n, eosio::const_mem_fun<deposit, uint64_t, &deposit::by_created>>
46
47
52 struct [[eosio::table, eosio::contract(WALLET)]] withdraw {
53 uint64_t id;
54 eosio::name username;
55 eosio::name coopname;
56 checksum256 withdraw_hash;
57 eosio::name status;
59 eosio::asset quantity;
64 eosio::time_point_sec created_at = current_time_point();
65
66 uint64_t primary_key() const { return id; }
67 checksum256 by_hash() const { return withdraw_hash; }
68 uint64_t by_username() const { return username.value; }
69 uint64_t by_status() const { return status.value; }
70 uint64_t by_created() const { return created_at.sec_since_epoch(); }
71
72 };
73
74 typedef eosio::multi_index<
75 "withdraws"_n, withdraw,
76 eosio::indexed_by<"byusername"_n, eosio::const_mem_fun<withdraw, uint64_t, &withdraw::by_username>>,
77 eosio::indexed_by<"byhash"_n, const_mem_fun<withdraw, checksum256, &withdraw::by_hash>>,
78 eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun<withdraw, uint64_t, &withdraw::by_status>>,
79 eosio::indexed_by<"bycreated"_n, eosio::const_mem_fun<withdraw, uint64_t, &withdraw::by_created>>
83 static eosio::name get_valid_wallet_action(const eosio::name& action) {
84 eosio::check(wallet_callback_actions.contains(action), "Недопустимое имя действия wallet");
85 return action;
86 }
87
88 static void validate_asset(const eosio::asset& amount) {
89 check(amount.symbol == _root_govern_symbol, "Неверный символ токена");
90 check(amount.is_valid(), "Неверный актив");
91 check(amount.amount >= 0, "Сумма должна быть неотрицательной");
92 }
93
97 static void add_available_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo) {
98 auto program = get_program_or_fail(coopname, get_program_id(program_type));
99
100 action(
101 permission_level{ contract, "active"_n },
102 _soviet,
103 "addbal"_n,
104 std::make_tuple(coopname, username, program.id, amount, memo)
105 ).send();
106
107 }
108
112 static void sub_available_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo) {
113 auto program = get_program_or_fail(coopname, get_program_id(program_type));
114
115 action(
116 permission_level{ contract, "active"_n },
117 _soviet,
118 "subbal"_n,
119 std::make_tuple(coopname, username, program.id, amount, false, memo)
120 ).send();
121 }
122
126 static void add_blocked_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo) {
127 auto program = get_program_or_fail(coopname, get_program_id(program_type));
128
129 action(
130 permission_level{ contract, "active"_n },
131 _soviet,
132 "addbal"_n,
133 std::make_tuple(coopname, username, program.id, amount, memo)
134 ).send();
135
136 action(
137 permission_level{ contract, "active"_n },
138 _soviet,
139 "blockbal"_n,
140 std::make_tuple(coopname, username, program.id, amount, memo)
141 ).send();
142 }
143
147 static void sub_blocked_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo) {
148 auto program = get_program_or_fail(coopname, get_program_id(program_type));
149
150 action(
151 permission_level{ contract, "active"_n },
152 _soviet,
153 "unblockbal"_n,
154 std::make_tuple(coopname, username, program.id, amount, memo)
155 ).send();
156
157 action(
158 permission_level{ contract, "active"_n },
159 _soviet,
160 "subbal"_n,
161 std::make_tuple(coopname, username, program.id, amount, false, memo)
162 ).send();
163 }
164
168 static void block_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo){
169 auto program = get_program_or_fail(coopname, get_program_id(program_type));
170
171 action(
172 permission_level{ contract, "active"_n },
173 _soviet,
174 "blockbal"_n,
175 std::make_tuple(coopname, username, program.id, amount, memo)
176 ).send();
177 }
178
182 static void unblock_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo){
183 auto program = get_program_or_fail(coopname, get_program_id(program_type));
184
185 action(
186 permission_level{ contract, "active"_n },
187 _soviet,
188 "unblockbal"_n,
189 std::make_tuple(coopname, username, program.id, amount, memo)
190 ).send();
191 }
192
196 static void pay_membership_fee(name contract, name coopname, name username, eosio::asset amount, uint64_t program_id, std::string memo) {
197 auto program = get_program_or_fail(coopname, program_id);
198
199 action(
200 permission_level{ contract, "active"_n },
201 _soviet,
202 "addmemberfee"_n,
203 std::make_tuple(coopname, username, program.id, amount, memo)
204 ).send();
205
206 }
207
211 static void unpay_membership_fee(name contract, name coopname, name username, eosio::asset amount, uint64_t program_id, std::string memo) {
212 auto program = get_program_or_fail(coopname, program_id);
213
214 action(
215 permission_level{ contract, "active"_n },
216 _soviet,
217 "submemberfee"_n,
218 std::make_tuple(coopname, username, program.id, amount, memo)
219 ).send();
220
221 }
222
223
224 static std::optional<deposit> get_deposit(eosio::name coopname, const checksum256 &hash) {
225 deposits_index primary_index(_wallet, coopname.value);
226 auto secondary_index = primary_index.get_index<"byhash"_n>();
227
228 auto itr = secondary_index.find(hash);
229 if (itr == secondary_index.end()) {
230 return std::nullopt;
231 }
232
233 return *itr;
234 };
235
236
243 static std::optional<withdraw> get_withdraw(eosio::name coopname, const checksum256 &hash) {
244 withdraws_index primary_index(_wallet, coopname.value);
245 auto secondary_index = primary_index.get_index<"byhash"_n>();
246
247 auto itr = secondary_index.find(hash);
248 if (itr == secondary_index.end()) {
249 return std::nullopt;
250 }
251
252 return *itr;
253 };
254
255};
Definition: shared_wallet.hpp:15
eosio::multi_index< "deposits"_n, deposit, eosio::indexed_by<"byhash"_n, eosio::const_mem_fun< deposit, checksum256, &deposit::by_hash > >, eosio::indexed_by<"byusername"_n, eosio::const_mem_fun< deposit, uint64_t, &deposit::by_username > >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun< deposit, uint64_t, &deposit::by_status > >, eosio::indexed_by<"bycreated"_n, eosio::const_mem_fun< deposit, uint64_t, &deposit::by_created > > > deposits_index
Definition: shared_wallet.hpp:45
static void validate_asset(const eosio::asset &amount)
Definition: shared_wallet.hpp:88
static eosio::name get_valid_wallet_action(const eosio::name &action)
Definition: shared_wallet.hpp:83
eosio::multi_index< "withdraws"_n, withdraw, eosio::indexed_by<"byusername"_n, eosio::const_mem_fun< withdraw, uint64_t, &withdraw::by_username > >, eosio::indexed_by<"byhash"_n, const_mem_fun< withdraw, checksum256, &withdraw::by_hash > >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun< withdraw, uint64_t, &withdraw::by_status > >, eosio::indexed_by<"bycreated"_n, eosio::const_mem_fun< withdraw, uint64_t, &withdraw::by_created > > > withdraws_index
Definition: shared_wallet.hpp:80
static void add_blocked_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo)
Добавляет заблокированные средства в баланс кошелька пользователя
Definition: shared_wallet.hpp:126
static void unpay_membership_fee(name contract, name coopname, name username, eosio::asset amount, uint64_t program_id, std::string memo)
Отменяет оплату членского взноса с кошелька пользователя
Definition: shared_wallet.hpp:211
static std::optional< withdraw > get_withdraw(eosio::name coopname, const checksum256 &hash)
Получает возврат из кошелька по хэшу.
Definition: shared_wallet.hpp:243
static void unblock_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo)
Разблокирует средства на кошельке пользователя
Definition: shared_wallet.hpp:182
static void sub_available_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo)
Уменьшает доступные средства на кошельке пользователя
Definition: shared_wallet.hpp:112
static void add_available_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo)
Добавляет доступные средства на кошелёк пользователя
Definition: shared_wallet.hpp:97
static std::optional< deposit > get_deposit(eosio::name coopname, const checksum256 &hash)
Definition: shared_wallet.hpp:224
static void block_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo)
Блокирует средства на кошельке пользователя
Definition: shared_wallet.hpp:168
static void pay_membership_fee(name contract, name coopname, name username, eosio::asset amount, uint64_t program_id, std::string memo)
Оплачивает членский взнос с кошелька пользователя
Definition: shared_wallet.hpp:196
static void sub_blocked_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo)
Уменьшает заблокированные средства кошелька пользователя
Definition: shared_wallet.hpp:147
static constexpr eosio::symbol _root_govern_symbol
Definition: consts.hpp:210
static constexpr eosio::name _wallet
Definition: consts.hpp:153
static constexpr eosio::name _soviet
Definition: consts.hpp:156
contract
Definition: eosio.msig_tests.cpp:977
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: shared_actions.hpp:10
Definition: eosio.msig.hpp:34
program get_program_or_fail(eosio::name coopname, uint64_t program_id)
Definition: programs.hpp:57
uint64_t get_program_id(const eosio::name &type)
Definition: programs.hpp:142
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()
#define COMPLETEWTHD_SIGNATURE
Definition: shared_wallet.hpp:1
void(COMPLETEWTHD_SIGNATURE) completewthd_interface
Definition: shared_wallet.hpp:4
static const std::set< eosio::name > wallet_callback_actions
Definition: shared_wallet.hpp:7
#define DECLINEWTHD_SIGNATURE
Definition: shared_wallet.hpp:2
void(DECLINEWTHD_SIGNATURE) declinewthd_interface
Definition: shared_wallet.hpp:5
Таблица deposits отслеживает депозиты в контракте WALLET.
Definition: shared_wallet.hpp:21
eosio::name username
Definition: shared_wallet.hpp:24
uint64_t id
Definition: shared_wallet.hpp:22
eosio::name coopname
Definition: shared_wallet.hpp:23
uint64_t by_created() const
Definition: shared_wallet.hpp:36
uint64_t primary_key() const
Definition: shared_wallet.hpp:32
uint64_t by_status() const
Definition: shared_wallet.hpp:35
checksum256 deposit_hash
Хэш входящего платежа
Definition: shared_wallet.hpp:25
eosio::name status
Definition: shared_wallet.hpp:28
eosio::asset quantity
Definition: shared_wallet.hpp:27
checksum256 by_hash() const
Definition: shared_wallet.hpp:34
uint64_t by_username() const
Definition: shared_wallet.hpp:33
Таблица withdraws отслеживает операции вывода средств в контракте WALLET.
Definition: shared_wallet.hpp:52
document2 statement
Definition: shared_wallet.hpp:60
checksum256 withdraw_hash
Definition: shared_wallet.hpp:56
uint64_t by_created() const
Definition: shared_wallet.hpp:70
eosio::name username
Definition: shared_wallet.hpp:54
checksum256 by_hash() const
Индекс по хэшу задачи.
Definition: shared_wallet.hpp:67
document2 authorization
Definition: shared_wallet.hpp:62
uint64_t by_status() const
Definition: shared_wallet.hpp:69
eosio::name coopname
Definition: shared_wallet.hpp:55
eosio::name status
Definition: shared_wallet.hpp:57
document2 approved_statement
Definition: shared_wallet.hpp:61
uint64_t primary_key() const
Definition: shared_wallet.hpp:66
eosio::asset quantity
Definition: shared_wallet.hpp:59
uint64_t by_username() const
Definition: shared_wallet.hpp:68
uint64_t id
Definition: shared_wallet.hpp:53
Definition: drafts.hpp:28
Таблица программ кооператива
Definition: programs.hpp:14
uint64_t id
Уникальный идентификатор программы
Definition: programs.hpp:15