Skip to main content
Version: pre-release (v0.79)

Enable or replace volume discount program

When a volume discount program is enabled, traders can receive discounts on their fees. The higher their taker volume over the discount program's window length, the greater the discount traders can receive.

The volume discount program needs to be enabled by governance. Once it's enabled, both the requirements and the benefits can also be replaced with a new program.

This page describes what you need to propose enabling or replacing the volume discount program, and provides example proposal templates that you will need to edit before sharing and 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.VolumeDiscountProgram.minProposerBalance or spam.protection.proposal.min.tokens
  • Familiarity with governance

Anatomy of a volume discount program proposal

The fields below all need to be defined to enable the volume discount program or replace an existing one.

If you are suggesting a replacement program, you'll need to include all the fields, even if you don't want to change their values. Just use the existing values from the current volume discount program.

End of program timestamp: Date and time after which, when the current epoch ends, the program will end and discounts will be disabled.

Window length: Number of epochs over which to evaluate traders' volume of taker trades.

To end an existing program early, set your proposal up with the exact same parameters. Set the end of program timestamp to be the same as the proposal's enactment timestamp.

Benefit tier fields

Benefit tier fieldDescriptionAccepted values
benefitTiersList of values defining the discount factors for the programHolds the details of each tier of discounts, listed below. Maximum of volumeDiscountProgram.maxBenefitTiers tiers
minimumRunningNotionalTakerVolumeThe notional volume of aggressive trades that a trader is required to have across the aggregation window, to access the discount in this tierInteger greater than or equal to 1
volumeDiscountFactorsEach fee type must be listed separately.Listed below
makerVolumeDiscountFactorProportion of each trader's maker fees to be discounted, will be converted to a percentageMust be greater than or equal to 0 and less than / equal to volumeDiscountProgram.maxVolumeDiscountFactor
liquidityVolumeDiscountFactorProportion of each trader's liquidity fees to be discounted, will be converted to a percentageMust be greater than or equal to 0 and less than / equal to volumeDiscountProgram.maxVolumeDiscountFactor
infrastructureVolumeDiscountFactorProportion of each trader's infrastructure fees to be discounted, will be converted to a percentageMust be greater than or equal to 0 and less than / equal to volumeDiscountProgram.maxVolumeDiscountFactor

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

Below you will find:

  • JSON example
  • Command line examples for different operating systems
  1. Copy the JSON example below into a text editor.
  2. Replace the placeholder values with those you want for the market.
  3. Tip: Use markdown formatting in your proposal's rationale to make for easier community review.
{
"proposalSubmission": {
"rationale": {
"title": "Volume discount proposal title",
"description": "This enacts or replaces the volume discount program"
},
"terms": {
"updateVolumeDiscountProgram": {
"changes": {
"benefitTiers": [
{
"minimumRunningNotionalTakerVolume": "11",
"minimumEpochs": "1",
"volumeDiscountFactor": "",
"volumeDiscountFactors": {
"infrastructureDiscountFactor": "0.02",
"liquidityDiscountFactor": "0.021",
"makerDiscountFactor": "0.022"
},
},
{
"minimumRunningNotionalTakerVolume": "1000",
"minimumEpochs": "1",
"volumeDiscountFactor": "",
"volumeDiscountFactors": {
"infrastructureDiscountFactor": "0.044",
"liquidityDiscountFactor": "0.045",
"makerDiscountFactor": "0.046"
},
},
],
"endOfProgramTimestamp": 1234567890,
"windowLength": "11"
"closingTimestamp": 1111111111,
"enactmentTimestamp": 1111111155
}
}
}
}
}

Voting

To vote, participants need, at a minimum, the larger of the value of the following network parameters governance.proposal.VolumeDiscountProgram.minVoterBalance or spam.protection.voting.min.tokens associated to their Vega key.

The proposal will need participation of governance.proposal.VolumeDiscountProgram.requiredParticipation and a majority of governance.proposal.VolumeDiscountProgram.requiredMajority.

Enactment

If successful, the program changes will go live in the epoch following the time you specify in the enactmentTimestamp field.