Tron Namespace - Account ID Specification

Author Ignacio Rivera, Daniel Rocha
Discussions-To https://github.com/ChainAgnostic/namespaces/pull/170
Status Draft
Type Standard
Created 2026-01-27
Requires CAIP-2, CAIP-10

CAIP-10

For context, see the CAIP-10 specification.

Rationale

Tron addresses use Base58Check encoding and are derived from ECDSA public keys using the secp256k1 curve (same as Ethereum). All Tron addresses:

  • Start with the letter T (due to the 0x41 address prefix)
  • Are exactly 34 characters in length
  • Include a 4-byte checksum for error detection
  • Are case-sensitive

The address format provides both human readability and built-in validation through the checksum mechanism.

Syntax

The syntax of a Tron address follows Base58Check encoding with the following constraints:

Regular Expression: ^T[1-9A-HJ-NP-Za-km-z]{33}$

Where:

  • First character is always T
  • Remaining 33 characters use Base58 alphabet (excluding 0, O, I, l)
  • Total length is exactly 34 characters

Address Generation

Tron addresses are generated through the following process:

  1. Generate ECDSA key pair using secp256k1 curve
  2. Extract 64-byte public key
  3. Hash with Keccak256 (SHA3)
  4. Take last 20 bytes of hash
  5. Prepend address prefix byte 0x41
  6. Double SHA256 hash and append first 4 bytes as checksum
  7. Base58 encode the result

Chain IDs

For context, see the CAIP-2 specification.

Network Chain ID Chain ID (CAIP-2)
Mainnet 728126428 tron:728126428
Shasta Testnet 2494104990 tron:2494104990
Nile Testnet 3448148188 tron:3448148188

Test Cases

This is a list of manually composed and validated examples:

# Tron Mainnet - Standard account address
tron:728126428:TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL

# Tron Mainnet - USDT TRC-20 contract address
tron:728126428:TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t

# Tron Shasta Testnet
tron:2494104990:TQQg4EL8o1BSeKJY4MJ8TB8XK7xufxFBvK

# Tron Nile Testnet
tron:3448148188:TLyqzVGLV1srkB7dToTAEqgDSfPtXRJZYH

Address Validation

Valid Address Examples

TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL  ✓ Valid mainnet address
TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t  ✓ Valid mainnet address (USDT contract)
TLyqzVGLV1srkB7dToTAEqgDSfPtXRJZYH  ✓ Valid address

Invalid Address Examples

tNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL  ✗ Lowercase 't' (must be uppercase 'T')
TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYq    ✗ Too short (33 characters)
TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeLL  ✗ Too long (35 characters)
0x742d35Cc6634C0532925a3b844Bc9e759  ✗ Hex format (not Base58Check)

Account Types

Tron supports two types of accounts:

  1. Externally Owned Account (EOA):
    • Controlled by private key
    • Can initiate transactions
    • Example: TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL
  2. Contract Account:
    • Smart contract address
    • No private key
    • Can only respond to transactions
    • Example: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t (USDT TRC-20)

Both account types use the same address format and are indistinguishable at the address level.

Backwards Compatibility

Tron’s address format has remained consistent since mainnet launch. All existing addresses are compatible with the CAIP-10 specification.

Additional Considerations

Checksum Validation

The Base58Check encoding includes a 4-byte checksum that should be validated when accepting addresses. Invalid checksums indicate:

  • Typographical errors in address entry
  • Data corruption
  • Invalid address generation

Address Activation

Tron addresses must be activated by receiving TRX or TRC-10 tokens before they appear on-chain. Unactivated addresses:

  • Are valid addresses (correct format and checksum)
  • Do not appear in blockchain state queries
  • Will be created upon receiving first transaction

Multi-signature Addresses

Tron supports multi-signature accounts with the same address format. Multi-sig addresses cannot be distinguished from regular addresses without querying account permissions on-chain.

Resolution Method

To verify an address exists on-chain, make a JSON-RPC request using Tron’s native RPC methods:

// Request - Get account balance
{
  "jsonrpc": "2.0",
  "method": "tron_getBalance",
  "params": {
    "address": "TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL"
  },
  "id": 1
}

// Response
{
  "jsonrpc": "2.0",
  "result": {
    "balance": "1000000000"
  },
  "id": 1
}

Alternatively, using Tron’s native HTTP API:

curl -X POST https://api.trongrid.io/wallet/getaccount \
  -d '{"address":"TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL","visible":true}'

References

Copyright and related rights waived via CC0.

Citation

Please cite this document as:

Ignacio Rivera, Daniel Rocha, "namespaces/tron-caip10: Tron Namespace - Account ID Specification [DRAFT]," Chain Agnostic Namespaces, tron-caip10, January 2026 / . [Online serial]. Available: https://github.com/ChainAgnostic/namespaces/tron-caip10.md