Смарт-контракты
Все ончейн-контракты развертываются на TGE (Q1–Q2 2027). До TGE данная страница является перспективной спецификацией.
Набор контрактов
| Контракт | Сеть | Назначение |
|---|---|---|
POP_Jetton | TON | Токен $POP (стандарт Jetton TEP-74) |
POP_Vesting | TON | Обёртка вестинга по корзинам, обеспечивающая Cliff (период блокировки) + линейное высвобождение |
Round_Merkle_Registry | TON | Хранит корни Меркла для каждого Round (раунда), поддерживает проверку доказательств |
Dispute_Resolver | TON | 24-часовое окно для споров; штрафует оператора при обоснованном оспаривании |
Treasury | TON | Распределение средств под управлением DAO |
Governance | TON | Система квадратичного голосования + предложений с учётом репутации |
Burn_Address | TON | Принимает $POP от сжигания комиссий; гарантированно нерасходуемый |
Ad_Settlement_Verifier | TON | Верификатор Groth16 для zk-аттестованных просмотров рекламы (Фаза 2) |
Спецификация Jetton $POP
- Стандарт: TEP-74 (TON Jetton)
- Метаданные: Ончейн-метаданные TEP-64
- Название: CashPop
- Символ: $POP
- Десятичные знаки: 9 (соответствует конвенции TON)
- Общий объём эмиссии: 10 000 000 000 × 10^9 = 10^19 базовых единиц
- Возможность эмиссии: Нет (фиксирован при развёртывании)
- Возможность сжигания: Да (любым держателем, без привилегий)
- Возможность обновления: Нет (сам Jetton неизменяем; обёртки могут эволюционировать)
Логика контракта вестинга
Каждая корзина распределения получает собственный экземпляр POP_Vesting. Параметры каждого экземпляра:
beneficiary: адрес, имеющий право на получениеtotal_amount: общее количество заблокированных Jettoncliff_end: временная метка, до которой получение невозможноlinear_end: временная метка, после которой доступно 100%claimed: накопленная сумма полученных средств
Высвобождаемая сумма в момент времени t:
releasable(t) =
if t < cliff_end: 0
elif t >= linear_end: total_amount
else: total_amount * (t - cliff_end) / (linear_end - cliff_end)За вычетом уже полученного. Досрочное разблокирование при любых условиях невозможно.
Реестр корней Меркла для Round
Round Engine (Движок раундов) фиксирует 32-байтовый корень Меркла для каждого Round, группируя их каждые 24 часа в одну транзакцию TON:
struct RoundBatch {
uint64 batch_id;
bytes32[] round_roots; // до 1 440 корней за пакет (60 с × 1440 = 24 ч)
uint64 first_round_id;
}Любой пользователь может предоставить:
- Идентификатор Round
r - Путь доказательства Меркла
p - Заявленный результат
(участник, commit, reveal, вес)
Контракт проверяет доказательство Меркла по ончейн-корню. Если оно действительно, результат признаётся; если нет — пользователь может открыть спор.
Dispute Resolver (Разрешитель споров)
При обоснованном споре:
- Round помечается как недействительный.
- Оператор штрафуется на 1 000 $POP из залогового стейка в пользу Treasury.
- Затронутые пользователи получают возмещение из призового фонда Round.
- Round повторно урегулируется на основе канонических логов Engine.
Контракты управления
Три контракта:
Proposal_Registry: хранит предложения, отслеживает жизненный цикл.Vote_Tallying: подсчёт квадратичных голосов с учётом веса репутации.Execution_Module: исполняет принятые предложения (изменение параметров, выплаты из Treasury).
Полный жизненный цикл описан в разделе Управление.
План аудита
- Внутренняя проверка: непрерывно, командой протокола + внешними консультантами.
- Внешний аудит 1: целевой, компания Trail of Bits, Q3 2026.
- Внешний аудит 2: целевой, компания OtterSec, Q4 2026.
- Bug bounty: запускается на TGE с выделением из Treasury до $500 000 за критическую находку.
Контракты не будут развёрнуты в основной сети без двух чистых внешних аудитов.