Trufill
Доверие

Прозрачность

Что контракт может и чего не может — по строкам кода, а не по маркетингу. Параметры доверия, методология «лучшей цены» и как сообщить об уязвимости.

Стадия: тестовая сетьПроверено на цепи 9 сентября 2026

Параметры доверия

Значения ниже прочитаны из задеплоенных контрактов (сеть Ethereum Sepolia) и совпадают с опубликованным исходным кодом.

ПараметрКак в кодеЗначение
Обновляемость (proxy)Зависимости роутера — immutable, прокси нетНе обновляется Смена логики = новый деплой, а не подмена существующего.
Потолок комиссииMAX_FEE_BPS — константа30 / 10 000 = 0,30%. Не поднять никому, включая владельца.
Текущая комиссияfeeBps0 — обмен без комиссии.
Кто меняет комиссиюonlyOwner, проверка ≤ MAX_FEE_BPSВладелец FeeSwitch, и только в пределах потолка.
Задержка на измененияParamTimelock.DELAY / GRACE_PERIOD2 суток ожидания, окно исполнения 14 суток. Заявка видна заранее; execute() может вызвать кто угодно — контроль это задержка, а не вызывающий. renounceOwnership отключён.
Смена роутера своповswapRouterimmutableНевозможна в существующем контракте. Другой роутер — это другой деплой по другому адресу.
Отказ от владенияrenounceOwnership() переопределён на revertЗапрещён: осиротевший таймлок оставил бы созревшие заявки, которые никто не отменит.

Точно о текущем тестнете. Таймлок и мультисиг — это целевая топология для мейннета. Прямо сейчас в тестовой сети владелец FeeSwitch — один ключ деплойера (0xda60…fede), а таймлок задеплоен, но ещё не назначен владельцем и ни к чему не привязан (feeSwitch = 0x0). Это сделано намеренно: пока комиссия равна нулю, параметры теста должны оставаться настраиваемыми без двухсуточного ожидания. Передача владения таймлоку — отдельный осознанный шаг перед мейннетом.

Методология «лучшей цены»

«Лучшая» здесь означает наибольший нетто-выход — что вы получите на руки после всех издержек, — а не наименьшую заявленную цену без учёта комиссии.

Какие источники опрашиваются

Движок котировок параллельно спрашивает пул Uniswap v3 (через SwapRouter02) и любой v2-совместимый пул — как чужой, так и наш собственный. Опрос параллельный; если часть источников недоступна, ответ помечается как degraded, а не отбрасывается целиком.

Как считается комиссия

Ставка в базисных пунктах читается с контракта FeeSwitch (не зашита в клиента) и вычитается из выхода. Показанное число — уже нетто. Сейчас ставка равна нулю.

Как показывается и защищается minOut

Вы задаёте минимально приемлемый выход. Контракт проверяет его после вычета комиссии: userAmountOut < amountOutMinimum → revert. Комиссия не может протолкнуть вас ниже согласованного минимума — иначе обмен отменяется целиком.

Защита от MEV и «сэндвичей»

Защита сегодня — это amountOutMinimum и deadline в самой транзакции: вы не получите меньше своего минимума, а просроченная сделка не исполнится. Честно: приватного потока ордеров (private relay) пока нет. Поэтому на живой сети гарантируется нижний порог, а не точное равенство котировке.

Публичный дашборд точности

Публичного дашборда котировок пока нет — это план. Сейчас свойство «котировка = факт» подтверждается воспроизводимыми тестами на форке (расхождение ноль).

Некастодиальность

«Мы не можем распорядиться вашими средствами» — не пункт соглашения, а свойство конструкции: у сервиса нет счетов, на которых лежали бы ваши деньги, и нет ваших ключей. Токены входят и выходят в пределах одной транзакции, поэтому между транзакциями сервису красть нечего — даже при полном взломе инфраструктуры.

Аудит и сообщение об уязвимостях

Внешнего аудита пока нет. Он предшествует мейннету, и до него в проекте нет реальных средств, реальной кастодии и мейннет-ключей. Публичная программа вознаграждений (Immunefi/HackenProof) — план после аудита.

Нашли проблему безопасности — напишите в Telegram @trufill. Машиночитаемые контакты и политика — в security.txt. Пожалуйста, дайте разумное время на исправление до публичного раскрытия.