Holding funds
La reserva es como poner el dinero de Alice dentro de una pequeña caja con una etiqueta: "no gastar — esperando entrega." El dinero es real, es de Alice, pero ni Bob ni Mercatto pueden tocarlo todavía. En Sandbox, Mercatto simula que el depósito de Alice llega y se confirma; en Production esto es una transferencia real que alguien realmente transmite.
reserve() — confirmar el depósito es suficiente.Código
const observed = await mercatto.sandbox.simulateDeposit(environmentId, depositAddress, assetNetworkId, GROSS_AMOUNT);
await mercatto.sandbox.simulateConfirmation(environmentId, observed.sandboxObservedAddressId, 1, true);
// CREATED -> AWAITING_FUNDS -> FUNDED -> RESERVED are all real, distinct, non-instantaneous
// transitions -- poll for RESERVED specifically, not just "no longer awaiting funds".
let status = (await mercatto.transactions.getState(transactionId)).status;
while (status.name !== 'RESERVED') {
await new Promise((resolve) => setTimeout(resolve, 1000));
status = (await mercatto.transactions.getState(transactionId)).status;
}
Resultado
{ "status": "RESERVED" }
Qué pasó por debajo
simulateDeposit/simulateConfirmation existen solo en Sandbox (SandboxBlockchainConnector) —
Mercatto nunca tuvo que correr un nodo blockchain real para desarrollar esto. Una vez confirmada,
la Transaction pasa por FUNDED hasta llegar a RESERVED por sí sola; estos son pasos reales,
separados, no instantáneos — una verificación ingenua de "ya no está esperando fondos" puede
observar FUNDED y avanzar demasiado pronto, por eso el polling de arriba espera
específicamente a RESERVED. Por debajo, la reserva es una transición real del Ledger: el balance
Available de Alice se mueve a Reserved, un par balanceado de Ledger Entries, no una bandera de
estado sin efecto financiero.