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.
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.
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.
setDAO() transfers access to a new DAO, in the case of a migration.
addCollateralTypes() adds new whitelisted collaterals that will appear in Portals.
updateCollateralModifiers() updates the trait modifiers of a certain collateral.
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.
mintItems() creates items of a given
value and transfers them to a given
grantExperience() increases the experience of the given Aavegotchis by a given amount.
addItemTypes() Creates (but does not mint) new
itemTypes. Must be called before minting items, if they have not been created previously.
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.
addWearableSets() adds new Wearable sets with the given parameters.
setGameManager() Sets a game manager contract to manage Aavegotchi minigames.