Propose changing the state of a market
Below, learn how to submit a governance proposal to:
- Suspend normal trading on a live market
- Resume trading on a market suspended through governance
- Terminate a market
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: 🔗governance.proposal.updateMarket.minProposerBalance (🔗5000 tokens) or 🔗spam.protection.proposal.min.tokens (🔗2000 tokens)
- Familiarity with market governance on Vega
Anatomy of the proposal types
Thresholds
Field | Description |
---|---|
closingTimestamp | Timestamp (Unix time in seconds) when voting closes for this proposal. The chosen time must be between 🔗24h and 🔗720h after the proposal submission time. (int64 as string) |
enactmentTimestamp | Timestamp (Unix time in seconds) when proposal gets enacted (if passed). The chosen time must be between 🔗24h and 🔗720h after closingTimestamp . (int64 as string) |
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"
}
}
}
]
}
}
}
Suspend a market
A market can be suspended for an indefinite amount of time, which puts the market into auction-only mode. Suspending a market allows for the possibility that it will be open to normal trading again in the future. A market that's suspended through governance can be resumed using the resume a market proposal.
The proposal to suspend an open market requires:
marketID
for the market to suspendupdateType
ofMARKET_STATE_UPDATE_TYPE_SUSPEND
Template: Suspend a market
In the tabs below you'll see:
- Annotated example describing what each field is for
- JSON example that can be submitted with the governance dApp ↗
- Command line examples for different operating systems
Replace the example data with the relevant details before submitting.
- Annotated example
- Governance dApp (JSON)
- Command line (Linux / OSX)
- Command line (Windows)
{
proposalSubmission: {
rationale: {
title: "Suspend futures market ORANGES2023",
description: "Proposal to suspend Oranges 2023 market"
},
terms: {
updateMarketState: {
changes: {
// the market to suspend
marketId: "d2157929132456dbc66eecbd478307156066243cd8769306e71f31882c22344f",
// the type of update required
updateType: "MARKET_STATE_UPDATE_TYPE_SUSPEND"
}
},
// Timestamp as Unix time in seconds when voting closes for this proposal,
// constrained by `minClose` and `maxClose` network parameters. (int64 as string)
closingTimestamp: 1685553047,
// Timestamp as Unix time in seconds when proposal gets enacted if passed,
// constrained by `minEnact` and `maxEnact` network parameters. (int64 as string)
enactmentTimestamp: 1685639447
}
}
}
- 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.
- Submit your proposal on the governance dApp ↗.
- Check you can see your proposal under Open Proposals on the governance dApp ↗.
{
"proposalSubmission": {
"rationale": {
"title": "Suspend futures market LINK/USDT-230931",
"description": "Proposal to suspend futures market"
},
"terms": {
"updateMarketState": {
"changes": {
"marketId": "d2157929132456dbc66eecbd478307156066243cd8769306e71f31882c22344f",
"updateType": "MARKET_STATE_UPDATE_TYPE_SUSPEND"
}
},
"closingTimestamp": 1685553047,
"enactmentTimestamp": 1685639447
}
}
}
- 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.
- Check you can see your proposal under Open Proposals on the governance dApp ↗.
vegawallet transaction send --wallet "wallet-name" --pubkey "pubkey" --network mainnet1 '
{
"proposalSubmission": {
"rationale": {
"title": "Suspend futures market LINK/USDT-230930",
"description": "Proposal to suspend futures market"
},
"terms": {
"updateMarketState": {
"changes": {
"marketId": "d2157929132456dbc66eecbd478307156066243cd8769306e71f31882c22344f",
"updateType": "MARKET_STATE_UPDATE_TYPE_SUSPEND"
}
},
"closingTimestamp": "1685553047",
"enactmentTimestamp": "1685639447"
}
}
}'
- 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.
- Check you can see your proposal under Open Proposals on the governance dApp ↗.
vegawallet.exe transaction send --wallet "wallet-name" --pubkey "pubkey" --network mainnet1 ^
"{ ^
\"proposalSubmission\": { ^
\"rationale\": { ^
\"title\": \"Suspend futures market LINK/USDT-230930\", ^
\"description\": \"Proposal to suspend futures market\" ^
}, ^
\"terms\": { ^
\"updateMarketState\": { ^
\"changes\": { ^
\"marketId\": \"d2157929132456dbc66eecbd478307156066243cd8769306e71f31882c22344f\", ^
\"updateType\": \"MARKET_STATE_UPDATE_TYPE_SUSPEND\" ^
} ^
}, ^
\"closingTimestamp\": \"1685553047\", ^
\"enactmentTimestamp\": \"1685639447\" ^
} ^
} ^
}" ^
Resume a market
A market that's been suspended through governance can be resumed using the following proposal type. If the proposal passes a governance vote, it will be resumed at the enactment time in the proposal.
The proposal to resume an open market requires the marketID
for the one to suspend, as well as the updateType
of MARKET_STATE_UPDATE_TYPE_RESUME
Template: Resume a market
In the tabs below you'll see:
- Annotated example describing what each field is for
- JSON example that can be submitted with the governance dApp ↗
- Command line examples for different operating systems
Replace the example data with the relevant details before submitting.
- Annotated example
- Governance dApp (JSON)
- Command line (Linux / OSX)
- Command line (Windows)
{
proposalSubmission: {
rationale: {
title: "Resume suspended futures market LINK/USDT-230930",
description: "Proposal to resume futures market"
},
terms: {
updateMarketState: {
changes: {
// the market to update
marketId: "d2157929132456dbc66eecbd478307156066243cd8769306e71f31882c22344f",
// the type of update required
updateType: "MARKET_STATE_UPDATE_TYPE_RESUME"
}
},
// Timestamp as Unix time in seconds when voting closes for this proposal,
// constrained by `minClose` and `maxClose` network parameters. (int64 as string)
closingTimestamp: 1685553047,
// Timestamp as Unix time in seconds when proposal gets enacted if passed,
// constrained by `minEnact` and `maxEnact` network parameters. (int64 as string)
enactmentTimestamp: 1685639447
}
}
}
- 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.
- Submit your proposal on the governance dApp ↗.
- Check you can see your proposal under Open Proposals on the governance dApp ↗.
{
"proposalSubmission": {
"rationale": {
"title": "Resume suspended futures market LINK/USDT-230930",
"description": "Proposal to resume futures market"
},
"terms": {
"updateMarketState": {
"changes": {
"marketId": "d2157929132456dbc66eecbd478307156066243cd8769306e71f31882c22344f",
"updateType": "MARKET_STATE_UPDATE_TYPE_RESUME"
}
},
"closingTimestamp": 1685553047,
"enactmentTimestamp": 1685639447
}
}
}
- 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.
- Check you can see your proposal under Open Proposals on the governance dApp ↗.
vegawallet transaction send --wallet "wallet-name" --pubkey "pubkey" --network mainnet1 '{
"proposalSubmission": {
"rationale": {
"title": "Resume suspended market ORANGES2023",
"description": "Proposal to resume market"
},
"terms": {
"updateMarketState": {
"changes": {
"marketId": "d2157929132456dbc66eecbd478307156066243cd8769306e71f31882c22344f",
"updateType": "MARKET_STATE_UPDATE_TYPE_RESUME"
}
},
"closingTimestamp": 1685553047,
"enactmentTimestamp": 1685639447
}
}
}'
- 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.
- Check you can see your proposal under Open Proposals on the governance dApp ↗.
vegawallet.exe transaction send --wallet "wallet-name" --pubkey "pubkey" --network mainnet1 ^
"{ ^
\"proposalSubmission\": { ^
\"rationale\": { ^
\"title\": \"Resume suspended futures market LINK/USDT-230930\", ^
\"description\": \"Proposal to resume futures market\" ^
}, ^
\"terms\": { ^
\"updateMarketState\": { ^
\"changes\": { ^
\"marketId\": \"d2157929132456dbc66eecbd478307156066243cd8769306e71f31882c22344f\", ^
\"updateType\": \"MARKET_STATE_UPDATE_TYPE_RESUME\" ^
} ^
}, ^
\"closingTimestamp\": \"1685553047\", ^
\"enactmentTimestamp\": \"1685639447\" ^
} ^
} ^
}"
Terminate a market
Once a market is terminated, it cannot be reversed. If the proposal to terminate a market is enacted, it will end all trading on the market, settle all positions, and close the market completely.
The proposal to resume an open market requires the marketID
for the one to suspend, as well as the updateType
of MARKET_STATE_UPDATE_TYPE_TERMINATE
.
It also requires a final settlement price, with enough digits to account for the market's decimal places. This uses the price
field.
Template: Terminate a market
In the tabs below you'll see:
- Annotated example describing what each field is for
- JSON example that can be submitted with the governance dApp ↗
- Command line examples for different operating systems
Replace the example data with the relevant details before submitting.
- Annotated example
- Governance dApp (JSON)
- Command line (Linux / OSX)
- Command line (Windows)
{
proposalSubmission: {
rationale: {
title: "Terminate futures market LINK/USDT-230930",
description: "Proposal to terminate futures market"
},
terms: {
updateMarketState: {
changes: {
// the market to terminate
marketId: "d2157929132456dbc66eecbd478307156066243cd8769306e71f31882c22344f",
// the type of update required
updateType: "MARKET_STATE_UPDATE_TYPE_TERMINATE",
// the price to use for settlement
price: "100"
}
},
// Timestamp as Unix time in seconds when voting closes for this proposal,
// constrained by `minClose` and `maxClose` network parameters. (int64 as string)
closingTimestamp: 1685553047,
// Timestamp as Unix time in seconds when proposal gets enacted if passed,
// constrained by `minEnact` and `maxEnact` network parameters. (int64 as string)
enactmentTimestamp: 1685639447
}
}
}
- 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.
- Submit your proposal on the governance dApp ↗.
- Check you can see your proposal under Open Proposals on the governance dApp ↗.
{
"proposalSubmission": {
"rationale": {
"title": "Terminate market ORANGES2023",
"description": "Proposal to terminate market"
},
"terms": {
"updateMarketState": {
"changes": {
"marketId": "d2157929132456dbc66eecbd478307156066243cd8769306e71f31882c22344f",
"updateType": "MARKET_STATE_UPDATE_TYPE_TERMINATE",
"price": "100"
}
},
"closingTimestamp": 1685553047,
"enactmentTimestamp": 1685639447
}
}
}
- 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.
- Check you can see your proposal under Open Proposals on the governance dApp ↗.
vegawallet transaction send --wallet "wallet-name" --pubkey "pubkey" --network mainnet1 '{
"proposalSubmission": {
"rationale": {
"title": "Terminate market ORANGES2023",
"description": "Proposal to terminate market"
},
"terms": {
"updateMarketState": {
"changes": {
"marketId": "d2157929132456dbc66eecbd478307156066243cd8769306e71f31882c22344f",
"updateType": "MARKET_STATE_UPDATE_TYPE_TERMINATE",
"price": "100"
}
},
"closingTimestamp": 1685553047,
"enactmentTimestamp": 1685639447
}
}
}'
- 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.
- Check you can see your proposal under Open Proposals on the governance dApp ↗.
vegawallet.exe transaction send --wallet "wallet-name" --pubkey "pubkey" --network mainnet1 ^
"{ ^
\"proposalSubmission\": { ^
\"rationale\": { ^
\"title\": \"Close futures market LINK/USDT-230930\", ^
\"description\": \"Proposal to close futures market\" ^
},^
\"terms\": { ^
\"updateMarketState\": { ^
\"changes\": { ^
\"marketId\": \"d2157929132456dbc66eecbd478307156066243cd8769306e71f31882c22344f\", ^
\"updateType\": \"MARKET_STATE_UPDATE_TYPE_TERMINATE\", ^
\"price\": \"100\" ^
} ^
}, ^
\"closingTimestamp\": \"1685553047\", ^
\"enactmentTimestamp\": \"1685639447\" ^
} ^
} ^
}"
Voting
All proposals are voted on by the community.
Building support is down to you. Share your proposal in the Governance section ↗ on the Vega community forum. You may also wish to share on Discord ↗.
To vote, community members need, at a minimum, the larger of 🔗1 token or 🔗1 token associated to their Vega key.
Your proposal will need participation of 🔗2%, a majority of 🔗75%, as well as a percentage of liquidity provider votes of 🔗75% so having community support is essential.
Proposers who invite feedback, engage with comments, and make revisions to meet the needs of the community are more likely to be successful.
Enactment
If successful, the proposal will be enacted at the time you specify in the enactmentTimestamp
field.