Saltar al contenido principal

Withdrawal

Bob quiere retirar sus 178.38. Mercatto registra a dónde quiere que se envíe y le pide a Ishtaran un retiro — usando sus propias credenciales, en nombre de Bob, igual que en 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 — un bloqueo real y honesto

422 WITHDRAWAL_DESTINATION_NOT_USABLE

Este es el final correcto de este capítulo, no un error en el ejemplo. Un destino de retiro recién creado nace Pending y solo se vuelve usable 24 horas reales después — un control de seguridad genuino (protección por whitelist, activada por defecto), confirmado en vivo, y nunca algo que este Business Case salte o acelere. Se espera que volver a correr exactamente la misma llamada contra el mismo destino 24 horas después tenga éxito.

Qué pasó por debajo

quote() nunca escribe nada — es una lectura pura, invocable en cualquier momento sin importar el estado del destino, por eso tiene éxito aunque el propio retiro quede bloqueado inmediatamente después. quote.networkExecutionCost es el mismo Network Execution Engine que usa el Settlement (Settlement and Split) — el costo real y cotizado de transmitir este retiro on-chain, en las unidades propias del activo de recurso, nunca restado de lo que Bob realmente recibe (estimatedNetworkFee está obsoleto y siempre es null bajo SelfCustody). No existe ningún mecanismo oficial de Sandbox para adelantar este cooldown, y no debería construirse ninguno — ver Known Limitations §F.4 para saber exactamente por qué, y por qué esa es la decisión correcta aunque haga que este capítulo en particular sea más lento de ejercitar por completo.