Деплой смарт-контрактів Tron: TVM, енергія, TRC-20

Деплой смарт-контрактів у Tron При перенесенні смарт-контракту з Ethereum на Tron ви зіткнетеся з неочевидними відмінностями TVM: газ замінено на energy та bandwidth, адреси в Base58, а стандартні інструменти Hardhat не працюють напряму. Ми розбирали дампи транзакцій клієнтів, де деплой падав з `

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Деплой смарт-контрактів у Tron

При перенесенні смарт-контракту з Ethereum на Tron ви зіткнетеся з неочевидними відмінностями TVM: газ замінено на energy та bandwidth, адреси в Base58, а стандартні інструменти Hardhat не працюють напряму. Ми розбирали дампи транзакцій клієнтів, де деплой падав з OUT_OF_ENERGY через невірну оцінку лімітів. Один клієнт витратив три дні на адаптацію ERC-20 токена, поки не звернувся до нас — ми виправили адресацію та налаштували TronBox за 2 години. Наша команда блокчейн-інженерів з 10+ роками досвіду (20+ успішних деплоїв у Tron, 5 років на ринку) пропонує готове рішення — від адаптації контракту до верифікації на TronScan.

Проблеми, які ми вирішуємо

  • Несумісність EVM-тулів. Hardhat без плагіна не деплоїть у Tron — потрібен TronBox або @tronbox/hardhat-tron. Ми налаштовуємо tooling під ваш стек.
  • Адресна плутанина. Tron використовує два представлення: hex (0x41...) та Base58 (T...). При деплої через TronWeb використовується hex, а в UI — Base58. Помилка конвертації веде до втрати коштів.
  • Energy-голодування. Без достатнього energy деплой валиться з OUT_OF_ENERGY. Ми розраховуємо точні ліміти та рекомендуємо оптимальний спосіб отримання енергії (заморозка vs покупка).
  • Версійність Solidity. TVM не підтримує свіжі версії — компілятори до 0.8.18. Ми перевіряємо сумісність та при необхідності адаптуємо код.
Параметр Ethereum Tron
Віртуальна машина EVM TVM (сумісна з EVM байткодом)
Комісія Gas Energy (контракти) + Bandwidth (транзакції)
Адреси hex 0x... Base58 T... (hex 0x41...)
Tooling деплою Hardhat, Foundry TronBox, Hardhat + plugin
Типова вартість деплою $50-200 при gas ~50 гвей $10-50 (залежить від курсу TRX)

Чому Tron дешевший за Ethereum для масових транзакцій?

Tron забезпечує комісії в 5–10 разів нижчі при високих обсягах переказів стейблкоїнів. Завдяки механізмам заморозки TRX активні користувачі можуть отримувати energy безкоштовно. Це особливо актуально для проектів з тисячами щоденних операцій — економія на комісіях може перевищувати 50%, а для великих проектів економія сягає $5000 на місяць.

Як адаптувати контракт під TVM?

Більшість Solidity-контрактів переноситься з мінімальними правками. Головні зміни:

  • Замінити msg.value на callValue при відправці нативної валюти.
  • Конвертувати адреси з hex у Base58 та назад через TronWeb.address.toHex() / .fromHex().
  • Використовувати feeLimit замість gasLimit.
  • Враховувати, що balance контракту повертається в sun (1 TRX = 1e6 sun).
Приклад типової помилки при деплої Часто розробники забувають встановити `feeLimit` у скрипті міграції. За замовчуванням він дорівнює 0, і транзакція відхиляється з помилкою `OUT_OF_ENERGY`. Рекомендоване значення — `100_000_000` sun (100 TRX) для більшості контрактів.

Як ми це робимо: стек та підхід

Ми використовуємо перевірений стек: Solidity 0.8.6–0.8.18, TronBox для компіляції та деплою, TronWeb з API-ключем TronGrid для бойового доступу, Slither та Mythril для статичного аналізу.

Приклад конфігурації TronBox під mainnet:

const { TRON_PRIVATE_KEY } = process.env module.exports = { networks: { mainnet: { privateKey: TRON_PRIVATE_KEY, userFeePercentage: 100, feeLimit: 1_000_000_000, fullHost: "https://api.trongrid.io", network_id: "*" } }, compilers: { solc: { version: "0.8.6" } } } 

Для Hardhat використовуємо плагін, конфігурація мінімальна:

import "@tronbox/hardhat-tron" const config = { networks: { tron: { url: "https://api.trongrid.io", accounts: [process.env.TRON_PRIVATE_KEY!] } } } 

Скрипт міграції для TronBox:

const MyContract = artifacts.require("MyContract") module.exports = function(deployer) { deployer.deploy(MyContract, "arg1", "arg2", { feeLimit: 1_000_000_000, callValue: 0, userFeePercentage: 100 }) } 

Процес роботи

  1. Аналіз контракту — перевірка сумісності з TVM, пошук проблем з адресами та нативною валютою.
  2. Адаптація коду — правка адресації, заміна msg.value на callValue, коригування address(this).balance.
  3. Налаштування tooling — встановлення TronBox або Hardhat-плагіна, отримання API-ключа TronGrid, створення конфігів.
  4. Деплой на тестнет Shasta — тестування з фейковими TRX, перевірка energy-лімітів.
  5. Тестування — функціональне та навантажувальне тестування в умовах testnet.
  6. Деплой на mainnet — з верифікацією на TronScan та передачею документації.

Що входить в роботу

  • Повна адаптація контракту під TVM.
  • Налаштування деплой-скриптів та інтеграцій (TronWeb, API).
  • Тестування на Shasta testnet.
  • Деплой на mainnet з верифікацією вихідного коду на TronScan.
  • Документація щодо взаємодії з контрактом.
  • Підтримка протягом 30 днів після деплою.
Тип контракту Орієнтовна вартість energy Час адаптації
Простий TRC-20 60 000–100 000 energy 1–2 дні
З кастомною логікою 100 000–200 000 energy 2–5 днів

Терміни та як почати

Деплой простого контракту (без інтеграцій) — від 4 годин на тестнеті, до 2 днів на мейннеті. Складні проекти з кастомною логікою — до 1 тижня. Вартість розраховується індивідуально. Отримайте консультацію по вашому проекту — зв'яжіться з нами для оцінки. Ми гарантуємо коректний деплой та верифікацію.

Як TronWeb взаємодіє з контрактом

TronWeb — основний клієнт для читання та запису даних контракту. Приклад:

const TronWeb = require("tronweb") const tronWeb = new TronWeb({ fullHost: "https://api.trongrid.io", headers: { "TRON-PRO-API-KEY": process.env.TRONGRID_API_KEY }, privateKey: process.env.TRON_PRIVATE_KEY }) const contract = await tronWeb.contract().at(CONTRACT_ADDRESS) const result = await contract.balanceOf(address).call() const tx = await contract.transfer(recipient, amount).send({ feeLimit: 100_000_000, callValue: 0 }) 

Верифікація на TronScan

Після деплою контракт необхідно верифікувати на TronScan. Завантажте вихідний код, вкажіть версію компілятора та оптимізацію. CLI-верифікації немає — тільки через UI. Ми виконуємо цей крок самостійно.

Офіційна документація Tron підтверджує описані підходи.

Замовте деплой під ключ — наша команда проведе повний цикл від аналізу до верифікації. Отримайте консультацію по вашому проекту — зв'яжіться з нами для оцінки протягом 24 годин.