TRON
Accept TRX and USDT-TRC20 on TRON mainnet and Nile testnet. Paste a single TRON address - no xpub, no HD derivation.
TRON is account-based. Paste a single address - TRON doesn't use HD derivation.
Networks
| Network | Chain key | Block time | Finality | Min invoice |
|---|---|---|---|---|
| TRON | TRX | ~3s | DPoS solidification (~3 min) | $1.00 |
| TRON Nile (testnet) | TRX_NILE | ~3s | DPoS solidification (~3 min) | $0.10 |
TRON confirms when more than 70% of the 27 Super Representatives build on top of a block - typically about 3 minutes from broadcast.
NoHoldPay supports Nile only - Shasta is not supported.
Supported coins
| Chain | Coins |
|---|---|
TRX | TRX (native), USDT-TRC20 |
TRX_NILE | TRX (native), USDT-TRC20 |
NoHoldPay pins the official USDT-TRC20 contract per chain and only credits transfers from that contract. USDT-TRC20 transfers that revert (out of Energy, frozen address) are never credited.
Wallet setup
Paste a single TRON Base58Check address - 34 characters, starts with T. NoHoldPay validates the checksum and version byte before saving.
Do not paste an xpub, seed phrase, or custodial exchange deposit address.
Compatible wallets:
- TronLink - required for CREATE2 onboarding (only wallet currently exposing TIP-712 typed-data signing)
- Klever
- TokenPocket
- Ledger via TronLink
Open your wallet and copy the receive address (T...).
Screenshot
TronLink account view with the T-address and copy control
add image at public/images/guides/tron-tronlink-copy-address.png
TRX or TRX_NILE.CREATE2 forwarder (unique address per payment)
Every invoice gets a unique on-chain forwarder address, so there is nothing to disambiguate and the customer pays the quoted amount exactly. That matters most for USDT-TRC20 paid from an exchange, where the sending side often rounds. The platform sweeps to your treasury within minutes after solidification.
The wallet becomes payable only once the onboarding below is finished. Until then the chain stays out of the customer's picker.
Where your operator enables direct settlement, a connected-wallet payment (the customer connects TronLink and signs the transfer themselves) settles straight into your treasury in one transaction, with no forwarder sweep. It is customer-funded (they pay bandwidth or energy), not gasless. See Payment modes.
Forwarder addresses use the same Solady CWIA template as EVM - only the outer address derivation differs (TRON's 0x41 prefix vs EVM's 0xff).
One-time onboarding in TronLink:
Register Treasury - Prepare - the dashboard fetches the TIP-712 typed-data envelope.
TronLink is currently required because it is the only wallet that exposes the signTypedData method needed for the TIP-712 envelope. Other TRON wallets do not yet expose typed-data signing. Support will broaden as they add it.
Update TronLink if you see TRON_REGISTER_TREASURY_SIG_HIGH_S - older versions occasionally produced non-canonical signatures that on-chain ECDSA rejects.
Manual sweep
When a sweep gets stuck (stuck_needs_manual), the payment detail page shows a manual-sweep card. Connect TronLink, and the card opens a pre-built transaction covering the deploy and sweep for that forwarder. Sign it with your control key and the page broadcasts it - there is no calldata to copy.
Native TRX cannot reach stuck_needs_manual under normal operation - factory deploy auto-sweeps native TRX inline.
GasFree (TIP-712 PermitTransfer)
GasFree would let customers pay USDT-TRC20 without holding TRX for Energy - they sign a TIP-712 PermitTransfer and the relay broadcasts via JustLend's GasFree controller.
This mode is not yet available. It is blocked on JustLend service-provider onboarding.
How TRON differs from EVM
| Aspect | EVM | TRON |
|---|---|---|
| Wallet format | xpub or single address | Single address only |
| Address | 0x + 40 hex (EIP-55) | T... Base58Check |
| Native unit | wei (10^18) | sun (10^6) |
| Typed-data | EIP-712 | TIP-712 |
| Gas model | Single gas budget | Energy + Bandwidth budgets |
| Customer USDT cost | Pays ETH gas | Pays Energy/Bandwidth or burns |
USDT-TRC20 freeze risk
Per BlockSec, roughly 84% of 2025 USDT freezes were on TRC-20 vs other chains. If Tether blacklists your address, NoHoldPay cannot recover the funds - you must contact Tether directly via their blacklist appeal process.
If freeze risk is a concern, consider USDC on Base or Polygon instead.
Testnet (TRX_NILE)
- Explorer: nile.tronscan.org.
- For current Nile faucet options, check the TRON developer documentation. Faucet endpoints rotate.
Test in TronLink by switching the network to Nile Testnet before signing.
Common errors
| Code | When |
|---|---|
TRON_ADDRESS_INVALID | Base58Check checksum or version byte invalid |
TRON_HD_DEPRECATED | You tried to paste an xpub - TRON is account-based |
TRON_REGISTER_TREASURY_SIG_HIGH_S | Non-canonical signature - update TronLink |
TRON_REGISTER_TREASURY_NONCE_DRIFT | On-chain nonce moved between Prepare and Submit - re-run Prepare |
TREASURY_IS_FORWARDER | Treasury cannot be a NoHoldPay forwarder address |
CONTROL_KEY_GAS_PATHOLOGICAL | Smart-contract wallet signature verification uses too much Energy |
INFLIGHT_CAP_EXCEEDED | Per-merchant CREATE2 in-flight USD cap exceeded - contact support |
See also
- Choosing your wallets
- Payment modes
- Recovery Kit - re-derive CREATE2 forwarders offline
- Payment States
- Webhooks
- Trust Model
Ethereum and EVM Chains
Accept ETH, USDC, USDT, PYUSD, and EURC on Ethereum, Base, Polygon, and BNB Chain. Paste one EVM address and every invoice gets its own forwarder address that sweeps to your treasury.
Solana
Accept SOL, USDC, and USDT on Solana mainnet and devnet. A unique forwarder address per payment, with optional gasless SPL checkout.