45 checksum256
by_hash()
const {
return invest_hash; }
49typedef eosio::multi_index<
51 indexed_by<
"byhash"_n, const_mem_fun<invest, checksum256, &invest::by_hash>>,
52 indexed_by<
"byusername"_n, const_mem_fun<invest, uint64_t, &invest::by_username>>,
53 indexed_by<
"byproject"_n, const_mem_fun<invest, checksum256, &invest::by_project>>,
54 indexed_by<
"byprojuser"_n, const_mem_fun<invest, uint128_t, &invest::by_project_user>>
61inline std::optional<invest>
get_invest(eosio::name coopname,
const checksum256 &invest_hash) {
63 auto invest_hash_index = invests.get_index<
"byhash"_n>();
65 auto invest_itr = invest_hash_index.find(invest_hash);
66 if (invest_itr == invest_hash_index.end()) {
80 auto investment =
get_invest(coopname, invest_hash);
81 eosio::check(investment.has_value(),
"Инвестиция не найдена");
94 eosio::name investor_username,
95 const eosio::asset &investment_amount
100 if (investor_account.referer == eosio::name{}) {
105 auto current_time = eosio::current_time_point();
106 auto registration_time = investor_account.registered_at;
108 auto time_since_registration = current_time.sec_since_epoch() - registration_time.sec_since_epoch();
111 if (time_since_registration >= coop_config_seconds) {
116 return std::make_pair(investor_account.referer, investment_amount);
129 eosio::name coopname,
130 eosio::name username,
131 checksum256 project_hash,
132 checksum256 invest_hash,
140 invests.emplace(coopname, [&](
auto &i){
142 i.coopname = coopname;
143 i.username = username;
144 i.project_hash = project_hash;
145 i.invest_hash = invest_hash;
147 i.invested_at = current_time_point();
148 i.statement = statement;
175 eosio::name coopname,
176 checksum256 invest_hash,
177 eosio::name coordinator_username,
178 eosio::asset coordinator_amount
181 auto invest_hash_index = invests.get_index<
"byhash"_n>();
182 auto invest_iterator = invest_hash_index.find(invest_hash);
184 eosio::check(invest_iterator != invest_hash_index.end(),
"Инвестиция не найдена");
187 invest_hash_index.modify(invest_iterator, coopname, [&](
auto &i){
188 i.coordinator = coordinator_username;
189 i.coordinator_amount = coordinator_amount;
198inline void delete_invest(eosio::name coopname,
const checksum256 &invest_hash) {
200 auto invest_hash_index = invests.get_index<
"byhash"_n>();
202 auto itr = invest_hash_index.find(invest_hash);
203 eosio::check(itr != invest_hash_index.end(),
"Инвестиция не найдена");
account get_account_or_fail(eosio::name username)
Definition: accounts.hpp:405
static constexpr eosio::name _capital
Definition: consts.hpp:150
static constexpr eosio::symbol _root_govern_symbol
Definition: consts.hpp:210
contract
Definition: eosio.msig_tests.cpp:977
share_type amount
Definition: eosio.token_tests.cpp:174
uint64_t get_global_id_in_scope(eosio::name _me, eosio::name scope, eosio::name key)
Definition: counts.hpp:61
const eosio::name CREATED
Инвестиция создана
Definition: invests.hpp:14
Definition: invests.hpp:6
invest get_invest_or_fail(eosio::name coopname, const checksum256 &invest_hash)
Получает инвестицию по хэшу или прерывает выполнение с ошибкой.
Definition: invests.hpp:79
std::optional< invest > get_invest(eosio::name coopname, const checksum256 &invest_hash)
Definition: invests.hpp:61
void set_coordinator_info(eosio::name coopname, checksum256 invest_hash, eosio::name coordinator_username, eosio::asset coordinator_amount)
Устанавливает информацию о координаторе в инвестиции.
Definition: invests.hpp:174
void delete_invest(eosio::name coopname, const checksum256 &invest_hash)
Удаляет инвестицию по хэшу.
Definition: invests.hpp:198
void create_invest_with_approve(eosio::name coopname, eosio::name username, checksum256 project_hash, checksum256 invest_hash, eosio::asset amount, document2 statement)
Создает инвестицию и отправляет её на утверждение.
Definition: invests.hpp:128
std::optional< std::pair< eosio::name, eosio::asset > > get_coordinator_amount(eosio::name coopname, eosio::name investor_username, const eosio::asset &investment_amount)
Вычисляет сумму координаторского взноса, если инвестор зарегистрирован менее 30 дней назад.
Definition: invests.hpp:92
Definition: balances.cpp:6
eosio::multi_index< "invests"_n, invest, indexed_by<"byhash"_n, const_mem_fun< invest, checksum256, &invest::by_hash > >, indexed_by<"byusername"_n, const_mem_fun< invest, uint64_t, &invest::by_username > >, indexed_by<"byproject"_n, const_mem_fun< invest, checksum256, &invest::by_project > >, indexed_by<"byprojuser"_n, const_mem_fun< invest, uint128_t, &invest::by_project_user > > > invest_index
Таблица для хранения инвестиций.
Definition: invests.hpp:55
global_state get_global_state(name coopname)
Получает текущее глобальное состояние.
Definition: global_state.hpp:66
constexpr eosio::name DECLINE_INVESTMENT
Definition: shared_names.hpp:36
constexpr eosio::name CREATE_INVESTMENT
Definition: shared_names.hpp:108
constexpr eosio::name APPROVE_INVESTMENT
Definition: shared_names.hpp:35
void create_approval(name calling_contract, CREATEAPPRV_SIGNATURE)
Создаёт аппрув в совете
Definition: shared_soviet.hpp:73
Definition: eosio.msig.hpp:34
uint32_t coordinator_invite_validity_days
Срок действия приглашения координатора (по умолчанию 30 дней)
Definition: global_state.hpp:14
config config
Управляемая конфигурация контракта
Definition: global_state.hpp:36
Таблица инвестиций хранит данные о вложениях в проекты.
Definition: invests.hpp:27
checksum256 by_project() const
Индекс по проекту (3)
Definition: invests.hpp:44
uint64_t id
ID инвестиции (внутренний ключ)
Definition: invests.hpp:28
time_point_sec invested_at
Дата приёма инвестиции
Definition: invests.hpp:35
name username
Имя инвестора
Definition: invests.hpp:30
checksum256 by_hash() const
Индекс по хэшу инвестиции (4)
Definition: invests.hpp:45
document2 statement
Заявление на зачёт из кошелька
Definition: invests.hpp:36
checksum256 invest_hash
Хэш инвестиции
Definition: invests.hpp:31
eosio::name coordinator
Имя координатора (реферера), если есть
Definition: invests.hpp:39
uint64_t primary_key() const
Первичный ключ (1)
Definition: invests.hpp:42
name coopname
Имя кооператива
Definition: invests.hpp:29
checksum256 project_hash
Хэш проекта
Definition: invests.hpp:32
uint64_t by_username() const
Индекс по имени пользователя (2)
Definition: invests.hpp:43
name status
Статус инвестиции (created)
Definition: invests.hpp:33
uint128_t by_project_user() const
Индекс по проекту и пользователю (5)
Definition: invests.hpp:46
Definition: drafts.hpp:28
static uint128_t combine_checksum_ids(const checksum256 &hash, eosio::name username)
Definition: utils.hpp:9