Withdraw reserves from cUSDCv3 and cUSDTv3 on Polygon
Actions
Proposal
Proposal
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 and moves them to the Compound Timelock on Ethereum Mainnet.
- The USDT is sent directly to the Mainnet Timelock using LayerZero's OFT standard.
- The USDC.e is withdrawn to a Safe, which bridges it to Mainnet through the Polygon PoS bridge in the same execution. A single-use transfer contract, approved by the Mainnet Safe in this proposal, then pulls it from the Safe to the Mainnet Timelock.
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()) | 618,723.89 USDC.e |
| Withdrawn from cUSDCv3 to the Safe | 470,000.00 USDC.e |
cUSDTv3 reserves at proposal creation (getReserves()) | 93,877.42 USDT |
| Withdrawn from cUSDTv3 and sent to the Mainnet Timelock | 65,000.00 USDT |
The proposal does not withdraw all reserves. Both markets still have open borrow positions, so the rest is left in the markets and can be withdrawn by a later proposal.
USDC.e path
USDC.e is not a LayerZero OFT, so it is withdrawn to the Safe 0xD28d21422f5fA74E3d4414626c774bDA274b7Ca9. The Safe has the same address on Polygon and Mainnet, and on each chain its only owner is the local Compound Timelock, with a threshold of 1, so only governance can move funds out of it.
This proposal has the Mainnet Safe approve the transfer contract 0x6472d31e775B6a736fB3fB00208B470C5Db14fCF to spend 470,000 USDC. The contract has no owner and holds only constants: the USDC address, the Safe address, the Mainnet Timelock address and the amount.
On Polygon, the proposal has the Safe burn the USDC.e through the Polygon PoS bridge. Once the burn is included in a checkpoint on Mainnet, anyone can complete the exit with RootChainManager.exit, which releases it 1:1 as USDC to the Mainnet Safe. Anyone can then call transfer() on the contract once to move exactly 470,000 USDC from the Safe to the Mainnet Timelock; after that a flag blocks any further call.
Proposal actions
The first proposal action calls execTransaction on the Mainnet Safe, through which the Safe approves the transfer contract to spend 470,000 USDC. The Mainnet Timelock is a Safe owner and the threshold is 1, so it executes the Safe transaction directly with a pre-validated owner signature.
The second 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 to the Safe.
- Call
execTransactionon the Polygon Safe, through which the Safe callswithdrawon USDC.e to burn the 470,000 USDC.e through the Polygon PoS bridge. The Polygon Timelock is a Safe owner and the threshold is 1, so it executes the Safe transaction directly with a pre-validated owner signature. - Withdraw 65,000 USDT from the Polygon cUSDTv3 reserves to the Polygon Timelock.
- Call
sendon the USDT0 OFT to send 65,000 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 is sent with the call, 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.
Some simulations are not available
Status
Wed Nov 11, 08:40 am
Start voting period
Sat Nov 14, 02:22 am
End voting period
Queue proposal
Execute proposal