Governance
Introduction
Governance is the mechanisms through which participants collectively make decisions about the rules, parameters, and policies that govern a given network. This can include things like protocol upgrades, parameter adjustments, and even more fundamental decisions about the network's direction and purpose. Changes are requested through *governance proposals which represent formal suggestions or requests put forth by a member or participant of a network or community to make changes to that network. These proposals are typically submitted to a decentralized governance system, where participants in the network have the opportunity to review, discuss, and ultimately vote on the proposed changes.
The approval process and the required majority for a proposal to pass can vary depending on the specific governance model of the network. Once a proposal is approved, the changes outlined in the proposal are typically implemented according to the network's governance mechanisms. This could involve deploying new smart contracts, updating software, or making adjustments to on-chain parameters.
How to take part in the governance mechanism
If you wish to take part in governance, you will either need to be running a full validator node or you need to have delegated stake to an existing validator.
For additional information, visit the validators section of our documentation, or the delegation guide.
Stake delegation
If you want to delegate your stake to a validator, the following CLI command should be used:
fetchd tx staking delegate <VALOPER_ADDRESS> <AMOUNT> --from <KEY_NAME>
where the <VALOPER_ADDRESS>
begins with the prefix fetchvaloper1...
and the <AMOUNT>
field contains the currency denomination.
For instance:
fetchd tx staking delegate fetchvaloper1cct4fhhksplu9m9wjljuthjqhjj93z0s97p3g7 1000atestfet --from agent
Check out our delegation guide for further information on how to delegate your tokens to a validator using the CLI.
Proposals overview
There are three types of governance proposal:
-
Text proposals: these are the most basic type of proposal. They can be used to get the opinion from participants of the network on a given topic.
-
Parameter proposals: these proposals are used to update the value of an existing software parameter of the network.
-
Software upgrade proposals: these are used to propose an upgrade of the
fetchd
software, particularly in cases where the software changes might not necessary be backwards compatible or in some way present a major update to the network.
The proposal process
Any FET holder can submit a proposal.
In order for the proposal to be open for voting, it needs to come with a deposit that is greater than a parameter called minDeposit. The deposit need not be provided in its entirety by the submitter. If the initial proposer's deposit is not sufficient, the proposal enters the deposit period status. Then, any FET holder can increase the deposit by sending a depositTx transaction to the network.
Once the deposit reaches minDeposit, the proposal enters the voting period, which lasts 5 days. Any bonded FET holder can then cast a vote on this proposal, by choosing one of the following options for voting:
- Yes.
- No.
- NoWithVeto.
- Abstain.
At the end of the voting period, the proposal is accepted if there are more than 50% Yes votes (excluding Abstain votes) and less than 33.33% of NoWithVeto votes (excluding Abstain votes).
Generating proposals
When creating a proposal, you will create a proposal JSON file with all the relevant information.
An example of a text proposal is shown below:
{ "title": "Switch to semantic commit messages for fetchd", "description": "This proposal is advocating a switch to semantic commit messages. You can find the full discussion at: https://github.com/fetchai/fetchd/issues/231", "type": "Text", "deposit": "10000000000000000000atestfet" }
It is always recommended that the description of a text proposal has a link to a Github issue with the full proposal text along with the discussions about it.
After having created the JSON file, you can generate the text proposal on chain by running the following command:
fetchd tx gov submit-proposal --proposal proposal.json --from <name of signing key>
Increasing the deposit for a proposal
If you want to increase the deposit of a proposal, you could do this by running the following command:
fetchd tx gov deposit <proposalID> 100atestfet --from <key name>
For instance:
fetchd tx gov deposit 2 100atestfet --from validator
If you want to get the proposalID, you will need to use the txhash obtained when the proposal was submitted and run the following command:
fetchd query tx <txhash>
For additional information on how to create a governance proposal using CLI, have a look at our dedicated guide .
Listing current proposals
Current proposals can be retrieved by using the CLI or from the block explorer.
If you wish to get the list of current proposals and their corresponding proposal-ids, then you need to run the following command:
fetchd query gov proposals
Voting on a proposal
If you want to vote for a proposal, run the following command:
fetchd tx gov vote <proposalID> <option> --from <delegatorKeyName>
For instance:
fetchd tx gov vote 5 yes --from validator
When using CLI commands make sure that your CLI is pointing at the correct network. Check the CLI introduction in our documentation for additional details on the topic.