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.
- 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, Maple pool, Resolv RLP).
- Receipt tokens are held by the Portfolio Wallet.
Withdrawal flow
Withdrawals reverse the deposit path, unwinding positions back to USDC before sending to the destination:- Each yield source position to unwind becomes a payout leg.
- For each payout leg, 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 (e.g. Resolv RLP) have asynchronous redemption, so certain payout legs take longer than others. 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 |
| Resolv LP | 0x6b93E3c05057533106D274Fd66e04cAF4209DD3f | Resolv Protocol |
| Morpho Gauntlet USDC | 0xb36Ee685D1AdE0af03995E0e9E6D7D050736E4bE | Morpho (Vault: 0xdd0f28e19C1780eb6396170735D45153D261490d) |
| Morpho Steakhouse USDC | 0xe196b91BfF3F0EC4279e8494Ab9b9727B62FFDEb | Morpho (Vault: 0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB) |
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 |