Skip to main content
Withdrawals move USDC out of the user’s on-chain vault to an external destination. Every withdrawal is:
  1. EIP-712 signed by the user against the vault’s WithdrawERC20 typed-data struct.
  2. AML-screened by core-api (Global Ledger sanction + risk check). If flagged, the withdrawal enters MLRO_REVIEW for human compliance review.
  3. Backend co-signed with a second EIP-712 signature. Dual signatures are both required on-chain; neither party can move funds alone.
  4. Submitted on-chain by PredictStreet’s backend submitter (PredictStreet pays gas).
  5. Confirmed when the on-chain tx receipt is observed.

State machine

PENDING ─► MLRO_REVIEW ─► CO_SIGNED ─► SUBMITTED ─► CONFIRMED
                     └─► REJECTED (MLRO deny)      └─► REJECTED (revert)
       ─► CO_SIGNED ─► SUBMITTED ─► CONFIRMED
                                 └─► REJECTED (submit fail)
       ─► CANCELLED (user, pre-submit)
See State machine detail.

Typical timeline

  • Happy path (no flag): under 10s from request to CONFIRMED on testnet; target < 60s on mainnet.
  • MLRO review path: SLA 1 business day for decision, per SOP §8.

User-visible balance effects

TransitionavailablelockedComment
Request−amount+amountLocked until outcome
CONFIRMED0−amountFunds gone from platform
REJECTED / CANCELLED / on-chain revert+amount−amountFull refund

Partner & MM notes

Market makers running high withdrawal cadence should:
  • Pre-register destination wallets via deposit sources (see Deposit sources) — otherwise the first withdrawal to a new address triggers enhanced due diligence review above the threshold.
  • Poll GET /api/me/withdrawals/{id} or subscribe to the withdrawals.me WebSocket channel for state transitions.

Next

Dual-sig flow

Why two signatures, how the co-sign works.

EIP-712 struct

WithdrawERC20 struct + signing.

State machine

All states + transitions.

Deposit sources

Return-to-source rules and EDD.