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
marginde Ishtaran siempre es0. - 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 porallowFallbackToIshtaranResourcesal 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 queExecutionCustodyfirma para pagar el costo de red, y (en modoCUSTOMER_RESOURCES) la dirección cuya capacidad de recurso on-chain se verifica. Registrada víaexecutionSources.register(...); su capacidad disponible se declara/re-sincroniza víaexecutionSources.syncResourceStake(...)(autodeclarado, sin verificación on-chain en esta versión).NetworkCostPayerAccount— laAccountdel Ledger debitada por el costo cobrado (totalCharged, enquoteCurrency) una vez que una cotización se autoriza. Registrada víanetworkCostPayerAccounts.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
- Obtener una cotización de ejecución de red (solo vista previa — nunca una garantía de precio,
ver la documentación
networkExecution.quotede cada SDK):POST /v1/environments/{environmentId}/network-execution-quote - Registrar un ExecutionSource:
POST /v1/organizations/{organizationId}/execution-sources - Sincronizar el resource stake de un ExecutionSource:
POST /v1/organizations/{organizationId}/execution-sources/{executionSourceId}/resource-stake - Registrar una NetworkCostPayerAccount:
POST /v1/organizations/{organizationId}/network-cost-payer-accounts - Actualizar la preferencia de recurso:
PATCH /v1/organizations/{organizationId}/network-cost-payer-accounts/{assetNetworkId}/resource-preference