Understand Bifrost governance and learn how to create a Proposal
Governance
The primer for an honest governance system is to allow participants to clearly understand the
- methods
- requirements and
- steps
to enact any change in the ecosystem. A formalized system that is encoded on-chain ensures that these rules are followed and actors are accountable. Because adopting formalized rules for informalized systems in-situ is extremely difficult, Polkadot launched with a sophisticated set of formalized rules upon genesis.
A proposal is basically 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 this governance system as they are the main tool for stakeholders to propose actions/changes, which other stakeholders are then able to vote on.
At the core of Bifrost’s governance is the notion of stake-weighted voting, where BNC holders vote with their stake on referenda proposed by the community. All changes to Bifrost require a stake-weighted majority to be agreed upon. This is performed using sophisticated mechanisms that differentiate highly from other recent coin-voting mechanisms appearing in this early stage of on-chain governance blockchains.
However, the rules set at the beginning of Bifrost can change later to provide improved representation and enactment as the community learns from experiences in governing a large network.
Let’s look at the journey of any proposal and try to understand the steps in detail-
Before a proposal is enacted, it goes through various steps. A simplified flow has been drawn above and described below:
- Token holders must create a preimage of the proposal, which defines the action to be carried out. The submitter pays a fee-per-byte stored: the larger the preimage, the higher the fee. Once submitted, it returns a preimage hash
- Token holders can submit the proposal using the preimage hash, locking tokens in the process. Once the submission transaction is accepted, the proposal is listed publicly
- Once the proposal is listed, token holders can second the proposal (vouch for it) by locking the same amount of tokens the original proposal submitter locked
- The most seconded proposal moves to public referendum
- Once in referendum, token holders vote “Aye” or “Nay” on the proposal by locking tokens. Two factors account the vote weight: amount locked and locking period
- If the proposal passes, it is enacted after a certain amount of time
Proposing an Action
Proposing an action to be taken requires you to bond some tokens. In order to ensure you have enough tokens to make the minimum deposit you can check the parameter in the chain state. The bonded tokens will only be released once the proposal is tabled (that is, brought to a vote); there is no way for the user to “revoke” their proposal and get the bond back before it has become a referendum. Since it is essentially impossible to predict definitely when a proposal may become a referendum (if ever), this means that any tokens bonded will be locked for an indeterminate amount of time.
Proposals cannot be revoked by the proposer, even if they never turn into a referendum. It is important to realize that there is no guarantee that DOT you use for proposing or seconding a proposal will be returned to that account in any given timeframe.
On Polkadot Apps you can use the “Democracy” tab to make a new proposal. Make sure to switch your network to Bifrsot on Kusama.
In order to submit a proposal, you will need to submit what’s called the preimage hash. This is an important step in creating 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.
The preimage hash is simply the hash of the proposal to be enacted. The easiest way to get the preimage hash is by clicking on the “Submit preimage” button and configuring the action that you are proposing.
Submitting a Preimage
The act of making a proposal is split from submitting the preimage for the proposal since the storage cost of submitting a large preimage could be pretty expensive. Allowing for the preimage submission to come as a separate transaction means that another account could submit the preimage for you if you don’t have the funds to do so. It also means that you don’t have to pay so many funds right away as you can prove the preimage hash out-of-band.
However, at some point before the proposal passes you will need to submit the preimage or else the proposal cannot be enacted.
While submitting a pre-image, 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
For example, if you wanted to propose that the account “Dave” would have a balance of 10 tokens your proposal may look something like the below image. The preimage hash would be 0xa50af1fadfca818feea213762d14cd198404d5496bca691294ec724be9d2a4c0
.
If you decide to create a proposal without a pre-image, the proposal is visible to anyone who accesses the chain and others can second it or submit a preimage. However, it’s hard to tell what exactly this proposal does since it shows the hash of the action. Other holders will not be able to make a judgement for whether they second it or not until someone submits the actual preimage for this proposal. In the next step you will submit the preimage.
Or you could click on the “+ Submit proposal” button and enter the preimage hash in the input titled “preimage hash”(if you created the pre-image in the previous step) and lock-in at least the minimum deposit(100 BNC) into the “locked balance” field. Click on the blue “Submit proposal” button and confirm the transaction. You should now see your proposal appear in the “proposals” column on the page.
Once the transaction is included you should see the UI update with the information for your already submitted proposal
But, where do you put more contextual information about the proposal you just created?
To minimize storage on chain, proposals don’t contain contextual information. When a user submits a proposal, they will probably need to find an off-chain way to explain the proposal. Most discussion takes place on the following platforms:
- Many community members participate in discussion in their protocol’s communication channels.
- The Polkassembly discussion platform that allows users to log in with their Web3 address and automatically reads proposals from the chain, turning them into discussion threads. It also offers a sentiment gauge poll to get a feel for a proposal before committing to a vote.
Now, let’s walk you through the process of editing the proposal you just created on the polkadot.js
- Head to the respective Polkassembly Proposal’s page for your network
- Under the on-chain proposals, you will be able to find the proposal details that you just created on polkadot.js app
Note — Only the creator of the post will be able to see the edit option for the post.
3. While editing the post, a user can add the relevant details like — Title, Subtitle, Description.
- The description should be comprehensive enough for anyone to understand the context of the proposal just by reading the description. A few people also attach links to external documents(if in their case the external document helps them describe the proposal better)
4. Once all the relevant details are added, the user can save their post and it is ready for anyone in the community to discuss on the same.
Below is a sample proposal as visible on the polkassembly forum -
- Token holders can sign-in using metamask, polkadot.js app or email and discuss on the proposal.
- The like and dislike option allows user to express how they feel about the proposal.
- Sample comment below -