|
COOPENOMICS
v1
Кооперативная Экономика
|
Пространства имен | |
| namespace | Status |
| Константы статусов проекта | |
Функции | |
| eosio::asset | sync_total_debt (eosio::name coopname, uint64_t project_id) |
| Пересчитывает total_debt_amount проекта обходом его сегментов. Подробнее... | |
| eosio::asset | calculate_min_invest_pool_for_debts (eosio::name coopname, const project &prj) |
| Минимальный invest_pool, при котором ни у кого provisional_amount не упадёт ниже долга. Подробнее... | |
| eosio::asset | calculate_max_deallocatable (eosio::name coopname, const project &prj) |
| Максимальная сумма, которую можно вернуть из проекта в глобальный пул программы. Подробнее... | |
| std::optional< project > | get_project (eosio::name coopname, const checksum256 &project_hash) |
| Получает проект по хэшу Подробнее... | |
| project | get_project_or_fail (eosio::name coopname, const checksum256 &project_hash) |
| Получает проект по хэшу, если проект не найден, выбрасывает исключение Подробнее... | |
| project | get_project_by_id_or_fail (eosio::name coopname, const uint64_t project_id) |
| Получает проект по id. Подробнее... | |
| bool | has_component_projects (eosio::name coopname, const checksum256 &project_hash) |
| Есть ли у проекта дочерние проекты-компоненты (их parent_hash совпадает с хэшем родителя) Подробнее... | |
| void | validate_parent_hash (eosio::name coopname, const checksum256 &parent_hash) |
| Проверяет валидность parent_hash согласно правилам проектов Подробнее... | |
| void | create_project (eosio::name coopname, const checksum256 &project_hash, const checksum256 &parent_hash, const std::string &title, const std::string &description, const std::string &invite, const std::string &meta, const std::string &data) |
| Создает проект Подробнее... | |
| void | edit_project (eosio::name coopname, uint64_t project_id, const std::string &title, const std::string &description, const std::string &invite, const std::string &meta, const std::string &data) |
| Редактирует существующий проект Подробнее... | |
| void | add_property_base (eosio::name coopname, uint64_t project_id, const eosio::asset &property_amount) |
| Добавляет имущественный взнос к проекту. Подробнее... | |
| void | add_commit (eosio::name coopname, uint64_t project_id, const generation_amounts &delta) |
| Добавляет коммит к проекту, обновляя фактические показатели и счетчик коммитов. Подробнее... | |
| void | set_master (eosio::name coopname, uint64_t project_id, eosio::name master) |
| Назначает мастера проекта Подробнее... | |
| void | update_status (eosio::name coopname, uint64_t project_id, eosio::name new_status) |
| Обновляет статус проекта. Подробнее... | |
| void | set_plan (eosio::name coopname, uint64_t project_id, const plan_pool &calculated_plan) |
| Устанавливает плановые показатели проекта. Подробнее... | |
| void | add_investments (eosio::name coopname, uint64_t project_id, const eosio::asset &amount) |
| Добавляет инвестицию к проекту. Подробнее... | |
| void | expand_expense_pool (eosio::name coopname, uint64_t project_id, const eosio::asset &additional_amount) |
| Увеличивает целевой размер пула расходов проекта. Подробнее... | |
| void | open_project (eosio::name coopname, uint64_t project_id) |
| Открывает проект для инвестиций, копируя плановые показатели расходов в фактические. Подробнее... | |
| void | close_project (eosio::name coopname, uint64_t project_id) |
| Закрывает проект от инвестиций, устанавливая флаг is_opened = false. Подробнее... | |
| void | reserve_expense_funds (eosio::name coopname, uint64_t project_id, const eosio::asset &amount) |
| Резервирует средства для расхода, уменьшая accumulated_expense_pool. Подробнее... | |
| void | return_expense_funds (eosio::name coopname, uint64_t project_id, const eosio::asset &amount) |
| Возвращает зарезервированные средства в accumulated_expense_pool. Подробнее... | |
| void | complete_expense (eosio::name coopname, uint64_t project_id, const eosio::asset &amount) |
| Завершает расход, добавляя сумму в used_expense_pool. Подробнее... | |
| void | increment_total_propertors (eosio::name coopname, uint64_t project_id) |
| Увеличивает количество проперторов в проекте на 1. Подробнее... | |
| void | increment_total_investors (eosio::name coopname, uint64_t project_id) |
| Увеличивает количество инвесторов в проекте на 1. Подробнее... | |
| void | increment_total_contributors (eosio::name coopname, uint64_t project_id) |
| Увеличивает количество зарегистрированных участников в проекте на 1. Подробнее... | |
| void | increment_total_contributor_shares (eosio::name coopname, uint64_t project_id, eosio::asset shares) |
| Увеличивает количество вкладчических долей в проекте на указанное количество Подробнее... | |
| void | increment_total_authors (eosio::name coopname, uint64_t project_id) |
| Увеличивает количество авторов в проекте на 1. Подробнее... | |
| void | increment_total_coordinators (eosio::name coopname, uint64_t project_id) |
| Увеличивает количество координаторов в проекте на 1. Подробнее... | |
| void | increment_total_creators (eosio::name coopname, uint64_t project_id) |
| Увеличивает количество создателей в проекте на 1. Подробнее... | |
| void | increment_total_unique_participants (eosio::name coopname, uint64_t project_id) |
| Увеличивает количество уникальных участников в проекте на 1. Подробнее... | |
| void | increment_votes_received (eosio::name coopname, uint64_t project_id) |
| Увеличивает счетчик полученных голосов в проекте Подробнее... | |
| void | increase_total_returned_investments (eosio::name coopname, const uint64_t &project_id, const eosio::asset &amount) |
| void | add_used_for_compensation (eosio::name coopname, uint64_t project_id, const eosio::asset &amount) |
| Увеличивает сумму использованных для компенсации инвестиций Подробнее... | |
| void | subtract_used_for_compensation (eosio::name coopname, uint64_t project_id, const eosio::asset &amount) |
| Уменьшает сумму использованных для компенсации инвестиций Подробнее... | |
| void | increment_converted_segments (eosio::name coopname, uint64_t project_id) |
| Инкрементирует счётчик сконвертированных сегментов Подробнее... | |
| bool | are_all_segments_converted (eosio::name coopname, uint64_t project_id) |
| Проверяет завершили ли все участники конвертацию сегментов Подробнее... | |
| eosio::asset | calculate_unused_investments (const project &prj) |
| Считает неиспользованные проектом инвестиции Подробнее... | |
| eosio::asset | debt_ext_or_zero (const eosio::binary_extension< eosio::asset > &v) |
| Значение binary_extension<asset> total_debt_amount или ноль в RUB. Подробнее... | |
| void | delete_project (eosio::name coopname, uint64_t project_id) |
| Удаляет проект Подробнее... | |
| void | authorize_project (eosio::name coopname, uint64_t project_id, const document2 &decision) |
| Устанавливает авторизацию проекта советом Подробнее... | |
| void | revoke_authorization (eosio::name coopname, uint64_t project_id) |
| Сбрасывает авторизацию проекта Устанавливает флаг авторизации в false и очищает документ авторизации Подробнее... | |
| void | increment_total_voters (eosio::name coopname, uint64_t project_id) |
| Увеличивает счетчик общего количества участников голосования в проекте Подробнее... | |
Агрегат ссуд проекта и границы деаллокации.
Функции живут отдельно от domain/entities/projects.hpp намеренно: они ходят в таблицу segments, а segments.hpp сам ссылается на Capital::project и поэтому обязан включаться ПОСЛЕ него. Положить обход сегментов прямо в projects.hpp нельзя — получается цикл заголовков. Здесь, на уровне core, обе сущности уже объявлены.
|
inline |
Добавляет коммит к проекту, обновляя фактические показатели и счетчик коммитов.
| coopname | Имя кооператива (scope таблицы). |
| project_id | ID проекта. |
| delta | Фактические показатели взноса в проект. |
|
inline |
Добавляет инвестицию к проекту.
| coopname | Имя кооператива (scope таблицы). |
| project_id | ID проекта. |
| amount | Сумма инвестиции для добавления. |
|
inline |
Добавляет имущественный взнос к проекту.
| coopname | Имя кооператива (scope таблицы). |
| project_id | ID проекта. |
| property_amount | Стоимость имущественного взноса. |
|
inline |
Увеличивает сумму использованных для компенсации инвестиций
| coopname | Имя кооператива |
| project_id | ID проекта |
| amount | Сумма использованных инвестиций |
|
inline |
Проверяет завершили ли все участники конвертацию сегментов
| coopname | Имя кооператива |
| project_id | ID проекта |
|
inline |
Устанавливает авторизацию проекта советом
|
inline |
Максимальная сумма, которую можно вернуть из проекта в глобальный пул программы.
Ограничений три, берём минимум:
| coopname | Имя кооператива |
| prj | Проект |
|
inline |
Минимальный invest_pool, при котором ни у кого provisional_amount не упадёт ниже долга.
provisional_amount пересчитывается в refresh_provisional_amount как base_i * return_base_percent / 100, а сам процент — это invest_pool / work_costs * 100 (с потолком 100). Значит выплата участнику линейна по invest_pool: provisional_i = base_i * invest_pool / work_costs.
Инвариант update_segment_total_cost требует provisional_i >= debt_i. Подставляя, получаем invest_pool >= work_costs * max_i(debt_i / base_i). Берём максимум по всем сегментам с ненулевым долгом и округляем вверх, чтобы усечение double->int64 в refresh_provisional_amount не увело нас на квант ниже границы.
Участник с долгом, но без трудовой базы, заблокировал бы деаллокацию полностью (его provisional равен нулю при любом invest_pool) — такого состояния createdebt не создаёт, но проверяем явно.
| coopname | Имя кооператива |
| prj | Проект |
|
inline |
Считает неиспользованные проектом инвестиции
Неиспользованный остаток = все полученные инвестиции минус то, что проект фактически израсходовал: выплаты участникам при конвертации сегментов (total_used_for_compensation) и оплаченные расходы (used_expense_pool). В сумму входят и прямые инвестиции пайщиков, и аллоцированные программные средства — возврат идёт единым остатком в глобальный пул программы, потому что деньги инвесторов уже находятся в «Благоросте» и лично им не возвращаются.
Единая точка расчёта для сценариев полного возврата остатка: финализация (finalizeproj), удаление (delproject) и отклонение советом (declprj). Остановка проекта (stopproject) средств не возвращает — она только переводит проект в pending и снимает авторизацию.
Частичный возврат по решению кооператива идёт другим путём — action diallocate, см. calculate_max_deallocatable.
| prj | Проект |
|
inline |
Закрывает проект от инвестиций, устанавливая флаг is_opened = false.
| coopname | Имя кооператива (scope таблицы). |
| project_id | ID проекта. |
|
inline |
Завершает расход, добавляя сумму в used_expense_pool.
| coopname | Имя кооператива. |
| project_id | ID проекта. |
| amount | Сумма расхода. |
|
inline |
Создает проект
| coopname | Имя кооператива |
| project_hash | Хэш проекта |
| parent_hash | Хэш родительского проекта (если есть) |
| title | Название проекта |
| description | Описание проекта |
| invite | Приглашение к проекту |
| meta | Метаданные проекта |
| data | Шаблон/данные проекта |
|
inline |
Значение binary_extension<asset> total_debt_amount или ноль в RUB.
Проекты, записанные до появления поля, отдают absent. Материализованный asset с пустым символом — след default-constructed asset() при записи пустого extension; при нулевой сумме нормализуем, при ненулевой падаем, потому что это уже потеря данных, а не отсутствие поля.
|
inline |
Удаляет проект
| coopname | Имя кооператива |
| project_id | ID проекта |
|
inline |
Редактирует существующий проект
| coopname | Имя кооператива |
| project_id | ID проекта для редактирования |
| title | Новое название проекта |
| description | Новое описание проекта |
| invite | Новое приглашение к проекту |
| meta | Новые метаданные проекта |
| data | Новые данные/шаблон проекта |
|
inline |
Увеличивает целевой размер пула расходов проекта.
| coopname | Имя кооператива (scope таблицы). |
| project_id | ID проекта. |
| additional_amount | Дополнительная сумма для увеличения цели расходов. |
|
inline |
Получает проект по хэшу
| coopname | Имя кооператива |
| project_hash | Хэш проекта |
|
inline |
Получает проект по id.
| coopname | Имя кооператива |
| project_id | ID проекта |
|
inline |
Получает проект по хэшу, если проект не найден, выбрасывает исключение
| coopname | Имя кооператива |
| project_hash | Хэш проекта |
|
inline |
Есть ли у проекта дочерние проекты-компоненты (их parent_hash совпадает с хэшем родителя)
| coopname | Имя кооператива |
| project_hash | Хэш родительского проекта |
|
inline |
|
inline |
Инкрементирует счётчик сконвертированных сегментов
| coopname | Имя кооператива |
| project_id | ID проекта |
|
inline |
Увеличивает количество авторов в проекте на 1.
|
inline |
Увеличивает количество вкладчических долей в проекте на указанное количество
|
inline |
Увеличивает количество зарегистрированных участников в проекте на 1.
|
inline |
Увеличивает количество координаторов в проекте на 1.
|
inline |
Увеличивает количество создателей в проекте на 1.
|
inline |
Увеличивает количество инвесторов в проекте на 1.
|
inline |
Увеличивает количество проперторов в проекте на 1.
|
inline |
Увеличивает количество уникальных участников в проекте на 1.
|
inline |
Увеличивает счетчик общего количества участников голосования в проекте
|
inline |
Увеличивает счетчик полученных голосов в проекте
|
inline |
Открывает проект для инвестиций, копируя плановые показатели расходов в фактические.
| coopname | Имя кооператива (scope таблицы). |
| project_id | ID проекта. |
|
inline |
Резервирует средства для расхода, уменьшая accumulated_expense_pool.
| coopname | Имя кооператива. |
| project_id | ID проекта. |
| amount | Сумма для резервирования. |
|
inline |
Возвращает зарезервированные средства в accumulated_expense_pool.
| coopname | Имя кооператива. |
| project_id | ID проекта. |
| amount | Сумма для возврата. |
|
inline |
Сбрасывает авторизацию проекта Устанавливает флаг авторизации в false и очищает документ авторизации
| coopname | Наименование кооператива |
| project_id | ID проекта |
|
inline |
Назначает мастера проекта
| coopname | Имя кооператива |
| project_id | ID проекта |
| master | Имя мастера |
|
inline |
Устанавливает плановые показатели проекта.
| coopname | Имя кооператива (scope таблицы). |
| project_id | ID проекта. |
| calculated_plan | Рассчитанные плановые показатели. |
|
inline |
Уменьшает сумму использованных для компенсации инвестиций
| coopname | Имя кооператива |
| project_id | ID проекта |
| amount | Сумма использованных инвестиций |
|
inline |
Пересчитывает total_debt_amount проекта обходом его сегментов.
Поле — производная от segments, поэтому единственный честный способ его получить — сложить debt_amount по индексу byproject. Обход стоит O(n) по числу участников проекта (десятки), поэтому вызывается только в редких точках: migrate, выдача/отклонение ссуды, конвертация сегмента, deallocate.
| coopname | Имя кооператива |
| project_id | ID проекта |
|
inline |
Обновляет статус проекта.
| coopname | Имя кооператива (scope таблицы). |
| project_hash | Хэш проекта. |
| new_status | Новый статус проекта. |
|
inline |
Проверяет валидность parent_hash согласно правилам проектов
| coopname | Имя кооператива |
| parent_hash | Хэш родительского проекта для проверки |