Trufill
Документация

Whitepaper и проверяемое ядро

Что такое Trufill, как устроен обмен, откуда берётся комиссия — и где всё это можно проверить самостоятельно: адреса контрактов по сетям, исходный код, тесты. Мы предпочитаем показывать строку кода, а не обещание.

Редакция 3Стадия: Base mainnet — ограниченный срез; тестовые сетиОбновлено 28 сентября 2026

Что это — и чего это не

Trufill — некастодиальный агрегатор обмена криптовалюты. Движок сравнивает доступные подключённые источники по ожидаемому выходу после комиссии агрегатора и пула. Gas учитывается отдельно. С 28 сентября 2026 открыт ограниченный срез Base mainnet; тестовые сети (Ethereum Sepolia, Base Sepolia, Arbitrum Sepolia) остаются.

Название происходит от true fill: fill — фактически исполненный обмен. Мы сравниваем котировку с результатом; равенство в отдельном тесте на фиксированном состоянии не гарантирует такой же выход в будущей транзакции.

Чего здесь нет. Нет биржи, нет токена, нет депозитов на счёт сервиса. Контракты работают в Base mainnet (ограниченный срез) и в тестовых сетях; внешнего аудита нет. Любые слова про «инвестиции в Trufill» или «покупку токена» были бы ложью — их и нет.

Первый срез в mainnet — Base

28 сентября 2026 (около 18:40 МСК) открыт первый ограниченный срез в Base (chainId 8453): пара WETH и нативный USDC, прямой обмен через один пул Uniswap v3, комиссия агрегатора Trufill — 0%. Gas и комиссия пула остаются. Публичный шлюз api.trufill.xyz и терминал swap.trufill.xyz обслуживают Base с этой даты; тестовые сети продолжают работать.

Ограничение среза одной парой и одним пулом — политика шлюза и интерфейса, а не свойство контракта: AggregatorRouter permissionless, прямой вызов с другой парой или пулом никем не блокируется. Onchain-списка разрешённых пар, лимита капитала и «выключателя» у контракта нет.

Владелец ParamTimelock и получатель комиссии — Safe 0x7999…22E7, сегодня с одним ключом (1-из-1) — это не мультисиг. Второй независимый ключ планируется до включения любой ненулевой комиссии. Адреса контрактов выпуска — в разделе «Проверяемое ядро»; тестнет-адреса не подходят для сделок в Base mainnet. Внешнего аудита нет — см. риски.

Как устроен обмен

Депозит на счёт сервиса не требуется. Подготовка токена (wrap или approve) и сам swap могут потребовать отдельных транзакций и gas. Порядок такой:

  1. Опрос маршрутов. Шлюз проверяет подключённые источники Uniswap v2/v3 для выбранной сети и пары. Это не поиск по всем площадкам и не доказательство лучшей цены на всём рынке.
  2. Котировка и минимум. Котировка показывает ожидаемый выход после комиссии. Перед подписью проверяются amountOutMinimum, сумма, сеть и адрес контракта.
  3. Swap. Контракт проверяет минимальный выход после комиссии. Если он недостижим или истёк deadline, swap откатывается. Gas при откате расходуется.

Контракт-роутер (AggregatorRouter) хранит адреса своих зависимостей как immutable и защищён от повторного входа (ReentrancyGuard). Токены с комиссией на переводе и ребейз-токены не входят в поддерживаемый каталог. Совместимость неизвестного токена нельзя вывести из наличия пары.

Экономика

И на Base mainnet, и в опубликованном тестовом режиме комиссия агрегатора — 0%, поэтому дохода от неё нет. Код допускает ставку до 0,30% в конкретном развёртывании. Это возможность модели, а не заявление о текущей выручке.

  • Потолок 0,30% зашит в байт-код. Константа MAX_FEE_BPS = 30 из 10 000. Поднять её не может никто, включая владельца контракта: это не настройка, а свойство скомпилированного кода.
  • Ставка проверяется по сети. На Base mainnet feeBps = 0 (28.09.2026), в опубликованных тестовых замерах — тоже 0. Актуальное значение читается из нужного FeeSwitch; gas и комиссия пула сохраняются. Изменение ставки проходит через таймлок с задержкой 2 суток и видно заранее.
  • Комиссия вычитается, а не добавляется. Показанное число уже за вычетом; надбавки при подтверждении нет.
  • Токена нет и он не продаётся. Никаких пресейлов и сборов. При нулевой ставке дохода от комиссии нет.

Проверяемое ядро

Ниже адреса развёртываний: Base mainnet (28.09.2026) и тестнеты (сентябрь 2026). Наличие кода по адресу само по себе не доказывает его версию и настройки; контракты Base верифицированы — Sourcify exact match и Basescan, исходники закреплённой ревизии 637cffc.

Base mainnet · chainId 8453

AggregatorRouter
0x877A4Bb039c8146cfB8daAe36CfB5AE1e9BD1060

FeeSwitch (feeBps 0)
0x802F0CA0F62bD66c2117B4392d8350578E442cdc

ParamTimelock (задержка 2 суток)
0x9a8F32F16FB9d99Ba26EE957d5Ca53798Ebf256C

Исходный код

Опубликованные ниже исходники ядра под лицензией Apache-2.0 относятся к историческому тестовому развёртыванию. Выпуск Base mainnet собран из закреплённой ревизии 637cffc839bba8000c94835a665720f064a4d658; соответствие развёрнутого байткода этим исходникам зафиксировано верификацией (Sourcify exact match, Basescan) по адресам выше. Сам факт публикации исходника совпадение не доказывает:

  • FeeSwitch.sol — комиссия с потолком-константой;
  • AggregatorRouter.sol — своп через внешний пул с удержанием комиссии и защитой минимума;
  • ParamTimelock.sol — смена параметров через заявку с задержкой.

Вместе с контрактами опубликованы интерфейсы внешних пулов и точные настройки компиляции (solc 0.8.28, optimizer 200 runs, cancun, OpenZeppelin v5.7.0) — опубликованное собирается в байт-код воспроизводимо.

Статус проверки. Контракты Base mainnet (28.09.2026) верифицированы: Sourcify exact match и Basescan, исходники — ревизия 637cffc. Для тестнет-развёртываний 10.09.2026 была опубликована проверка Sourcify Exact Match. Верификация байткода — не внешний аудит: она доказывает, какой код развёрнут, а не что он безопасен. Версию кода и параметры каждого нового релиза требуется сверять заново.

Тесты и целостность

  • В исторических тестах на фиксированном состоянии форка сравнивались котировка и исполнение: расчёт сверяется с дельтой баланса после реального исполнения в EVM (а не расчёт с расчётом), на двух путях (v3 и v2) и с ненулевой комиссией; расхождение — ноль.
  • В репозитории есть проверки границ GPL/Apache и дрейфа лицензий. Результат CI относится к конкретному SHA и не заменяет проверку нового релиза.

Что доказано, а что нет

Локальный тест проверяет выбранный код и зафиксированное состояние цепи. Это не гарантия безопасности или будущей цены на живой сети.

  • Исторические тесты: на выбранном фиксированном состоянии показанное число совпало с полученным до последней единицы; это утверждение ограничено условиями этих тестов.
  • Не обещано: на живой сети между котировкой и включением транзакции состояние пула меняется от чужих сделок. Для поддерживаемой пары WETH/USDC контракт проверяет нижний порог (ваш amountOutMinimum), но не точное равенство котировке. Неподдерживаемые токены, в том числе с комиссией на переводе, имеют отдельные риски.

Подробнее о параметрах доверия, методологии выбора цены и защите от MEV — на странице Прозрачность.