Развёрнутый контракт стейблкоина USD1 содержит две функции, которых нет в публичном репозитории World Liberty на GitHub. Функция drain переводит весь баланс замороженного адреса владельцу контракта, функция reallocate переносит с замороженного адреса заданную сумму на другой кошелёк. Согласие держателя ни в том, ни в другом случае не требуется. Расхождение обнаружил Джастин Сан, сравнив живой контракт в верифицированных обозревателях блокчейна с опубликованным исходным кодом.

Коротко

  • В контракте есть drain и reallocate, в публичном репозитории их нет.
  • Обе функции работают только с замороженными адресами и только у привилегированных операторов.
  • Инициализаторы версии V2 в публичном коде тоже не отражены.
  • Предложение USD1 — около 4 млрд долларов против пика в 5,3 млрд в феврале.
  • Сейчас эмитент — BitGo; выпуск должен перейти к World Liberty Trust Company.
  • Развёрнутый код виден в обозревателях: от постороннего он не скрыт.

Что именно расходится

Важно развести две вещи, которые легко смешать. Сам контракт публичен и верифицирован — любой желающий может прочитать его байт-код и убедиться, какие функции там есть. Скрытым не является ничего. Расхождение в другом: разработчик или инвестор, который смотрит официальный репозиторий проекта, полного набора административных полномочий не увидит. То есть проблема не в тайне, а в том, что официальная документация не соответствует работающему коду.

Функция Что делает Где есть
drain Переводит весь баланс замороженного адреса владельцу контракта только в контракте
reallocate Переносит заданную сумму с замороженного адреса на другой только в контракте
Инициализаторы V2 Служебные функции версии контракта только в контракте

Чего эти функции не означают

Ни один из источников не утверждает, что резервы USD1 неполны или обеспечение испорчено. Функции не дают произвольному пользователю доступа к чужим средствам и не позволяют переводить деньги с любого кошелька в любой момент: они работают за привилегированными правами и только над замороженными балансами. Обвинение Сана в злом умысле в отчётах сопровождается оговоркой о недостаточности доказательств.

Почему это важно именно сейчас

История разворачивается на фоне перехода эмиссии в банковскую структуру. В августе криптобанк проекта получил предварительное условное одобрение OCC, и именно этой структуре предстоит взять на себя выпуск и хранение USD1 вместо BitGo. Прозрачность кода в такой момент перестаёт быть вопросом вкуса разработчика: она становится частью того, что оценивает регулятор.

Параллельно продолжается тяжба Сана с проектом — на этой неделе он добился публичности процесса. Заморозка адресов уже приводила к конфликту с биржей: HTX и World Liberty спорили о санкционных адресах, а сама биржа сняла USD1 с торгов.

Что здесь стоит понимать отдельно

Собственное наблюдение: спор идёт не о том, должен ли эмитент уметь замораживать средства. Уметь он обязан — этого требуют и санкционные режимы, и любой банковский регулятор, и ровно те же полномочия есть у Tether и Circle. Спор о другом: в регулируемых финансах полномочие описывают до того, как им пользуются, и описывают в документе, который читает клиент. Здесь порядок оказался обратным — функция появилась в коде, а в официальном описании её нет. Для проекта, который просится в банковский периметр, это неудобнее самого полномочия: банк отличается от смарт-контракта не набором прав, а обязанностью объявить их заранее. И именно поэтому вопрос «почему репозиторий не обновили» останется без хорошего ответа независимо от того, был ли умысел.

Чего пока не известно

World Liberty публично не прокомментировала расхождение — реакции по существу кода в отчётах нет. Не известно, почему репозиторий не привели в соответствие: небрежность, техническая недоработка или сознательное умолчание. Не сообщается и о том, применялись ли drain или reallocate на практике.

Частые вопросы

Мои USD1 могут забрать?

Функции работают только с адресами, которые уже заморожены, и только у привилегированных операторов. Произвольного доступа к чужим кошелькам они не дают.

Значит ли это, что резервы неполные?

Нет. Ни один источник не связывает найденные функции с состоянием обеспечения.

Код был скрыт?

Нет. Развёрнутый контракт верифицирован и доступен в обозревателях. Не совпадает с ним публичный репозиторий проекта.

Кто нашёл расхождение?

Джастин Сан, который сравнил живой контракт с опубликованным исходным кодом. С проектом он судится по поводу замороженных активов.

Сколько сейчас USD1 в обращении?

Около 4 млрд долларов. Пик приходился на февраль — 5,3 млрд.

Источники