Propose updates to a market
Make changes to an existing 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: 👀1 token or 👀1 token
- A minimum equity-like share in the market of 👀0.01
- Familiarity with governance on Vega, particularly off-chain activities
Anatomy of an update market proposal
The updateMarket
proposal requires the same fields as a newMarket
proposal. See the descriptions in the new market proposal tutorial for more on each field.
In addition to the parameters you want to change, you must include all existing parameters from the original newMarket
proposal, even if they are not being changed.
Locked fields
The following fields, which you might recognise from newMarket
proposals, are immutable and cannot be changed. They are not included in the proposal templates.
decimalPlaces
positionDecimalPlaces
name
settlementAsset
Thresholds
Note that some network parameters may differ, such as the limits on how long the voting period can last, as follows.
Field | Description |
---|---|
closingTimestamp | Timestamp (Unix time in seconds) when voting closes for this proposal. The chosen time must be between 👀0h1m0s 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 👀0h1m0s and 👀720h after closingTimestamp . (int64 as string) |
Templates and submitting
In the tabs below you'll see an annotated example, which describes what each field is for, a JSON example that can be used to submit on the governance dApp ↗, and command line examples for different operating systems. You'll need to replace the example data with the relevant details before submitting.
- Annotated example
- Governance dApp (JSON)
- Command line (Linux / OSX)
- Command line (Windows)
{
rationale: {
title: "Update Lorem Ipsum market",
description: "A proposal to update Lorem Ipsum market"
},
terms: {
updateMarket: {
// The identifier of the market to update
marketId: "123",
changes: {
// Percentage move up and down from the mid price which specifies the range of
// price levels over which automated liquidity provision orders will be deployed
lpPriceRange: 11,
// Linear slippage factor is used to cap the slippage component of maintainence margin - it is applied to the slippage volume
linearSlippageFactor: 0.001,
// Quadratic slippage factor is used to cap the slippage component of maintainence margin - it is applied to the square of the slippage volume
quadraticSlippageFactor: 0,
// Updated market instrument configuration
instrument: {
// Instrument code, human-readable shortcode used to describe the instrument
code: "APPLES.22",
// Future
future: {
// Human-readable name/abbreviation of the quote name (string)
quoteName: "tEuro",
// The data source spec describing the data of settlement data (object)
dataSourceSpecForSettlementData: {
external: {
oracle: {
// signers is the list of authorized signatures that signed the data for this
// source. All the signatures in the data source data should be contained in this (array of objects)
signers: [
{
ethAddress: {
address: "0xfCEAdAFab14d46e20144F48824d0C09B1a03F2BC"
}
}
],
// filters describes which source data are considered of interest or not for
// the product (or the risk model).
filters: [
key: {
// name is the name of the property. (string)
name: "prices.BTC.value",
// type is the type of the property. (string)
type: "TYPE_INTEGER",
// An optional decimal place to be be applied on the provided value
// valid only for PropertyType of type DECIMAL and INTEGER
numberDecimalPlaces: "5",
},
// conditions are the conditions that should be matched by the data to be
// considered of interest.
conditions: [
{
// comparator is the type of comparison to make on the value. (string)
operator: "OPERATOR_GREATER_THAN",
// value is used by the comparator. (string)
value: "0",
}
]
},
{
key: {
name: "prices.BTC.timestamp",
type: "TYPE_TIMESTAMP",
},
conditions: [
{
operator: "OPERATOR_GREATER_THAN",
value: "1648684800000000000",
}
]
}
]
}
},
// The data source spec describing the data source for trading termination (object)
dataSourceSpecForTradingTermination: {
// DataSourceDefinition represents the top level object that deals with data sources.
// DataSourceDefinition can be external or internal, with whatever number of data sources are defined
internal {
// DataSourceSpecConfigurationTime is the internal data source used for emitting timestamps.
time: {
// Conditions that the timestamps should meet in order to be considered.
conditions: [
{
// comparator is the type of comparison to make on the value. (string)
operator: "OPERATOR_GREATER_THAN_OR_EQUAL",
// value is used by the comparator. (string)
value: "1648684800000000000",
}
]
}
},
// The binding between the data source spec and the settlement data (object)
dataSourceSpecBinding: {
// settlement_data_property holds the name of the property in the source data
// that should be used as settlement data.
// If it is set to "prices.BTC.value", then the Future will use the value of
// this property as settlement data. (string)
settlementDataProperty: "prices.BTC.value",
// the name of the property in the data source data that signals termination of trading (string)
tradingTerminationProperty: "vega.builtin.timestamp"
}
},
// Optional market metadata, tags
metadata: [
"source:docs.vega.xyz"
],
// Price monitoring parameters
priceMonitoringParameters: {
// PriceMonitoringTrigger holds together price projection horizon τ, probability level p, and auction extension duration
triggers: [
{
// Price monitoring projection horizon τ in seconds (int64 as string)
horizon: "43200",
// Price monitoring probability level p (string)
probability: "0.9999999",
// Price monitoring auction extension duration in seconds should the price
// breach its theoretical level over the specified horizon at the specified
// probability level (int64 as string)
auctionExtension: "600",
}
]
},
// Log normal risk model parameters, valid only if MODEL_LOG_NORMAL is selected
logNormal: {
// Tau parameter of the risk model, projection horizon measured as a year fraction used in the expected shortfall calculation to obtain the maintenance margin, must be a strictly non-negative real number (number)
tau: 0.0001140771161,
// Risk Aversion Parameter (double as number)
riskAversionParameter: "0.001",
// Risk model parameters for log normal
params: {
// Mu parameter, annualised growth rate of the underlying asset (double as number)
mu: 0,
// R parameter, annualised growth rate of the risk-free asset, used for discounting of future cash flows, can be any real number (double as number)
r: 0.016,
// Sigma parameter, annualised volatility of the underlying asset, must be a strictly non-negative real number (double as number)
sigma: 0.5,
}
},
},
},
// Timestamp (Unix time in seconds) when voting closes for this proposal,
// constrained by `minClose` and `maxClose` network parameters (int64 as string)
closingTimestamp: 1680534013000,
// Timestamp (Unix time in seconds) when proposal gets enacted (if passed),
// constrained by `minEnact` and `maxEnact` network parameters (int64 as string)
enactmentTimestamp: 1680620413000,
}
}
- Copy the JSON example below into a text editor.
- Replace the placeholder values with those you want for the market.
- Submit your proposal from the New Proposal area of the governance dApp.
- Check you can see your proposal on Open Proposals area of the governance dApp.
{
"rationale": {
"title": "Update Lorem Ipsum market",
"description": "A proposal to update Lorem Ipsum market"
},
"terms": {
"updateMarket": {
"marketId": "123",
"changes": {
"lpPriceRange": "11",
"linearSlippageFactor": "0.001",
"quadraticSlippageFactor": "0",
"instrument": {
"code": "APPLES.22",
"future": {
"quoteName": "tEuro",
"dataSourceSpecForSettlementData": {
"external": {
"oracle": {
"signers": [
{
"ethAddress": {
"address": "0xfCEAdAFab14d46e20144F48824d0C09B1a03F2BC"
}
}
],
"filters": [
{
"key": {
"name": "prices.BTC.value",
"type": "TYPE_INTEGER",
"numberDecimalPlaces": "5"
},
"conditions": [
{
"operator": "OPERATOR_GREATER_THAN",
"value": "0"
}
]
},
{
"key": {
"name": "prices.BTC.timestamp",
"type": "TYPE_TIMESTAMP"
},
"conditions": [
{
"operator": "OPERATOR_GREATER_THAN",
"value": "1648684800000000000"
}
]
}
]
}
}
},
"dataSourceSpecForTradingTermination": {
"internal": {
"time": {
"conditions": [
{
"operator": "OPERATOR_GREATER_THAN_OR_EQUAL",
"value": "1648684800000000000"
}
]
}
}
},
"dataSourceSpecBinding": {
"settlementDataProperty": "prices.BTC.value",
"tradingTerminationProperty": "vega.builtin.timestamp"
}
}
},
"metadata": [
"source:docs.vega.xyz"
],
"priceMonitoringParameters": {
"triggers": [
{
"horizon": "43200",
"probability": "0.9999999",
"auctionExtension": "600"
}
]
},
"logNormal": {
"tau": 0.0001140771161,
"riskAversionParameter": 0.001,
"params": {
"mu": 0,
"r": 0.016,
"sigma": 0.5
}
}
}
},
"closingTimestamp": 1680534013000,
"enactmentTimestamp": 1680620413000
}
}
- Copy the command line example below into a text editor.
- Replace the placeholder values with those you want in the proposal.
- Use the command line to submit your proposal.
- Check you can see your proposal on Open Proposals area of the governance dApp.
./vegawallet transaction send --wallet your_walletname --pubkey your_public_key --network fairground '{
"proposalSubmission": {
"rationale": {
"title": "Update Lorem Ipsum market",
"description": "A proposal to update Lorem Ipsum market"
},
"terms": {
"updateMarket": {
"marketId": "123",
"changes": {
"lpPriceRange": "11",
"linearSlippageFactor": "0.001",
"quadraticSlippageFactor": "0",
"instrument": {
"code": "APPLES.22",
"future": {
"quoteName": "tEuro",
"dataSourceSpecForSettlementData": {
"external": {
"oracle": {
"signers": [
{
"ethAddress": {
"address": "0xfCEAdAFab14d46e20144F48824d0C09B1a03F2BC"
}
}
],
"filters": [
{
"key": {
"name": "prices.BTC.value",
"type": "TYPE_INTEGER",
"numberDecimalPlaces": "5"
},
"conditions": [
{
"operator": "OPERATOR_GREATER_THAN",
"value": "0"
}
]
},
{
"key": {
"name": "prices.BTC.timestamp",
"type": "TYPE_TIMESTAMP"
},
"conditions": [
{
"operator": "OPERATOR_GREATER_THAN",
"value": "1648684800000000000"
}
]
}
]
}
}
},
"dataSourceSpecForTradingTermination": {
"internal": {
"time": {
"conditions": [
{
"operator": "OPERATOR_GREATER_THAN_OR_EQUAL",
"value": "1648684800000000000"
}
]
}
}
},
"dataSourceSpecBinding": {
"settlementDataProperty": "prices.BTC.value",
"tradingTerminationProperty": "vega.builtin.timestamp"
}
}
},
"metadata": [
"source:docs.vega.xyz"
],
"priceMonitoringParameters": {
"triggers": [
{
"horizon": "43200",
"probability": "0.9999999",
"auctionExtension": "600"
}
]
},
"logNormal": {
"tau": 0.0001140771161,
"riskAversionParameter": 0.001,
"params": {
"mu": 0,
"r": 0.016,
"sigma": 0.5
}
}
}
},
"closingTimestamp": 1680534013000,
"enactmentTimestamp": 1680620413000
}
}
}'
- Copy the command line example below into a text editor.
- Replace the placeholder values with those you want in the proposal.
- Use the command line to submit your proposal.
- Check you can see your proposal on Open Proposals area of the governance dApp.
vegawallet.exe transaction send --wallet your_walletname --pubkey your_public_key --network fairground ^
"{^
\"proposalSubmission\": {^
\"rationale\": {^
\"title\": \"Update Lorem Ipsum market\",^
\"description\": \"A proposal to update Lorem Ipsum market\"^
},^
\"terms\": {^
\"updateMarket\": {^
\"marketId\": \"123\",^
\"changes\": {^
\"lpPriceRange\": \"11\",^
\"linearSlippageFactor\": \"0.001\",^
\"quadraticSlippageFactor\": \"0\",^
\"instrument\": {^
\"code\": \"APPLES.22\",^
\"future\": {^
\"quoteName\": \"tEuro\",^
\"dataSourceSpecForSettlementData\": {^
\"external\": {^
\"oracle\": {^
\"signers\": [^
{^
\"ethAddress\": {^
\"address\": \"0xfCEAdAFab14d46e20144F48824d0C09B1a03F2BC\"^
}^
}^
],^
\"filters\": [^
{^
\"key\": {^
\"name\": \"prices.BTC.value\",^
\"type\": \"TYPE_INTEGER\",^
\"numberDecimalPlaces\": \"5\"^
},^
\"conditions\": [^
{^
\"operator\": \"OPERATOR_GREATER_THAN\",^
\"value\": \"0\"^
}^
]^
},^
{^
\"key\": {^
\"name\": \"prices.BTC.timestamp\",^
\"type\": \"TYPE_TIMESTAMP\"^
},^
\"conditions\": [^
{^
\"operator\": \"OPERATOR_GREATER_THAN\",^
\"value\": \"1648684800000000000\"^
}^
]^
}^
]^
}^
}^
},^
\"dataSourceSpecForTradingTermination\": {^
\"internal\": {^
\"time\": {^
\"conditions\": [^
{^
\"operator\": \"OPERATOR_GREATER_THAN_OR_EQUAL\",^
\"value\": \"1648684800000000000\"^
}^
]^
}^
}^
},^
\"dataSourceSpecBinding\": {^
\"settlementDataProperty\": \"prices.BTC.value\",^
\"tradingTerminationProperty\": \"vega.builtin.timestamp\"^
}^
}^
},^
\"metadata\": [^
\"source:docs.vega.xyz\"^
],^
\"priceMonitoringParameters\": {^
\"triggers\": [^
{^
\"horizon\": \"43200\",^
\"probability\": \"0.9999999\",^
\"auctionExtension\": \"600\"^
}^
]^
},^
\"logNormal\": {^
\"tau\": 0.0001140771161,^
\"riskAversionParameter\": 0.001,^
\"params\": {^
\"mu\": 0,^
\"r\": 0.016,^
\"sigma\": 0.5^
}^
}^
}^
},^
\"closingTimestamp\": 1680534013000,^
\"enactmentTimestamp\": 1680620413000^
}^
}^
}"
Voting and enactment
All proposals are voted on by the community. To vote, community members need, at a minimum, the larger of 👀more than 0 tokens or 👀1 token associated to their Vega key.
Your proposal will need participation of 👀30% and a majority of 👀66%, so having community support is essential. If successful, the proposal will be enacted at the time you specify in the enactmentTimestamp
field.
Building support is down to you. Share your proposal in the Update Market Proposals forum ↗ on Vega community, being sure to follow the post guide ↗. You may also wish to share on Discord ↗.
Proposers who invite feedback, engage with comments, and make revisions to meet the needs of the community are more likely to be successful.