Summary
Following the successful launch of Notional V3 on Arbitrum in November 2023, we want to poll the community to decide if the DAO should migrate Notional V2 mainnet deployment to V3 or if it should deprecate Notional V2 and deploy Notional V3 in parallel.
Context & objectives
The Notional V3 codebase offers various key improvement compared to V2:
- Addition of Variable Rate Borrowing & Lending Markets allowing users to borrow and lend at variable rates. When fixed rate loans mature they simply convert to a variable rate loan simplifying the user experience.
- Improved Fixed Rate Interest Rate Models allowing for higher capital efficiency and more effective risk management.
- Addition of Supply & Borrow Caps to support the listing of a broader set of assets.
- Leveraged Interest Rate Trading for users to borrow at a fixed rate and lend at a variable rate or vice versa with leverage while remaining delta neutral.
- Leveraged Vault Trading for users to borrow fixed or variable to enter whitelisted yield strategies (e.g. Convex or Aura) with leverage.
- External lending where unutilized funds are lent to external venues (ex: Aave V3) to increase capital efficiency.
The Notional V3 contracts have been audited by Sherlock over the following audits:
- Notional V3 audit - Sherlock
- Notional V3 external lending & wrapped fCash audit - Sherlock
- Notional V3 leveraged vault audit - Sherlock
When deciding on the migration path from Notional V2 to V3 the DAO should consider the following objectives:
- Security of user funds
- User experience (UX)
- Liquidity preservation
Proposals
We propose the DAO with two alternative paths regarding the deployment/migration to Notional V3 on Mainnet:
Path #1 - In-place Migration from Notional V2 to V3
This path involves the Notional core team migrating the protocol and all user positions from Notional V2 to Notional V3.
Pros:
- Liquidity preservation (The entirety of Notional V2 liquidity migrates to Notional V3);
- Simple UX for users (All user positions are migrated in-place, gas free for users).
Cons:
- Migration risk (Additional smart contracts risk and increased risk of loss of user funds);
- Additional tests need to be conducted before the migration which could delay the migration;
- Users don’t implicitly accept the migration from V2 to V3;
- Continue supporting longer dated Notional V2 markets (ex: 1 Year USDC and DAI markets).
Path #2 - Deprecate V2 and deploy a new instance of Notional V3
This path involves winding down Notional V2 and deploying a new instance of Notional V3 on mainnet.
Pros:
- No migration related smart contract risks;
- Users explicitly accept to migrate from V2 smart contracts to V3 smart contracts;
- V3 contracts can be deployed as soon as the DAO votes on the protocol’s initial deployment parameters;
- Get rid of Notional V2 longer dated markets (1 Year markets) at deployment.
Cons:
- Worse UX (Need to create a UI for existing users to migrate their positions from Notional V2 to Notional V3, additional gas fees for users);
- Borrowers will be forcibly liquidated if they don’t repay their debts by the deadline.
- Requires maintaining the Notional V2 UI to let users withdraw/migrate;
- Liquidity fragmentation (some funds might indefinitely remain on V2 and never migrate to V3).
- Will require attention from the team for a prolonged period of time.
Tentative V2 deprecation timeline
- Feb 12th → Disable borrowing on the Notional V2 UI
- Mar 7th → Reduce V2 incentives by 50%
- Mar 17th → Deprecate 1Y and 6M markets on the Notional V2 UI
- Mar 17th → Reduce V2 incentives to 0
- Mar 17th → Increase collateral requirements for borrowers
- June 1 → Swap V2 borrowers into variable rate borrow positions on Notional V3 by the June 1st deadline.
- Dec 12 → Fully deprecate fixed rate lending and borrowing on the Notional V2 UI. Only allow liquidity withdrawals.
Recommendation
Deprecating V2 will involve degraded UX for users. Depositors may see temporary illiquidity and delays in their ability to withdraw for up to 3 months.
Swapping V2 borrowers into variable rate borrow positions on Notional V3 by the June deadline would involve moving borrower’s assets into a smart contract that is owned by their address so that they would be able to withdraw or manage their position however they want after the fact. This plan involves forcing borrowers to use V3 instead of V2 after the June deadline which we believe is a better than force-liquidating borrowers over time.
Deprecating will also result in less liquidity retention. There are things we can do to minimize liquidity loss over the migration (like making it easy to migrate from V2 to V3, migrating incentives from V2 to V3, etc), but some liquidity loss is inevitable.
However, we believe that deprecating is the safer option. A protocol upgrade is risky. We can test it, but it’s always possible that a complex upgrade will result in a bug. Furthermore, a fresh deployment of Notional V3 would enable us to get Notional V3 live on Mainnet quicker than if we chose to upgrade because we wouldn’t need to perform exhaustive upfront testing like we would with the upgrade.
For these reasons, we believe that deprecating V2 is the better option despite the drawbacks related to poor UX and liquidity fragmentation.
That said, both options are workable and we look forward to the community’s input.