Процесс финализации проекта после завершения всех конвертаций участников
Процесс финализации проекта после завершения всех конвертаций участников
Процесс финализирует проект после того, как все участники завершили конвертацию своих сегментов, возвращает неиспользованные инвестиции в глобальный пул программы и устанавливает финальный статус проекта.
Назначение процесса
После завершения проекта и конвертации всех сегментов участников необходимо:
- Зафиксировать факт завершения всех конвертаций
- Рассчитать неиспользованную дельту инвестиций
- Вернуть неиспользованные средства в глобальный пул программы
- Установить финальный статус проекта FINALIZED
Диаграмма процесса
sequenceDiagram
participant К as Кооператив
participant C as Capital Contract
participant P as Проект
participant GP as Глобальный Пул
К->>C: finalizeproj(project_hash)
Note over C: Проверка статуса RESULT
C->>P: Проверка счётчика конвертаций
Note over P: total_converted_segments == total_unique_participants
C->>C: Расчёт неиспользованной дельты
Note over C: unused = total_received - total_used - expenses_used
alt Есть неиспользованные средства
C->>C: returntopool (inline action)
C->>GP: Возврат средств в пул
Note over GP: Средства доступны для новых аллокаций
end
C->>P: Установка статуса FINALIZED
Note over P: Проект финализирован
Пошаговое описание процесса
Шаг 1: Вызов финализации проекта
Действие: финализация проекта
Кооператив вызывает действие финализации после того, как все участники завершили конвертацию своих сегментов.
Проверки:
- Проект находится в статусе RESULT
- Счётчик сконвертированных сегментов равен количеству уникальных участников
- В таблице сегментов не осталось записей
Шаг 2: Расчёт неиспользованной дельты
Система рассчитывает неиспользованную дельту инвестиций по формуле:
\[ unused_{delta} = total_{received} - total_{used\_for\_compensation} - used_{expense\_pool} \]
где:
- \(total_{received}\) - общая сумма полученных инвестиций (включая часть на расходы)
- \(total_{used\_for\_compensation}\) - фактически выплачено участникам (конвертация в wallet + ссуды)
- \(used_{expense\_pool}\) - фактически потрачено на расходы проекта
Что включает неиспользованная дельта:
- Инвестиции, не использованные для компенсации участникам (если участники направили средства в программу/проект)
- Зарезервированные на расходы, но не потраченные средства (accumulated_expense_pool - used_expense_pool)
Шаг 3: Возврат средств в глобальный пул
Действие: возврат средств в пул (inline action)
Если неиспользованная дельта > 0, система:
- Вызывает трекинговое действие returntopool через inline action
- Фиксирует сумму возврата и проект для трекинга
- Добавляет средства в global_available_invest_pool
Преимущества inline action:
- Возврат фиксируется как отдельное действие в истории блокчейна
- Можно отследить все возвраты с указанием суммы и проекта
- Удобно для аналитики и аудита
Шаг 4: Установка финального статуса
Система устанавливает статус проекта на FINALIZED:
- Проект больше не может быть изменён
- Все финансовые операции завершены
- Проект можно удалить (опционально)
Отслеживание конвертаций
Для отслеживания завершения конвертаций всеми участниками используются счётчики:
- total_unique_participants - общее количество уникальных участников проекта
- total_converted_segments - количество сконвертированных сегментов
При каждом вызове convertsegm счётчик total_converted_segments инкрементируется. Финализация возможна только когда total_converted_segments >= total_unique_participants.
Результат процесса
После успешной финализации:
- Все участники завершили конвертацию своих сегментов
- Неиспользованные инвестиции возвращены в глобальный пул
- Проект находится в финальном статусе FINALIZED
- Средства доступны для аллокации в новые проекты
- См. также
- capital::finalizeproj
-
capital::returntopool
-
capital::convertsegm