How to Propose an Action in Governance v1¶
Introduction¶
A proposal is a submission to the chain in which a token holder suggests for an action to be enacted by the system. Proposals are one of the core elements of the governance system because they are the main tool for stakeholders to propose actions/changes, which other stakeholders then vote on.
In Moonbeam, users will be able to create, second, and vote on proposals using their H160 address and private key, that is, their regular Ethereum account!
Moonbeam's governance system is in the process of getting revamped! This next phase of governance is known as OpenGov or Governance v2. During the roll-out process, OpenGov will be rigorously tested on Moonriver before a proposal will be made to deploy it on Moonbeam. Until it launches on Moonbeam, Moonbeam will continue to use Governance v1. As such, this guide is for proposals on Moonbeam only. If you're looking to submit a proposal on Moonriver, you can refer to the How to Propose an Action in OpenGov guide.
This guide outlines the process of how to create a proposal in Governance v1 on Moonbeam. The steps will go from its creation until it reaches public referenda. There is a separate guide on How to Vote on a Proposal in Governance v1.
For more information on Moonbeam's governance system, including Governance v1 and OpenGov (Governance v2), please refer to the governance overview page.
Definitions¶
Some of the key parameters for this guide are the following:
- Proposal — an action or item, defined by the preimage hash, being proposed by a token holder and open for consideration and discussion by token holders
-
Referendum — a proposal that is up for token-holder voting. Each referendum is tied to a specific proposal for a change to the Moonbeam system including values for key parameters, code upgrades, or changes to the governance system itself
-
Second - other stakeholders can second (approve) a proposal if they agree with it and want to help it reach public referenda. This requires matching the deposit of the original proposer
-
Preimage hash — hash of the proposal to be enacted. The first step to make a proposal is to submit a preimage. The hash is just its identifier. The proposer of the preimage can be different than the user that proposes that preimage as a formal proposal
-
Preimage deposit — amount of tokens that the proposer needs to bond when submitting a preimage. It is calculated as the sum of a base deposit per network plus a fee per byte of the preimage being proposed
-
Proposal deposit — minimum amount of tokens that the proposer needs to bond when submitting a proposal. Tokens might be locked for an indeterminate amount of time because it is unknown when a proposal may become a referendum (if ever). This is true for tokens bonded by both the proposer and users that second the proposal
- Launch Period — how often new public referenda are launched
- Cool-off Period — duration (in blocks) in which a proposal may not be re-submitted after being vetoed
Variable | Value |
---|---|
Preimage base deposit | 500 GLMR |
Preimage deposit per byte | 0.01 GLMR |
Proposal deposit | 400 GLMR |
Launch Period | 50400 blocks (7 days) |
Cool-off Period | 50400 blocks (7 days) |
Roadmap of a Proposal¶
This guide will cover the first few steps outlined in the proposal roadmap, as highlighted in the diagram below. You'll learn how to submit your proposal idea to the Moonbeam Community Forum, submit a preimage, submit your proposal on-chain using the preimage hash, and finally how to second a proposal.
You can find a full explanation of the happy path for a Governance v1 proposal on the Governance overview page.
Submit your Idea to the Community Forum¶
Before diving into the steps for submitting a proposal, you'll want to get familiar with Moonbeam's Community Forum. It's highly recommended that you preface any proposal with a post on the forum to solicit feedback. You should allow a period of five days for the community to discuss and provide feedback on the Moonbeam Forum post before proceeding to submit the preimage and proposal.
To access the Moonbeam Community Forum, you must be a member of the Moonbeam Discord community. You can then sign up to get access to the forum using your Discord credentials.
Once you’re logged in, you can explore the latest discussions, join conversations, and create your own discussion for a proposal idea you may have. Before posting or commenting for the first time, be sure to familiarize yourself with the FAQ to learn about the community guidelines.
When you're ready to create a post with the details of your proposal, you can head to the Governance page and click on Democracy Proposals.
From there, you can click on Open Draft and begin to draft your proposal using the template provided. Make sure to update the title of the post and add any of the optional tags, such as Moonbeam if the proposal is for the Moonbeam network. The title should follow the format as the pre-populated title: [Proposal: XX][Status: Idea] proposal title. For example, [Proposal: XX][Status: Idea] Register XC-20 xcMYTOK. The XX will need to be updated with the proposal ID once the proposal has been formally submitted on-chain.
After you've filled out your proposal details, you can click Create Topic to save it to the forum and open the discussion on your idea. Based on the feedback you receive, you can update the proposal before proceeding to submit it.
Proposing an Action¶
This section goes over the process of creating a proposal on Moonbeam with Governance v1, from submitting a preimage until it reaches public referenda.
Note
The images in this guide are shown on the Moonbase Alpha interface on Polkadot.js Apps, however these steps will need to be performed on Moonbeam's Polkadot.js Apps interface.
To make a proposal in the network, you can use the Polkadot.js Apps interface. To do so, you need to import an Ethereum-style account first (H160 address), which you can do following the Creating or Importing an H160 Account guide. For this example, three accounts were imported and named with super original names: Alice, Bob, and Charlie.
This proposal is to make permanent on-chain the remark "This is a unique string."
Submitting a Preimage of the Proposal¶
The first step is to submit a preimage of the proposal. This is because the storage cost of large preimages can be pretty hefty, as the preimage contains all the information regarding the proposal itself. With this configuration, one account with more funds can submit a preimage and another account can submit the proposal.
First, navigate to Moonbeam's Polkadot.js Apps interface. Everything related to governance lives under the Governance tab, including preimages. So, from the Governance dropdown, you can select Preimages. Once there, click on the Add preimage button.
Here, you need to provide the following information:
- Select the account from which you want to submit the preimage
- Choose the pallet you want to interact with and the dispatchable function (or action) to propose. The action you choose will determine the fields that need to fill in the following steps. In this case, it is the
system
pallet and theremark
function - Enter the text of the remark in either ascii or hexidecimal format prefixed with "0x". Ensure the remark is unique. "Hello World!" has already been proposed, and duplicate identical proposals will not be accepted. These remarks reside permanently on-chain so please don't enter sensitive information or profanity
- Copy the preimage hash. This represents the proposal. You will use this hash when submitting the actual proposal
- Click the Submit preimage button and sign the transaction
Note
Make sure you copy the preimage hash, as it is necessary to submit the proposal.
Note that the storage cost of the preimage can be calculated as the base fee (per network) plus the fee per byte of the preimage being proposed.
After the transaction is submitted, you will see some confirmations on the top right corner of the Polkadot.js Apps interface and the preimage will be added to the list of preimages.
Submitting a Proposal¶
Once you have committed the preimage (check the previous section), the roadmap's next major milestone is to submit the proposal related to it. To do so, select Democracy from the Governance dropdown, and click on Submit proposal.
Here, you need to provide the following information:
- Select the account from which you want to submit the proposal (in this case, Alice)
- Enter the preimage hash related to the proposal. In this example, it is the hash of the
remark
preimage from the previous section - Set the locked balance. This is the number of tokens the proposer bonds with his proposal. Remember that the proposal with the most amount of tokens locked goes to referendum. The minimum deposit is displayed just below this input tab
- Click the Submit proposal button and sign the transaction
Note
Tokens might be locked for an indeterminate amount of time because it is unknown when a proposal may become a referendum (if ever).
After the transaction is submitted, you will see some confirmations on the top right corner of the Polkadot.js Apps interface. You should also see the proposal listed in the Proposals section, displaying the proposer and the amounts of tokens locked, and it is now ready to be seconded!
If you login to Polkassembly with the same account that you used to create the proposal, you'll be able to edit the description of the proposal to include a link to the proposal discussion on the Moonbeam Community Forum. This is a helpful step because while Polkassembly auto-generates a post for each proposal, it doesn't provide context information on the contents of the proposal.
You’ll need to edit your proposal on the Moonbeam Community Forum. You will need to update the title to include the proposal ID, and the status will need to be changed to Submitted
state.
Seconding a Proposal¶
To second a proposal means that you agree with it and want to back it up with your tokens to help it reach public referenda. The amount of tokens to be locked is equal to the proposer's original deposit - no more, no less.
Note
A single account can second a proposal multiple times. This is by design, as an account could just send tokens to different addresses and use them to second the proposal. What counts is the number of tokens backing up a proposal, not the number of vouches it has received.
This section outlines the steps to second the proposal made in the previous section. To do so, click the Endorse button that is located to the right of the respective proposal.
Here, you need to provide the following information:
- Select the account you want to second the proposal with (in this case, Charlie)
- Verify the number of tokens required to second the proposal
- Click the Endorse button and sign the transaction
Note
Tokens might be locked for an indeterminate amount of time because it is unknown when a proposal may become a referendum (if ever).
After the transaction is submitted, you will see some confirmations on the top right corner of the Polkadot.js Apps interface. You should also see the proposal listed in the Proposals section, displaying the proposer and the amounts of tokens locked and listing the users that have seconded this proposal!
At each Launch Period, the most seconded proposal becomes a referendum. To learn how to vote on a proposal, please refer to the How to Vote on a Proposal guide.
| Created: February 9, 2021