Moola Migration from v1 to v2

Moola Market
7 min readOct 14, 2021

On Thursday Oct. 21st, Moola will initiate a mainnet migration from version 1 contracts to version 2 contracts.

What does this mean?
The current version of Moola is a lightly modified fork of the open source Aave v1 codebase. This migration will upgrade Moola to the open source Aave v2 codebase. We are grateful to the Aave community for their work.

What is going to change from Moola v1 to v2?
New addresses for mcUSD, mcEUR, and mCELO. This means that there will also be new liquidity pool addresses for incentivized pairs on Ubeswap. Ubeswap liquidity providers will need to remove their liquidity before migrating (more details on this below).

No more loan origination fees. Instead, the Moola community treasury will collect 10% of the interest that is paid by borrowers. Active depositors will collect 90% of the interest paid by borrowers. The percentage amount and the destination addresses are governable parameters that can be adjusted. For example, if the community wanted to redirect some of the amount collected to ImpactMarket DAO, then this could be easily implemented.

Debt tokens will now show up in your wallet address when you borrow from Moola.

Credit delegation will enable active depositors to delegate their borrowing capacity to another wallet address. We anticipate releasing access to this feature at app.moola.market in the coming weeks. Moola CLI users are able to start using credit delegation today.

Interest rate mode switching, which will allow borrowers to switch between variable and stable interest rates, are expected to be enabled at app.moola.market within the next few days.

Flash loan upgrades and more!

How do I migrate?

Ubeswap liquidity providers who are providing liquidity with mcUSD, mcEUR, and/or mCELO start here, everyone else skip this section:

Update as of 10/22:
Here’s a quick guide on how-to transition mTokens from v1 to v2 within Ubeswap:
1. If in a farm with an xOLD asset, unstake your ULPs from the Farm tab. Then, in Pool tab, remove liquidity to get the underlying tokens
2. Visit https://old.ubeswap.org/#/swap to convert your mcUSDxOLD into cUSD. Ditto for cEUR and CELO
3. Visit https://app.ubeswap.org/#/swap to convert your cUSD into mcUSD. Ditto for cEUR and CELO
4. Recreate LP tokens with the v2 mTokens on Pool tab, then contribute to farm on Farm tab

NOTES: a. If you think your farm liquidity is gone, scroll to Inactive farms at the bottom of the Farm tab to find your assets b. You must unstake not just from the farm but also from the Pool tab

On or after Thursday October 21st, users who have deposited v1 mTokens (e.g. mcUSD, mcEUR, mCELO) into a Ubeswap liquidity pool as well as users who have staked their Ubeswap Liquidity Provider (ULP) tokens into a farming contract, will need to Withdraw from the farm contract and Withdraw their mTokens from the liquidity pool before migrating from v1 to v2.

For each staking contract that you have v1 mToken liquidity in follow these steps:

Step 1: Navigate to https://app.ubeswap.org/#/farm

Step 2: Click ‘Manage’ on the v1 mToken Pool
(e.g. mcUSD-mcEUR, CELO-mcUSD, CELO-mcEUR, MOO-mCELO)

Step 3: Click ‘Withdraw’

Step 4: Click ‘Withdraw & Claim’ and confirm the transaction when prompted

Step 5: Navigate to https://app.ubeswap.org/#/pool and click ‘Manage’

Step 6: Click ‘Remove Liquidity’

Step 7: Click ‘Max’

Step 8: Click ‘Approve’ and confirm the transaction when prompted

Step 9: Click ‘Remove’

Step 10: Click ‘Confirm’ and confirm the transaction when prompted

Step 11: Navigate to app.moola.market and follow the ‘How do I migrate?’ steps outlined below

How do I migrate? Everyone else start here.

On or after Thursday Oct 21st, navigate to app.moola.market. If you have active deposits or borrows on Moola v1 then you will see a button to ‘Migrate your V1 assets’. Clicking it will open a pop-up asking you to choose between ‘Continue with Automated Migration’ or ‘Continue with Manual Migration’.

If you choose to Automatically Migrate then you’ll be taken to a confirmation screen where you will be prompted to sign a series of transactions with your connected wallet address. Once signed, Automated Migration automatically repays all variable or stable rate debt positions on v1, withdraws your collateral from v1 and deposits it into v2. If you had a debt position on v1 then a VARIABLE — not stable — rate debt position will be opened on v2. The v2 variable borrow interest rate may be different than the v1 borrow interest rate and will be displayed on the confirmation screen. Automated Migration requires multiple signatures, takes 3–4 minutes to complete, and incurs gas fees so make sure you have CELO in your wallet address. See the demo video of how the ‘Automated Migration’ works:

Moola v1 to v2 testnet migration demo — Brave wallet/MetaMask

If you choose to ‘Manually Migrate’ then you will be redirected to app-v1.moola.market where you need to repay any outstanding borrows from funds in your wallet address and then withdraw all of your collateral assets. The repay and withdraw flow for Manual Migration is the same as it currently is at app.moola.market. The options to ‘Deposit’ and ‘Borrow’ will be disabled. Once you have repaid all of your outstanding debts and withdrawn all deposited assets, then you’ll be redirected to Moola v2 by clicking “Go to New Version”, where you can deposit and borrow again.

Will my borrow and debt amounts be the same from v1 to v2?
No, your ‘Borrow Amount’ in v2 will be equal to your ‘Debt Amount’ in v1 because Debt Amount= borrow amount + accrued interest + any outstanding loan origination fees (25 bps of the principal). You will not incur any additional debt simply by migrating.

Will my borrow interest rate mode and APR be the same from v1 to v2?
No. Everyone with a borrow in v1 who ‘Automatically Migrates’ will open a variable interest rate loan, even if you had a stable interest rate loan in v1. We anticipate releasing a ‘Swap Interest Rate Mode’ button shortly after migration to enable borrowers to easily toggle between variable and stable interest rates.

Your APR from v1 will most likely be different from the APR in v2 because borrow interest rates are a function of utilization (i.e. supply of an asset relative to demand to borrow). We expect interest rates to fluctuate as liquidity flows from v1 to v2. If you choose Automated Migration, then the v2 variable interest rate that you will be migrating into should be displayed on the confirmation screen.

Will all my deposited assets be set to be used as collateral even if I’ve disabled one or more assets on v1?
Yes, all collateral assets deposited migrated from v1 to v2 will be set as collateral by default. If you would like for an asset to not be used as collateral, then you may toggle to ‘Is Collateral = off’ under the account tab.

Have the version 2 contracts been audited?
Moola’s implementation of the v2 contracts is currently under audit by Quantstamp. The underlying contracts that Moola forked have been audited.

Where can I find the v2 mToken addresses?

mCELO — 0x7d00cd74ff385c955ea3d79e47bf06bd7386387d

mcUSD — 0x918146359264c492bd6934071c6bd31c854edbc3

mcEUR — 0xe273ad7ee11dcfaa87383ad5977ee1504ac07568

Where can I find the Moola v2 codebase?
Here.

I’m providing liquidity on Mobius/Ubeswap/Sushi/Symmetric with cUSD/cEUR that I’ve borrowed from Moola, what do I need to do?
As long as you are providing liquidity with cUSD/cEUR and not mcUSD/mcEUR, then follow the ‘How Do I Migrate’ steps above.

Your debt position on Moola v1 will be closed and a new debt position on Moola v2 will be opened. You do not need to remove your borrowed cUSD/cEUR liquidity before you migrate.

I’m running a liquidation bot on v1, what do I need to do?
You’ll need to deploy a new instance for v2 markets.

What are the new v2 liquidity pool addresses on Ubeswap and what pool rate were they initialized?

mcUSD — mcEUR (click to add liquidity):
0xF94fEA0C87D2b357DC72b743b45A8cB682b0716E
Pool rate: 0.1 mCUSD = 0.0863 mcEUR

MOO — mCELO (click to add liquidity):
0x9272388FDf2D6bFbA8b1Cdd99732A3D552a71346
Pool rate: 0.1 MOO = 0.0249 mCELO

CELO — mcUSD (click to add liquidity):
0xb460F9Ae1fEa4f77107146C1960bb1C978118816
Pool rate: 0.01 CELO = .05533 mcUSD

CELO — mcEUR (click to add liquidity):
0x9f437509E61896738ea8CDb6cDeD618C0e509032
Pool rate: 0.01 CELO = .0208 mcEUR

What about the Ubeswap farming contracts?
It is anticipated that incentivized contracts for ULP token staking will be deployed before Thursday Oct 21st.

What are the risks?
As with any new technology, not all risks can be eliminated. Some of the risks related to Moola are smart contract risk (unknown vulnerability with the code) and liquidation risk associated with the collateral liquidation process. Steps taken to minimize these risks as much as possible include opening the code base for the public to review, undergoing code audits, and publishing an open source liquidation bot.

Disclaimer

--

--

Moola Market

Moola is a money market protocol built on the Celo blockchain. app.moola.market