Network Execution
Todo broadcast on-chain real sob Self-Custody — os ExecutionLegs de um Settlement, um
Withdrawal, ou um PayoutBatch — consome recursos de rede reais (ex.: Energy/Bandwidth da TRON).
Esse custo é rastreado e cobrado de forma completamente separada do Platform Fee: o Platform
Fee é a taxa comercial da própria plataforma sobre um Settlement (ver
Fee e Pricing Policy); o Network
Execution Fee é o que de fato custa colocar bytes em broadcast on-chain. Nunca assuma que um
número inclui o outro.
Duas fontes para o recurso: CUSTOMER_RESOURCES vs ISHTARAN_RESOURCES
Toda Organization tem uma resourcePreference por AssetNetwork, controlando quem de fato paga
os recursos on-chain de um broadcast:
ISHTARAN_RESOURCES (o padrão)
A plataforma fornece o recurso de rede físico para você. Você cobre o custo economicamente — o
que é cobrado (totalCharged, em quoteCurrency) pode incluir, além do custo de rede bruto, um
componente de reposição/aquisição e o margin da própria Ishtaran (a margem por patrocinar o
recurso). NetworkExecutionFee não é um pass-through puro neste modo — não assuma que o
valor cobrado é igual ao custo de rede bruto.
CUSTOMER_RESOURCES (SELF)
Você fornece seus próprios recursos on-chain. Neste modo:
- O
marginda Ishtaran é sempre0. - Não há componente de reposição/swap cobrado pela Ishtaran.
- Se seus recursos registrados forem insuficientes para uma execução, ela falha fechada — não
há fallback silencioso para
ISHTARAN_RESOURCES, a menos que você tenha optado explicitamente porallowFallbackToIshtaranResourcesao configurar a preferência (ver abaixo).
Alternar entre os dois, e controlar o fallback, é uma única chamada:
networkCostPayerAccounts.updateResourcePreference(organizationId, assetNetworkId, resourcePreference, allowFallbackToIshtaranResources) — veja o CORE_API.md § Network Execution Engine de cada SDK para a assinatura exata.
Dois registros, duas coisas diferentes
Fazer a execução Self-Custody funcionar pela primeira vez exige dois registros separados, fáceis de confundir porque ambos envolvem "pagar pelo custo de rede":
ExecutionSource— o endereço a partir do qualExecutionCustodyassina para pagar o custo de rede, e (no modoCUSTOMER_RESOURCES) o endereço cuja capacidade de recurso on-chain é checada. Registrado viaexecutionSources.register(...); sua capacidade disponível é declarada/re-sincronizada viaexecutionSources.syncResourceStake(...)(auto-declarado, sem verificação on-chain nesta versão).NetworkCostPayerAccount— aAccountdo Ledger debitada pelo custo cobrado (totalCharged, emquoteCurrency) assim que uma cotação é autorizada. Registrado vianetworkCostPayerAccounts.register(organizationId, assetNetworkId, accountId).
Não confunda nenhum dos dois com ExecutionDestination — um conceito completamente
diferente: o endereço no qual um beneficiário recebe fundos (ver Self-Custody).
Também não confunda NetworkCostPayerAccount com a NetworkResourceReserve da própria
plataforma: essa é a reserva operacional interna da Ishtaran que sustenta o modo
ISHTARAN_RESOURCES — não é algo que você registra, financia ou consulta como integrador, e o
modo CUSTOMER_RESOURCES nunca consome dela. Não existe rota pública voltada ao integrador para
isso; se você ver rotas /v1/admin/... mencionando-a na referência de API, são operações do
Platform Owner, não parte da sua integração.
Primeiro financiamento
Antes da sua primeira execução real em modo CUSTOMER_RESOURCES (ou antes de sua
NetworkCostPayerAccount ter saldo suficiente, em qualquer um dos modos), a plataforma vai
recusar executar em vez de falhar no meio de um broadcast: você recebe um erro explícito
(NETWORK_EXECUTION_FEE_INSUFFICIENT_BALANCE, ver Errors), nunca um retry
silencioso ou um estado parcial.
A correção é sempre a mesma, independentemente do modo: faça um Deposit
normal na Account relevante (um depósito on-chain comum, como qualquer outro), espere confirmar,
e tente de novo. Não existe um fluxo separado de "recarga" — financiar uma Account usada para
custos de Network Execution funciona exatamente como financiar qualquer outra Account na
plataforma.
Rotas
- Obter uma cotação de execução de rede (só preview — nunca uma garantia de preço, ver a
documentação
networkExecution.quotede cada SDK):POST /v1/environments/{environmentId}/network-execution-quote - Registrar um ExecutionSource:
POST /v1/organizations/{organizationId}/execution-sources - Sincronizar o resource stake de um ExecutionSource:
POST /v1/organizations/{organizationId}/execution-sources/{executionSourceId}/resource-stake - Registrar uma NetworkCostPayerAccount:
POST /v1/organizations/{organizationId}/network-cost-payer-accounts - Atualizar a preferência de recurso:
PATCH /v1/organizations/{organizationId}/network-cost-payer-accounts/{assetNetworkId}/resource-preference