Deposit flow
When a user deposits a supported stablecoin into their Portfolio Wallet, funds move through the following sequence. USDC and USDT follow separate strategy lanes.- The user transfers USDC or USDT from an external wallet to the Portfolio Wallet deposit address on a supported chain.
- Groundβs servers detect the incoming transfer via on-chain monitoring.
- Ground signs and submits a deposit transaction from the Portfolio Wallet.
- The Portfolio Wallet calls the MasterRouter contract.
- The MasterRouter resolves the correct yield source through the AdapterRegistry.
- The stablecoin is deposited into a compatible underlying yield source whose
depositTokenmatches the strategy lane. - Receipt tokens are held by the Portfolio Wallet; Ground updates the walletβs on-chain position and reported balances.
Withdrawal flow
Withdrawals reverse the deposit path, unwinding positions back to the requested stablecoin before sending to the destination:- The API plans the withdrawal by selecting which yield source positions to unwind (each becomes a payout leg).
- For each payout leg, Ground signs and submits a redeem transaction from the Portfolio Wallet.
- The Portfolio Wallet calls the MasterRouter.
- The MasterRouter resolves the correct yield source via the AdapterRegistry.
- Receipt tokens are redeemed from the underlying yield source and the sourceβs deposit token is returned.
- As each payout leg settles, the requested stablecoin is transferred from the Portfolio Wallet to the userβs destination address immediately. Payout legs do not wait for each other.
Some yield sources, including
syrup-usdc and JTRSY, have asynchronous redemption. JTRSY USDC redemptions are instant through Basin when liquidity is available. Because payout legs may settle at different times, each requires separate approval when signing keys are configured in the developer portal. See Transaction Approvals for details.