Статус

Эта документация описывает протокол в соответствии с принятыми решениями. Часть описанного ещё не реализована в коде. Эта страница точно указывает, какая именно.

Решено и реализовано

  • Комиссия, по умолчанию 5 %, и две её схемы
  • TreasuryVault, его границы оракула и отсутствие вывода
  • BuybackBurner и маховик $STOCKFUN
  • Аварийный режим, немедленный с 2026-10-05
  • Кросс-чейн канал в Robinhood Chain, подготовлен и протестирован в симуляции, работает в одну сторону с тех пор, как 2026-09-28 был удалён обратный путь, и прошёл от начала до конца в двух тестнетах через LayerZero 2026-10-06 (см. ниже)
  • Односторонний запуск токена протокола $STOCKFUN
  • Удаление байбэка создателя, 2026-09-28
  • Переработка схемы запуска, 2026-09-28: больше нет ни бондинг-кривой, ни градуации; каждый рынок создаётся вместе со своими двумя заблокированными позициями, по умолчанию 700 млн и 300 млн, и необязательной покупкой создателя в той же транзакции
  • Комиссия за создание, по умолчанию 0,001 ETH, с 2026-10-05 — настройка владельца
  • Убывающий антиснайп и вайтлист создателя — по умолчанию не более 20 адресов, освобождённых от антиснайпа при торговле через официальный роутер; официальный роутер по-прежнему может сменить владелец
  • Комиссии создателя, которые хранятся на хуке, рынок за рынком, и которые клеймит создатель; с 2026-10-01 также доли команды и байбэка, выплачиваемые через клеймы, которые может запустить любой
  • Владение, записываемое ончейн для токена каждого рынка и для $STOCKFUN, с 2026-10-02 — регистратором владения, который каждый токен вызывает при каждом переводе. На 2026-10-01, когда запись ещё велась в токенах, это добавляло примерно от 52 000 до 61 000 газа к каждому переводу между двумя кошельками — больше, чем оценка от 20 000 до 40 000, сделанная при принятии решения. PoolManager Uniswap не записывается, поэтому своп оплачивает сторону трейдера и, с 2026-10-01, одну запись учитываемого саплая: 113 529 газа за покупку через роутер и 137 250 — за продажу, для кошелька, который уже держит токен (125 862 и 150 416 до исправлений от 2026-10-01, которые также убрали две отправки из каждой сделки)
  • Никакой LP-комиссии Uniswap в пулах StockFun по умолчанию, с 2026-09-29: налог — это вся стоимость сделки
  • Исправления по итогам аудита безопасности от 2026-09-29, внесённые 2026-09-30 и 2026-10-01: ликвидность только от лока ликвидности; доли команды и байбэка клеймятся вне сделок; конвертации суммами, которые указывает кипер, с деньгами, зарезервированными акция за акцией; учитываемый саплай, знаменатель аирдропа, в каждом токене; канал Robinhood Chain, где один рынок больше не блокирует батч, а удалённый хаб на паузе всё равно применяет смены ролей. У каждой исправленной находки есть регрессионные тесты
  • Пайплайн безопасности от 2026-10-01 — второй раунд аудита, который доработал несколько из этих исправлений: на Robinhood Chain маршрут v3 исполняется по одному пулу за раз, а канонический тикет учёта выплачивает не больше записей, чем поставил в очередь; аварийное перемещение, которое опускает деньги волта ниже его резервов, аннулирует их; кипер удерживает n−1 единиц на последней акции корзины. У каждого исправления есть регрессионные тесты
  • Переработка под апгрейд от 2026-10-02: каждый модуль, кроме токенов, лока ликвидности и деплоера зеркальных волтов, стоит за прокси, и владелец StockFun может апгрейдить его с немедленным вступлением в силу; волты — по одному прокси на рынок, в обеих сетях; токены сведены к простому ERC-20 с одним сеттером, setRecorder, и, с 2026-10-05, функциями спасения; запись владения вынесена в отдельный модуль; прокси хука намайнен со всеми 14 разрешениями v4; режим завершения лока ликвидности с 30-дневным сроком предварительного объявления; раскладки хранилища записаны и проверяются скриптом. Своп стоит примерно на 27 000 газа больше при изолированном измерении: покупка — 237 190 газа вместо 210 105, продажа — 285 031 вместо 258 278
  • Контракт аирдропа, 2026-10-04: AirdropDistributor на Ethereum, апгрейдируемый и привязанный к фабрике, который получает акции через sendToAirdrop на обоих волтах, и маршрут аирдропа на удалённом хабе. Ежедневные циклы, окно которых закрывается в 13:00 UTC, доли, рассчитанные по записанному владению, клейм каждым холдером за свой счёт, без срока, потолка и минимума, список исключений для каждого токена, акции, отложенные для окна без допустимого владения, аварийный режим. 514 тестов вне форк-наборов проходят, включая инвариант с состоянием; LayerZero в тестах заменён моками. Codex проверил дизайн, код и, дважды, исправления, и его финальная проверка не нашла ни одного бага. Не задеплоен
  • Решения от 2026-10-05: никакой аллокации команде, весь саплай $STOCKFUN — в его заблокированной позиции; немедленное аварийное перемещение и немедленная замена адаптера; каждое число протокола — ончейн-настройка владельца, в обеих сетях, а сегодняшние значения — значения по умолчанию, при этом каждый пул сохраняет LP-комиссию и шаг тиков, с которыми был создан. Написано и протестировано, не задеплоено
  • Правило проектирования основателя от 2026-10-05: один сбой никогда не блокирует остальное, а у каждого контракта, который может держать средства, есть рычаг, чтобы вывести застрявшее, с одним намеренным исключением — сообщением токена своему регистратору владения; см. Архитектура. Четвёртый цикл аудита того дня внёс его в код: доставки через мост, которые никогда не блокируют другой рынок, клеймы, которые выплачивают то, что могут, каждое звено покупки, каждая акция аирдропа и каждый рынок батча отдельно, долги, сохраняемые для получателя, который не принимает ETH, вместо остановленного рынка, Lens, который читает по одному волту за раз, и функции спасения на модулях без аварийного режима. Написано и протестировано, не задеплоено
  • Пять циклов аудита от 2026-10-05 и их исправления, среди них: расчёты, урегулируемые после аварийного перемещения и никогда не оплачиваемые из средств другого рынка; батч моста, закреплённый за кипером, и предварительный деплой зеркальных волтов, закреплённый за кипером и владельцем; регистратор, назначенный на живом токене, который больше не ломает торговлю и не измеряет окно, начавшееся до него; оператор запуска $STOCKFUN, исключённый из аирдропа до минта; тикеты канонического канала, оцениваемые по базовой комиссии; проверка хранилища на всех уровнях вложенности; правило выше. У каждого исправления есть регрессионный тест; в конце дня проходят 614 тестов Foundry, а три форк-сьюта пропущены без RPC. Не задеплоено
  • Шаг аирдропа в кипере и экран клейма в dapp, 2026-10-05, вместе с новыми обязанностями кипера: выплатой того, что хук и лок удерживают для получателя, оповещениями о том, что продолжает давать сбой, планированием звена каждой акции отдельно, файлом состояния, который переживает перезапуски, и ежедневным сбором LP-комиссий. Не задеплоено
  • Офчейн-проход пятого цикла аудита, 2026-10-06: кипер конвертирует ETH волта раз за окно аирдропа, как решено 2026-09-27, записывает каждую транзакцию до того, как начинает ждать её квитанцию, и держит блокировку на своей папке состояния, а также больше не оплачивает аттестацию Ondo для покупки, которая может только не пройти; корзина содержит не более пяти акций; Lens содержит состояние и долги каждого волта; скрипт запуска $STOCKFUN возобновляет остановившийся запуск; приложение учитывает ETH, причитающийся волту, оставляет клеймам запас для акции, которая ещё в пути, запоминает акцию, которую отклонил её токен, и никогда не показывает непрочитанную цифру как ноль. Проходят 619 тестов Foundry, три форк-сьюта пропущены без RPC. Репетиция в приватной сети в тот же день провела кипера от начала до конца через два окна и прошла свои шесть сценариев. См. Кипер и Dapp. Не задеплоено
  • Находки репетиции, исправленные 2026-10-06: кипер размещает акции, которые контракт аирдропа держит отложенными для рынка, даже когда его волту нечего нового отправить, поэтому рынок, на котором однажды прошла сделка и который затем затих, больше не держит свой первый аирдроп вне досягаемости своих холдеров; он записывает волт, найденный ниже порога, по его окну, а не по собственным часам; а файл локального деплоя сверяется с блокчейном до того, как его используют кипер, приложение или воркер. Проходят 620 тестов Foundry, три форк-сьюта пропущены без RPC. См. Кипер. Не задеплоено
  • Шестой цикл аудита, исправлено 2026-10-06: на каноническом мосту кипер следит за каждым тикетом, пока не узнает, что тот исполнен, независимо от зачисления его перевода, и зачисляет перевод только по событиям удалённого хаба; USDC волта уходит один раз после каждой конвертации его ETH и не чаще раза за окно в остальных случаях, как решено для ETH 2026-09-27, при этом покупки на Robinhood Chain по-прежнему выполняются на каждом проходе; поиск отложенных акций, который ничего не может разместить, для волта, которому нечего отправлять, больше не отправляется каждый день; волт ниже порога проверяется по балансу, прочитанному после закрытия окна; каждый волт котируется на собственном роутере; приложение помечает цену $STOCKFUN как «(last read)», пока Lens не может её прочитать. См. Кипер. Не задеплоено
  • Седьмой цикл аудита, исправлено 2026-10-06: кипер отправляет в аирдроп только то, что стоит того, во что обходится его отправка, и пыль, которую мост не может перенести, больше не считается тем, что нужно отправить; он читает каждый канонический тикет, начиная с квитанции его создания, поэтому живой депозит никогда не принимается за исполненный; каждый поиск по логам останавливается на несколько блоков ниже последнего блока; он отказывается запускаться на RPC, который обслуживает не ту сеть, что задана в конфигурации; оповещения, которые не принял его вебхук, сохраняются и отправляются снова; пустая настройка принимает своё значение по умолчанию. Worker данных приложения читает каждый апгрейдируемый контракт отдельно, показывает объём за 24 часа как неизвестный, пока его чтения сделок не проходят, и проверяет сеть каждого эндпоинта; график цены ставит каждую точку в её время. Проходят 620 тестов Foundry (615 вне форк-файлов и пять тестов форк-сьюта Robinhood Chain на его публичном RPC; три форк-сьюта Ethereum пропущены без RPC); проходят 277 тестов кипера, 51 — общего пакета, 9 — бэкенда и 137 — воркера. См. Кипер и Dapp. Не задеплоено
  • Защиты ценовых фидов на Robinhood Chain, написанные 2026-10-06: оракул придерживает цену акции, пока её токен сообщает, что его оракул на паузе из-за корпоративного действия, — включено для каждой акции, — и каждую цену, пока фид аптайма секвенсора от Chainlink сообщает, что секвенсор не работает или только что восстановился. Для Robinhood Chain такого фида нет, поэтому эта вторая проверка при деплое выключена, по явному выбору, пока такой фид не будет опубликован. Обе — настройки владельца, выключенные на Ethereum. См. Канал Robinhood. Не задеплоено
  • Восьмой цикл аудита, исправлено 2026-10-06: форма запуска в приложении предлагает только корзины, прочитанные из блокчейна, и снова проверяет выбранную перед отправкой; кипер следит за батчем моста, когда его блок ушёл на несколько блоков вглубь, отличает пыль моста от акции, комиссию которой нельзя котировать, хранит одно ожидающее оповещение на каждое отдельное оповещение, удерживает файл состояния другой сети, пока не прочитает сеть своего RPC, требует оба идентификатора сети, читает тикет на несколько блоков ниже последнего и учитывает открытие на локальном канале один раз; кипер, его префлайт и его инспектор, Worker и приложение научились работать с защитами ценовых фидов; окно сделок Worker никогда не сдвигается назад, а панель торговли берёт с кошелька из вайтлиста обычный налог. Проходят 640 тестов Foundry (633 вне форк-файлов и семь тестов форк-файла Robinhood Chain на его публичном RPC; три форк-сьюта Ethereum пропущены без RPC); проходят 306 тестов кипера, 51 — общего пакета, 9 — бэкенда и 155 — воркера. См. Кипер и Dapp. Не задеплоено
  • Газ доставки аирдропа при апгрейде Ethereum Glamsterdam, который Sepolia активировала 2026-10-06: решение основателя того дня — кипер симулирует каждую доставку и выбирает её газ в пределах, которые владелец StockFun задаёт на удалённом хабе, и повторно выполняет доставку, которая всё же застряла, с оповещением о втором сбое. Написано и протестировано, применено в тестнетовом запуске апгрейдом, не задеплоено в мейннет. См. Кипер
  • Девятый цикл аудита, исправлено 2026-10-06, с находками тестнетового запуска LayerZero: кипер в течение минуты читает на блоке своей последней транзакции и там же оценивает газ того, что отправляет следом, даёт каждой транзакции её оценку плюс 25 %, доставляет свои ожидающие оповещения в том порядке, в каком они подавались в последний раз, больше не оповещает о тикете, который удалило его собственное исполнение, а его префлайт работает на тестнетовом деплое; Worker сохраняет то, что он узнал о своих RPC, когда его объект Cloudflare засыпает, и записывает собственный блок Robinhood Chain; приложение даёт каждой транзакции собственный лимит газа, помечает сумму казны, которая является оценкой, и никогда не принимает одобрение, которое не удалось прочитать, за его отсутствие. С этого цикла второй агент проверяет каждое исправление перед его пушем, и его находки исправляются так же. Проходят 653 теста Foundry (646 вне форк-файлов и семь тестов форк-файла Robinhood Chain на его публичном RPC; три форк-сьюта Ethereum пропущены без RPC); проходят 370 тестов кипера (372 после последнего исправления шлюза), 51 — общего пакета, 9 — бэкенда и 189 — воркера. См. Тестирование и верификация. Не задеплоено в мейннет
  • Десятый цикл аудита, исправлено 2026-10-06: каждая рассылка (broadcast) деплоя берёт оценку газа ноды, поскольку собственной цифры инструмента деплоя при Glamsterdam не хватает ни одному созданию; последний шаг батча моста на Robinhood Chain получает базу плюс долю на каждый рынок, не более 17 рынков на батч, причём кипер больше не отправляет и сообщает, где находится застрявший батч; мониторинг аварийных событий кипера указывает свои контракты группами, тексты его ошибок сохраняют от адреса RPC только хост, и он читает каждый рынок через Multicall3; приложение никогда не показывает транзакцию, которую кошелёк отменил, как выполненную, и в течение минуты читает на блоке не раньше блока своей последней транзакции. Адаптер моста тестнета получил апгрейд и провёл свой следующий батч. Проходят 662 теста Foundry (655 вне форк-файлов и семь тестов форк-файла Robinhood Chain на его публичном RPC; три форк-сьюта Ethereum пропущены без RPC), вместе с 2 тестами проекта тестнетового запуска LayerZero; проходят 400 тестов кипера, 51 — общего пакета, 9 — бэкенда и 210 — воркера. См. Тестирование и верификация. Не задеплоено в мейннет
  • Остатки прерванного цикла, доводимые до конца в следующем цикле, решение от 2026-09-27: кипер продвигает деньги, которые волт ещё держит, независимо от порога, не позднее следующего окна

Порядок реализации — по шагам, после каждого из которых репозиторий компилируется, — зафиксирован в projet/docs/FUNCTIONAL_AUDIT_2026-09-28.md.

Решено 2026-09-27, ещё не реализовано

Байбэк создателя и обратный путь моста были удалены из контрактов, кипера и бэкенда 2026-09-28. С 2026-10-04 контракт аирдропа есть в коде, а с 2026-10-05 — шаг аирдропа в кипере и экран клейма в dapp: написаны и протестированы, но не задеплоены. Адаптеров акций в коде пока нет: см. ниже. Приложение в репозитории больше не показывает Treasury Ratio.

Больше ничего. Ежедневный шаг аирдропа в кипере и экран клейма для холдеров в dapp есть в коде с 2026-10-05, а остатки прерванного цикла доводятся до конца в следующем цикле: кипер продвигает деньги, которые волт ещё держит, независимо от порога; см. выше.

Документы в doc/ и спецификация лендинга были приведены в соответствие с этим решением 2026-09-27. В коде сделано удаление байбэка создателя, с 2026-10-04 — контракт аирдропа, с расчётом долей и клеймами, а с 2026-10-05 — шаг кипера и экран клейма.

Решено 2026-09-28, ещё не реализовано

  • Адаптеры акций, которые переносят обёрнутые акции на Ethereum, по одному на акцию: lockbox-адаптер на Robinhood Chain и его OFT на Ethereum. Им нужен пакет LayerZero oft-evm, и в репозитории для мейннета их нет; тесты используют моки, а тестнетовый запуск LayerZero от 2026-10-06 использовал тестовые адаптеры, построенные на этом пакете. Клейм на Ethereum написан с 2026-10-04, а его экран в dapp — с 2026-10-05
  • Конфигурация LayerZero у адаптеров акций, которую держит владелец, без задержки и без лимита на вывод

Решено 2026-09-11, распространено частично

Переход с Ondo на Robinhood Chain окончательно решён, и код канала существует. Не все исходные документы проекта обновлены — см. Ошибки в источниках.

Ни разу не проверено в реальных условиях

  • Деплоя в мейннет не было
  • Транспорт LayerZero не проверялся в мейннете. 2026-10-06 тестнетовый запуск LayerZero провёл батчи моста и доставки аирдропа между Sepolia и тестнетом Robinhood Chain через реальные тестнетовые эндпоинты, DVN и исполнитель LayerZero — семь часовых окон и шесть циклов аирдропа, каждый клейм в точности равен рассчитанной доле. В нём использовались тестовые акции, тестовые адаптеры, тестовый USDG и мок-фиды: он не доказывает ни пару USDG от Paxos, ни акции Robinhood и их адаптеры, ни реальные фиды и ликвидность, ни газ, комиссии и финальность мейннета. См. Канал Robinhood
  • Существующие формальные доказательства не покрывают текущий кросс-чейн канал
  • Семь правил формальной спецификации LiquidityLock остаются нерешёнными на прувере для одного метода, lockProtocolLiquidity, даже с более длинным лимитом времени; на всех остальных методах они выполняются. Повторный прогон от 2026-10-01 на исправленном коде не выявил ни одного нарушенного правила
  • Формальные спецификации обновляются под переработку от 2026-10-02: их последний полный прогон на прувере, 2026-10-01, был сделан до неё. Для аирдропа от 2026-10-04 пять спецификаций, затрагивающих изменённые контракты, проходят проверку типов, без прогона на прувере. 2026-10-05 спецификации были обновлены под настройки, затем под циклы аудита того дня, которые добавили правила о долгах и случайных поступлениях хука, удерживаемых долях лока и каждой функции спасения: они проходят проверку типов, без прогона на прувере с 2026-10-01. Так же проходят проверку типов и новые правила оракула для его защит ценовых фидов, написанные 2026-10-06
  • Выплаты долгов кипером, сбор LP-комиссий, оповещения и файл состояния, написанные 2026-10-05, покрыты его тестами, а с 2026-10-06 — и репетицией в приватной сети: конвертации раз за окно, аирдроп, волт, отклоняющий ETH, и выплата его долгов, остановки посреди работы с файлом состояния и его блокировкой, LP-комиссии. Канал через мост там не проходил; он прошёл от начала до конца в тестнетовом запуске LayerZero от 2026-10-06, под управлением кипера, но ни разу — в реальных условиях
  • Внешнего ревью не проводилось

Что ещё нужно решить до мейннета

  • Актуальный обзор покрытия фидами на Robinhood Chain, а если Chainlink опубликует фид аптайма секвенсора для этой сети, — его установка в оракул (на 2026-10-06 такого фида нет)
  • Лимит размера пути LayerZero, по которому USDG от Paxos идёт на Robinhood Chain, прочитанный до первого батча, и потолок рынков в батче моста, приведённый в соответствие, если лимит отличается от 10 000 байт по умолчанию (с десятого цикла аудита)
  • Стартовая FDV и верхняя граница для позиции $STOCKFUN
  • Оставшаяся работа по аирдропу, перечисленная выше: адаптеры акций. Его параметры определены с 2026-10-04: никакой рассылки кипером, ни потолка, ни минимума, ни срока, список исключений для каждого токена
  • Метрика, которая заменит Treasury Ratio, а также слоган и теглайн, которые описывают накапливающуюся казну
  • Находки второго раунда аудита, проведённого 2026-10-01, всё ещё ожидающие решения владельца: запас на последней акции на стороне контрактов, который меняет задокументированное правило аллокации (R2T-1); и, опционально, деплой волта $STOCKFUN самой фабрикой (R2F-2). С 2026-10-05 волт, который не принимает ETH, больше не останавливает свой рынок, поэтому остановка, которую описывала R2F-2, из-за такого волта больше не возникает

Решено 2026-10-05. Из аудита от 2026-09-29: аттестации Ondo, которыми мог воспользоваться любой, кто их видел (M-7), и роутеры, которые принимали самих себя в качестве получателя (L-4), исправлены, а ротация адаптера моста (M-2, а также связанная с ней L-8) остаётся как есть, по решению владельца. Из второго раунда: взимание налога на покупку в виде claims PoolManager (R2F-1, option b) отклонено, налог взимается по-прежнему; аварийное перемещение денег, записанных на удалённом хабе, чьи записи тогда выплачивались из денег других рынков (R2H-1), покрыто инструментами урегулирования расчётов из циклов аудита того дня вместе с процедурой: на каноническом канале владелец ставит удалённый хаб на паузу перед перемещением; а денежный токен, который отказывает одному зеркальному волту (R2H-2), с четвёртого цикла аудита больше ничего не блокирует: доставка в этот волт ждёт отдельно, а остальные рынки получают выплату.