Activar contrato inteligente en TRON: TronWeb y guía API — TRON Wiki

Activar contrato inteligente en TRON: TronWeb y guía API

11 min de lectura · ⌘K buscar

Interactuar con contratos inteligentes TRON, ya sea transfiriendo USDT, intercambiando SunSwap o llamando a su propia lógica DeFi, se reduce a codificar parámetros de función, transmitir una transacción triggerSmartContract y pagar energía por su ejecución.

Esta guía cubre la API de alto nivel de TronWeb, los activadores HTTP sin formato, las llamadas de lectura y escritura y los patrones de producción.

Leer vs escribir

TipoTransmisiónCostos EnergíaMétodo
Leer (ver/puro)NoNocontract.method().call()
Escribir (cambio de estado)contract.method().send()

Las lecturas utilizan triggerconstantcontract: simulación de TVM local.

Las escrituras utilizan triggersmartcontract: extraídas en bloque.

TronWeb instancia de contrato

Código
const TronWeb = require('tronweb');

const tronWeb = new TronWeb({
  fullHost: 'https://api.trongrid.io',
  privateKey: process.env.PRIVATE_KEY
});

const USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t';
const abi = [/* TRC-20 ABI fragment */];

const contract = await tronWeb.contract(abi, USDT);

Si contract not found: red o dirección incorrecta. Solución de problemas de contrato no encontrado.

Leer saldo

Código
const balance = await contract.balanceOf('TRecipient...').call();
console.log(balance.toString()); // smallest units

Escribir transferencia

Código
const amount = 1_000_000; // 1 USDT (6 decimals)
const txid = await contract.transfer('TRecipient...', amount).send({
  feeLimit: 100_000_000, // max TRX sun to burn for Energy
});
console.log(txid);

Tutorial completo: enviar USDT mediante programación.

fee_limit y Energía

feeLimit tapas TRX quemadas si la energía es insuficiente (al sol — 1 TRX = 1e6 sol).

Configuraciones típicas:

OperaciónfeeLimit (sol)
TRC-20 transferencia50_000_000 – 100_000_000
DeFi complejo150_000_000 – 500_000_000

La cuenta debe tener energía congelada o líquida TRX. Los txs fallidos aún consumen tarifas: transacción fallida.

API HTTP: triggerSmartContract

POST de bajo nivel al nodo completo:

Código
POST https://api.trongrid.io/wallet/triggersmartcontract

Cuerpo (simplificado):

Código
{
  "owner_address": "41...hex",
  "contract_address": "41...hex",
  "function_selector": "transfer(address,uint256)",
  "parameter": "0000...encoded",
  "fee_limit": 100000000,
  "visible": true
}

La respuesta contiene el objeto transaction: firma localmente y transmite a través de broadcasttransaction.

TronWeb resume esto. HTTP sin formato útil para pilas que no son JS. Consulte TRON Referencia de API HTTP.

triggerConstantContract (leer)

Código
POST /wallet/triggerconstantcontract

Misma codificación sin transmisión. Devuelve constant_result hexadecimal.

Código
const result = await tronWeb.transactionBuilder.triggerConstantContract(
  tronWeb.address.toHex(contractAddress),
  'balanceOf(address)',
  {},
  [{ type: 'address', value: holderAddress }],
  tronWeb.address.toHex(callerAddress)
);

Codificación de parámetros {#codificación}

Selector de función = primeros 4 bytes de keccak256("transfer(address,uint256)").

Parámetros codificados ABI en ranuras de 32 bytes. TronWeb maneja la codificación cuando se usa .send() / .call().

Error de codificación manual → REVERT en cadena.

Las dApps frontend utilizan la inyección TronLink:

Código
const tronWeb = window.tronWeb;
const contract = await tronWeb.contract().at(USDT_ADDRESS);
await contract.transfer(to, amount).send();

El usuario inicia sesión en la ventana emergente: la clave privada nunca está en la página web. Advertir a los usuarios sobre riesgos de dApp.

Registros de eventos después del activador

Después de escribir, obtenga el recibo:

Código
const info = await tronWeb.trx.getTransactionInfo(txid);
const logs = info.log; // Transfer events for TRC-20

Oyentes de eventos para monitoreo.

Errores comunes

ErrorCausa
REVERTMalos parámetros, saldo/asignación insuficiente
OUT_OF_ENERGYAumentar el límite de tarifas o congelar TRX
CONTRACT_VALIDATE_ERRORABI o selector incorrecto
ANCHO DE BANDA_ERRORCongelar el ancho de banda

Mejores prácticas {#mejores prácticas}

  1. Pruebe primero en Shasta/Nile — testnet
  2. Verificar contrato en TronScan — verificar contrato
  3. Establezca feeLimit explícito: evite valores predeterminados demasiado bajos
  4. Analice el recibo result antes de asumir el éxito
  5. Reintentos idempotentes: verifique txid antes de reenviar

Patrones de llamadas múltiples

Los enrutadores intercambian lotes en una sola transacción. Sus contratos pueden utilizar llamadas internas: mente reentrada y límites de energía por transmisión.

Lista de verificación para solucionar problemas

Si algo sale mal en TRON, trátelo como un problema de depuración estructurado: confirme el txid exacto en la cadena, verifique la dirección del contrato de destino y solo entonces decida si la falla es recuperable. En TRON, muchos problemas "misteriosos" son simplemente uno de: red incorrecta (mainnet vs testnet), contrato de token incorrecto (falso USDT/tokens con nombres similares), recursos insuficientes (OUT_OF_ENERGY/ancho de banda) o retraso en la interfaz de usuario/indexador entre la billetera y el explorador.

Comience con estas comprobaciones en cadena:

  • Copie siempre el txid/hash completo de su billetera o explorador.
  • Confirme el estado del resultado del tx en TronScan (SUCCESS, REVERT, OUT_OF_ENERGY o aún pendiente).
  • Compruebe si la dirección del destinatario/contrato coincide con la que desea enviar.
  • Si se trata de una llamada de contrato, confirme que el selector de función y los parámetros coincidan con el estándar de token que cree que está utilizando (TRC-20 vs TRC-10 vs BEP-20 en BSC).

Luego aplique la ruta de corrección para su categoría:

  • Confirmar el estado y los parámetros de la transacción.
  • Verificar direcciones (contrato de token, destinatario, enrutador/gastador).
  • Agregar o delegar recursos (Energía/Ancho de banda) cuando el fallo esté basado en recursos.

Errores comunes

Estos patrones causan la mayoría de los errores a nivel de usuario:- Usar direcciones de mainnet en testnet (o al revés).

  • Copiar un símbolo de token en lugar de la dirección del contrato TRC-20 real.
  • Firmar la dirección de aprobación/gastador incorrecta porque el enlace de la interfaz de usuario es malicioso o está desactualizado.
  • Reintentar sin cambiar la entrada fallida (por ejemplo, REVERT sigue revirtiéndose hasta que corrija el parámetro).

Si no está seguro, no “simplemente envíe de nuevo”. Realice un cambio controlado, verifique en TronScan y luego continúe.

Preguntas frecuentes

¿Cómo sé si una transacción está realmente confirmada?

Utilice TronScan y verifique el estado del resultado del tx. Las etiquetas "pendientes" de la billetera pueden retrasarse; El estado de la cadena es la fuente de la verdad. Copie txid y verifique SUCCESS/REVERT/OUT_OF_ENERGY, no solo el texto de la interfaz de usuario.

¿Por qué la interfaz de usuario difiere de TronScan?

Algunas billeteras y dApps utilizan diferentes indexadores o capas de caché. Es normal que haya un breve retraso entre la transmisión y la indexación; compare txid y espere a que la cadena se estabilice antes de concluir que hay una falla.

¿Qué debo hacer después de un REVERT?

Detenga y decodifique la llamada fallida. La mayoría de los REVERT se deben a parámetros no válidos, dirección de contrato incorrecta, aprobaciones faltantes o una falta de coincidencia entre el estándar del token y el método. Solucione la causa y luego vuelva a firmar.

¿Es seguro firmar una aprobación ilimitada?

Las aprobaciones ilimitadas son seguras solo para direcciones de gastadores confiables que usted haya verificado (fuente verificada, enrutador correcto y contrato de token esperado). Para las pruebas, prefiera aprobaciones limitadas y revoque una vez que haya terminado.

¿Qué recursos requiere TRON para las llamadas de contrato?

La ejecución de contratos inteligentes consume principalmente energía, mientras que los bytes de transacciones consumen ancho de banda. Si recibe OUT_OF_ENERGY, agregue/congela/delegue energía. Si se agota el ancho de banda, concéntrese en mantener suficiente líquido TRX para bytes y asignación de recursos.

¿Cómo puedo reducir los tickets de soporte?

Muestre a los usuarios un mensaje claro de "qué sucedió" basado en el estado de la cadena y vincule directamente a la guía relevante (pendiente, fallida, sin energía o verificación). Guarda txid para que puedas conciliar rápidamente.

Guías relacionadas

Preguntas frecuentes

¿Cuál es la diferencia entre llamada y activación en TRON?

Las llamadas constantes leen el estado sin una transacción. triggerSmartContract transmite cambios de estado que cuestan energía.

¿Cuánta energía utiliza una llamada de contrato inteligente?

TRC-20 transfiere ~65,000 Energía. Llamadas más complejas: pruebe en testnet.

¿Puedo activar sin una clave privada?

Leer llamadas sí. Las escrituras requieren firma: TronLink o clave del lado del servidor.

¿Qué significa visible: verdadero en API?

Las direcciones en solicitud/respuesta utilizan el formato Base58 T cuando es verdadero y hexadecimal cuando es falso.

¿Cómo apruebo y luego intercambio dos transacciones?

Primero approve(router, amount) en el contrato de token, luego swap en el enrutador: dos activadores separados. Algunas UI se agrupan mediante contratos de llamadas múltiples.