Деплой смарт-контрактов в 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 совместимости.