TGViewer
MetaLamp | CIS MetaLamp | CIS @metalampru · 1.6K subscribers
Post #696 1.04K
🚽 Tron: Три нюанса, о которых нет в доке.

1000 лет ничего не деплоил в замечательную сеть Tron. Ниже опишу то, с чем я столкнулся сегодня.

1️⃣ Опкод `mcopy` сломал компиляцию, хотя мой контракт его даже не использует

Наследовался от контракта из OpenZeppelin 5.6.1 — компиляция падает.

Оказалось, внутри зависимостей AccessControlEnumerable → EnumerableSet → Arrays
используется опкод MCOPY (EIP-5656), который доступен только с Cancun. У меня стояла версия для компиляции: 'istanbul'. Попотел над поиском проблемы знатно.

Отмечу, что я не сам придумал использовать istanbul, я взял это из доки TronBox 😡. Поэтому, если используете свежий OZ, то ставьте сразу 'cancun'.

2️⃣ TronBox тихо съедает аргумент конструктора

У меня скрипт деплоя чуть сложнее, чем деплой ERC-20. Конструктор принимает много параметров и я подумал, что хочу объединить все это в структуру Config. Тогда скрипт деплоя/миграции вот такой

...

const config = [param0, param1, ... , paramN]; // Массив (tuple) в деплой скрипте описывает мою структуру для конструктора моего контракта

await deployer.deploy(MyContract, config);

....


TronBox плюнул ошибку: constructor expected 1 arguments, received 0.

Прикол! Зову Гарри Поттера Claude, лезем в исходники самого TronBox. Внутри есть проверка typeof lastArg === "object", которая считает последний аргумент «опциями деплоя»... и массивы у JS тоже typeof === "object". Получается мой единственный аргумент TronBox принимал за опции деплоя и стирал.

Подсунул пустой объект последним аргументом, чтобы TronBox мог продолжить заниматься этим непотребством.

await deployer.deploy(MyContract, config, {});


Не передавайте массив как последний аргумент без {} и вообще будьте на стороже...

3️⃣ Больше не надо удалять дубли
ait deployer.deploy(MyContr
руками во flatten файле для верификации.

Если вы хоть когда-нибудь деплоили в Tron, то вы знаете, что там нельзя верифицировать контракт привычным для EVM блокчейнов способом.

TronScan предлагает собрать контракт со всеми зависимостями в один файл, который он компилирует и проверяет. При этом Tron не умеет верифицировать набор файлов.

Самое нудное! Перед верификацией нужно удалить из этого собранного воедино файла дубли SPDX-License-Identifier. Если что, то это официальная рекомендация Tron! У меня их получилось ни много, ни мало 22 штуки.

И вот TronBox наконец-то подвез фичу, которая делает это за вас! Они заключили соглашение с клодом, чтобы тот научился мать вашу удалять дубли автоматически. Объясняешь клоду ситуацию и он все делает по-красоте. Я прям кайфанул, как-будто клод мне золотого бота написал для Polymarket!

Пожалуй это самое полезное, что для меня когда либо сделал Claude Code. Советую попробовать 😁

P.S. Третий пункт оказывается и правда исправлен в TronBox@4.6.0. У меня был TronBox@4.5.0, поэтому нужно было заниматься удалением дублей руками.

Поднял версию и проблемы больше нет. Снимаю шляпу, пост только вышел, а проблема уже исправлена)

#павел_найданов

🤟 Сайт | ТГ-канал | Наш чат
More from @metalampru
  1. Sep 17, 2026Uniswap v4 hooks were a mistake Это всего лишь громкий заголовок в статье от 0x. Моя лента…
  2. Sep 15, 2026Post #706
  3. Aug 31, 2026❣️ Tenderly: история верификации от первого лица Когда постоянно пользуешься Tenderly для…
  4. Aug 13, 2026🔐 Опенсорс как бизнес, что нужно институционалам и про безопасность DeFi: разговор с Ники…
  5. Aug 6, 2026Сказ о том как я ИИ-сотрудника искал Обложку для поста я видел несколько месяцев назад, до…
  6. Aug 3, 2026Post #702
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →