Morpho Blue is live, and B.Protocol and Block Analitica are curating the risk for the MetaMorpho Flagship Vaults (our Flagship ETH Vault is live, with others to follow soon). We have published our unique setup to allow Vault’s LPs to have control over the Guardian role of the Vault in order for them to be able to cancel malicious actions initiated by a compromised Owner or Curator. You can read the full article on the setup here.
This tutorial will go step-by-step to explain the process of proposing a vote and executing it in case it is passed. Note that screenshots are taken from the Snapshot testnet playground on Goreli but the flow is the same on mainnet.
Opening a New Proposal
- Go to Snapshot. Each Vault will have its unique Snapshot Space based on the Vault’s name and token, all under morpho-guardian.eth ENS.
2. Open a new proposal with the relevant title and description (e.g. the transaction type initiated by the Owner you wish to revert). You can also add a link to a forum or any other discussion thread that taken place before the vote.
a. In order to open a proposal a user must hold a minimum of 0.001% of the total supply of the Vault LP tokens in order to prevent spam proposals.
b. The voting token of the Snapshot Space is a Vault’s wraped LP token that calculates the percentage of each LP out of the current total supply. It is marked as vwt token, and you can find its code [here](https://etherscan.io/address/0x040a3F5c2D7CB25F85913dDd3A194bf81FE087d9#code).
3. Mark the checkbox to use oSnap so that in case the vote passes the transaction could be executed by the Guardian of the vault. Once the oSnap module is picked you can’t change the voting type (Basic voting with Yes/No/Abstain options). The time duration of the vote is set for 2 days and can’t be modified besides the starting time.
4. You can verify the addresses of the safe and the oSnap module (the addresses in the images below are from testnet. The Guardian’s Safe and oSnap module will be posted on the Morpho forum for each Vault)
5. Click on the “Add transaction batch” button and add the required details:
a. Type - should be “Contract Interaction”
b. To (address) - should be the Vault’s address. For the Flagship ETH (bbETH) this is the address.
c. Value (wei) - should be 0 as no ETH is being transferred.
d. ABI - paste the Vault’s ABI copied from the contract of the Vault.
- Once the ABI is pasted you would need to choose the function you want to call out of the listed functions. Make sure to use the relevant one (1 of the 4 functions the Guardian has control over).
7. For some of the functions (RevokePendingCap and RevokePendingMarketRemoval) you would need to add the relevant market id.
2. Once everything is set you can publish the vote and sign it on your wallet to make it public. The vote will be live for 2 days (48 hours) from the starting time set on the proposal.
Executing with oSnap
Once the vote has ended and the quorum was reached (a minimum of 15% of the current total supply of the Vault has to vote Yes and be the majority of the votes) the proposer or someone on his behalf would need to execute the transaction using the oSnap module and UMA protocol.
- Approve a bond according to the requirements set for the oSnap module. For the Flagship Vaults the Bond is set to be 2000 USDC and its liveness (the duration of the bond to be staked before the proposal can be executed) is set to 24 hours to give time for anyone to dispute the vote.
2. Wait for the dispute period to end (24 hours)
a. If someone disputes the proposal during these 24 hours, s/he would need to set up a bond that won’t be returned if the vote is verified as valid.
- Request to Execute the transaction over the Snapshot UI.
4. Execute the transaction once the challenge period has ended.
For any questions or feedback feel free to get in touch with the B.Protocol team here, or over our Discord.