# Governance

## Contract Upgradeability

The Aavegotchi Contracts implement the [EIP-2535 Diamond Standard](https://github.com/ethereum/EIPs/issues/2535), a new standard for fully-upgradeable smart contracts.&#x20;

The mechanism for upgrading a Diamond is by calling [`diamondCut()`](https://eips.ethereum.org/EIPS/eip-2535#the-diamondcut-function) which takes arguments of functions to replace, and what functions to replace them with.&#x20;

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.&#x20;

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.&#x20;

**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.&#x20;

## 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](broken://pages/-MNlntYCt8pFbEP8FtGT).&#x20;

1. `setDAO()` transfers access to a new DAO, in the case of a migration.&#x20;
2. `addCollateralTypes()` adds new whitelisted collaterals that will appear in Portals.&#x20;
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.&#x20;
6. `grantExperience()` increases the experience of the given Aavegotchis by a given amount.&#x20;
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.&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aavegotchi.com/developers/aavegotchi-contracts/extending-aavegotchi-contracts/governance.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
