Skip to content

Commit 9a3747a

Browse files
authored
Merge pull request #9889 from vegaprotocol/feat/9827
Expose `was_eligible` in the referral set stats
2 parents 6b75c12 + 8a66619 commit 9a3747a

File tree

15 files changed

+1979
-1860
lines changed

15 files changed

+1979
-1860
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@
174174
- [9883](https://github.com/vegaprotocol/vega/issues/9883) - Add reward filter to transfer API.
175175
- [9886](https://github.com/vegaprotocol/vega/issues/9886) - Add party vesting statistics endpoint.
176176
- [9770](https://github.com/vegaprotocol/vega/issues/9770) - Fix `PnL` flickering bug on an already open position.
177+
- [9827](https://github.com/vegaprotocol/vega/issues/9827) - Expose `was_eligible` in the referral set statistics.
177178

178179
### 🐛 Fixes
179180

core/events/referral_set.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"code.vegaprotocol.io/vega/core/types"
2222
"code.vegaprotocol.io/vega/libs/num"
2323
eventspb "code.vegaprotocol.io/vega/protos/vega/events/v1"
24+
2425
"golang.org/x/exp/slices"
2526
)
2627

@@ -84,6 +85,7 @@ func (t ReferralSetStatsUpdated) Unwrap() *types.ReferralSetStats {
8485
return &types.ReferralSetStats{
8586
AtEpoch: t.e.AtEpoch,
8687
SetID: types.ReferralSetID(t.e.SetId),
88+
WasEligible: t.e.WasEligible,
8789
ReferralSetRunningVolume: volume,
8890
RefereesStats: stats,
8991
RewardFactor: rewardFactor,
@@ -124,6 +126,7 @@ func NewReferralSetStatsUpdatedEvent(ctx context.Context, update *types.Referral
124126
e: eventspb.ReferralSetStatsUpdated{
125127
SetId: string(update.SetID),
126128
AtEpoch: update.AtEpoch,
129+
WasEligible: update.WasEligible,
127130
ReferralSetRunningNotionalTakerVolume: update.ReferralSetRunningVolume.String(),
128131
RefereesStats: refereesStats,
129132
RewardFactor: update.RewardFactor.String(),

core/referral/engine.go

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -505,8 +505,8 @@ func (e *Engine) computeFactorsByReferee(ctx context.Context, epoch uint64, take
505505
allStats := map[types.ReferralSetID]*types.ReferralSetStats{}
506506
tiersLen := len(e.currentProgram.BenefitTiers)
507507

508-
for setID := range e.sets {
509-
set := &types.ReferralSetStats{
508+
for setID, set := range e.sets {
509+
setStats := &types.ReferralSetStats{
510510
AtEpoch: epoch,
511511
SetID: setID,
512512
RefereesStats: map[types.PartyID]*types.RefereeStats{},
@@ -516,21 +516,26 @@ func (e *Engine) computeFactorsByReferee(ctx context.Context, epoch uint64, take
516516

517517
for i := tiersLen - 1; i >= 0; i-- {
518518
tier := e.currentProgram.BenefitTiers[i]
519-
if set.RewardFactor.IsZero() && set.ReferralSetRunningVolume.GTE(tier.MinimumRunningNotionalTakerVolume) {
520-
set.RewardFactor = tier.ReferralRewardFactor
519+
if setStats.RewardFactor.IsZero() && setStats.ReferralSetRunningVolume.GTE(tier.MinimumRunningNotionalTakerVolume) {
520+
setStats.RewardFactor = tier.ReferralRewardFactor
521521
break
522522
}
523523
}
524524

525-
rewardsMultiplier := e.calculateMultiplierForParty(setID)
526-
set.RewardsMultiplier = rewardsMultiplier
527-
set.RewardsFactorMultiplier = e.calculateRewardsFactorMultiplierForParty(rewardsMultiplier, set.RewardFactor)
525+
balance, _ := e.staking.GetAvailableBalance(set.Referrer.PartyID.String())
528526

529-
e.sets[setID].CurrentRewardFactor = set.RewardFactor
530-
e.sets[setID].CurrentRewardsMultiplier = rewardsMultiplier
531-
e.sets[setID].CurrentRewardsFactorMultiplier = set.RewardsFactorMultiplier
527+
if balance.GTE(e.referralProgramMinStakedVegaTokens) {
528+
setStats.WasEligible = true
529+
}
530+
531+
setStats.RewardsMultiplier = e.calculateMultiplierForParty(setID)
532+
setStats.RewardsFactorMultiplier = e.calculateRewardsFactorMultiplierForParty(setStats.RewardsMultiplier, setStats.RewardFactor)
533+
534+
e.sets[setID].CurrentRewardFactor = setStats.RewardFactor
535+
e.sets[setID].CurrentRewardsMultiplier = setStats.RewardsMultiplier
536+
e.sets[setID].CurrentRewardsFactorMultiplier = setStats.RewardsFactorMultiplier
532537

533-
allStats[setID] = set
538+
allStats[setID] = setStats
534539
}
535540

536541
for party, setID := range e.referees {
@@ -558,7 +563,7 @@ func (e *Engine) computeFactorsByReferee(ctx context.Context, epoch uint64, take
558563
e.factorsByReferee[party] = refereeStats
559564
setStats.RefereesStats[party] = refereeStats
560565

561-
if e.isSetEligible(setID) != nil {
566+
if !setStats.WasEligible {
562567
continue
563568
}
564569

core/types/referral_set.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ type ReferralSet struct {
4040
type ReferralSetStats struct {
4141
AtEpoch uint64
4242
SetID ReferralSetID
43+
WasEligible bool
4344
ReferralSetRunningVolume *num.Uint
4445
RefereesStats map[PartyID]*RefereeStats
4546
RewardFactor num.Decimal

datanode/entities/referral_set_stats.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ type (
2727
ReferralSetStats struct {
2828
SetID ReferralSetID
2929
AtEpoch uint64
30+
WasEligible bool
3031
ReferralSetRunningNotionalTakerVolume string
3132
RefereesStats []*eventspb.RefereeStats
3233
VegaTime time.Time
@@ -38,6 +39,7 @@ type (
3839
FlattenReferralSetStats struct {
3940
SetID ReferralSetID
4041
AtEpoch uint64
42+
WasEligible bool
4143
ReferralSetRunningNotionalTakerVolume string
4244
VegaTime time.Time
4345
PartyID string
@@ -101,6 +103,7 @@ func ReferralSetStatsFromProto(proto *eventspb.ReferralSetStatsUpdated, vegaTime
101103
return &ReferralSetStats{
102104
SetID: ReferralSetID(proto.SetId),
103105
AtEpoch: proto.AtEpoch,
106+
WasEligible: proto.WasEligible,
104107
ReferralSetRunningNotionalTakerVolume: proto.ReferralSetRunningNotionalTakerVolume,
105108
RefereesStats: proto.RefereesStats,
106109
VegaTime: vegaTime,

datanode/gateway/graphql/generated.go

Lines changed: 61 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

datanode/gateway/graphql/schema.graphql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6263,6 +6263,8 @@ type ReferralSetStats {
62636263
atEpoch: Int!
62646264
"Unique ID of the party."
62656265
partyId: ID!
6266+
"Indicates if the referral set was eligible to be part of the referral program."
6267+
wasEligible: Boolean!
62666268
"Discount factor applied to the party."
62676269
discountFactor: String!
62686270
"Reward factor applied to the party."

datanode/networkhistory/service_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -378,12 +378,12 @@ func TestMain(t *testing.M) {
378378
log.Infof("%s", goldenSourceHistorySegment[4000].HistorySegmentID)
379379
log.Infof("%s", goldenSourceHistorySegment[5000].HistorySegmentID)
380380

381-
panicIfHistorySegmentIdsNotEqual(goldenSourceHistorySegment[1000].HistorySegmentID, "Qmcyd8VNRocb7aCHSdXwabeDVyjEza6NAKArFUpGe3oxtC", snapshots)
382-
panicIfHistorySegmentIdsNotEqual(goldenSourceHistorySegment[2000].HistorySegmentID, "QmUA739DDcNe6UhkBq7RHUaBVyiWhQUUGXbXKPpawL99mV", snapshots)
383-
panicIfHistorySegmentIdsNotEqual(goldenSourceHistorySegment[2500].HistorySegmentID, "QmcLbP6zGTssWkbhRg7x9Y45YH2tDumWdNcJNuAuTZHiEj", snapshots)
384-
panicIfHistorySegmentIdsNotEqual(goldenSourceHistorySegment[3000].HistorySegmentID, "QmPK3qsQGCYRBZDr7mCfs5sZapdoJCyTVXAXwiE8w8gtqn", snapshots)
385-
panicIfHistorySegmentIdsNotEqual(goldenSourceHistorySegment[4000].HistorySegmentID, "QmTfFnGwqhWTqbLrNcQ7t2GbkRfLgLcPuggvCHXQKG6sue", snapshots)
386-
panicIfHistorySegmentIdsNotEqual(goldenSourceHistorySegment[5000].HistorySegmentID, "QmUpQLtvCDayeuUa8DckieNGrMw9UMV5UZh3jPfFXSBn44", snapshots)
381+
panicIfHistorySegmentIdsNotEqual(goldenSourceHistorySegment[1000].HistorySegmentID, "QmScxLQqSrx25i5KZjeVcfEcKuRfZnYwX5HsWL18mt66Qz", snapshots)
382+
panicIfHistorySegmentIdsNotEqual(goldenSourceHistorySegment[2000].HistorySegmentID, "QmSha1TtcRyCwXocA1rBSm5khb9wRxf4k8pF1idEKmAyAx", snapshots)
383+
panicIfHistorySegmentIdsNotEqual(goldenSourceHistorySegment[2500].HistorySegmentID, "QmQhLCf3HCksaEHaB1Wwe6jGa5xNgnx3rDgaZq5p4RdNUS", snapshots)
384+
panicIfHistorySegmentIdsNotEqual(goldenSourceHistorySegment[3000].HistorySegmentID, "QmQhGyknJuQzJZkde6XTR93n1wvQKvBXEHbTTFxtkrLNWH", snapshots)
385+
panicIfHistorySegmentIdsNotEqual(goldenSourceHistorySegment[4000].HistorySegmentID, "QmWBhoG6Dp22MmZWHw8ULygciDxD2Xb9bm25LujQos7a8U", snapshots)
386+
panicIfHistorySegmentIdsNotEqual(goldenSourceHistorySegment[5000].HistorySegmentID, "QmfVXXqPn7yhLfPLjjJecsZ17d5DSyuXuyimLpy9dsERBu", snapshots)
387387
}, postgresRuntimePath, sqlFs)
388388

389389
if exitCode != 0 {

datanode/sqlstore/migrations/0046_additional_referral_set_stats.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,16 @@ alter table referral_set_stats
55
alter table referral_set_stats
66
add column rewards_factor_multiplier text not null default '0';
77

8+
alter table referral_set_stats
9+
add column was_eligible bool not null default true;
10+
811
-- +goose Down
912

1013
alter table referral_set_stats
1114
drop column rewards_multiplier;
1215

1316
alter table referral_set_stats
1417
drop column rewards_factor_multiplier;
18+
19+
alter table referral_set_stats
20+
drop column was_eligible;

datanode/sqlstore/referral_sets.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,20 @@ func (rs *ReferralSets) AddReferralSetStats(ctx context.Context, stats *entities
140140

141141
_, err := rs.Connection.Exec(
142142
ctx,
143-
`INSERT INTO referral_set_stats(set_id, at_epoch, referral_set_running_notional_taker_volume, referees_stats, vega_time, reward_factor,
144-
rewards_multiplier, rewards_factor_multiplier)
145-
values ($1, $2, $3, $4, $5, $6, $7, $8)`,
143+
`INSERT INTO referral_set_stats(
144+
set_id,
145+
at_epoch,
146+
was_eligible,
147+
referral_set_running_notional_taker_volume,
148+
referees_stats,
149+
vega_time,
150+
reward_factor,
151+
rewards_multiplier,
152+
rewards_factor_multiplier)
153+
values ($1, $2, $3, $4, $5, $6, $7, $8, $9)`,
146154
stats.SetID,
147155
stats.AtEpoch,
156+
stats.WasEligible,
148157
stats.ReferralSetRunningNotionalTakerVolume,
149158
refereesStats,
150159
stats.VegaTime,
@@ -166,6 +175,7 @@ func (rs *ReferralSets) GetReferralSetStats(ctx context.Context, setID *entities
166175

167176
query = `SELECT set_id,
168177
at_epoch,
178+
was_eligible,
169179
vega_time,
170180
referral_set_running_notional_taker_volume,
171181
reward_factor,

0 commit comments

Comments
 (0)