You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Self-service USDC withdrawal: let any HostIT user move their custodial USDC balance out to an external on-chain address of their choosing (full balance or a specified amount).
This replaces the original "accumulate-then-pay-organizer-out" framing. Under the real-time split (#96), USDC lands directly in a user's custodial Circle wallet:
Summary
Self-service USDC withdrawal: let any HostIT user move their custodial USDC balance out to an external on-chain address of their choosing (full balance or a specified amount).
This replaces the original "accumulate-then-pay-organizer-out" framing. Under the real-time split (#96), USDC lands directly in a user's custodial Circle wallet:
mintTicket; refundable cuts arrive afterwithdrawTicketBalancereleases the escrow (see Blockchain: Bull queue — payout (withdrawTicketBalance on-chain) #37 / Epic: Crypto real-time split — organizer paid on-chain via mintTicket #96 Phase 3).claimRefund) and any leftover custodial balance from the "deposit only the shortfall" checkout flow.Both cases leave a spendable USDC balance in the user's Circle wallet. This issue covers letting them sweep it to an external wallet.
Scope
POST /api/wallet/withdraw(JWT — any authenticated user){ toAddress: string, amount?: string }—amountomitted ⇒ withdraw the entire available balance.toAddress(EVM checksum, non-zero); reject if balance is 0 oramount> available.CircleWalletService.withdraw(userId, toAddress, amount?):user.circleWalletId).WithdrawalRecord.idas the Circle transferrefId.WithdrawalRecord { userId, toAddress, amount, fee, status, circleTransferId, txHash }.Out of scope (tracked elsewhere)
claimRefund) — Epic: Crypto real-time split — organizer paid on-chain via mintTicket #96 Phase 3.Acceptance criteria
WithdrawalRecordnever double-sendsDepends on
CIRCLE_WALLET_SET_ID) — see Epic: Crypto real-time split — organizer paid on-chain via mintTicket #96 ops prerequisiteRefs #96, #37