Pular para o conteúdo principal

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.

examples/marketplace-mercatto/withdraw.ts
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.