Proposal summary
This proposal withdraws 470,000 USDC.e and 65,000 USDT of reserves from the Compound III USDC and USDT markets on Polygon, swaps the USDC.e into USDT on Uniswap V3, and sends the USDT to the Compound Timelock on Ethereum Mainnet using LayerZero's OFT standard.
Withdrawing the reserves is the final step of the deprecation process and secures the markets' protocol-owned funds by moving them to the Timelock on Mainnet.
Reserves withdrawal
Reserves are the protocol-owned portion of a market's base asset: the Comet's base token balance plus outstanding borrows, minus what is owed to suppliers, as reported by getReserves(). They do not belong to any user, so withdrawing them does not change supplier or borrower balances. Only the governor of the market (the Polygon Timelock) can call withdrawReserves.
| Source | Amount |
|---|
cUSDCv3 reserves at proposal creation (getReserves()) | 588,700.98 USDC.e |
| Withdrawn from cUSDCv3 and swapped to USDT | 470,000.00 USDC.e |
cUSDTv3 reserves at proposal creation (getReserves()) | 93,664.37 USDT |
| Withdrawn from cUSDTv3 | 65,000.00 USDT |
The proposal does not withdraw all reserves. Both markets still have open borrow positions, so the remaining USDC.e and USDT are left as buffers that keep the markets solvent until those positions are repaid or liquidated. The rest can be withdrawn by a later proposal once they are closed.
Swap
The USDC.e is swapped into USDT through the Uniswap V3 USDC.e/USDT pool (0.01% fee) using SwapRouter02. USDT trades at a small discount to USDC.e on Polygon, so the swap is expected to return slightly more USDT than the USDC.e it spends.
| Swap | Max loss % |
|---|
| 470,000.00 USDC.e -> USDT | 0.1% |
If the swap would return less than the minimum, the whole proposal execution reverts. The withdrawn USDT plus the swap minimum is bridged; any swap output above the minimum stays on the Polygon Timelock and can be withdrawn later.
Proposal actions
The proposal action sends a message through Polygon's FxRoot to the Polygon Bridge Receiver, which queues the following calls on the Polygon Timelock:
- Withdraw 470,000 USDC.e from the Polygon cUSDCv3 reserves.
- Withdraw 65,000 USDT from the Polygon cUSDTv3 reserves.
- Approve SwapRouter02 to spend 470,000 USDC.e.
- Call
exactInputSingle on SwapRouter02 to swap 470,000 USDC.e into USDT, delivered to the Polygon Timelock.
- Call
send on the USDT0 OFT to send 534,530.00 USDT to the Mainnet Timelock. USDT on Polygon is USDT0: it is burned on Polygon and released on Mainnet by the USDT0 OFT adapter, so no approval is needed. The LayerZero messaging fee is paid in native POL from the Polygon Timelock's balance: a fixed 10.00 POL, well above the current fee, so the call still succeeds if the fee rises before execution. The LayerZero endpoint refunds any excess over the actual fee to the Polygon Timelock.
Once LayerZero verifies the message, its executor delivers it on Mainnet and the USDT is released to the Mainnet Timelock.