code.vegaprotocol.io/vega@v0.79.0/core/events/referral_set.go (about) 1 // Copyright (C) 2023 Gobalsky Labs Limited 2 // 3 // This program is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU Affero General Public License as 5 // published by the Free Software Foundation, either version 3 of the 6 // License, or (at your option) any later version. 7 // 8 // This program is distributed in the hope that it will be useful, 9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 // GNU Affero General Public License for more details. 12 // 13 // You should have received a copy of the GNU Affero General Public License 14 // along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16 package events 17 18 import ( 19 "context" 20 "strings" 21 22 "code.vegaprotocol.io/vega/core/types" 23 "code.vegaprotocol.io/vega/libs/num" 24 eventspb "code.vegaprotocol.io/vega/protos/vega/events/v1" 25 26 "golang.org/x/exp/slices" 27 ) 28 29 type ReferralSetCreated struct { 30 *Base 31 e eventspb.ReferralSetCreated 32 } 33 34 func (t ReferralSetCreated) StreamMessage() *eventspb.BusEvent { 35 busEvent := newBusEventFromBase(t.Base) 36 busEvent.Event = &eventspb.BusEvent_ReferralSetCreated{ 37 ReferralSetCreated: &t.e, 38 } 39 40 return busEvent 41 } 42 43 func (t ReferralSetCreated) GetProtoEvent() *eventspb.ReferralSetCreated { 44 return &t.e 45 } 46 47 func NewReferralSetCreatedEvent(ctx context.Context, set *types.ReferralSet) *ReferralSetCreated { 48 return &ReferralSetCreated{ 49 Base: newBase(ctx, ReferralSetCreatedEvent), 50 e: eventspb.ReferralSetCreated{ 51 SetId: string(set.ID), 52 Referrer: string(set.Referrer.PartyID), 53 CreatedAt: set.CreatedAt.UnixNano(), 54 UpdatedAt: set.CreatedAt.UnixNano(), 55 }, 56 } 57 } 58 59 func ReferralSetCreatedEventFromStream(ctx context.Context, be *eventspb.BusEvent) *ReferralSetCreated { 60 return &ReferralSetCreated{ 61 Base: newBaseFromBusEvent(ctx, ReferralSetCreatedEvent, be), 62 e: *be.GetReferralSetCreated(), 63 } 64 } 65 66 type ReferralSetStatsUpdated struct { 67 *Base 68 e eventspb.ReferralSetStatsUpdated 69 } 70 71 func (t ReferralSetStatsUpdated) Unwrap() *types.ReferralSetStats { 72 volume, _ := num.UintFromString(t.e.ReferralSetRunningNotionalTakerVolume, 10) 73 stats := map[types.PartyID]*types.RefereeStats{} 74 rewardsMultiplier, _ := num.DecimalFromString(t.e.RewardsMultiplier) 75 rewardsFactorsMultiplier := types.FactorsFromRewardFactorsWithDefault(t.e.RewardFactorsMultiplier, t.e.RewardsFactorMultiplier) 76 rewardFactors := types.FactorsFromRewardFactorsWithDefault(t.e.RewardFactors, t.e.RewardFactor) 77 for _, stat := range t.e.RefereesStats { 78 discountFactors := types.FactorsFromDiscountFactorsWithDefault(stat.DiscountFactors, stat.DiscountFactor) 79 stats[types.PartyID(stat.PartyId)] = &types.RefereeStats{ 80 DiscountFactors: discountFactors, 81 } 82 } 83 84 return &types.ReferralSetStats{ 85 AtEpoch: t.e.AtEpoch, 86 SetID: types.ReferralSetID(t.e.SetId), 87 WasEligible: t.e.WasEligible, 88 ReferralSetRunningVolume: volume, 89 RefereesStats: stats, 90 RewardFactors: rewardFactors, 91 RewardsMultiplier: rewardsMultiplier, 92 RewardsFactorsMultiplier: rewardsFactorsMultiplier, 93 } 94 } 95 96 func (t ReferralSetStatsUpdated) GetProtoEvent() *eventspb.ReferralSetStatsUpdated { 97 return &t.e 98 } 99 100 func (t ReferralSetStatsUpdated) StreamMessage() *eventspb.BusEvent { 101 busEvent := newBusEventFromBase(t.Base) 102 busEvent.Event = &eventspb.BusEvent_ReferralSetStatsUpdated{ 103 ReferralSetStatsUpdated: &t.e, 104 } 105 106 return busEvent 107 } 108 109 func NewReferralSetStatsUpdatedEvent(ctx context.Context, update *types.ReferralSetStats) *ReferralSetStatsUpdated { 110 refereesStats := make([]*eventspb.RefereeStats, 0, len(update.RefereesStats)) 111 for partyID, stat := range update.RefereesStats { 112 refereesStats = append(refereesStats, &eventspb.RefereeStats{ 113 PartyId: string(partyID), 114 DiscountFactors: stat.DiscountFactors.IntoDiscountFactorsProto(), 115 EpochNotionalTakerVolume: stat.TakerVolume.String(), 116 }) 117 } 118 119 slices.SortStableFunc(refereesStats, func(a, b *eventspb.RefereeStats) int { 120 return strings.Compare(a.PartyId, b.PartyId) 121 }) 122 123 return &ReferralSetStatsUpdated{ 124 Base: newBase(ctx, ReferralSetStatsUpdatedEvent), 125 e: eventspb.ReferralSetStatsUpdated{ 126 SetId: string(update.SetID), 127 AtEpoch: update.AtEpoch, 128 WasEligible: update.WasEligible, 129 ReferralSetRunningNotionalTakerVolume: update.ReferralSetRunningVolume.String(), 130 ReferrerTakerVolume: update.ReferrerTakerVolume.String(), 131 RefereesStats: refereesStats, 132 RewardFactors: update.RewardFactors.IntoRewardFactorsProto(), 133 RewardsMultiplier: update.RewardsMultiplier.String(), 134 RewardFactorsMultiplier: update.RewardsFactorsMultiplier.IntoRewardFactorsProto(), 135 }, 136 } 137 } 138 139 func ReferralSetStatsUpdatedEventFromStream(ctx context.Context, be *eventspb.BusEvent) *ReferralSetStatsUpdated { 140 return &ReferralSetStatsUpdated{ 141 Base: newBaseFromBusEvent(ctx, ReferralSetStatsUpdatedEvent, be), 142 e: *be.GetReferralSetStatsUpdated(), 143 } 144 } 145 146 type RefereeJoinedReferralSet struct { 147 *Base 148 e eventspb.RefereeJoinedReferralSet 149 } 150 151 func (t RefereeJoinedReferralSet) StreamMessage() *eventspb.BusEvent { 152 busEvent := newBusEventFromBase(t.Base) 153 busEvent.Event = &eventspb.BusEvent_RefereeJoinedReferralSet{ 154 RefereeJoinedReferralSet: &t.e, 155 } 156 157 return busEvent 158 } 159 160 func (t RefereeJoinedReferralSet) GetProtoEvent() *eventspb.RefereeJoinedReferralSet { 161 return &t.e 162 } 163 164 func NewRefereeJoinedReferralSetEvent(ctx context.Context, setID types.ReferralSetID, membership *types.Membership) *RefereeJoinedReferralSet { 165 return &RefereeJoinedReferralSet{ 166 Base: newBase(ctx, RefereeJoinedReferralSetEvent), 167 e: eventspb.RefereeJoinedReferralSet{ 168 SetId: string(setID), 169 Referee: string(membership.PartyID), 170 JoinedAt: membership.JoinedAt.UnixNano(), 171 AtEpoch: membership.StartedAtEpoch, 172 }, 173 } 174 } 175 176 func RefereeJoinedReferralSetEventFromStream(ctx context.Context, be *eventspb.BusEvent) *RefereeJoinedReferralSet { 177 return &RefereeJoinedReferralSet{ 178 Base: newBaseFromBusEvent(ctx, RefereeJoinedReferralSetEvent, be), 179 e: *be.GetRefereeJoinedReferralSet(), 180 } 181 }