Объяснение TVM: виртуальная машина TRON для разработчиков — TRON Wiki

Объяснение TVM: виртуальная машина TRON для разработчиков

10 мин чтения · ⌘K поиск

Виртуальная машина TRON (TVM) выполняет байт-код смарт-контракта в блокчейне TRON. Разработчики пишут Solidity (или Vyper в некоторых инструментах), компилируют в байт-код TVM и развертывают через TronBox или TronWeb. Наследие EVM от TVM означает, что многие шаблоны Ethereum переносятся напрямую, но измерение ресурсов и особенности цепочки различаются.

В этом руководстве объясняется архитектура TVM, сравнение EVM, затраты на электроэнергию и практические последствия для разработчиков dApp.

роль TVM в TRON

При вызове маршрутизатора TRC-20 transfer или SunSwap:

  1. Транзакция включает адрес контракта + данные вызова.
  2. TVM загружает байт-код контракта.
  3. Выполнение опкодов (SLOAD, CALL и т. д.)
  4. Обновления состояния (балансы, хранение)
  5. Записи о приемке использованной энергии, успех/неуспех

TRX при переводах без контрактов используется более простая проверка — для базовых переводов не требуется полное выполнение контракта TVM.

TVM против EVM

АспектEVM (Эфириум)ТВМ (TRON)
ЯзыкСолидность первичнаяСолидность первичная
Газовый жетонЭТФЭнергия + Пропускная способность / сжигание TRX
Блокировать время~12 с~3 с
Формат адреса0x шестнадцатеричныйBase58 T...
ОснасткаКаска, Литейное производствоТронБокс, ТронIDE

Большинство паттернов ERC-20 соответствуют TRC-20. Межсетевое портирование по-прежнему требует:

  • Перекомпилировать для TVM
  • Повторно протестировать все внешние вызовы и оракулы.
  • Отрегулируйте FeLimit и GasLimit.

См. Solidity на TRON.

Энергия и комиссионный лимит

Выполнение TVM потребляет Энергию (концептуальная роль аналогична газу):

  • Пользователи замораживают TRX → получают Энергию.
  • Без энергии TRX горит с динамической скоростью.
  • feeLimit ограничивает максимум TRX сжигания за транзакцию (солнечные единицы)

Разработчикам контрактов следует оптимизировать хранилище и циклы — дорогие контракты обходятся пользователям дороже переводов USDT.

Код
await contract.method().send({ feeLimit: 150_000_000 });

Bandwidth

Простые транзакции потребляют пропускную способность (бесплатная дневная квота + замороженный TRX). Вызовы смарт-контрактов в первую очередь влияют на энергию, но пропускная способность по-прежнему применяется к байтам транзакций.

Байткод и компиляция

Solidity → Байт-код TVM через solc с патчами TRON. TronBox выводит версии компилятора. Байт-код развертывается через:

  • Код операции CREATE при миграции
  • ⟦Т51⟧ ⟦Т5⟧

Развернутый адрес — T... Base58, полученный из создателя + nonce.

Предварительно скомпилированные контракты

TVM включает прекомпиляции для проверки подписи, хеширования и т. д. Адреса отличаются от адресов Ethereum — жестко запрограммированные предположения address(0x1) могут не работать.

REVERT и отладка

При неудачном выполнении TVM возвращается REVERT — никаких изменений состояния, кроме потребления комиссии. Отладка через:

  • TronScan вкладка внутренних транзакций
  • Воспроизведение тестовой сети Shasta
  • Меньшие тестовые контракты, изолирующие логику

Шаблоны обновления

Шаблоны прокси (стиль EIP-1967) существуют на TRON с адаптациями. Возможность обновления добавляет риск безопасности — пользователи должны доверять ключам администратора.

Журналы событий

TVM создает журналы, используемые индексаторами и прослушивателями событий. Transfer мощность событий USDT обнаружение депозитов.

ТТХ {#производительность}

3-секундные блоки обеспечивают отзывчивый UX, но увеличивают необходимость реорганизации для мгновенной доставки ценных материалов (редкая проблема в цепочках TRON по сравнению с PoW).

Различия кодов операций TVM и EVM

Учет энергии отличается от газа Ethereum — цены на коды операций не идентичны. Циклы и запись в хранилище обходятся дороже в относительном выражении для некоторых операций. Профильный контракт Energy в тестовой сети с energy_usage_total в квитанциях о транзакциях перед запуском основной сети.

Сводка модели ресурсов

Выполнение TVM потребляет энергию; байты транзакции потребляют пропускную способность. Разработчики, работающие по контракту, оптимизируют работу, сокращая количество операций записи в хранилище и сокращая циклы, чтобы снизить затраты пользователей. Пользователи замораживают TRX, чтобы получить энергию — пользовательский опыт вашего dApp напрямую зависит от того, насколько энергозатратны функции вашего контракта.

Контрольный список устранения неполадок

Если что-то пойдет не так на TRON, отнеситесь к этому как к проблеме структурированной отладки: подтвердите точный txid в цепочке, проверьте адрес целевого контракта и только затем решите, можно ли устранить сбой. В TRON многие «загадочные» проблемы — это просто одна из следующих: неправильная сеть (основная сеть или тестовая сеть), неправильный контракт токена (поддельный USDT / токены с одинаковым названием), недостаточность ресурсов (OUT_OF_ENERGY / пропускная способность) или задержка пользовательского интерфейса/индексатора между кошельком и проводником.

Начните с этих цепочек проверок:- Всегда копируйте полный txid/хэш из своего кошелька или проводника.

  • Подтвердите статус результата передачи на TronScan (SUCCESS, REVERT, OUT_OF_ENERGY или все еще в ожидании).
  • Проверьте, соответствует ли адрес получателя/договора тому, что вы намеревались отправить.
  • Если это вызов контракта, убедитесь, что селектор функций и параметры соответствуют стандарту токена, который, по вашему мнению, вы используете (TRC-20 vs TRC-10 vs BEP-20 на BSC).

Затем примените путь исправления для вашей категории:

  • Подтвердите статус и параметры транзакции.
  • Проверка адресов (контракт токена, получатель, маршрутизатор/отправитель).
  • Добавляйте или делегируйте ресурсы (энергию/пропускную способность), если сбой связан с ресурсами.

Распространенные ошибки

Эти шаблоны вызывают большинство сбоев на уровне пользователя:

  • Использование адресов основной сети в тестовой сети (или наоборот).
  • Копирование символа токена вместо фактического адреса контракта TRC-20.
  • Подписание неправильного адреса одобрения/платежа, поскольку ссылка пользовательского интерфейса является вредоносной или устаревшей.
  • Повторная попытка без изменения ошибочного ввода (например, REVERT продолжает возвращаться до тех пор, пока вы не исправите параметр).

Если вы не уверены, не «просто отправьте еще раз». Внесите одно контролируемое изменение, проверьте на TronScan, затем продолжайте.

Часто задаваемые вопросы

Как узнать, действительно ли транзакция подтверждена?

Используйте TronScan и проверьте статус результата передачи. Ярлыки кошелька «ожидающие» могут отставать; Статус цепочки является источником истины. Скопируйте txid и проверьте SUCCESS/REVERT/OUT_OF_ENERGY, а не только текст пользовательского интерфейса.

Почему пользовательский интерфейс отличается от TronScan?

Некоторые кошельки и децентрализованные приложения используют разные индексаторы или уровни кэша. Короткая задержка между трансляцией и индексированием является нормальной; сравните txid и подождите, пока цепочка стабилизируется, прежде чем сделать вывод об ошибке.

Что мне делать после REVERT?

Остановитесь и декодируйте неудачный вызов. Большинство ошибок REVERT вызваны недопустимыми параметрами, неправильным адресом контракта, отсутствием утверждений или несоответствием между стандартом токена и методом. Устраните причину и подпишите заново.

Безопасно ли подписывать неограниченное разрешение?

Неограниченное одобрение безопасно только для проверенных вами адресов доверенных отправителей (проверенный источник, правильный маршрутизатор и ожидаемый контракт токена). Для тестирования отдавайте предпочтение ограниченному утверждению и отзыву после завершения.

Какие ресурсы требуются TRON для вызовов по контракту?

Выполнение смарт-контракта в основном потребляет энергию, а байты транзакций потребляют пропускную способность. Если вы получили OUT_OF_ENERGY, добавьте/заморозьте/делегируйте Энергию. Если пропускная способность исчерпана, сосредоточьтесь на сохранении достаточного количества TRX для байтов и распределения ресурсов.

Как я могу уменьшить количество обращений в службу поддержки?

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

Похожие руководства {#связанные}

Часто задаваемые вопросы

Совместим ли TVM со смарт-контрактами Ethereum?

TVM в значительной степени совместим с EVM на уровне Solidity, но модели газа/энергии, предварительная компиляция и некоторые коды операций отличаются. Тщательно протестируйте Шаста.

Что стоит за выполнение TVM?

Энергия и пропускная способность. Контрактные вызовы потребляют энергию; недостаточно энергии сгорает TRX со счета звонящего.

Могу ли я развернуть немодифицированный байт-код Ethereum?

Нет. Перекомпилируйте с помощью набора инструментов TRON. Коды операций и кодировка адреса различаются.

Почему мой контракт стоил больше энергии, чем ожидалось?

Запись в хранилище, внешние вызовы и большие данные вызовов увеличивают затраты. Оптимизируйте шаблоны Solidity.

Где работает TVM?

На TRON полные узлы суперпредставителей проверяют блоки. TronGrid предоставляет HTTP для удаленного запуска вызовов TVM.