High-level overview of the governance mechanism for Aavegotchi Contracts

Contract Upgradeability

The Aavegotchi Contracts implement the EIP-2535 Diamond Standard, a new standard for fully-upgradeable smart contracts.

The mechanism for upgrading a Diamond is by calling diamondCut() which takes arguments of functions to replace, and what functions to replace them with.

Initially, the diamondCut() upgrade function will only be callable by the Aavegotchi Team Multisig, whose Signees consist of Aavegotchi core team members, advisors with interests aligned with Aavegotchi, and trusted community members.

Upgrades will only be executed when a majority of the Signees believe the upgrades are beneficial to the Aavegotchi project and have been fully-vetted and reviewed by third-party auditors.

It is our full intention to eventually transfer access to the diamondCut() function to the AavegotchiDAO. But this is a process of gradual decentralization. The DAO must be ready for this responsibility, or else the protocol will be at risk.

DAO-Only Functions

Although the AavegotchiDAO does not initially have access to upgrading the contracts, there are many functions within the DAOFacet.sol it can call:

Initially, the Aavegotchi Multisig contractOwner will also have access to these functions, but in a future update this access will be restricted.

Below are all of the functions callable by the AavegotchiDAO. For more details visit DAOFacet.sol.

  1. setDAO() transfers access to a new DAO, in the case of a migration.

  2. addCollateralTypes() adds new whitelisted collaterals that will appear in Portals.

  3. updateCollateralModifiers() updates the trait modifiers of a certain collateral.

  4. createHaunt() creates a new Haunt, consisting of a certain size, with a set price and a randomly-appearing bodyColor property. Note: The previous Haunt must be completed before createHaunt() can be called.

  5. mintItems() creates items of a given itemType and value and transfers them to a given to address.

  6. grantExperience() increases the experience of the given Aavegotchis by a given amount.

  7. addItemTypes() Creates (but does not mint) new itemTypes. Must be called before minting items, if they have not been created previously.

  8. addItemTypesAndSvgs() Creates (but does not mint) new itemTypes and adds their associated SVG files to contract memory. Must be called before minting items, if they have not been created previously.

  9. addWearableSets() adds new Wearable sets with the given parameters.

  10. setGameManager() Sets a game manager contract to manage Aavegotchi minigames.