mUSDC Bridge
The mUSDC Bridge brings USDC liquidity into the Monolythium ecosystem through a mint-and-burn model. Users deposit USDC on the source chain and receive mUSDC (Bridged USDC) on Monolythium. To redeem, users burn mUSDC and receive their USDC back on the source chain.
Architecture
The bridge consists of two contracts and a relayer service:
Source Chain (USDC) Monolythium (mUSDC)
+---------------------+ +---------------------+
| USDCBridgeVault | -- relay --> | USDCBridgeMinter |
| | | |
| - deposit() USDC | | - processDeposit() |
| - release() USDC | <-- relay -- | - redeem() mUSDC |
| - 0.1% fee | | |
| - daily limits | | |
+---------------------+ +---------------------+
^ ^
| |
[User deposits USDC] [User redeems mUSDC]
- USDCBridgeVault — deployed on the source chain. Locks USDC when users deposit and releases USDC when users redeem.
- USDCBridgeMinter — deployed on Monolythium. Mints mUSDC when deposits are confirmed and burns mUSDC when users redeem.
- Relayer — an off-chain service that watches for events on both chains and relays transactions between them.
How It Works
Depositing (USDC → mUSDC)
- Approve — the user approves the vault contract to spend their USDC.
- Deposit — the user calls
deposit(amount)on the vault. A 0.1% fee is deducted and sent to the protocol treasury. The net amount is locked in the vault. - Relay — the relayer detects the
Depositedevent and callsprocessDeposit()on the minter. - Mint — the minter mints the net amount of mUSDC to the user's address on Monolythium.
Redeeming (mUSDC → USDC)
- Approve — the user approves the minter contract to spend their mUSDC.
- Redeem — the user calls
redeem(amount)on the minter. The mUSDC is burned. - Relay — the relayer detects the
Redeemedevent and callsrelease()on the vault. - Release — the vault releases the USDC to the user's address on the source chain.
Fee Structure
| Parameter | Value |
|---|---|
| Deposit fee | 0.1% (10 basis points) |
| Redeem fee | None (vault-side only) |
| Fee recipient | Protocol Treasury |
| Minimum deposit | No minimum |
Fee Calculation Example
Depositing 1,000 USDC:
Fee = 1,000 × 0.001 = 1.00 USDC (sent to treasury)
Net = 1,000 - 1.00 = 999.00 mUSDC (minted to user)
mUSDC Token
mUSDC is an ERC-20 token on Monolythium that represents bridged USDC:
| Property | Value |
|---|---|
| Name | Bridged USDC (Monolythium) |
| Symbol | mUSDC |
| Decimals | 6 (matches native USDC) |
| Standard | ERC-20 (OpenZeppelin v5) |
mUSDC can be freely traded, used as collateral, or provided as liquidity on MonoSwap just like any other ERC-20 token. It is always redeemable 1:1 for USDC locked in the vault (minus fees).
Trading mUSDC
mUSDC is paired with LYTH on MonoSwap. You can trade it on MonoHub like any other token:
- Pair: mUSDC / WLYTH
- Router: MonoRouter (
0x2999dAa2C1535A52F1c42f8FE08577700BfDF878)
Security
The bridge implements multiple security measures:
- Nonce tracking — each deposit and redemption has a unique nonce to prevent double-processing.
- Pausable — the owner can pause both the vault and minter in an emergency.
- Reentrancy guard — all state-changing functions are protected against reentrancy.
- Daily volume limits — configurable limits on total daily deposit/release volume (can be set by the owner).
- Per-transaction limits — configurable maximum amount per single deposit or release.
- Operator separation — only the authorized operator (relayer) can process deposits and releases. The operator cannot change contract settings.
Contract Addresses
Sprintnet (Chain ID: 262146)
| Contract | Address |
|---|---|
| mUSDC Token | 0x65D8742A9E95c7a18E0E0a28f8B1d8f20c0ea7F0 |
| TestUSDC (Source Token) | 0x8BB072657DC5a24BbC7fd43A6696FA822B11A0eD |
| USDCBridgeVault | 0x6B6CE8D05cA859b21f452DFbe7aF819932b660cd |
| USDCBridgeMinter | 0x96148FeE8C66e005D625920FB8688dd455cd1077 |
On Sprintnet, the source token is TestUSDC (a freely mintable test token). On mainnet, this will be replaced with real USDC.
Troubleshooting
My deposit is stuck
The relayer typically processes deposits within a few seconds. If your mUSDC hasn't appeared after a few minutes:
- Check that your deposit transaction was confirmed on the source chain.
- Verify the deposit event was emitted (check on Monoscan).
- The relayer may be temporarily offline — deposits are never lost and will be processed when the relayer resumes.
Can I get my USDC back if the bridge is paused?
If the bridge is paused, no new deposits or redemptions can be processed until it is unpaused. Your USDC remains safely locked in the vault and your mUSDC remains in your wallet. Once unpaused, all operations resume normally.
Next Steps
- Trading & Liquidity — learn how to trade mUSDC on MonoSwap
- Contract Addresses — full list of deployed contracts
- IBC — cross-chain transfers using IBC (Cosmos-to-Cosmos)