3#include <eosio/binary_extension.hpp>
80inline asset
ext_or_zero(
const eosio::binary_extension<asset>& v,
const eosio::symbol& sym) {
84 const asset &a = v.value();
85 if (a.symbol == sym) {
88 eosio::check(a.amount == 0,
89 "program_expense_* содержит ненулевую сумму с несовместимым символом");
102 auto itr = global_state_inst.find(gs.
coopname.value);
103 check(itr != global_state_inst.end(),
"Глобальное состояние не найдено");
106 global_state_inst.modify(itr,
_capital, [&](
auto& s) {
109 s.program_expense_reserved = reserved;
120 auto itr = global_state_inst.find(coopname.value);
121 eosio::check(itr != global_state_inst.end(),
"Контракт не инициализирован");
132 auto itr = global_state_inst.find(coopname.value);
133 eosio::check(itr != global_state_inst.end(),
"Контракт не инициализирован");
142 auto itr = global_state_inst.find(coopname.value);
143 eosio::check(itr != global_state_inst.end(),
"Контракт не инициализирован");
144 eosio::check(
amount.is_valid() &&
amount.amount > 0,
"Сумма пополнения должна быть положительной");
146 eosio::check(itr->global_available_invest_pool >=
amount,
147 "Недостаточно свободных инвестиций программы для пополнения пула расходов");
149 global_state_inst.modify(itr,
_capital, [&](
auto &s) {
152 s.global_available_invest_pool -=
amount;
154 s.program_expense_pool = pool;
155 s.program_expense_reserved = reserved;
165 auto itr = global_state_inst.find(coopname.value);
166 eosio::check(itr != global_state_inst.end(),
"Контракт не инициализирован");
167 eosio::check(
amount.is_valid() &&
amount.amount > 0,
"Сумма резерва должна быть положительной");
169 "Недостаточно средств в пуле программных расходов");
171 global_state_inst.modify(itr,
_capital, [&](
auto &s) {
176 s.program_expense_pool = pool;
177 s.program_expense_reserved = reserved;
187 auto itr = global_state_inst.find(coopname.value);
188 eosio::check(itr != global_state_inst.end(),
"Контракт не инициализирован");
189 eosio::check(
amount.is_valid() &&
amount.amount > 0,
"Сумма освобождения должна быть положительной");
191 "Зарезервированных программных расходов меньше указанной суммы");
193 global_state_inst.modify(itr,
_capital, [&](
auto &s) {
198 s.program_expense_pool = pool;
199 s.program_expense_reserved = reserved;
210 auto itr = global_state_inst.find(coopname.value);
211 eosio::check(itr != global_state_inst.end(),
"Контракт не инициализирован");
212 eosio::check(
amount.is_valid() &&
amount.amount > 0,
"Сумма списания должна быть положительной");
214 "Зарезервированных программных расходов меньше указанной суммы");
216 global_state_inst.modify(itr,
_capital, [&](
auto &s) {
220 s.program_expense_pool = pool;
221 s.program_expense_reserved = reserved;
232 auto itr = global_state_inst.find(coopname.value);
233 eosio::check(itr != global_state_inst.end(),
"Контракт не инициализирован");
234 eosio::check(
amount.is_valid() &&
amount.amount > 0,
"Сумма списания должна быть положительной");
236 "Недостаточно средств в пуле программных расходов для покрытия перерасхода — пополните пул (topupprogexp)");
238 global_state_inst.modify(itr,
_capital, [&](
auto &s) {
242 s.program_expense_pool = pool;
243 s.program_expense_reserved = reserved;
static constexpr eosio::name _capital
Definition: consts.hpp:166
static constexpr eosio::symbol _root_govern_symbol
Definition: consts.hpp:231
contract
Definition: eosio.msig_tests.cpp:977
share_type amount
Definition: eosio.token_tests.cpp:174
void release_program_expense(eosio::name coopname, const asset &amount)
Освобождает зарезервированное при отклонении программного расхода: program_expense_reserved -= amount...
Definition: global_state.hpp:185
void consume_program_expense(eosio::name coopname, const asset &amount)
Окончательное списание программного расхода (callback onpgexpdone, CLOSED): program_expense_reserved ...
Definition: global_state.hpp:208
global_state get_global_state(name coopname)
Получает текущее глобальное состояние.
Definition: global_state.hpp:118
asset ext_or_zero(const eosio::binary_extension< asset > &v, const eosio::symbol &sym)
Значение binary_extension<asset> или ноль с символом sym.
Definition: global_state.hpp:80
void reserve_program_expense(eosio::name coopname, const asset &amount)
Резервирует средства под approved/authorized программный расход: program_expense_pool -= amount,...
Definition: global_state.hpp:163
void is_initialized(name coopname)
Проверяет что контракт инициализирован.
Definition: global_state.hpp:130
void update_global_state(const global_state &gs)
Обновляет глобальное состояние новыми значениями.
Definition: global_state.hpp:100
void spend_program_expense_pool(eosio::name coopname, const asset &amount)
Прямое списание из свободного пула программных расходов — превышение факта над резервом при закрытии ...
Definition: global_state.hpp:230
void topup_program_expense_pool(eosio::name coopname, const asset &amount)
Пополняет пул программных расходов на amount из общего пула инвестиций программы. Вызывается из actio...
Definition: global_state.hpp:140
Definition: balances.cpp:6
eosio::multi_index<"state"_n, global_state > global_state_table
Таблица для хранения глобального состояния.
Definition: global_state.hpp:65
Definition: eosio.msig.hpp:34
Конфигурация контракта, управляемая пользователем.
Definition: global_state.hpp:18
double energy_decay_rate_per_day
Скорость уменьшения энергии в день
Definition: global_state.hpp:27
uint32_t voting_period_in_days
Период голосования в днях
Definition: global_state.hpp:22
double creators_voting_percent
Процент премий создателей для голосования
Definition: global_state.hpp:24
double authors_voting_percent
Процент премий авторов для голосования
Definition: global_state.hpp:23
double coordinator_bonus_percent
Процент премий координатора от инвестиций
Definition: global_state.hpp:19
double expense_pool_percent
Процент инвестиций в пул расходов
Definition: global_state.hpp:20
double energy_gain_coefficient
Множитель скорости набора уровней (по умолчанию 1.0 — вклад размером level_depth_base даёт ровно один...
Definition: global_state.hpp:30
uint32_t coordinator_invite_validity_days
Срок действия приглашения координатора (дней)
Definition: global_state.hpp:21
uint64_t level_depth_base
Базовая сумма вкладов для уровня 1 (10000 RUB при точности рубля 4 знака: 10000 × 10^4)
Definition: global_state.hpp:28
double level_growth_coefficient
Коэффициент роста требований для следующих уровней (по умолчанию 1.5)
Definition: global_state.hpp:29
Таблица глобального состояния хранит общие данные контракта благороста.
Definition: global_state.hpp:41
eosio::binary_extension< asset > program_expense_pool
Доступная сумма программы под целевые расходы (без аллокации в проекты)
Definition: global_state.hpp:59
eosio::name coopname
Имя кооператива
Definition: global_state.hpp:42
double program_membership_cumulative_reward_per_share
Накопительное вознаграждение на долю в членских взносах
Definition: global_state.hpp:47
config config
Управляемая конфигурация контракта
Definition: global_state.hpp:49
uint64_t primary_key() const
Первичный ключ (1)
Definition: global_state.hpp:62
eosio::binary_extension< asset > program_expense_reserved
Сумма, зарезервированная под approved/authorized программные расходы
Definition: global_state.hpp:60