COOPENOMICS  v1
Кооперативная Экономика
Пространство имен Capital::Gamification

Классы

struct  LevelProgress
 

Функции

uint64_t calculate_level_requirement (uint32_t level, const Capital::config &config)
 Рассчитывает требуемую сумму вкладов для достижения указанного уровня Подробнее...
 
double calculate_energy_gain (eosio::asset contribution_amount, uint32_t current_level, const Capital::config &config)
 Рассчитывает прирост энергии от вклада Подробнее...
 
LevelProgress apply_contribution_to_levels (double amount_minor, uint32_t start_level, double start_energy, const Capital::config &config)
 Разносит вклад по уровням, СПИСЫВАЯ требование каждого пройденного. Подробнее...
 
void update_energy_with_decay (eosio::name coopname, uint64_t contributor_id)
 Обновляет энергию участника с учетом естественного снижения (decay) Подробнее...
 
void add_contribution_and_check_levelup (eosio::name coopname, uint64_t contributor_id, double amount_minor)
 Начисляет вклад участнику, разнося его по уровням. Подробнее...
 
void update_gamification_from_segment (eosio::name coopname, uint64_t contributor_id, const Capital::Segments::segment &segment)
 Обновляет геймификацию (уровень и энергию) на основе вкладов из сегмента Подробнее...
 

Переменные

static constexpr double ENERGY_PER_LEVEL = 100.0
 Энергия, необходимая для перехода на следующий уровень Подробнее...
 

Функции

◆ add_contribution_and_check_levelup()

void Capital::Gamification::add_contribution_and_check_levelup ( eosio::name  coopname,
uint64_t  contributor_id,
double  amount_minor 
)
inline

Начисляет вклад участнику, разнося его по уровням.

Начисляет вклад участнику и проверяет переход на новые уровни

Пришло на смену add_energy_and_check_levelup(energy_gain): та считала начисление один раз от требования стартового уровня и делила накопленную энергию на сотню линейно, из-за чего коэффициент роста не работал и один крупный вклад давал кратно больше уровней, чем положено.

Аргументы
amount_minorСумма вклада в минорных единицах
coopnameИмя кооператива
contributor_idID участника
amount_minorСумма вклада в минорных единицах

◆ apply_contribution_to_levels()

LevelProgress Capital::Gamification::apply_contribution_to_levels ( double  amount_minor,
uint32_t  start_level,
double  start_energy,
const Capital::config config 
)
inline

Разносит вклад по уровням, СПИСЫВАЯ требование каждого пройденного.

Разносит вклад по уровням, списывая требование каждого пройденного

Раньше начисление считалось один раз от требования стартового уровня, а накопленная энергия делилась на сотню линейно: уровни росли так, будто требование не меняется. Из-за этого один крупный вклад давал кратно больше уровней, чем положено — при базе 10 000 ₽ и коэффициенте роста 1.5 взнос в миллион поднимал на сотню уровней вместо десяти, и коэффициент роста фактически не работал вовсе.

Теперь вклад расходуется последовательно: сперва добирается текущий уровень, затем каждый следующий по своему — уже большему — требованию.

Аргументы
amount_minorСумма вклада в минорных единицах (после коэффициента прироста)
start_levelУровень до начисления (нумерация с единицы)
start_energyНакопленная энергия на этом уровне (0..100)
amount_minorСумма вклада в минорных единицах
start_levelУровень до начисления
start_energyНакопленная энергия на этом уровне (0..100)
configКонфигурация контракта с параметрами геймификации

◆ calculate_energy_gain()

double Capital::Gamification::calculate_energy_gain ( eosio::asset  contribution_amount,
uint32_t  current_level,
const Capital::config config 
)
inline

Рассчитывает прирост энергии от вклада

Аргументы
contribution_amountСумма вклада
current_levelТекущий уровень участника
configКонфигурация контракта с параметрами геймификации
Возвращает
Прирост энергии (0.0 - 100.0)

◆ calculate_level_requirement()

uint64_t Capital::Gamification::calculate_level_requirement ( uint32_t  level,
const Capital::config config 
)
inline

Рассчитывает требуемую сумму вкладов для достижения указанного уровня

Аргументы
levelУровень, для которого нужно рассчитать требования
configКонфигурация контракта с параметрами геймификации
Возвращает
Требуемая сумма в микротокенах

◆ update_energy_with_decay()

void Capital::Gamification::update_energy_with_decay ( eosio::name  coopname,
uint64_t  contributor_id 
)
inline

Обновляет энергию участника с учетом естественного снижения (decay)

Аргументы
coopnameИмя кооператива
contributor_idID участника

◆ update_gamification_from_segment()

void Capital::Gamification::update_gamification_from_segment ( eosio::name  coopname,
uint64_t  contributor_id,
const Capital::Segments::segment segment 
)
inline

Обновляет геймификацию (уровень и энергию) на основе вкладов из сегмента

Аргументы
coopnameИмя кооператива
contributor_idID участника
segmentСегмент с данными о вкладах участника

Переменные

◆ ENERGY_PER_LEVEL

constexpr double Capital::Gamification::ENERGY_PER_LEVEL = 100.0
staticconstexpr

Энергия, необходимая для перехода на следующий уровень

Энергия измеряется в процентах пути до уровня: вклад размером level_requirement закрывает уровень целиком.