Deposit flow
When a user deposits USDC into their Portfolio Wallet, funds move through the following sequence:- The user transfers USDC from an external wallet to the Portfolio Wallet deposit address.
- 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.
- USDC is deposited into the underlying yield source smart contract (e.g. Morpho vault or Maple pool).
- 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 USDC 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 USDC is returned.
- As each payout leg settles, USDC is transferred from the Portfolio Wallet to the user’s destination address immediately. Payout legs do not wait for each other.
Some yield sources (for example
syrup-usdc) have asynchronous redemption, while synchronous ERC-4626 sources such as morpho-gauntlet-usdc normally unwind immediately. Because each payout leg may settle at different times, each one requires a separate transaction approval if you have configured one or more signing keys in the developer portal. See Transaction Approvals for details.Deployed contract addresses
Each supported chain has the core routing infrastructure (MasterRouter, AdapterRegistry, WalletBindingRegistry), a CCTP adapter for bridging, and yield source adapters.Production (mainnet)
Core contracts
| Chain | MasterRouter | AdapterRegistry | WalletBindingRegistry |
|---|---|---|---|
| Ethereum | 0xD743D5b09eceA67880c4bc326a18A874bafE246E | 0x6Da1180A84C0E38a0d292f1e51853ce4C75fc150 | 0x36E76eE20168300a1005e3d607499f6f0C62318b |
| Arbitrum | 0xD743D5b09eceA67880c4bc326a18A874bafE246E | 0x6Da1180A84C0E38a0d292f1e51853ce4C75fc150 | 0x9FfaaF612A748681508852591c54AFC84A7a84E8 |
| Base | 0xD743D5b09eceA67880c4bc326a18A874bafE246E | 0x6Da1180A84C0E38a0d292f1e51853ce4C75fc150 | 0xc8bC5a9F6F2e5C0a78B1dDC4088A8dCE9B5316c8 |
| Polygon | 0xD743D5b09eceA67880c4bc326a18A874bafE246E | 0x6Da1180A84C0E38a0d292f1e51853ce4C75fc150 | 0xc8bC5a9F6F2e5C0a78B1dDC4088A8dCE9B5316c8 |
Yield source adapters (Ethereum only)
| Adapter | Address | Underlying Protocol |
|---|---|---|
| Syrup USDC | 0x746253ea7ecd9c356C4E42A977238779fa1F85BA | Maple Finance |
| Morpho Gauntlet USDC | 0xb36Ee685D1AdE0af03995E0e9E6D7D050736E4bE | Morpho (Vault: 0xdd0f28e19C1780eb6396170735D45153D261490d) |
| Morpho Steakhouse USDC | 0xe196b91BfF3F0EC4279e8494Ab9b9727B62FFDEb | Morpho (Vault: 0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB) |
| Morpho August USDC V2 | 0x6268d5c875acAB235d411563A4A03163aDa08F90 | Morpho (Vault: 0x7ceB0f01Cb7187a2EBED5661eCC4d5701d8F2350) |
Bridge adapters
| Chain | CCTP Adapter |
|---|---|
| Ethereum | 0x49bD4C78cf3B4dDcF9c3857269BFa08C69f5E044 |
| Arbitrum | 0x49bD4C78cf3B4dDcF9c3857269BFa08C69f5E044 |
| Base | 0x49bD4C78cf3B4dDcF9c3857269BFa08C69f5E044 |
| Polygon | 0x49bD4C78cf3B4dDcF9c3857269BFa08C69f5E044 |
Sandbox (Ethereum Sepolia)
| Contract | Address |
|---|---|
| MasterRouter | 0xBB6cD0a42cb96eb7bA9234a0B5738545D53958d3 |
| AdapterRegistry | 0x4d18Ee079fc36573d62B52B02eB9c6D8F0fc38E2 |
| WalletBindingRegistry | 0xDd48ddD16B3E6906F8d64dB51c03a39EFE0C3EA4 |
| CCTP Adapter | 0x826abf3b74c59B6Aec8a0d4aF07fe5fC81A0Fe0F |
| Syrup USDC Adapter | 0x9DF3Ef7DbE65eBF07064c912fFC52c2AB169EbbF |
| RLP Adapter | 0xA64cf2Fd5c9Fc9b4E39eb88dE07D6015B31054C1 |
| Morpho August USDC V2 Adapter | 0xFa86eF30a830A27e2d00b4D8eC9cd853690222B7 |