- Docs
- Participate
- Submit a governance proposal
Governance
Governance is crucial for decentralized decision-making and the evolution of the Archway network. It enables token holders to propose, vote on, and implement changes to the network, ensuring that it remains adaptive, secure, and aligned with the community's interests. Archway facilitates governance by providing a structured framework that outlines how proposals are made, discussed, and voted on, leveraging the staked ARCH tokens as a means to measure voting power. This process ensures that all stakeholders have a voice in the network's future direction.
Governance Parameters
For governance proposals to be voted on, they must be submitted on-chain with a deposit not less than the min_deposit
parameter set in the governance module, before the deposit end time. As of version 6.0.0
of the Archway protocol, a new parameter, min_initial_deposit_ratio
, was added. This ratio is the portion of the min_deposit
that must be paid at the time of submission for the proposal to be added to the chain, aiming to prevent proposal spamming. This min_deposit
feature is currently disabled.
Deposits are refunded if a proposal gets approved or declined. However, if there are sufficient NO WITH VETO votes, the depositors will lose their deposits. Depositors will also forfeit their deposits if a quorum of more than 1%
is not reached. In both scenarios, the deposits will be burnt.
The governance parameters can be accessed via the CLI, as demonstrated in the following example:
Mainnet
Constantine
archwayd q gov params --node https://rpc.mainnet.archway.io:443
Try it:
archwayd q gov params --node https://rpc.mainnet.archway.io:443
As of this writing the following are the governance parameters for Mainnet and Constantine (Testnet):
Mainnet
Constantine
- Proposal minimum deposit: 5000 ARCH
- Depositing period: 2 days
- Voting period: 7 days
- Quorum (min % of total voting power participated for results to be valid): 33.4%
- Threshold (min % of Yes excluding Abstain votes for a proposal to be accepted): More than 50% of Yes votes excluding Abstain votes
- VetoThreshold (min % of NoWithVeto votes for a proposal to be rejected): 33.4%
Best Practices
Code of Conduct
See the following signaling proposal for the implementation of the code of conduct.
Preliminary Forum Discussions
Proposals should be submitted to the Governance forum for review and discussion prior to being submitted on-chain.
This will enable preliminary exploration amongst community members to fully understand the scope of the proposal, provide input/ feedback, and ultimately improve the proposal before pushing toward a formal on-chain vote.
Proposals should be posted to the forum for a minimum of 3 days before being submitted for a vote on-chain.
Info
Software upgrade proposals will not need to follow this process.
Submit proposal on testnet
Before you submit the proposal on Mainnet it is recommended to test out the proposal on Testnet first.
You may want to submit your proposal to Testnet before Mainnet for a number of reasons:
- To signal that your proposal is about to go live on Mainnet
- To share what the proposal will look like in advance with stakeholders
- To test out any messages that will be executed once the proposal is approved
You will need CONST Testnet tokens to create the proposal on Testnet. There is a faucet available on Discord. You can also find the faucet links for the different networks on the Networks page.
Create proposal
In previous versions, the Archway governance module featured specific proposal types and templates for creating proposals. However, with the release of version 6.0.0 of the Archway protocol, this approach has been phased out in favor of a single, standardized method for creating governance proposals.
The previous solution was quite restrictive, but now a proposal can execute any message supported by the blockchain. You are now able to execute one or more messages automatically following the approval of a proposal.
You would therefore execute the following command to create a governance proposal:
Mainnet
Constantine
$ archwayd tx gov submit-proposal path/to/proposal.json --from mywallet --node https://rpc.mainnet.archway.io:443 --chain-id archway-1 --gas auto --gas-prices $(archwayd q rewards estimate-fees 1 --node 'https://rpc.mainnet.archway.io:443' --output json | jq -r '.gas_unit_price | (.amount + .denom)') --gas-adjustment 1.3
Where proposal.json
contains:
{ // array of proto-JSON-encoded sdk.Msgs "messages": [ { "@type": "/cosmos.bank.v1beta1.MsgSend", "from_address": "cosmos1...", "to_address": "cosmos1...", "amount":[{"denom": "stake","amount": "10"}] } ], // Metadata can be any of base64 encoded, raw text, stringified json, IPFS link to json "metadata": "4pIMOgIGx1vZGU=", "deposit": "10aarch", "title": "My proposal", "summary": "A short summary of my proposal"}
Here is an example of the metadata
:
{ "title": "", "authors": [""], "summary": "", "details": "", "proposal_forum_url": "", "vote_option_context": "",}
Message types
To find the correct message format, you should refer to the proto file of the relevant module. This involves reviewing the required fields and their types, then mirroring this structure in the messages
JSON array, as demonstrated in the provided example. For instance, the MsgSend
message from the Cosmos SDK Bank
module is used in the example. To locate the necessary fields, visit the Cosmos SDK repository, navigate to the release version installed by the Archway protocol, and explore the proto folder for the transaction message details. The MsgSend
details are available at: Cosmos SDK GitHub repository.
// MsgSend represents a message to send coins from one account to another.message MsgSend { option (cosmos.msg.v1.signer) = "from_address"; option (amino.name) = "cosmos-sdk/MsgSend"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; string from_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; string to_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; repeated cosmos.base.v1beta1.Coin amount = 3 [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" ];}
This indicates that from_address
, to_address
, and amount
are mandatory fields, and it also specifies their types, which must be considered. For instance, the amount
field is of type cosmos.base.v1beta1.Coin
, so it's necessary to consult the proto definition for this type and structure the fields accordingly.
Depositing funds after a proposal has been submitted
If you've submitted a proposal without yet meeting the minimum token deposit, there's no need to worry! You still have time to deposit additional tokens to advance your proposal to the voting stage if the deposit time period has not elapsed. For instance, you can execute the following command:
archwayd tx gov deposit 8 10000000000000aarch --from mywallet --node https://rpc.mainnet.archway.io:443
Where 8
is the proposal ID and 10000000000000aarch
is the amount to be deposited.
Verifying the proposal transaction
After you sign the transaction, a transaction hash will appear in the terminal. You can query the transaction either through the CLI or by using a block explorer by searching for the transaction hash.
To query proposals via the CLI, you would use one of the following commands:
archwayd q gov proposals --node https://rpc.mainnet.archway.io:443
Try it:
archwayd q gov proposals --node https://rpc.mainnet.archway.io:443
Or query a specific proposal id, for example:
archwayd q gov proposal 8 --node https://rpc.mainnet.archway.io:443
Try it:
archwayd q gov proposal 8 --node https://rpc.mainnet.archway.io:443
If there are issues with the proposal transaction, you can still query the transaction ID. For example:
archwayd q tx 39EB4C85EC00281BB54EEE6BC87F17038F3528D5E54BF7FFBDF13E7C15DF92FE --node https://rpc.mainnet.archway.io:443
Try it:
archwayd q tx 39EB4C85EC00281BB54EEE6BC87F17038F3528D5E54BF7FFBDF13E7C15DF92FE --node https://rpc.mainnet.archway.io:443
and check the value of the raw_log
field for useful information.
Voting on proposal
Now that the proposal is on-chain, you can engage the community on Discourse and Discord to make sure that the minimum quorum threshold is met.
We've put together several guides on how to vote on governance proposals. To get started, check out this overview: Voting on Governance Proposals Guide.