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.
Прикол! Зову
Подсунул пустой объект последним аргументом, чтобы 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, поэтому нужно было заниматься удалением дублей руками.
Поднял версию и проблемы больше нет. Снимаю шляпу, пост только вышел, а проблема уже исправлена)
#павел_найданов
🤟 Сайт | ТГ-канал | Наш чат
