MIP-28┃Ratify the Parallel Insurance Fund

Summary:

The proposal aims to ratify the Parallel insurance fund, a comprehensive and clear framework to cover potential losses of the Parallel Protocol.

Context

Since the genesis of the Parallel Protocol, a portion of the protocol fees have been allocated to a safety reserve, which are currently sitting in Vaults Core contracts. The aim of the Safety Reserve is to cover potential protocol bad debts due to overly aggressive risk parameters. When the value of a vault’s debt exceeds the value of the collateral, the liquidator of the position will liquidate the position up to the Liquidation Ratio, while the difference (the bad debt) will be taken from the Safety Reserve and burned to offset the bad debt.

The purpose and management of this safety reserve have never been clearly defined and voted on by the DAO. We therefore propose to ratify a comprehensive and clear framework to cover potential losses of the Parallel Protocol, called the Parallel Insurance Fund.

Rationale:

Below are funds currently held by the safety reserve: (at time of writing)

  • PAR:
    • Ethereum: 363,616 (391k USD)
    • Polygon PoS: 61,040 (65k USD)
  • paUSD:
    • Ethereum: 61.38 (61 USD)
    • Polygon PoS: 176.29 (176 USD)

We propose to rename the safety reserve the Parallel Insurance Fund. The Insurance Fund would cover losses in case of shortfall events:

  • Smart contract risk: Risk of a bug, design flaw or potential attack surfaces on the smart contract layer.
  • Liquidation risk: Risk of failure of an asset that is being used as collateral on Parallel; risk of liquidators not capturing liquidation opportunities in a timely manner, or low market liquidity of the principal asset to be repaid.
  • Oracle failure risk: Risk of the oracle system not properly updating the prices in case of extreme market downturn and network congestion; risk of the Oracle system not properly submitting prices, causing improper liquidations.

Rules:

  • The DAO must decide, via governance votes, which deployment (PAR and/or paUSD) is covered, which chain is covered, or not, by the insurance fund, and at which % or $ value of the insurance fund the deployment & chain are covered.
  • Assets held in the insurance fund must be liquid under a 16 weeks period.
  • At least 10k PAR for PAR deployments and 10k paUSD for paUSD deployments must stay in the vaultsCore to cover very short term potential bad debts.
  • DAO Multisig signers will have the right to rebalance assets from the deployed insurance fund to vaultsCore contracts in order to always have enough assets to cover very short term bad debts.

We propose to cover PAR & paUSD deployment on Ethereum and Polygon PoS to up to 100% of the insurance fund.

PAR & paUSD currently owned in vaults core contracts, which are representing the safety reserve, cannot be withdrawn from vaults core contracts. As vaults core contracts are upgradables, a way to have the possibility to withdraw PAR & paUSD is to deploy new vaults core contracts with an added function that let only PAR & paUSD to be withdrawn from vaultsCore contracts, then upgrade current vaultsCore contracts, with new ones. PAR and paUSD will be withdrawn and sent to a multisig (one multisig per chain) controlled by Parallel DAO called the Parallel insurance fund multisig.

These updated VaultsCore contracts have been developed & reviewed by Murphy Labs.

Currently PAR & paUSD fees allocated to the safety reserve (20% of fees) goes to vaults core contracts, we propose to directly send them to the newly created Parallel Insurance Fund multisigs. For newly accumulated PAR and paUSD in the insurance fund, we propose to swap them every 16 weeks for AURA tokens and lock them as vlAURA. As voted in MGP-13, vlAURA voting power would be delegated to vMIMO holders.

There is currently a bit more than 455k USD held in the safety reserve between Ethereum and Polygon PoS in PAR & paUSD (cf. beginning of the proposal). To mitigate the associated risks with holding native Parallel stablecoins (exploit that lead the PAR & paUSD prices to 0) we propose to diversify the insurance fund holdings in a way that both diversifies the fund and supports the growth of the Parallel protocol.

We propose this repartition:

  • 214k USD (+ potential remaining PAR/paUSD accumulated in the meantime) → swapped for AURA, then locked in vlAURA for 16 weeks on Aura
  • 50k USD → PAR/EURA (Ethereum) → on Balancer (then staked on Aura)
  • 50k USD ->paUSD/GYD (Ethereum) → on Balancer (then staked on Aura)
  • 50k USD → PAR/EURe (Polygon PoS) → on Balancer (then staked on Aura)
  • 50k USD → paUSD/stataUSDCn (Polygon PoS) → on Balancer (then staked on Aura)
  • 10k PAR → Ethereum VaultsCore contract
  • 10k PAR → Polygon PoS VaultsCore contract
  • 10k paUSD → Ethereum VaultsCore contract
  • 10k paUSD → Polygon PoS VaultsCore contract

AURA tokens will be acquired via CowSwap TWAP or OTC Deal, depending on the best offer received. Accumulated AURA tokens would be then locked as vlAURA. As voted in MGP-13, vlAURA voting power would be delegated to vMIMO holders.

Accumulated rewards from Aura & Balancer deposits would be swapped every 16 weeks for AURA tokens then locked as vlAURA for 16 weeks on Aura.

Means:

  • Human Resources: Multisig signers will need to sign transactions to execute the proposal
  • Treasury Resources: No direct treasury resources used, but action performed for assets held in the safety reserve in order to create Parallel Insurance Fund.

Technical implementation:

  • Ethereum:

    • Deploy the Ethereum Parallel Insurance Fund Multisig
    • In the PAR FeeDistributor contract, call the function ‘changePayees’ with these parameters:
      • _payees : 0x25Fc7ffa8f9da3582a36633d04804F0004706F9b; [Ethereum Parallel Insurance Fund Multisig]
      • _shares: 8000; 2000
    • In the paUSD FeeDistributor contract, call the function ‘changePayees’ with these parameters:
      • _payees : 0x25Fc7ffa8f9da3582a36633d04804F0004706F9b; [Ethereum Parallel Insurance Fund Multisig]
      • _shares: 8000; 2000
    • Deploy an new PAR VaultsCore contract with a function that let (only) PAR being withdrawn
    • Upgrade the current PAR VaultsCore contract for the newly deployed PAR VaultsCore contract (this has to be done in one transaction):
      • call ‘upgrade(newVaultCoreAddress)’ on the current vaultCore deployed (will allow the new fault core to claim the funds)
      • call ‘acceptUpgrade(oldVaultCoreAddress)’ on the newVaultCore (will tranfer the funds from the current one to the new one)
      • call ‘setDebtNotifier(debtNotifierAddress)’ on the newVaultCore
      • grant ‘MINTER_ROLE’ to the newVaultCoreAddress
      • remove ‘MINTER_ROLE’ to the oldVaultCoreAddress
      • call ‘setVaultsCore(newVaultCoreAddress)’ on the AddressProvider
    • Deploy an new paUSD VaultsCore contract with a function that let (only) paUSD being withdrawn
    • Upgrade the current paUSD VaultsCore contract for the newly deployed paUSD VaultsCore contract (this has to be done in one transaction):
      • call ‘upgrade(newVaultCoreAddress)’ on the current vaultCore deployed (will allow the new fault core to claim the funds)
      • call ‘acceptUpgrade(oldVaultCoreAddress)’ on the newVaultCore (will tranfer the funds from the current one to the new one)
      • call ‘setDebtNotifier(debtNotifierAddress)’ on the newVaultCore
      • grant ‘MINTER_ROLE’ to the newVaultCoreAddress
      • remove ‘MINTER_ROLE’ to the oldVaultCoreAddress
      • call ‘setVaultsCore(newVaultCoreAddress)’ on the AddressProvider
    • Deploy the Insurance Fund as explained above in the repartition
  • Polygon PoS:

    • Deploy the Polygon PoS Parallel Insurance Fund Multisig
    • In the PAR FeeDistributor contract, call the function ‘changePayees’ with these parameters:
      • _payees : 0x2046c0416a558c40cb112e5ebb0ca764c3c5c32a; [Ethereum Parallel Insurance Fund Multisig]
      • _shares: 8000; 2000
    • In the paUSD FeeDistributor contract, call the function ‘changePayees’ with these parameters:
      • _payees : 0x2046c0416a558c40cb112e5ebb0ca764c3c5c32a; [Ethereum Parallel Insurance Fund Multisig]
      • _shares: 8000; 2000
    • Deploy an new PAR VaultsCore contract with a function that let (only) PAR being withdrawn
    • Upgrade the current PAR VaultsCore contract for the newly deployed PAR VaultsCore contract (this has to be done in one transaction):
      • call ‘upgrade(newVaultCoreAddress)’ on the current vaultCore deployed (will allow the new fault core to claim the funds)
      • call ‘acceptUpgrade(oldVaultCoreAddress)’ on the newVaultCore (will tranfer the funds from the current one to the new one)
      • call ‘setDebtNotifier(debtNotifierAddress)’ on the newVaultCore
      • grant ‘MINTER_ROLE’ to the newVaultCoreAddress
      • remove ‘MINTER_ROLE’ to the oldVaultCoreAddress
      • call ‘setVaultsCore(newVaultCoreAddress)’ on the AddressProvider
    • Deploy an new paUSD VaultsCore contract with a function that let (only) paUSD being withdrawn
    • Upgrade the current paUSD VaultsCore contract for the newly deployed paUSD VaultsCore contract (this has to be done in one transaction):
      • call ‘upgrade(newVaultCoreAddress)’ on the current vaultCore deployed (will allow the new fault core to claim the funds)
      • call ‘acceptUpgrade(oldVaultCoreAddress)’ on the newVaultCore (will tranfer the funds from the current one to the new one)
      • call ‘setDebtNotifier(debtNotifierAddress)’ on the newVaultCore
      • grant ‘MINTER_ROLE’ to the newVaultCoreAddress
      • remove ‘MINTER_ROLE’ to the oldVaultCoreAddress
      • call ‘setVaultsCore(newVaultCoreAddress)’ on the AddressProvider
    • Deploy the Insurance Fund as explained above in the repartition

Voting Options:

  • Accept to ratify the Parallel Insurance Fund
  • Against/Rework the proposal
  • Abstain

Authors: @JeanBrasse from Mimo Labs

Sentiment poll:

  • Accept to ratify the Parallel Insurance Fund
  • Against/Rework the proposal
  • Abstain
0 voters
2 Likes

Nice proposal JeanBrasse, good work

2 Likes

I like the proposal.

Have the 10k remaining in Vault Core been justified by data to be sufficient?
Why 10k and not 20k?

1 Like

The vote is now live on Snapshot: Snapshot

3 Likes

Hi,
yes very good question, we analysed the total use of the safety for each stablecoin on each chain.

As we can see in the screenshot:

  • the total amount of paUSD used on Ethereum is 49.69 with an average of 4.51 paUSD per use.
  • the total amount of paUSD used on Polygon PoS is 0 with an average of 0 paUSD per use.
  • the total amount of PAR used on Ethereum is 169.06 with an average of 33.81 PAR per use.
  • the total amount of PAR used on Polygon PoS is 55.37 with an average of 5.53 PAR per use.

image

We think that having at least 10k PAR for PAR deployments and 10k paUSD for paUSD deployments in the vaultsCore contracts to cover very short term potential bad debts is sufficient.
In addition, if PAR and paUSD in vaultsCore contracts are used intensively to cover bad debts, the DAO Multisig will be able to withdraw liquidity from the liquidity pools and add it to the vaultsCore contracts.

2 Likes

The proposal has been approved by the DAO, result: Snapshot

1 Like