III.II.IV Proposing

Anyone with an Ethereum address and WETH or M may submit a proposal. The TTG is to be deployed with WETH as its internal currency (known as CASH in the mechanism), and therefore any Standard Proposal submission must pay a Proposal Fee in WETH, or at a later date M depending on the current CASH toggle setting, in addition to gas fees (see III.III Governance Controlled TTG Parameters). A proposal that passes makes the Proposal Fee available to be returned to the proposer upon execution.

There are two primary structures of proposals that can be managed through the TTG: (1) configuring a registrar used by the protocol, i.e. adding and removing addresses from arbitrary lists/sets and setting arbitrary variables; (2) setting governance parameters. The M^0 protocol looks to the registrar to use certain variables and sets of addresses in its processes.

In order to propose a change to a list, a user submits a Standard Proposal or a POWER Threshold Proposal calling the Add To List or Remove From List methods along with the address they wish to add or remove. There is also a method called Remove From And Add To List which facilitates swapping an address on a list. In order to add a new list to the TTG a proposer will create a proposal which uses Add To List and will specify a new list, which is created simultaneously to the proposal being executed. Since the M^0 core protocol is immutable, any list added after deployment can only be used to manage periphery smart contracts and cannot impact core operations.


Alice wishes to add her company’s address to the list of approved Minters in the M^0 protocol. Alice calls Add To List, specifying the Minters list along with the address she would like to gain permission to mint M in the protocol.

In order to propose a change to a configuration contract proposers call the Set Key method. In order to propose a configuration change at the registrar, proposers create a proposal for the governor to call the registrar's Set Key method. The update either results in the first setting or overwriting of a value for a given key (i.e. variable name).


Bob wishes to change Minter Rate from 3% to 4%. Bob calls Set Key and specifies the configuration contract he’d like to change along with the new value he would like it to contain.

Once a proposal passes, and assuming the requisite amount of time has passed, anyone can call the Execute method to execute the action on chain. They must pass the proposal arguments into the Execute method.

Last updated

Copyright 2024 M^0 Foundation