Блог
10 мин чтения
|
16 окт. 2023 г.

Как настроить ноду TRON (прагматичный способ)

Запустите TRON-ноду без 3 ТБ диска: Lite FullNode из снапшота, настройка systemd и Docker, таблица оборудования, расходы и точка безубыточности против API.

Главы
C
Chaingateway Team
Эксперты по блокчейну

Большинство тех, кто ищет «tron node», хотят одного: прямого доступа к сети, через которую проходит огромная доля мирового USDT. Официальная документация отвечает на это Java-цепочкой инструментов — установить JDK 1.8, склонировать java-tron, собрать через Gradle, настроить JVM. Этот гайд вместо этого идёт прагматичным путём: готовый FullNode.jar со страницы релизов плюс снапшот Lite FullNode, что сокращает требования к диску с более чем 3 ТБ до нескольких сотен ГБ. Далее — Docker как альтернатива без Java, время синхронизации, расчёт стоимости и честная точка безубыточности по сравнению с API.

Что такое нода TRON?

Нода TRON запускает java-tron, эталонный клиент, и подключает вас к сети, которая валидирует транзакции каждые 3 секунды. Она предоставляет приложениям два API: HTTP на порту 8090 и gRPC на порту 50051. Через них можно деплоить и вызывать контракты, переводить TRX и токены, запрашивать состояние сети — нода является точкой входа для всего, что вы строите на TRON.

Клиент развивается быстрее, чем можно подумать, глядя на его цепочку JDK 8: GreatVoyage-v4.8.0 (Kant) вышла в феврале 2026 года, текущий релиз — v4.8.1.1 (Hypatia, июнь 2026). Почти каждый релиз несёт метку «mandatory upgrade», что определяет рутину обслуживания, описанную далее в этом гайде.

Роли нод, по релевантности. FullNode валидирует и ретранслирует блоки и отвечает на запросы API; почти всегда это то, что вам нужно. Witness-нода производит блоки — это зарезервировано за 27 избранными голосами TRX супер-представителями; для всех остальных флаг --witness бесполезен. По оси хранения есть два варианта: стандартный FullNode несёт полную историю транзакций — около 3 ТБ в середине 2026 года и растёт; официальные снапшоты за март 2026 весят 2,9–3,1 ТБ в зависимости от варианта — тогда как Lite FullNode стартует со снапшота только состояния размером около 100 ГБ.

Lite FullNode покрывает всё, что нужно платёжному бэкенду: текущее состояние, новые блоки, рассылку транзакций, отслеживание депозитов. Чего он не может — отвечать на вопросы об истории до своего снапшота: запрос старой транзакции по ID завершится ошибкой. Эксплорерам и аналитическим платформам нужна полная история. Большинству интеграций — нет.

Три роли рядом друг с другом, с цифрами середины 2026 года:

Lite FullNodeFullNode (полная история)Witness-нода (SR)
Дискснапшот около 100 ГБ; закладывайте 300–500 ГБофициальные снапшоты 2,9–3,1 ТБ; закладывайте 4 ТБспецификация полной истории плюс запас для продакшена
Историясо своего снапшотаполная с генезисаполная
API HTTP/gRPCдадада, хотя SR отделяют RPC от производства блоков
Производит блокинетнетда — только 27 избранных SR
Типичный операторплатёжные бэкенды, интеграцииэксплореры, аналитика, архивы для комплаенсаизбранные супер-представители

Оборудование: FullNode против Lite FullNode

КомпонентFullNode (полная история)Lite FullNode
CPU16 ядер8–16 ядер
RAM32 ГБ (64 ГБ для производства блоков)16–32 ГБ
Диск3 ТБ+ NVMe, растёт300–500 ГБ NVMe (снапшот ~100–200 ГБ плюс рост)
Сеть100 Мбит/с100 Мбит/с

Строки CPU и RAM расширяют официальную рекомендацию (16 ядер, 32 ГБ, «2,5 ТБ+» — написано, когда сеть была меньше). RAM на TRON важна вдвойне: один раз для кучи JVM и один раз для файлового кеша операционной системы, поэтому машина с 32 ГБ работает заметно плавнее, чем с 16 ГБ, даже для Lite-ноды.

Пошагово: Lite FullNode из релизного jar

Команды рассчитаны на Ubuntu 24.04.

1. Установить Java 8

java-tron в 2026 году всё ещё нацелен на JDK 1.8 — странность, но не подлежащая обсуждению. Более новые JVM падают при старте.

Terminal window
sudo apt update
sudo apt install -y openjdk-8-jdk
java -version # должна показать 1.8.x

2. Создать пользователя и директории

Terminal window
sudo useradd --no-create-home --shell /usr/sbin/nologin tron
sudo mkdir -p /opt/tron /var/lib/tron
sudo chown -R tron:tron /opt/tron /var/lib/tron

3. Скачать релизный jar и конфиг mainnet

Сборка через Gradle не нужна; каждый релиз java-tron поставляется с готовым FullNode.jar:

Terminal window
cd /opt/tron
sudo -u tron wget $(curl -s https://api.github.com/repos/tronprotocol/java-tron/releases/latest \
| grep browser_download_url | grep FullNode.jar | cut -d '"' -f 4)
sudo -u tron wget https://raw.githubusercontent.com/tronprotocol/tron-deployment/master/main_net_config.conf

На страницах релизов публикуются контрольные суммы — выполните sha256sum FullNode.jar и сравните, прежде чем запускать код, который месяцами будет держать сетевые соединения открытыми.

4. Восстановить снапшот Lite FullNode

На официальной странице снапшотов базы данных в TRON developer hub перечислены зеркала в Сингапуре и США, публикующие свежие архивы ежедневно, в вариантах LevelDB и RocksDB — берите LevelDB, если ваш конфиг не говорит иное, потому что движок базы данных должен совпадать со снапшотом. Lite-архивы следуют цели дизайна TIP-128 — около 3% полной базы данных; при полных мартовских снапшотах 2026 года в 2,9–3,1 ТБ (3,6 ТБ для варианта с историей балансов адресов) это ставит Lite-загрузку в нижний диапазон сотен ГБ. Выберите ближайшее зеркало, скопируйте актуальную ссылку и:

Terminal window
cd /var/lib/tron
sudo -u tron wget '<PASTE_LITE_SNAPSHOT_URL>'
sudo -u tron tar xzf LiteFullNode_output-directory.tgz

После распаковки у вас должна появиться /var/lib/tron/output-directory с базой данных. Эта папка — весь секрет «синхронизации со снапшота»: нода стартует поверх этого состояния, вместо того чтобы заново проигрывать годы блоков. Если вы когда-нибудь будете восстанавливать вариант с полной историей, используйте потоковую форму, рекомендуемую зеркалами — wget -qO- '<URL>' | tar xz —, чтобы архив на 3 ТБ никогда не лежал на диске рядом со своей распакованной копией. Для Lite-архива вариант «сначала скачать, потом распаковать» не проблема.

5. systemd-юнит

Создайте /etc/systemd/system/tron.service:

[Unit]
Description=TRON Lite FullNode (java-tron)
After=network-online.target
Wants=network-online.target
[Service]
User=tron
Group=tron
Type=simple
Restart=always
RestartSec=10
WorkingDirectory=/var/lib/tron
ExecStart=/usr/bin/java -Xmx24g -XX:+UseConcMarkSweepGC \
-jar /opt/tron/FullNode.jar \
-c /opt/tron/main_net_config.conf \
-d /var/lib/tron/output-directory
[Install]
WantedBy=multi-user.target

Две детали JVM прямо из официальной документации: флаг сборщика мусора должен идти перед -jar, а не после, а -Xmx должен составлять около 80% физической RAM — 24g подходит для машины с 32 ГБ; на меньших машинах уменьшайте пропорционально. systemd останавливает сервис через SIGTERM, что соответствует инструкции kill -15 из документации. Никогда не делайте kill -9 для ноды TRON; LevelDB повреждается, и вместо ужина вы будете восстанавливать снапшот.

Откройте P2P-порт, держите API-порты приватными:

Terminal window
sudo ufw allow 18888 comment 'tron p2p'

Порты 8090 и 50051 не несут никакой аутентификации. Они остаются закрытыми для интернета.

6. Запустить и проверить

Terminal window
sudo systemctl daemon-reload
sudo systemctl enable --now tron
journalctl -fu tron

Как только появятся сообщения о блоках, проверьте высоту:

Terminal window
curl -s http://127.0.0.1:8090/wallet/getnowblock | jq '.block_header.raw_data.number'

Сравните число с последним блоком на tronscan.org; curl http://127.0.0.1:8090/wallet/getnodeinfo дополнительно показывает число пиров и статус синхронизации. Когда ваша высота идёт вровень с эксплорером, нода в сети.

Пара слов о производстве блоков, поскольку официальная документация посвящает этому немало страниц: witness-нода имеет смысл только для 27 избранных супер-представителей. Механика — флаг --witness плюс приватный ключ SR в списке localwitness файла main_net_config.conf, или вариант с keystore и паролем, если вы отказываетесь от ключей в открытом виде, — задокументирована в апстриме. Для всех остальных правильная цель — обычный FullNode.

Docker вместо Java

Все топовые гайды по TRON обходят Docker стороной, хотя официальный образ делает требование JDK 8 чужой проблемой:

Terminal window
docker pull tronprotocol/java-tron
docker run -d --name tron --restart unless-stopped \
-p 127.0.0.1:8090:8090 -p 127.0.0.1:50051:50051 \
-p 18888:18888 -p 18888:18888/udp \
-v /var/lib/tron/output-directory:/java-tron/output-directory \
tronprotocol/java-tron

Монтирование тома использует Lite-снапшот из шага 4, поэтому запуск контейнера не является пересинхронизацией. Привязка 8090 и 50051 к 127.0.0.1 держит API приватными, пока P2P-порт остаётся доступным. Для кастомных настроек смонтируйте свой main_net_config.conf в контейнер и передайте -c как аргумент команды; без этого образ работает с настройками mainnet по умолчанию. Если на вашем хосте уже запущены другие контейнеры, это более чистая настройка — одно обновление образа заменяет весь стек Java.

Время синхронизации и работа со снапшотами

Арифметика, а не обещания. Lite-архив на 150 ГБ при устойчивых 50 МБ/с скачивается примерно за 50 минут; распаковка добавляет минуты на NVMe. Снапшоту максимум сутки, а TRON производит около 28 800 блоков в день при своём 3-секундном интервале — здоровая нода импортирует гораздо быстрее реального времени, поэтому догонка стоит от минут до нескольких часов. Итого: рабочий Lite FullNode за один вечер.

Для ноды с полной историей та же арифметика бьёт больнее: 3 ТБ+ при 100 МБ/с означают более 8 часов загрузки ещё до начала распаковки, а синхронизация с генезиса без всякого снапшота тянется неделями. Одну асимметрию стоит знать: java-tron поставляется с инструментом, который уменьшает базу данных FullNode до формата Lite, но пути обратно из Lite в полный формат нет — если вам когда-нибудь понадобится полная история, начинайте с полного снапшота.

Потоки событий и gRPC

Опрашивать блоки по HTTP работает, но java-tron умеет и пушить данные. Механизм подписки на события, включаемый в блоке event.subscribe файла main_net_config.conf, публикует триггеры для новых блоков, транзакций, логов контракта и событий контракта — во встроенную очередь ZeroMQ для лёгких настроек, или через плагины в Kafka или MongoDB для настоящих пайплайнов.

Для обнаружения депозитов это заменяет сканирование блоков: подписаться на события контракта, фильтровать по контракту USDT, сверять получателя со своими адресами клиентов. Одна деталь решает вопрос корректности. Простые триггеры срабатывают, как только приходит блок, но блок TRON становится необратимым только после подтверждения достаточным числом супер-представителей; варианты solidified-триггеров срабатывают именно в этот момент, и именно из них следует зачислять баланс клиента. Депозит, зачисленный из несолидифицированного блока, может — редко — исчезнуть при реорганизации.

Второй машинный интерфейс — gRPC на порту 50051: те же операции с кошельком, что и HTTP, но типизированные через protobuf и быстрее на вызов под нагрузкой, поэтому большинство индексаторов и бэкендов бирж на TRON используют именно его. Практичное разделение: gRPC для массовых чтений вашего индексатора, HTTP для точечных проверок вроде curl-запросов в этом гайде, и solidity API (порт 8091, если включён) для запросов, которые должны видеть только необратимое состояние.

Сколько стоит нода TRON

Путь расчёта, а не прайс-лист. Lite FullNode требует 8–16 ядер, 32 ГБ RAM и около 500 ГБ NVMe — территория VPS верхнего среднего уровня или бюджетного выделенного сервера, что у европейских хостеров как порядок величины означает от среднего двузначного до нижнего трёхзначного числа евро в месяц. Ноде с полной историей нужен класс 3 ТБ+ NVMe, то есть полноценный выделенный сервер в нижнем-среднем трёхзначном диапазоне.

Добавьте свои часы: полдня на настройку по этому гайду, обновления java-tron раз в несколько месяцев и периодическое обновление снапшота после сбоя. Lite FullNode — редкий случай, когда самостоятельный хостинг блокчейн-инфраструктуры действительно дёшев, пока ничей доход не зависит от того, что она работает и в 3 часа ночи.

Мониторинг и проверки здоровья

Всё, что стоит проверять, находится за одним эндпоинтом. /wallet/getnodeinfo за один вызов возвращает версию клиента, число пиров, последний блок и последний солидифицированный блок:

Terminal window
curl -s http://127.0.0.1:8090/wallet/getnodeinfo | jq \
'{version: .configNodeInfo.codeVersion, peers: .currentConnectCount,
head: .block, solidified: .solidityBlock}'

Здоровая нода показывает голову, продвигающуюся каждые 3 секунды, и солидифицированный блок примерно на 19–20 блоков позади — это глубина подтверждения в две трети от 27 SR, около минуты времени сети. Для алертинга сравнивайте свою голову с tronscan или второй нодой каждые несколько минут и поднимайте тревогу, когда разрыв превышает 40 блоков, две минуты времени сети. systemctl is-active tron плюс число пиров из того же вызова покрывает liveness.

Поскольку эта нода — JVM, следите за памятью отдельно: jstat -gcutil $(pgrep -f FullNode.jar) 10s показывает давление сборки мусора, и растущее время full-GC появляется в этом выводе раньше, чем нода начинает отставать. Дополните это df -h /var/lib/tron с порогом 85% — Lite-нода растёт медленно, но растёт, и тот же cron, который присылает вам статус синхронизации по почте, может бесплатно прихватить и строку по диску.

Обслуживание и обновления

Релизы java-tron выходят раз в несколько месяцев, и большинство несёт метку «mandatory upgrade» — Kant (v4.8.0, февраль 2026), Democritus (v4.8.1) и Hypatia (v4.8.1.1, июнь 2026) все три. Mandatory означает, что сеть активирует изменения правил по расписанию, и старые версии оказываются на неправильной стороне консенсуса — поэтому относитесь к релизам TRON так же, как операторы BSC относятся к хардфоркам: подпишитесь на ленту релизов tronprotocol/java-tron и обновляйтесь в объявленном окне.

Обновление сохраняет базу данных. Скачайте новый FullNode.jar, сравните sha256sum со страницей релиза, остановите сервис (systemd отправляет SIGTERM — это задокументированное чистое завершение), замените jar в /opt/tron, запустите заново. Нода проигрывает несколько пропущенных минут и вскоре снова оказывается на голове.

Две более медленные задачи заслуживают места в списке. Lite-база растёт вместе с состоянием плюс накапливающимся хвостом блоков; когда рост становится некомфортным, восстановите свежий Lite-снапшот — тот же шаг, что и при восстановлении после сбоя, и причина, по которой эта настройка делает восстановление дешёвым. И следите за требованием к Java: стандартная сборка x86 в середине 2026 года всё ещё нацелена на JDK 1.8, тогда как v4.8.1 добавила ARM-сборки на JDK 17. Ограничение ослабевает, но пока release notes не говорят иначе, стандартный сервер остаётся на Java 8.

Безопасность: два API-порта, ноль аутентификации

Порты 8090 (HTTP) и 50051 (gRPC) принимают любого, кто может до них дотянуться — никаких токенов, никаких аккаунтов, ничего. Нода, настроенная как в этом гайде, не хранит приватных ключей, поэтому открытый порт не приводит напрямую к потере средств, но даёт незнакомцам бесплатный RPC-сервис, а интенсивные циклы запросов к эндпоинтам блоков будут съедать дисковый I/O машины, пока не начнёт голодать ваш собственный софт. Считайте, что любой доступный из интернета порт уже сканируется прямо сейчас.

Файрвол из шага 5 и есть политика: ufw default deny incoming, затем SSH и 18888 (TCP и UDP) — больше ничего. Когда API нужен другим машинам, туннелируйте через WireGuard или SSH, либо поставьте перед ним nginx с TLS и allowlist по IP, и даже в этом случае пробрасывайте только реально используемые эндпоинты. После каждого изменения конфигурации проверяйте, что на самом деле слушает, с помощью ss -tlnp: java-tron может открыть дополнительные порты из файла конфигурации, включая solidity API на 8091, а забытый порт — это незащищённый порт.

Особый случай. Если вы когда-нибудь разместите witness-ключ на машине, эта машина перестаёт быть инфраструктурой и становится горячим кошельком. Отделите её от обслуживания RPC и относитесь к её файлу конфигурации — который может хранить ключ в открытом виде — с той же осторожностью, что и к самому ключу.

Диагностика неполадок

Запуск немедленно падает с ошибкой версии Java

UnsupportedClassVersionError или похожая ошибка означает, что JVM версии 11 или новее. Выберите Java 8 через sudo update-alternatives --config java, либо вовсе обойдите проблему с помощью образа Docker.

OutOfMemoryError или паузы GC на несколько минут

-Xmx настроен неправильно. Следуйте правилу 80% от RAM, но оставьте несколько ГБ для файлового кеша ОС и не размещайте рядом другие прожорливые по памяти сервисы. На машине с 16 ГБ потолок — -Xmx12g.

Нода запускается, но остаётся на высоте снапшота

Нет пиров. Проверьте, что порт 18888 открыт для TCP и UDP, посмотрите число пиров в /wallet/getnodeinfo, проверьте часы через timedatectl — NTP должен быть активен. Сразу после первого запуска дайте обнаружению пиров несколько минут, прежде чем копать дальше.

Ошибки базы данных после сбоя или перезагрузки

kill -9, OOM-килл или потеря питания повреждают базу данных. Самое быстрое решение — оно же предусмотренное: удалить output-directory, восстановить свежий Lite-снапшот, перезапустить — это и есть выгода от небольшого размера снапшота. Профилактика: всегда останавливайте через systemd и держите достаточно свободной RAM, чтобы ядро никогда не убивало Java по OOM.

Нода продолжает отставать от головы

Пиры подключены, блоки приходят, но разрыв с tronscan растёт. Проверяйте в таком порядке: задержку диска (бенчмарк случайного чтения fio — LevelDB на сетевом хранилище или SATA — классическая причина), давление GC (jstat -gcutil, см. раздел мониторинга), затем конкуренцию за CPU от соседних воркладов. 3-секундный ритм TRON прощает короткие заминки; отставание, растущее часами, означает, что машина не справляется, и никакой флаг конфигурации не исправит недостаточное железо.

Диск заполняется

df -h, затем du -h --max-depth=2 /var/lib/tron. Обычная находка — забытый архив снапшота: .tgz может соперничать по размеру с распакованной базой данных. Если сама output-directory переросла том, восстановите новейший Lite-снапшот на диске большего размера; восстановление одновременно сбрасывает накопившийся хвост блоков. Алерт на 85% из раздела мониторинга превращает это в запись в календаре, а не в простой.

Зачем вообще запускать ноду TRON: USDT

Главный ответ — USDT-TRC20. Низкие комиссии и 3-секундные блоки сделали TRON рельсой по умолчанию для бирж и платёжных провайдеров, и десятки миллиардов долларов USDT циркулируют в сети. Собственная нода позволяет отслеживать депозиты клиентов и рассылать выплаты без посредника, именно поэтому платёжные компании спрашивают про ноды TRON гораздо чаще, чем про большинство других сетей.

Механика заслуживает ещё одного уровня детализации, потому что она определяет архитектуру. Депозит USDT — это не перевод TRX, а вызов смарт-контракта USDT, поэтому он никогда не появляется в простых запросах баланса TRX. Обнаружить его — значит декодировать события transfer TRC-20 из каждого блока или подписаться на них через описанный выше механизм событий, и зачислять только после солидификации: около 19 блоков, примерно минута. У выплат своя экономика. Перевод USDT потребляет energy, и кошелёк без застейканных TRX платит за эту energy, сжигая TRX — около 6,4 TRX на адрес, уже держащий USDT, и около 13,4 TRX на пустой, при цене energy в 100 Sun, действующей с proposal #104. Операции с большим объёмом вместо этого стейкают TRX ради energy — для этого и существуют механизмы freeze и delegate.

Но будьте ясны в том, что даёт голая нода: только эндпоинты HTTP и gRPC, не более. Обнаружение депозита USDT клиента означает сканирование каждого блока на события transfer TRC-20 по списку ваших адресов, с самостоятельной обработкой подтверждений и повторов. А система комиссий TRON — bandwidth, energy, freeze TRX, спонсирование комиссий для пользователей — сама по себе отдельная область изучения; калькулятор комиссий TRON показывает, во что реально обходится перевод USDT, прежде чем вы начнёте строить вокруг этого систему.

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

Сколько места на диске нужно ноде TRON?

Lite FullNode стартует со снапшота размером около 100 ГБ; закладывайте 300–500 ГБ NVMe на рост. FullNode с полной историей — около 3 ТБ в середине 2026 года: официальные снапшоты за март 2026 весят 2,9–3,1 ТБ, и цифра продолжает расти.

Можно ли запустить ноду TRON на Windows?

Официально java-tron нацелен на Linux и macOS. На Windows практичный путь — образ Docker, который фиксирует всё окружение, включая Java 8.

Приносит ли запуск ноды TRON доход в TRX?

Нет. Награды за блоки через стейкинг идут 27 избранным супер-представителям и их избирателям. FullNode даёт независимый доступ к сети, а не доход.

Какая версия Java нужна java-tron?

JDK 1.8 для стандартной сборки x86, до сих пор в середине 2026 года; в v4.8.1 добавились ARM-сборки на JDK 17, но на обычном сервере более новые JVM падают при старте. Это самая частая ошибка настройки и причина, по которой в этом гайде есть образ Docker.

В чём разница между FullNode и Lite FullNode?

Тот же софт, другая база данных. Lite-вариант стартует с снапшота только состояния и обслуживает всё, что касается текущего состояния сети, но не может отвечать на запросы о транзакциях до своего снапшота. Платежи работают, история для блок-эксплорера — нет.

Своя нода — или API?

Честное сравнение, ведь Chaingateway продаёт альтернативу.

Держите ноду, когда читаете сеть в большом масштабе — индексирование, мониторинг сети за пределами собственных адресов, подача gRPC в собственный пайплайн — или когда политика запрещает третьи стороны. Низкая стоимость Lite FullNode означает, что тяжёлые по чтению ворклады окупаются быстро; это одна из самых дешёвых self-hosted нод среди крупных сетей.

Используйте API, когда нода была бы просто «водопроводом» для платежей. Поверх синхронизированной ноды вам всё равно придётся строить генерацию адресов на каждого клиента, обнаружение депозитов TRC-20, доставку вебхуков, хранение ключей и управление комиссиями. TRON API от Chaingateway — это именно этот слой в виде REST-эндпоинтов: импорт адресов (POST /api/v2/tron/addresses/import), отправка USDT и других токенов TRC-20 (POST /api/v2/tron/transactions/trc20) или активов TRC-10, заморозка и делегирование ресурсов для energy (POST /api/v2/tron/freeze, POST /api/v2/tron/delegate), а также получение подписанных HMAC вебхуков депозитов; неудачные доставки появляются в GET /api/v2/tron/webhooks/notifications/failed и могут быть отправлены заново через эндпоинт retry.

Точка безубыточности как расчёт: (сервер + обновления снапшотов + ваши часы × ваша ставка) против плана на /ru/pricing/. Для сценариев депозит-и-выплата сторона API остаётся меньше вплоть до серьёзного масштаба; для чтения сети «в сыром виде» сторона ноды выигрывает почти сразу. Quickstart и гайд по вебхукам покрывают первый end-to-end тест, а 7-дневный пробный период не требует KYC (регистрация).

Также используете EVM-сети? См. гайды по настройке для Ethereum и BNB Smart Chain.

Готовы собрать это сами? Получите свой API-ключ — 7-дневный пробный период, без карты — или посмотрите API Tron для полного справочника по эндпоинтам.

C
Chaingateway Team
Эксперты по блокчейну

Команда Chaingateway стремится упростить интеграцию блокчейна для разработчиков по всему миру.