Deploying a TON Node
TON (The Open Network) is technically interesting with dynamic sharding and infinite sharding. Architecturally it differs strongly from Ethereum: no EVM, there's TVM (TON Virtual Machine), smart contracts in FunC/Tact, and node synchronization requires understanding the hierarchy of masterchain + workchain + shardchain.
Why run your own node: reduce latency when working with TON API, remove dependency on public endpoints (tonapi.io, toncenter.com), get access to full data for indexing, or participate in the network as validator (requires 100,000+ TON for staking).
Types of TON Nodes
Full node — downloads and verifies all blocks, stores current state. Sufficient for most tasks: data reading, sending transactions, monitoring.
Archive node — full node + entire history of states. Needed for indexing historical data. Requires much more disk space (several terabytes).
Lite node — doesn't verify all blocks, trusts full/archive nodes. Suitable for lightweight clients.
Validator node — full node with right to create blocks. Requires stake and constant uptime.
System Requirements
| Node Type | CPU | RAM | Disk | Network |
|---|---|---|---|---|
| Full node | 8+ cores | 16 GB | 500 GB NVMe SSD | 100 Mbps |
| Archive node | 16+ cores | 32-64 GB | 4+ TB NVMe | 1 Gbps |
| Validator | 16+ cores | 64 GB | 1 TB NVMe | 1 Gbps (stable) |
NVMe is mandatory — SATA SSD won't handle I/O load during sync. HDD excluded.
Deployment via mytonctrl
MyTonCtrl is the official installer from TON Foundation. Ubuntu 20.04/22.04.
# Update system
apt update && apt upgrade -y
# Install mytonctrl
wget https://raw.githubusercontent.com/ton-blockchain/mytonctrl/master/scripts/install.sh
chmod +x install.sh
bash install.sh -m full # -m full for full node, -m validator for validator
Installation compiles TON from source — takes 30-60 minutes depending on CPU.
After installation:
# Run interactive CLI
mytonctrl
# Inside mytonctrl
> status # synchronization status
> getmasterchaininfo # masterchain information
> getstatus # general node status
Initial sync of full node — from several hours to several days depending on internet speed and disk I/O.
Configuration and Files
Configuration files after installation:
-
/var/ton-work/db/config.json— main node config -
/var/ton-work/db/keyring/— node keys -
/var/ton-work/log— logs
Real-time logs:
journalctl -u validator -f
# or
tail -f /var/ton-work/log
Important parameters in config.json:
-
liteservers— list of lite server endpoints for connection -
validator.adnl_id— ADNL address of node in TON P2P network
Checking Synchronization
# In mytonctrl
> status
# Output includes:
# Masterchain block: 12345678 (current node block)
# Network block: 12345700 (actual network block)
# Sync status: synchronizing (or 'synced')
Node is considered synced when difference between local and network block < 10-20 blocks.
Lite Server for Applications
To connect your applications to the node you need Lite Server. Add to config.json:
{
"liteservers": [
{
"@type": "liteserver.desc",
"id": {
"@type": "pub.ed25519",
"key": "YOUR_LITE_SERVER_PUBLIC_KEY"
},
"port": 43678
}
]
}
Key generation:
generate-random-id -m keys -n liteserver
Connection via @ton/ton (JavaScript SDK):
import { LiteClient, LiteRoundRobinEngine, LiteSingleEngine } from 'ton-lite-client';
const engine = new LiteSingleEngine({
host: `tcp://YOUR_SERVER_IP:43678`,
publicKey: Buffer.from('YOUR_LITE_SERVER_PUBLIC_KEY', 'base64'),
});
const client = new LiteClient({ engine });
const masterInfo = await client.getMasterchainInfo();
Configuration for Validator Node
Validator requires several additional steps beyond basic setup:
# In mytonctrl
> new_key # generate validator key
> add_validator_key KEY_HASH # add key
# Replenish validator wallet
> send AMOUNT # need minimum ~100k TON for staking
# Participate in elections
> participate_in_elections
TON conducts elections every ~36 hours. Validator must send application with stake amount. Upon successful validation — receives reward, on downtime or errors — slashing.
Monitoring
# Prometheus metrics from mytonctrl
> setup_monitoring
# Or via custom script
python3 /usr/src/mytonctrl/mytoncore/mytoncore.py --cli "getstatus" | \
python3 -c "import sys, json; data=json.load(sys.stdin); print(data['masterchainblocktime'])"
Key alerts:
- Node not synced > 5 minutes
- For validator: missed > 2 consecutive rounds
- RAM > 80% (memory leaks in validator process — known issue)
Typical Issues
Out of disk space during sync. TON actively writes to disk. Minimum 500 GB free space before starting sync.
ADNL connectivity. TON uses non-standard P2P protocol ADNL. Port UDP 30303 (by default) must be open. Check: sudo ufw allow 30303/udp.
Compilation failures. TON compiles from C++ source. Requires cmake >= 3.16, clang-14+ or gcc-10+. On older Ubuntu — install manually.
Validator downtime slashing. If validator node crashes during validation round — possible slashing. Set up monitoring with SMS/phone alerts, not just email.
Deployment timeline: full node — 1 day (installation + sync). Validator node with monitoring setup and elections participation — 2-3 days.







