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

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Деплой смарт-контрактів у Tron
Простий
від 4 годин до 2 днів
Часті запитання

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

Етапи блокчейн-розробки

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

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

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

Tron — це не EVM у звичайному сенсі, хоча підтримує Solidity. TVM (Tron Virtual Machine) сумісна з EVM на рівні байткоду, але gas модель, адресація, робота з нативним токеном та tooling принципово відрізняються. Розробник, який прийшов з Ethereum, наступить на кілька граблі перш ніж перший контракт задеплоїться коректно.

Ключові відмінності Tron від Ethereum

Адреси та конвертація

Tron використовує Base58Check адреси (T...), а не hex. Один аккаунт має два представлення:

  • Tron address: TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE
  • Hex address: 0x41d64a4e1d7af3bc84a5dd6d5b6d86bd1e45ef0ab

У смарт-контрактах та при роботі з ABI через TronWeb використовується hex-форма. При відображенні користувачу — Base58. TronWeb.address.toHex() та TronWeb.address.fromHex() для конвертації.

Energy та Bandwidth — не Gas

Tron не використовує gas у розумінні Ethereum. Замість цього:

  • Bandwidth: вартість зберігання байт транзакції. Витрачається на будь-які транзакції. Відновлюється зі часом (1 bandwidth = 1 байт).
  • Energy: аналог gas, витрачається при виконанні смарт-контрактів. Коштує TRX або замораживається TRX для отримання energy.

Замораживання TRX дає energy без спалювання — економічніше для активних користувачів. Для разових операцій energy купується напрямку.

Ліміти: при деплойменті контракту потрібно достатньо energy. Стандартний нескладний контракт — 50,000-200,000 energy. Без достатнього energy — транзакція фейлиться з OUT_OF_ENERGY.

Інструменти розробки

TronBox — Truffle для Tron

npm install -g tronbox
tronbox init

tronbox.js конфігурація:

const { TRON_PRIVATE_KEY } = process.env

module.exports = {
  networks: {
    shasta: {  // Testnet
      privateKey: TRON_PRIVATE_KEY,
      userFeePercentage: 100,  // 100% fees оплачує вызывающий
      feeLimit: 1_000_000_000,  // max TRX (в sun) на транзакцію
      fullHost: "https://api.shasta.trongrid.io",
      network_id: "*"
    },
    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"  // Tron TVM має обмеження по версіям Solidity
    }
  }
}

Важливо по версіям Solidity: TVM не завжди підтримує найсвіжіші версії Solidity. На момент написання стабільно працюють версії до 0.8.18. Перед деплойментом перевірте сумісність на офіційній документації Tron.

Hardhat + tronbox-provider

Альтернатива якщо проект уже на Hardhat:

npm install @tronbox/hardhat-tron
// hardhat.config.ts
import "@tronbox/hardhat-tron"

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

TronGrid API Key

TronGrid — офіційний Tron API провайдер. Безплатний plan має ліміти, для production потрібен API ключ. Реєстрація на trondao.org.

Без API ключа в header запросів: публічний rate limit — дуже низький, в production нереально.

Деплойментт через TronBox

# Компіляція
tronbox compile

# Деплойментт на testnet Shasta
tronbox migrate --network shasta

# Деплойментт на mainnet
tronbox migrate --network mainnet

Скрипт миграції migrations/2_deploy_contract.js:

const MyContract = artifacts.require("MyContract")

module.exports = function(deployer) {
  deployer.deploy(
    MyContract,
    "constructor_arg_1",
    "constructor_arg_2",
    {
      feeLimit: 1_000_000_000,
      callValue: 0,           // TRX передаваємий при деплойменті (в sun, 1 TRX = 1,000,000 sun)
      userFeePercentage: 100
    }
  )
}

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)

// Виклик view функції
const result = await contract.balanceOf(address).call()

// Відправлення транзакції
const tx = await contract.transfer(recipientAddress, amount).send({
  feeLimit: 100_000_000,
  callValue: 0
})

TRC-20 vs ERC-20

TRC-20 — Tron-аналог ERC-20. ABI ідентичен, але:

  • Немає msg.value у звичайному вигляді для нативного TRX — використовуйте callValue у параметрах транзакції
  • address(this).balance повертає баланс в sun (1 TRX = 1,000,000 sun)
  • Для transfer TRX між контрактами: address payable target = address(uint160(hexAddress)) — потрібна конвертація з Tron address

Популярні TRC-20: USDT на Tron обслуговує величезний обсяг стейблкоин транзакцій в Азії — часта задача інтеграції.

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

TronScan (tronscan.org) — blockchain explorer Tron. Верифікація контракту через UI: завантажити вихідний код, вказати версію компілятора та optimization settings. Немає CLI-інструменту як hardhat-verify.

Терміни

Деплойментт готового EVM-контракту на Tron Shasta testnet: 4-8 годин (адаптація під TVM, налаштування TronBox, отримання testnet TRX через faucet). Деплойментт на mainnet з верифікацією: до 2 днів включаючи тестування з реальним energy та перевірку TRC-20 сумісності.