Saltar al contenido principal

Network Execution

Todo broadcast on-chain real bajo Self-Custody — los ExecutionLegs de un Settlement, un Withdrawal, o un PayoutBatch — consume recursos de red reales (p. ej. Energy/Bandwidth de TRON). Este costo se rastrea y cobra de forma completamente separada del Platform Fee: el Platform Fee es la tarifa comercial propia de la plataforma sobre un Settlement (ver Fee y Pricing Policy); el Network Execution Fee es lo que realmente cuesta poner bytes en broadcast on-chain. Nunca asumas que un número incluye al otro.

Dos fuentes para el recurso: CUSTOMER_RESOURCES vs ISHTARAN_RESOURCES

Toda Organization tiene una resourcePreference por AssetNetwork, que controla quién paga realmente los recursos on-chain de un broadcast:

ISHTARAN_RESOURCES (el predeterminado)

La plataforma provee el recurso de red físico por ti. Tú cubres el costo económicamente — lo que se te cobra (totalCharged, en quoteCurrency) puede incluir, además del costo de red bruto, un componente de reposición/adquisición y el margin propio de Ishtaran (el margen por patrocinar el recurso). NetworkExecutionFee no es un pass-through puro en este modo — no asumas que el monto cobrado es igual al costo de red bruto.

CUSTOMER_RESOURCES (SELF)

Tú provees tus propios recursos on-chain. En este modo:

  • El margin de Ishtaran siempre es 0.
  • No hay componente de reposición/swap cobrado por Ishtaran.
  • Si tus recursos registrados son insuficientes para una ejecución dada, falla cerrado — no hay fallback silencioso a ISHTARAN_RESOURCES, a menos que hayas optado explícitamente por allowFallbackToIshtaranResources al configurar la preferencia (ver abajo).

Cambiar entre ambos, y controlar el fallback, es una sola llamada: networkCostPayerAccounts.updateResourcePreference(organizationId, assetNetworkId, resourcePreference, allowFallbackToIshtaranResources) — ver el CORE_API.md § Network Execution Engine de cada SDK para la firma exacta.

Dos registros, dos cosas distintas

Hacer que la ejecución Self-Custody funcione por primera vez requiere dos registros separados, fáciles de confundir porque ambos implican "pagar el costo de red":

  • ExecutionSource — la dirección desde la que ExecutionCustody firma para pagar el costo de red, y (en modo CUSTOMER_RESOURCES) la dirección cuya capacidad de recurso on-chain se verifica. Registrada vía executionSources.register(...); su capacidad disponible se declara/re-sincroniza vía executionSources.syncResourceStake(...) (autodeclarado, sin verificación on-chain en esta versión).
  • NetworkCostPayerAccount — la Account del Ledger debitada por el costo cobrado (totalCharged, en quoteCurrency) una vez que una cotización se autoriza. Registrada vía networkCostPayerAccounts.register(organizationId, assetNetworkId, accountId).

No confundas ninguno de los dos con ExecutionDestination — un concepto completamente distinto: la dirección en la que un beneficiario recibe fondos (ver Self-Custody).

Tampoco confundas NetworkCostPayerAccount con la NetworkResourceReserve de la propia plataforma: esa es la reserva operativa interna de Ishtaran que respalda el modo ISHTARAN_RESOURCES — no es algo que registres, financies o consultes como integrador, y el modo CUSTOMER_RESOURCES nunca la usa. No existe una ruta pública orientada al integrador para eso; si ves rutas /v1/admin/... que la mencionan en la referencia de API, son operaciones del Platform Owner, no parte de tu integración.

Primer financiamiento

Antes de tu primera ejecución real en modo CUSTOMER_RESOURCES (o antes de que tu NetworkCostPayerAccount tenga saldo suficiente, en cualquiera de los dos modos), la plataforma se negará a ejecutar en lugar de fallar a mitad de un broadcast: recibes un error explícito (NETWORK_EXECUTION_FEE_INSUFFICIENT_BALANCE, ver Errors), nunca un reintento silencioso ni un estado parcial.

La solución es siempre la misma sin importar el modo: haz un Deposit normal en la Account correspondiente (un depósito on-chain común, como cualquier otro), espera a que confirme, y reintenta. No existe un flujo separado de "recarga" — financiar una Account usada para costos de Network Execution funciona exactamente igual que financiar cualquier otra Account en la plataforma.

Rutas