Una cuenta TRON es un registro en la cadena identificado por una dirección de 21 bytes y controlado por una clave privada; la misma cuenta puede aparecer como una cadena hexadecimal o como una cadena Base58Check, y esas dos formas no son intercambiables en todas las llamadas a la API. Las direcciones recién financiadas pueden existir como claves sin un registro de cuenta en la cadena hasta que se activan, por lo que una billetera puede mostrar un saldo mientras un explorador muestra una cuenta inactiva. Este artículo explica el modelo de cuenta, muestra cómo derivar y verificar una dirección, recorre la activación y las consultas de cuenta con código ejecutable, y ofrece un procedimiento de medición que puedes ejecutar contra tu propio endpoint RPC en lugar de confiar en cifras publicadas.
Qué es realmente una cuenta TRON
En TRON, una cuenta es una entrada del libro mayor indexada por una dirección. La dirección se deriva de una clave pública, y la clave pública se deriva de una clave privada que solo el titular debería conocer. El registro de la cuenta contiene el saldo de TRX, los saldos de tokens rastreados por contratos, los recursos apostados, los permisos y metadatos como el nombre de la cuenta. El control se ejerce firmando transacciones con la clave privada, por lo que la cuenta es realmente una identidad de firma más un registro de estado en la cadena.
Dos tipos de cuenta importan en la práctica. Una cuenta de propiedad externa (EOA) está controlada por un par de claves y es lo que la mayoría de la gente entiende por cuenta TRON. Una cuenta de contrato se crea cuando se despliega un contrato inteligente; tiene una dirección y código pero no una clave privada, y actúa solo cuando se invoca mediante una transacción. Ambas se direccionan de la misma manera, por lo que la validación de direcciones debe verificar más que la forma de la cadena.
La distinción que confunde a las integraciones es entre tener un par de claves y tener una cuenta activada. Un par de claves se puede generar sin conexión en cualquier momento, pero la red solo crea el registro de la cuenta cuando la dirección recibe por primera vez una acción en la cadena que califica. Hasta entonces, las consultas pueden devolver un resultado vacío o inactivo aunque la dirección sea matemáticamente válida.
- EOA: controlada por clave, mantiene saldos y recursos, firma transacciones.
- Cuenta de contrato: controlada por código, creada por despliegue, invocada por llamadas.
- Dirección: 21 bytes, normalmente representada como una cadena Base58Check de 34 caracteres que comienza con T.
- Clave privada: 32 bytes; nunca la envíes a un nodo ni la pegues en una herramienta de consulta.
Requisitos previos y suposiciones
Los ejemplos asumen que tienes un endpoint RPC de TRON que habla la API HTTP (a menudo expuesta a través de interfaces compatibles con TronGrid o de estilo JSON-RPC) y que puedes ejecutar curl, Node.js o Python localmente. Reemplaza RPC_URL con tu propio endpoint y nunca confirmes claves. Si aún no has elegido un endpoint, la guía de endpoints RPC explica qué comparar, y la descripción general del servicio API describe el acceso gestionado; para una decisión concreta de proveedor, RPC Assistant cubre la selección de endpoints por separado.
También debes saber a qué red te diriges. La mainnet, Nile y la testnet Shasta tienen génesis y espacios de direcciones separados en el sentido de que los saldos y los registros de cuentas no se transfieren. Confirma siempre la cadena antes de interpretar una cuenta vacía como un problema.
Formatos de dirección: hex versus Base58Check
Las direcciones TRON son de 21 bytes: un prefijo de un byte (0x41 en mainnet) seguido de 20 bytes derivados de la clave pública. Esa forma sin procesar suele escribirse como una cadena hexadecimal de 42 caracteres que comienza con 41. La forma de cara al usuario es Base58Check: los 21 bytes más una suma de verificación de 4 bytes se codifican en Base58, produciendo una cadena de 34 caracteres que comienza con T. Ambas representan la misma cuenta; son dos codificaciones de un mismo valor.
La consecuencia práctica es que las API difieren. Algunos endpoints aceptan la forma Base58, otros esperan hex, y algunos aceptan cualquiera de las dos pero devuelven una forma en las respuestas. Un error común de integración es pasar una dirección T a un endpoint que espera hex, o comparar una dirección hex de un registro con una dirección Base58 de una billetera y concluir que difieren. Normaliza antes de comparar: decodifica Base58Check, verifica la suma de verificación y compara los 21 bytes sin procesar.
No valides una dirección solo por su longitud. Base58Check incluye una suma de verificación precisamente para que un solo carácter mal escrito se rechace en lugar de asignarse silenciosamente a otra cuenta de aspecto válido.
// Node.js: decode a Base58Check TRON address to hex and verify the checksum
// npm i bs58 sha.js
const bs58 = require('bs58');
const { createHash } = require('crypto');
function sha256(buf) {
return createHash('sha256').update(buf).digest();
}
function tronAddressToHex(base58) {
const decoded = Buffer.from(bs58.decode(base58)); // 25 bytes: 21 payload + 4 checksum
if (decoded.length !== 25) throw new Error('unexpected decoded length');
const payload = decoded.subarray(0, 21);
const checksum = decoded.subarray(21);
const expected = sha256(sha256(payload)).subarray(0, 4);
if (!checksum.equals(expected)) throw new Error('bad checksum');
if (payload[0] !== 0x41) throw new Error('not a mainnet TRON prefix');
return payload.toString('hex'); // 42 hex chars starting with 41
}
console.log(tronAddressToHex('TPlaceholderAddressHere000000000000'));Pares de claves y derivación determinista
TRON utiliza claves ECDSA secp256k1, la misma familia de curvas que Ethereum, por lo que las herramientas y los modelos mentales se transfieren. Una clave privada es de 32 bytes; la clave pública correspondiente es un punto en la curva. El cuerpo de la dirección de 20 bytes se deriva aplicando hash a la clave pública sin comprimir (sin el prefijo 0x04) con Keccak-256 y tomando los últimos 20 bytes, luego anteponiendo 0x41. Las billeteras suelen derivar claves de una frase mnemónica BIP-39 usando una ruta BIP-44; la ruta exacta importa porque una ruta diferente produce una cuenta diferente a partir de la misma semilla.
Debido a que la derivación es determinista, puedes reproducir una dirección a partir de una mnemónica y confirmar que una billetera, un dispositivo hardware y tu propio código coinciden. Haz esto con una mnemónica de prueba o en una máquina aislada. El valor de verificación es la dirección, nunca la clave privada: si tres implementaciones independientes producen la misma dirección Base58, tu ruta de derivación y el hash son consistentes.
Para la firma en producción, mantén las claves en una billetera hardware, HSM o firmante dedicado. El modelo de cuenta no te protege de la exposición de claves, y una clave expuesta significa una pérdida de control inmediata e irreversible.
Activación: cuándo un par de claves se convierte en una cuenta en la cadena
Una cuenta TRON se activa cuando la red procesa una acción que crea su registro. En la práctica, esto significa que la dirección recibe TRX o una transferencia de tokens, o es el objetivo de una operación de creación de cuenta. Muchas billeteras y exchanges describen la activación como enviar una pequeña cantidad de TRX a la nueva dirección; el mínimo exacto y si una transferencia determinada activa la cuenta dependen de las reglas actuales de la red y de la ruta de envío, así que trata cualquier cifra específica como algo que debes confirmar con la documentación actual en lugar de una constante.
La activación importa para las integraciones porque una dirección inactiva aún puede ser un destino válido. Enviar a ella puede activarla, pero algunos sistemas de custodia rechazan retiros a cuentas inactivas o requieren un memo o un mínimo. Si operas un servicio que acredita depósitos, decide explícitamente si acreditas a la primera vista de una dirección o solo después de que exista el registro de la cuenta, y documenta esa regla.
Las cuentas de contrato siguen un camino diferente: se crean mediante una transacción de despliegue, y su activación es un subproducto de la creación del contrato. No puedes enviar una transferencia simple para activar una dirección de contrato que no has desplegado.
- Genera claves sin conexión; la activación es un evento de red, no local.
- Confirma la activación consultando el registro de la cuenta, no verificando que una billetera muestre una dirección.
- Para sistemas de depósito, define reglas de acreditación para cuentas inactivas versus activas.
- Prueba los flujos de activación en una testnet antes de habilitar depósitos en mainnet.
Consulta de una cuenta: saldo, recursos y permisos
El estado de la cuenta se lee a través de las API del nodo. Una consulta típica de cuenta devuelve el saldo en sun (1 TRX = 1,000,000 sun), las cantidades congeladas o apostadas, el uso de ancho de banda y energía, y las estructuras de permisos. Debido a que la forma de la respuesta varía según el endpoint, escribe un pequeño adaptador en lugar de dispersar nombres de campos sin procesar por tu base de código.
El curl a continuación utiliza una forma genérica de API HTTP. Los nombres de campos y las rutas difieren entre endpoints de estilo TronGrid y JSON-RPC, así que ajusta la ruta a la interfaz documentada de tu proveedor. La parte importante es el flujo de trabajo: envía la dirección en la forma que espera el endpoint, analiza sun como un entero y nunca hagas aritmética de punto flotante con saldos.
# Query an account record. Adjust the path to your provider's API shape.
curl -s -X POST "$RPC_URL/wallet/getaccount" \
-H 'Content-Type: application/json' \
-d '{"address":"41PLACEHOLDER_HEX_ADDRESS","visible":false}' \
| python3 -c 'import sys,json; d=json.load(sys.stdin); print(json.dumps({"balance_sun": d.get("balance", 0), "activated": bool(d), "keys": sorted(d.keys())}, indent=2))'Un procedimiento de verificación ejecutable
Utiliza este procedimiento para confirmar que el manejo de direcciones y el endpoint coinciden antes de construir sobre ellos. Produce una tabla de resultados que tú mismo completas; aquí no se asume ningún número.
Paso 1: elige una cuenta activa conocida y una dirección inactiva conocida en tu red objetivo. Paso 2: para cada una, llama al endpoint de cuenta con la forma Base58 y de nuevo con la forma hex. Paso 3: registra si la llamada tuvo éxito, si la respuesta indicó un registro activo y el saldo en sun. Paso 4: repite cada llamada varias veces y registra la latencia. Paso 5: compara las dos codificaciones y confirma que resuelven a la misma cuenta o al mismo resultado vacío.
| Dirección | Codificación | Estado HTTP | Registro activo | Saldo (sun) | Latencia mediana (ms) |
|---|---|---|---|---|---|
| muestra activa | Base58 | ||||
| muestra activa | hex | ||||
| muestra inactiva | Base58 | ||||
| muestra inactiva | hex |
Si las filas Base58 y hex no coinciden, tu endpoint no está normalizando las codificaciones y debes normalizar antes de llamarlo. Si la muestra inactiva devuelve un error en lugar de un registro vacío, tu cliente debe distinguir entre 'no hay cuenta' y 'la solicitud falló' antes de acreditar o rechazar un depósito. La latencia debe medirse desde tu propio entorno, a la misma hora del día, con suficientes repeticiones para ver la varianza; los benchmarks publicados por cualquier proveedor no sustituyen tus propias cifras.
Solución de problemas comunes de cuentas
La mayoría de los informes de 'mi cuenta TRON no aparece' caen en unos pocos grupos. La dirección está en la red equivocada. La dirección nunca se activó. La consulta usó la codificación equivocada. El endpoint tiene límite de velocidad o devuelve un error que el cliente ignoró. El saldo está presente pero denominado en sun y se muestra incorrectamente. Revisa estos en orden antes de asumir que los fondos se perdieron.
Si una transferencia parece haber tenido éxito pero el destinatario no muestra nada, verifica la transacción en un explorador y confirma la dirección del destinatario byte por byte. Si una consulta de cuenta devuelve un error, registra el estado HTTP y el cuerpo de la respuesta; un 429 o 5xx es un problema de infraestructura, no de la cuenta. Si los saldos parecen desviados por un factor de un millón, casi con certeza estás mezclando TRX y sun.
- Red equivocada: confirma el ID de cadena o el génesis antes de depurar más.
- Cuenta inactiva: consulta el registro y luego decide si activarla.
- Discrepancia de codificación: normaliza a 21 bytes sin procesar antes de comparar.
- Límites de velocidad: agrega reintentos con retroceso exponencial y monitorea las tasas de error.
- Errores de unidad: almacena y compara saldos como enteros en sun.
Limitaciones y compensaciones
Los endpoints públicos son convenientes pero compartidos, por lo que la latencia y los límites de velocidad varían con la carga; un nodo dedicado ofrece un comportamiento más predecible a mayor costo, lo cual cubre la descripción general de nodo dedicado. Autoalojar un nodo completo elimina la dependencia de terceros pero agrega tiempo de sincronización, disco y carga operativa. Para paneles con muchas lecturas, almacenar en caché el estado de la cuenta con un TTL corto reduce las llamadas pero introduce datos obsoletos; para la acreditación de depósitos, prefiere lecturas frescas más profundidad de confirmación en lugar de caché.
La normalización de direcciones agrega una pequeña cantidad de código pero previene toda una clase de errores. La gestión de claves agrega complejidad operativa pero no es negociable para cualquier cuenta que mantenga valor. No hay configuración que haga que una cuenta inactiva sea consultable como activa; la compensación está entre preactivar direcciones que controlas y manejar destinos inactivos explícitamente en tu lógica.
Próximos pasos
Una vez que el manejo de direcciones y las consultas de cuentas sean estables, pasa a los recursos: el ancho de banda y la energía determinan si una transacción tiene éxito sin quemar TRX extra, y el staking cambia cómo una cuenta paga por las operaciones. Revisa las guías de red para la cadena que elijas, compara las opciones de endpoints en la página de precios de RPC, y usa RPC Assistant cuando necesites una recomendación directa sobre qué endpoint o proveedor se ajusta a tu carga de trabajo. Mantén tu tabla de verificación en control de versiones para que los cambios de endpoint se prueben contra las mismas cuentas conocidas.