40 lines
2.3 KiB
C++
40 lines
2.3 KiB
C++
/**
|
|
* Устанавливает конфигурацию кооператива.
|
|
*
|
|
* Обновляет глобальное состояние контракта для указанного кооператива, создавая запись,
|
|
* если она отсутствует, либо модифицируя существующую.
|
|
*
|
|
* \ingroup public_actions
|
|
*
|
|
* @param coopname Имя кооператива.
|
|
* @param config Новая конфигурация кооператива.
|
|
*
|
|
* @note Авторизация требуется от аккаунта: @p coopname
|
|
*/
|
|
void capital::setconfig(eosio::name coopname, Capital::config config) {
|
|
require_auth(coopname);
|
|
|
|
eosio::check(config.coordinator_bonus_percent >= 0.0 && config.coordinator_bonus_percent <= 10, "Координатор не может получить больше 0.1 (10%) от инвестиций");
|
|
eosio::check(config.expense_pool_percent >= 0.0 && config.expense_pool_percent <= 100, "Процент инвестиций в пул расходов должен быть между 0 и 1 (100%)");
|
|
eosio::check(config.coordinator_invite_validity_days >= 0, "Срок действия приглашения координатора должен быть не отрицательным числом дней");
|
|
eosio::check(config.voting_period_in_days >= 1 && config.voting_period_in_days <= 30, "Период голосования должен быть между 1 и 30 днями");
|
|
eosio::check(config.authors_voting_percent >= 0.0 && config.authors_voting_percent <= 100, "Процент премий авторов на голосовании должен быть между 0 и 100");
|
|
eosio::check(config.creators_voting_percent >= 0.0 && config.creators_voting_percent <= 100, "Процент премий создателей на голосовании должен быть между 0 и 100");
|
|
|
|
Capital::global_state_table global_state_inst(_self, _self.value);
|
|
auto itr = global_state_inst.find(coopname.value);
|
|
|
|
if (itr == global_state_inst.end()) {
|
|
global_state_inst.emplace(coopname, [&](auto& s) {
|
|
s.coopname = coopname;
|
|
s.config = config;
|
|
});
|
|
} else {
|
|
global_state_inst.modify(itr, coopname, [&](auto& s) {
|
|
s.config = config;
|
|
});
|
|
}
|
|
}
|
|
|
|
|