Finalize Mento Governance Transition and return Celo to the Community

Hello everyone!

It’s been a while. We wanted to take our time and do this right and we’re now ready to finalise the Mento Governance transition. It was ratified in CGP#180 “Mento Spin-off and Launch of the MENTO token”, when the Celo Community approved the transfer of governance over the Mento Protocol (smart contract, reserve, etc.) from CELO to MENTO token holders, and through the on-chain proposal gave birth to the MENTO Token and the Mento Governance infrastructure.
Since then we’ve been running tests to ensure that everything works as expected, and recently passed our first Mento Governance Proposal!
This CGP finalizez the ownership transition of all Mento Protocol contracts to Mento Governance and the return of 82,406,987 CELO to the community fund, as previously agreed in CGP#79.

Completing this handover will initiate the next phase of the Mento protocol. It will enable Mento Governance to operate independently, reducing the governance burden on Celo Governance while simultaneously enabling Mento to accelerate its growth. The increased pace of launching new Mento stablecoins and rising adoption of Mento will see many opportunities for existing and new Celo stakeholders to benefit from and participate in the Mento protocol.

As with previous proposals, the Celo community will have the opportunity to verify these transactions. In preparation for the upcoming CGP, we have done the following:

  • Tested the proposal on Alfajores
  • Simulated the proposal on a fork of Celo Mainnet, in addition to running tests against the fork

The transactions that will be in the upcoming CGP will be broken down into the following sections, noted here with transaction indices in brackets:

  1. Return of CELO to the Celo Community (0-10)
  2. Configure secondary Reserve addresses (11-13)
  3. Transfer Ownership of Mento Stable Tokens contracts (14-28)
  4. Transfer Ownership of Mento V2 contracts (29-40)
  5. Transfer Ownership of legacy Mento V1 contracts (41-48)
  6. Transfer Ownership of the Mento Governance Factory (49)

Before we dive deep into each section and transaction, we recommend you have celocli set up to follow along. For the tech savvy, you can find everything we are describing here in our deployment tooling repository as code. For verifying that addresses included in the proposal are correct, please refer to the Appendix at the bottom for some handy tips.

1. Return of CELO to the Celo Community

This includes all the transactions related to returning the 82,406,987 CELO to the Celo community. In order to achieve this, the CELO will be transferred to a new Custody Reserve contract, which will enable the community to control the timing of future CELO withdrawals. In addition, 20M CELO will be withdrawn from the contract in this CGP and sent to Celo Governance, according to the 20/62 split suggested by the CeloPG Stewards based on anticipated ecosystem spending.

TX#0 - initialize the Custody Reserve Proxy. This proxy contract was deployed and verified ahead of this proposal. Immediately after, ownership of the proxy contract was transferred to governance.

  • Verify the new custody ReserveProxy address
  • Verify the ReserveProxy implementation address
  • Verify the initialization parameters for the new custody reserve proxy are correct:
    • registryAddress: well-known registry address
    • _tobinTaxStalenessThreshold: not relevant ****for the custody reserve, but uses the same value as the main Reserve
    • _spendingRatioForCelo: 100%, spender can fully drain the reserve. The number is a Fixidity float – a number with 24 decimals, i.e. 1 is written as 1e24
    • _frozenGold: set to zero
    • _frozenDays: set to zero
    • _assetAllocationSymbols: not relevant for the custody reserve, but set to cGLD as in the main Reserve
    • _assetAllocationWeights: not relevant for the custody reserve, but set to 100% , as a Fixidity float
    • _tobinTax and _tobinTaxReserveRatio: 0 in both cases, disabled
    • _collateralAssets: the CELO token address
    • _collateralAssetDailySpendingRatios 100%, same logic as _spendingRatioForCelo above

TX#1 - add spender to the new custody reserve. The address that is allowed to spend money from the reserve contract.

  • Verify the custody ReserveProxy address
  • Verify the arguments:
    • spender: Celo Governance address

TX#2 - add other reserve address to the new custody reserve. The address where CELO can be sent after the spender initiates a transfer.

  • Verify the custody ReserveProxy address
  • Verify the arguments:
    • reserveAddress: Celo Governance address

TX3 - add spender to the main reserve. To temporarily allow governance to pull funds from the existing reserve contract.

  • Verify the custody ReserveProxy address
  • Verify the arguments:
    • spender: Celo Governance address

TX#4 - add other reserve address to the main reserve. To be able to transfer CELO from the main reserve to the new custody reserve.

  • Verify the ReserveProxy address
  • Verify the arguments:
    • reserveAddress: the custody reserve address

TX#5 - set 100% CELO spending ratio on the main reserve. To be able to transfer most of the CELO from the main reserve on a single transaction.

  • Verify the ReserveProxy address
  • Verify the arguments:
    • _collateralAssets: an array of addresses. In this case, the CELO token address
    • collateralAssetDailySpendingRatios: an array of Fixidity floats. In this case, 1e24 for 100%

TX#6 - transfer ~82.4M CELO from the main reserve to the custody reserve.

  • Verify the ReserveProxy address
  • Verify the arguments:
    • collateralAsset: the CELO token address
    • to: the custody reserve address
    • value: the full return amount as per the CGP, 82,406,987 CELO

TX#7 - transfer 20M CELO from the custody reserve to Celo governance, as per the agreed initial 20M/62M split.

  • Verify the custody ReserveProxy address
  • Verify the arguments:
    • collateralAsset: the CELO token address
    • to: the Celo governance address
    • value: 20M CELO

TX8 - remove Celo governance spender from the main reserve, after temporarily adding it in TX#3.

  • Verify the ReserveProxy address
  • Verify the arguments:
    • spender: Celo Governance address

TX#9 - remove custody reserve as other reserve address from the main reserve, after temporarily adding it in TX#4.

  • Verify the ReserveProxy address
  • Verify the arguments:
    • reserveAddress: the custody reserve address
    • index: index of the address in the otherReserveAddresses array**.** Should be the length of the array as the address was just added a few txs above.

TX#10 - transfer ownership of the custody reserve to Mento Governance, so that the Mento community can provide assistance to the Celo community in case of an emergency.

  • Verify the custody ReserveProxy address
  • Verify the arguments:
    • recipient: the Mento Governance address (TimeLockController proxy contract).

2. Configure secondary Reserve addresses

This includes removing the old Anchorage custodian addresses which were previously configured as “other reserve address” on the main reserve contract, and replacing them with the Mento Reserve Foundation multisig instead.

TX#11 - remove first Anchorage address as “other reserve address” on the main reserve:

  • Verify the ReserveProxy address
  • Verify the arguments:
    • reserveAddress: the first Anchorage custodian address
    • index: index of the address in the otherReserveAddresses array**.** In this case 0, to remove from the front of the array**.**

TX#12 - remove second Anchorage address as “other reserve address” on the main reserve:

  • Verify the ReserveProxy address
  • Verify the arguments:
    • reserveAddress: the second Anchorage custodian address
    • index: index of the address in the otherReserveAddresses array**.** In this case 0, to remove from the front of the array**.**

TX#13 - add the Mento Reserve Foundation multisig address as “other reserve address” on the main reserve:

  • Verify the ReserveProxy address
  • Verify the arguments:
    • reserveAddress: the Mento Labs multisig address

3. Ownership transfer of Mento Stable Tokens contracts

All Stable Token contracts are behind Celo legacy proxies so the following transactions are grouped two by two: for each token we call _transferOwnership on the Proxy and transferOwnership on the implementation.

TX#14, TX#15 - Transfer ownership of the cUSD proxy and token contract

  • Verify the StableTokenProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#16, TX#17 - Transfer ownership of the cEUR proxy and token contract

  • Verify the StableTokenEURProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#18, TX#19 - Transfer ownership of the cBRL proxy and token contract

  • Verify the StableTokenBRLProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#20, TX#21 - Transfer ownership of the eXOF proxy and token contract

  • Verify the StableTokenXOFProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#22, TX#23 - Transfer ownership of the cKES proxy and token contract

  • Verify the StableTokenKESProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#24, TX#25 - Transfer ownership of the PUSO proxy and token contract

  • Verify the StableTokenPHPProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#26, TX#27 - Transfer ownership of the cCOP proxy and token contract

  • Verify the StableTokenCOPProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#28 - transfer ownership of the shared StableTokenV2 implementation contract

  • Verify the StableTokenV2 implementation address
  • Verify the arguments:
    • newOwner: the Mento Governance address

4. Transfer Ownership of Mento V2 contracts

TX#29, TX#30 - Transfer ownership of the BrokerProxy contract

  • Verify the BrokerProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#31 - Transfer ownership of the Broker contract

  • Verify the Broker address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#32, TX#33 - Transfer ownership of the BiPoolManagerProxy contract

  • Verify the BiPoolManagerProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#34 - Transfer ownership of the BiPoolManager contract

  • Verify the BiPoolManager address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#35, TX#36 - Transfer ownership of the ReserveProxy contract

  • Verify the ReserveProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#37 - Transfer ownership of the Reserve contract

  • Verify the Reserve address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#38 - Transfer ownership of the BreakerBox contract

  • Verify the BreakerBox address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#39 - Transfer ownership of the MedianDeltaBreaker contract

  • Verify the MedianDeltaBreaker address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#40 - Transfer ownership of the ValueDeltaBreaker contract

  • Verify the ValueDeltaBreaker address
  • Verify the arguments:
    • newOwner: the Mento Governance address

5. Transfer Ownership of legacy Mento V1 contracts

TX#41, TX#42 - Transfer ownership of the ExchangeProxy contract

  • Verify the ExchangeProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#43, TX#44 - Transfer ownership of the ExchangeEURProxy contract

  • Verify the ExchangeEURProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#45, TX#46 - Transfer ownership of the ExchangeBRLProxy contract

  • Verify the ExchangeBRLProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

TX#47, TX#48 - Transfer ownership of the GrandaMentoProxy contract

  • Verify the GrandaMentoProxy address
  • Verify the arguments:
    • newOwner: the Mento Governance address

6. Transfer Ownership of the Mento Governance Factory

TX#49 - Transfer ownership of the GovernanceFactory contract

  • Verify the GovernanceFactory address
  • Verify the arguments:
    • newOwner: the Mento Governance address

Appendix: Verifying an address

Verifying that an address in the CGP is correct requires a few different strategies depending on what that address is (see the mento docs for some additional information). Here are common situations:

  • Is it a Mento contract/Mento Labs address?
    • You can check check the contract addresses, as well as EOAs and MultiSigs from Mento Labs in the docs: Addresses - Mento Protocol
      • You can also query the Registry contract on the target network
      • For contracts, bytecode verification can be done by following the instructions here: Verification | Mento Protocol
  • Is it a Core Celo contract?
    • Yes:
      • Core contracts such as CELO Token (GoldToken) or Governance can be verified in the Celo Registry
6 Likes

There’s a typo here, it’s not the Mento Labs multisig but the Mento Reserve multisig, it can be verified at reserve.mento.org as one of the additional Reserve addresses.

1 Like

GM Celo Community :yellow_heart:

Mento Proposal is alive on Celo Mondo for vote, don’t miss the opportunity to cast your vote.

:page_with_curl: Summary of the proposal

  • Proposal Number: 196
  • Proposal Tittle: Enabling MENTO Governance
  • Celo Mondo Link: Here
  • Stage: Voting :ballot_box:
  • Stage Ends in: Wednesday, December 4th 2024, 16:32 UTC
5 Likes