Withdrawal
Bob quer sacar seus 178.38. A Mercatto registra para onde ele quer que o dinheiro vá e pede um saque à Ishtaran — usando as próprias credenciais, em nome de Bob, assim como em Seller balance.
const destination = await mercatto.withdrawals.createDestination(organizationId, destinationAddress, assetNetworkId);
const quote = await mercatto.withdrawals.quote(organizationId, bobAccountId, destination.withdrawalDestinationId, assetNetworkId, amount);
const withdrawal = await mercatto.withdrawals.request(organizationId, bobAccountId, destination.withdrawalDestinationId, assetNetworkId, amount);
Resultado — um bloqueio real e honesto
422 WITHDRAWAL_DESTINATION_NOT_USABLE
Esse é o final correto deste capítulo, não um erro no exemplo. Uma destination de saque recém-
criada nasce Pending e só se torna utilizável 24 horas reais depois — um controle de
segurança genuíno (proteção por whitelist, ativa por padrão), confirmado ao vivo, e nunca algo que
este Business Case contorna ou acelera. Rodar exatamente a mesma chamada contra o mesmo destino 24
horas depois deve funcionar.
O que aconteceu por baixo dos panos
quote() nunca escreve nada — é uma leitura pura, chamável a qualquer momento independente do
status do destino, e é por isso que funciona mesmo com o saque em si bloqueado logo em seguida.
quote.networkExecutionCost é o mesmo Network Execution Engine usado pelo Settlement
(Settlement and Split) — o custo real e cotado de transmitir esse saque
on-chain, nas unidades do próprio ativo de recurso, nunca subtraído do que Bob de fato recebe
(estimatedNetworkFee está depreciado e é sempre null sob SelfCustody). Não existe mecanismo
oficial no Sandbox para adiantar esse cooldown, e nenhum deveria ser construído — veja
Known Limitations §F.4 para entender exatamente o porquê, e por que essa é
a decisão certa mesmo que torne este capítulo mais lento de exercitar por completo.