Propose a network parameter change
Network parameters are a constant (or an array of constants), the values of which can be changed by on-chain governance.
This page describes what you need to propose a change to a network parameter, and provides proposal templates that you will need to edit before submitting.
Requirements
You will need:
- A connected Vega wallet, with your wallet name and public key to hand
- A minimum of whichever is larger, associated with that public key, based on the network parameter values for governance.proposal.updateNetParam.minProposerBalance or spam.protection.proposal.min.tokens
- Familiarity with governance on Vega
Anatomy of a network parameter proposal
Read on for the key inputs to a network parameter proposal.
The contents of a changes
object specifies what will be different after the proposal. In this case, these are the changes that will occur on the network.
Rationale requires a title and a description. They are free-text fields that describe the purpose of the proposal. Within the description, include links with more information about your proposal (such as to the IPFS content or forum post) that voters can reference to learn more about the asset proposal. Formatting your rationale with markdown makes it easier to read when it's displayed.
Key is the name of the network parameter that you are proposing a change to.
Value is the new value you're proposing that the network parameter should have.
Some network parameters include multiple pieces of information in one value. Changes to one of those network parameters needs to include the correct formatting.
For example, a proposal to change the rewards.activityStreak.benefitTiers
network parameter would include a value that looks like the following, using escaped JSON:
"value":
" { \"tiers\": [
{ \"minimum_activity_streak\": 1,
\"reward_multiplier\": \"1.05\",
\"vesting_multiplier\": \"1.05\" },
{ \"minimum_activity_streak\": 2,
\"reward_multiplier\": \"1.10\",
\"vesting_multiplier\": \"1.10\" },
{ \"minimum_activity_streak\": 3,
\"reward_multiplier\": \"1.20\",
\"vesting_multiplier\": \"1.20\" }
]
}"
Submitting proposals in a batch
If you want to submit this proposal as part of a larger batch of proposals, follow this sample structure:
{
"batchProposalSubmission": {
"rationale": {
"title": "High level title",
"description": "Description of all parts of this batch of proposals"
},
"terms": {
"closingTimestamp": "123",
"changes": [
{
"enactmentTimestamp": 123,
"cancelTransfer": {
"changes": {
"transferId": "345"
}
}
},
{
"enactmentTimestamp": 123,
"cancelTransfer": {
"changes": {
"transferId": "789"
}
}
}
]
}
}
}
Templates and submitting
In the tabs below you'll see:
- Annotated example describing what each field is for
- JSON example
- Command line examples for different operating systems
Replace the example data with the relevant details before submitting.
- Annotated example
- JSON
- Command line (Linux / OSX)
- Command line (Windows)
{
proposalSubmission: {
rationale: {
title: "Update market.fee.factors.infrastructureFee",
description: "Proposal to update market.fee.factors.infrastructureFee to 300"
},
terms: {
updateNetworkParameter: {
changes: {
// Unique key of the network parameter. (string)
key: "market.fee.factors.infrastructureFee",
// Value for the network parameter. (string)
value: "300"
}
},
// Timestamp as Unix time in seconds when voting closes for this proposal,
// constrained by `minClose` and `maxClose` network parameters. (int64 as string)
closingTimestamp: 1724602886,
// Timestamp as Unix time in seconds when proposal gets enacted if passed,
// constrained by `minEnact` and `maxEnact` network parameters. (int64 as string)
enactmentTimestamp: 1724689286,
}
}
}
- Copy the JSON example below into a text editor.
- Replace the placeholder values with those you want for the market.
- Tip: Use markdown formatting in your proposal's rationale to make for easier community review.
{
"proposalSubmission": {
"rationale": {
"title": "Update market.fee.factors.infrastructureFee",
"description": "Proposal to update market.fee.factors.infrastructureFee to 300"
},
"terms": {
"updateNetworkParameter": {
"changes": {
"key": "market.fee.factors.infrastructureFee",
"value": "300"
}
},
"closingTimestamp": 1724602886,
"enactmentTimestamp": 1724689286
}
}
}
- Copy the command line example below into a text editor.
- Replace the placeholder values with those you want in the proposal.
- Tip: Use markdown formatting in your proposal's rationale to make for easier community review.
- Connect to your Vega wallet and use the command line to submit your proposal.
./vegawallet transaction send --wallet YOUR_WALLETNAME --pubkey YOUR_PUBLIC_KEY --network NETWORK_NAME '{
"proposalSubmission": {
"rationale": {
"title": "Update market.fee.factors.infrastructureFee",
"description": "Proposal to update market.fee.factors.infrastructureFee to 300"
},
"terms": {
"updateNetworkParameter": {
"changes": {
"key": "market.fee.factors.infrastructureFee",
"value": "300"
}
},
"closingTimestamp": 1724602886,
"enactmentTimestamp": 1724689286
}
}
}'
- Copy the command line example below into a text editor.
- Replace the placeholder values with those you want in the proposal.
- Tip: Use markdown formatting in your proposal's rationale to make for easier community review.
- Connect to your Vega wallet and use the command line to submit your proposal.
vegawallet.exe transaction send --wallet YOUR_WALLETNAME --pubkey YOUR_PUBLIC_KEY --network NETWORK_NAME ^
"{^
\"proposalSubmission\": {^
\"rationale\": {^
\"title\": \"Update market.fee.factors.infrastructureFee\",^
\"description\": \"Proposal to update market.fee.factors.infrastructureFee to 300\"^
},^
\"terms\": {^
\"updateNetworkParameter\": {^
\"changes\": {^
\"key\": \"market.fee.factors.infrastructureFee\",^
\"value\": \"300\"^
}^
},^
\"closingTimestamp\": 1724602886,^
\"enactmentTimestamp\": 1724689286^
}^
}^
}"
Voting
All proposals are voted on by the community.
To vote, community members need, at a minimum, the larger of the values of the following network parameters: governance.proposal.updateNetParam.minVoterBalance, or spam.protection.voting.min.tokens associated with their Vega key.
Your proposal will need participation determined by the value of governance.proposal.updateNetParam.requiredParticipation and a majority determined by the value of governance.proposal.updateNetParam.requiredMajority.
Enactment
If successful, the proposal will be enacted at the time you specify in the enactmentTimestamp
field.