Skip to content

Commit

Permalink
feat: buyback and treasury fees + split reward/discount components
Browse files Browse the repository at this point in the history
  • Loading branch information
ze97286 committed Jul 9, 2024
1 parent e6ac960 commit ab456e7
Show file tree
Hide file tree
Showing 88 changed files with 10,368 additions and 7,117 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
- [11028](https://github.com/vegaprotocol/vega/issues/11028) - Add API to estimate order book depth based on `vAMM`.
- [11400](https://github.com/vegaprotocol/vega/issues/11400) - Add support for long block auction.
- [11026](https://github.com/vegaprotocol/vega/issues/11026) - Add API flag to get paid liquidity fees for a `vAMM` using the parent key.
- [11428](https://github.com/vegaprotocol/vega/issues/11428) - Add buy back and treasury fee and separate discount/reward factors.

### 🐛 Fixes

Expand Down
76 changes: 62 additions & 14 deletions commands/proposal_submission.go
Original file line number Diff line number Diff line change
Expand Up @@ -494,25 +494,73 @@ func checkBenefitTier(index int, tier *vegapb.BenefitTier) Errors {
}
}

if len(tier.ReferralRewardFactor) == 0 {
errs.AddForProperty(propertyPath+".referral_reward_factor", ErrIsRequired)
if tier.ReferralRewardFactors == nil {
errs.AddForProperty(propertyPath+".referral_reward_factors", ErrIsRequired)
} else {
rrf, err := num.DecimalFromString(tier.ReferralRewardFactor)
if err != nil {
errs.AddForProperty(propertyPath+".referral_reward_factor", ErrIsNotValidNumber)
} else if rrf.IsNegative() {
errs.AddForProperty(propertyPath+".referral_reward_factor", ErrMustBePositiveOrZero)
if len(tier.ReferralRewardFactors.InfrastructureRewardFactor) == 0 {
errs.AddForProperty(propertyPath+".referral_reward_factors.infrastructure_reward_factor", ErrIsRequired)
} else {
rrf, err := num.DecimalFromString(tier.ReferralRewardFactors.InfrastructureRewardFactor)
if err != nil {
errs.AddForProperty(propertyPath+".referral_reward_factors.infrastructure_reward_factor", ErrIsNotValidNumber)
} else if rrf.IsNegative() {
errs.AddForProperty(propertyPath+".referral_reward_factors.infrastructure_reward_factor", ErrMustBePositiveOrZero)
}
}
if len(tier.ReferralRewardFactors.MakerRewardFactor) == 0 {
errs.AddForProperty(propertyPath+".referral_reward_factors.maker_reward_factor", ErrIsRequired)
} else {
rrf, err := num.DecimalFromString(tier.ReferralRewardFactors.MakerRewardFactor)
if err != nil {
errs.AddForProperty(propertyPath+".referral_reward_factors.maker_reward_factor", ErrIsNotValidNumber)
} else if rrf.IsNegative() {
errs.AddForProperty(propertyPath+".referral_reward_factors.maker_reward_factor", ErrMustBePositiveOrZero)
}
}
if len(tier.ReferralRewardFactors.LiquidityRewardFactor) == 0 {
errs.AddForProperty(propertyPath+".referral_reward_factors.liquidity_reward_factor", ErrIsRequired)
} else {
rrf, err := num.DecimalFromString(tier.ReferralRewardFactors.LiquidityRewardFactor)
if err != nil {
errs.AddForProperty(propertyPath+".referral_reward_factors.liquidity_reward_factor", ErrIsNotValidNumber)
} else if rrf.IsNegative() {
errs.AddForProperty(propertyPath+".referral_reward_factors.liquidity_reward_factor", ErrMustBePositiveOrZero)
}
}
}

if len(tier.ReferralDiscountFactor) == 0 {
errs.AddForProperty(propertyPath+".referral_discount_factor", ErrIsRequired)
if tier.ReferralDiscountFactors == nil {
errs.AddForProperty(propertyPath+".referral_discount_factors", ErrIsRequired)
} else {
rdf, err := num.DecimalFromString(tier.ReferralDiscountFactor)
if err != nil {
errs.AddForProperty(propertyPath+".referral_discount_factor", ErrIsNotValidNumber)
} else if rdf.IsNegative() {
errs.AddForProperty(propertyPath+".referral_discount_factor", ErrMustBePositiveOrZero)
if len(tier.ReferralDiscountFactors.InfrastructureDiscountFactor) == 0 {
errs.AddForProperty(propertyPath+".referral_discount_factors.infrastructure_discount_factor", ErrIsRequired)
} else {
rrf, err := num.DecimalFromString(tier.ReferralDiscountFactors.InfrastructureDiscountFactor)
if err != nil {
errs.AddForProperty(propertyPath+".referral_discount_factors.infrastructure_discount_factor", ErrIsNotValidNumber)
} else if rrf.IsNegative() {
errs.AddForProperty(propertyPath+".referral_discount_factors.infrastructure_discount_factor", ErrMustBePositiveOrZero)
}
}
if len(tier.ReferralDiscountFactors.MakerDiscountFactor) == 0 {
errs.AddForProperty(propertyPath+".referral_discount_factors.maker_discount_factor", ErrIsRequired)
} else {
rrf, err := num.DecimalFromString(tier.ReferralDiscountFactors.MakerDiscountFactor)
if err != nil {
errs.AddForProperty(propertyPath+".referral_discount_factors.maker_discount_factor", ErrIsNotValidNumber)
} else if rrf.IsNegative() {
errs.AddForProperty(propertyPath+".referral_discount_factors.maker_discount_factor", ErrMustBePositiveOrZero)
}
}
if len(tier.ReferralDiscountFactors.LiquidityDiscountFactor) == 0 {
errs.AddForProperty(propertyPath+".referral_discount_factors.liquidity_discount_factor", ErrIsRequired)
} else {
rrf, err := num.DecimalFromString(tier.ReferralDiscountFactors.LiquidityDiscountFactor)
if err != nil {
errs.AddForProperty(propertyPath+".referral_discount_factors.liquidity_discount_factor", ErrIsNotValidNumber)
} else if rrf.IsNegative() {
errs.AddForProperty(propertyPath+".referral_discount_factors.liquidity_discount_factor", ErrMustBePositiveOrZero)
}
}
}

Expand Down
130 changes: 102 additions & 28 deletions commands/proposal_submission_update_referral_program_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,8 @@ func testSubmissionForReferralProgramUpdateWithoutTierMinimumRunningNotionalTake
}

func testSubmissionForReferralProgramUpdateWithDuplicateBenefitTierEntriesFails(t *testing.T) {
factors := []string{"1.1", "1.2", "1.3", "1.4", "1.5", "1.6"}

err := checkProposalSubmission(&commandspb.ProposalSubmission{
Terms: &types.ProposalTerms{
Change: &types.ProposalTerms_UpdateReferralProgram{
Expand All @@ -192,20 +194,44 @@ func testSubmissionForReferralProgramUpdateWithDuplicateBenefitTierEntriesFails(
{
MinimumRunningNotionalTakerVolume: "100",
MinimumEpochs: "10",
ReferralRewardFactor: "1.1",
ReferralDiscountFactor: "1.2",
ReferralRewardFactors: &types.RewardFactors{
InfrastructureRewardFactor: factors[0],
MakerRewardFactor: factors[1],
LiquidityRewardFactor: factors[2],
},
ReferralDiscountFactors: &types.DiscountFactors{
InfrastructureDiscountFactor: factors[1],
MakerDiscountFactor: factors[2],
LiquidityDiscountFactor: factors[3],
},
},
{
MinimumRunningNotionalTakerVolume: "100",
MinimumEpochs: "10",
ReferralRewardFactor: "1.2",
ReferralDiscountFactor: "1.3",
ReferralRewardFactors: &types.RewardFactors{
InfrastructureRewardFactor: factors[1],
MakerRewardFactor: factors[2],
LiquidityRewardFactor: factors[3],
},
ReferralDiscountFactors: &types.DiscountFactors{
InfrastructureDiscountFactor: factors[2],
MakerDiscountFactor: factors[3],
LiquidityDiscountFactor: factors[4],
},
},
{
MinimumRunningNotionalTakerVolume: "100",
MinimumEpochs: "20",
ReferralRewardFactor: "1.3",
ReferralDiscountFactor: "1.4",
ReferralRewardFactors: &types.RewardFactors{
InfrastructureRewardFactor: factors[2],
MakerRewardFactor: factors[3],
LiquidityRewardFactor: factors[4],
},
ReferralDiscountFactors: &types.DiscountFactors{
InfrastructureDiscountFactor: factors[3],
MakerDiscountFactor: factors[4],
LiquidityDiscountFactor: factors[5],
},
},
},
},
Expand Down Expand Up @@ -376,8 +402,8 @@ func testSubmissionForReferralProgramUpdateWithoutTierReferralRewardFactorFails(
},
})

assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_reward_factor"), commands.ErrIsRequired)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_reward_factor"), commands.ErrIsRequired)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_reward_factors"), commands.ErrIsRequired)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_reward_factors"), commands.ErrIsRequired)
}

func testSubmissionForReferralProgramUpdateWithBadFormatForTierReferralRewardFactorFails(t *testing.T) {
Expand All @@ -388,9 +414,17 @@ func testSubmissionForReferralProgramUpdateWithBadFormatForTierReferralRewardFac
Changes: &types.ReferralProgramChanges{
BenefitTiers: []*types.BenefitTier{
{
ReferralRewardFactor: "qbc",
ReferralRewardFactors: &types.RewardFactors{
InfrastructureRewardFactor: "qbc",
MakerRewardFactor: "qbc",
LiquidityRewardFactor: "qbc",
},
}, {
ReferralRewardFactor: "0x32",
ReferralRewardFactors: &types.RewardFactors{
InfrastructureRewardFactor: "0x32",
MakerRewardFactor: "0x32",
LiquidityRewardFactor: "0x32",
},
},
},
},
Expand All @@ -399,8 +433,8 @@ func testSubmissionForReferralProgramUpdateWithBadFormatForTierReferralRewardFac
},
})

assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_reward_factor"), commands.ErrIsNotValidNumber)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_reward_factor"), commands.ErrIsNotValidNumber)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_reward_factors.infrastructure_reward_factor"), commands.ErrIsNotValidNumber)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_reward_factors.infrastructure_reward_factor"), commands.ErrIsNotValidNumber)
}

func testSubmissionForReferralProgramUpdateWithBadValueForTierReferralRewardFactorFails(t *testing.T) {
Expand All @@ -411,9 +445,17 @@ func testSubmissionForReferralProgramUpdateWithBadValueForTierReferralRewardFact
Changes: &types.ReferralProgramChanges{
BenefitTiers: []*types.BenefitTier{
{
ReferralRewardFactor: "-10",
ReferralRewardFactors: &types.RewardFactors{
InfrastructureRewardFactor: "-10",
MakerRewardFactor: "-10",
LiquidityRewardFactor: "-10",
},
}, {
ReferralRewardFactor: "-1",
ReferralRewardFactors: &types.RewardFactors{
InfrastructureRewardFactor: "-1",
MakerRewardFactor: "-1",
LiquidityRewardFactor: "-1",
},
},
},
},
Expand All @@ -422,8 +464,12 @@ func testSubmissionForReferralProgramUpdateWithBadValueForTierReferralRewardFact
},
})

assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_reward_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_reward_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_reward_factors.infrastructure_reward_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_reward_factors.infrastructure_reward_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_reward_factors.maker_reward_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_reward_factors.maker_reward_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_reward_factors.liquidity_reward_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_reward_factors.liquidity_reward_factor"), commands.ErrMustBePositiveOrZero)
}

func testSubmissionForReferralProgramUpdateWithoutTierReferralDiscountFactorFails(t *testing.T) {
Expand All @@ -434,9 +480,9 @@ func testSubmissionForReferralProgramUpdateWithoutTierReferralDiscountFactorFail
Changes: &types.ReferralProgramChanges{
BenefitTiers: []*types.BenefitTier{
{
ReferralDiscountFactor: "",
ReferralDiscountFactors: &types.DiscountFactors{},
}, {
ReferralDiscountFactor: "",
ReferralDiscountFactors: &types.DiscountFactors{},
},
},
},
Expand All @@ -445,8 +491,12 @@ func testSubmissionForReferralProgramUpdateWithoutTierReferralDiscountFactorFail
},
})

assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_discount_factor"), commands.ErrIsRequired)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_discount_factor"), commands.ErrIsRequired)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_discount_factors.infrastructure_discount_factor"), commands.ErrIsRequired)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_discount_factors.infrastructure_discount_factor"), commands.ErrIsRequired)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_discount_factors.maker_discount_factor"), commands.ErrIsRequired)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_discount_factors.maker_discount_factor"), commands.ErrIsRequired)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_discount_factors.liquidity_discount_factor"), commands.ErrIsRequired)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_discount_factors.liquidity_discount_factor"), commands.ErrIsRequired)
}

func testSubmissionForReferralProgramUpdateWithBadFormatForTierReferralDiscountFactorFails(t *testing.T) {
Expand All @@ -457,9 +507,17 @@ func testSubmissionForReferralProgramUpdateWithBadFormatForTierReferralDiscountF
Changes: &types.ReferralProgramChanges{
BenefitTiers: []*types.BenefitTier{
{
ReferralDiscountFactor: "qbc",
ReferralDiscountFactors: &types.DiscountFactors{
InfrastructureDiscountFactor: "qbc",
LiquidityDiscountFactor: "qbc",
MakerDiscountFactor: "qbc",
},
}, {
ReferralDiscountFactor: "0x32",
ReferralDiscountFactors: &types.DiscountFactors{
InfrastructureDiscountFactor: "0x32",
LiquidityDiscountFactor: "0x32",
MakerDiscountFactor: "0x32",
},
},
},
},
Expand All @@ -468,8 +526,12 @@ func testSubmissionForReferralProgramUpdateWithBadFormatForTierReferralDiscountF
},
})

assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_discount_factor"), commands.ErrIsNotValidNumber)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_discount_factor"), commands.ErrIsNotValidNumber)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_discount_factors.infrastructure_discount_factor"), commands.ErrIsNotValidNumber)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_discount_factors.infrastructure_discount_factor"), commands.ErrIsNotValidNumber)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_discount_factors.maker_discount_factor"), commands.ErrIsNotValidNumber)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_discount_factors.maker_discount_factor"), commands.ErrIsNotValidNumber)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_discount_factors.liquidity_discount_factor"), commands.ErrIsNotValidNumber)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_discount_factors.liquidity_discount_factor"), commands.ErrIsNotValidNumber)
}

func testSubmissionForReferralProgramUpdateWithBadValueForTierReferralDiscountFactorFails(t *testing.T) {
Expand All @@ -480,9 +542,17 @@ func testSubmissionForReferralProgramUpdateWithBadValueForTierReferralDiscountFa
Changes: &types.ReferralProgramChanges{
BenefitTiers: []*types.BenefitTier{
{
ReferralDiscountFactor: "-10",
ReferralDiscountFactors: &types.DiscountFactors{
InfrastructureDiscountFactor: "-10",
MakerDiscountFactor: "-10",
LiquidityDiscountFactor: "-10",
},
}, {
ReferralDiscountFactor: "-1",
ReferralDiscountFactors: &types.DiscountFactors{
InfrastructureDiscountFactor: "-1",
MakerDiscountFactor: "-1",
LiquidityDiscountFactor: "-1",
},
},
},
},
Expand All @@ -491,8 +561,12 @@ func testSubmissionForReferralProgramUpdateWithBadValueForTierReferralDiscountFa
},
})

assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_discount_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_discount_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_discount_factors.infrastructure_discount_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_discount_factors.infrastructure_discount_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_discount_factors.liquidity_discount_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_discount_factors.liquidity_discount_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.0.referral_discount_factors.maker_discount_factor"), commands.ErrMustBePositiveOrZero)
assert.Contains(t, err.Get("proposal_submission.terms.change.update_referral_program.changes.benefit_tiers.1.referral_discount_factors.maker_discount_factor"), commands.ErrMustBePositiveOrZero)
}

func testSubmissionForReferralProgramUpdateWithoutStakingTierMinimumStakedTokensFails(t *testing.T) {
Expand Down
Loading

0 comments on commit ab456e7

Please sign in to comment.