-
Notifications
You must be signed in to change notification settings - Fork 22
/
referral_set_stats.go
116 lines (102 loc) · 3.98 KB
/
referral_set_stats.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package entities
import (
"fmt"
"time"
"code.vegaprotocol.io/vega/libs/num"
v2 "code.vegaprotocol.io/vega/protos/data-node/api/v2"
eventspb "code.vegaprotocol.io/vega/protos/vega/events/v1"
)
type (
ReferralSetStats struct {
SetID ReferralSetID
AtEpoch uint64
ReferralSetRunningNotionalTakerVolume num.Decimal
RefereesStats []*eventspb.RefereeStats
VegaTime time.Time
}
ReferralSetStatsCursor struct {
VegaTime time.Time
SetID ReferralSetID
AtEpoch uint64
}
ReferralSetRefereeStats struct {
SetID ReferralSetID
AtEpoch uint64
ReferralSetRunningNotionalTakerVolume num.Decimal
PartyID string
DiscountFactor string
RewardFactor string
VegaTime time.Time
}
ReferralFeeStats struct {
MarketID MarketID
AssetID AssetID
EpochSeq uint64
TotalRewardsPaid []*eventspb.PartyAmount
ReferrerRewardsGenerated []*eventspb.ReferrerRewardsGenerated
RefereesDiscountApplied []*eventspb.PartyAmount
VolumeDiscountApplied []*eventspb.PartyAmount
VegaTime time.Time
}
)
func ReferralSetStatsFromProto(proto *eventspb.ReferralSetStatsUpdated, vegaTime time.Time) (*ReferralSetStats, error) {
takerVolume, err := num.DecimalFromString(proto.GetReferralSetRunningNotionalTakerVolume())
if err != nil {
return nil, fmt.Errorf("Invalid Running Notional Taker Volume: %v", err)
}
return &ReferralSetStats{
SetID: ReferralSetID(proto.SetId),
AtEpoch: proto.AtEpoch,
ReferralSetRunningNotionalTakerVolume: takerVolume,
RefereesStats: proto.RefereesStats,
VegaTime: vegaTime,
}, nil
}
func (rss *ReferralSetStats) ToProto() *v2.ReferralSetStats {
if rss == nil {
return nil
}
return &v2.ReferralSetStats{
SetId: rss.SetID.String(),
AtEpoch: rss.AtEpoch,
ReferralSetRunningNotionalTakerVolume: rss.ReferralSetRunningNotionalTakerVolume.String(),
RefereesStats: rss.RefereesStats,
}
}
func (ref *ReferralSetRefereeStats) ToProto() *v2.ReferralSetStats {
stats := eventspb.RefereeStats{
PartyId: ref.PartyID,
DiscountFactor: ref.DiscountFactor,
RewardFactor: ref.RewardFactor,
EpochNotionalTakerVolume: ref.ReferralSetRunningNotionalTakerVolume.String(),
}
return &v2.ReferralSetStats{
SetId: ref.SetID.String(),
AtEpoch: ref.AtEpoch,
ReferralSetRunningNotionalTakerVolume: ref.ReferralSetRunningNotionalTakerVolume.String(),
RefereesStats: []*eventspb.RefereeStats{&stats},
}
}
func ReferralFeeStatsFromProto(proto *eventspb.FeeStats, vegaTime time.Time) *ReferralFeeStats {
return &ReferralFeeStats{
MarketID: MarketID(proto.Market),
AssetID: AssetID(proto.Asset),
EpochSeq: proto.EpochSeq,
TotalRewardsPaid: proto.TotalRewardsPaid,
ReferrerRewardsGenerated: proto.ReferrerRewardsGenerated,
RefereesDiscountApplied: proto.RefereesDiscountApplied,
VolumeDiscountApplied: proto.VolumeDiscountApplied,
VegaTime: vegaTime,
}
}
func (stats *ReferralFeeStats) ToProto() *eventspb.FeeStats {
return &eventspb.FeeStats{
Market: stats.MarketID.String(),
Asset: stats.AssetID.String(),
EpochSeq: stats.EpochSeq,
TotalRewardsPaid: stats.TotalRewardsPaid,
ReferrerRewardsGenerated: stats.ReferrerRewardsGenerated,
RefereesDiscountApplied: stats.RefereesDiscountApplied,
VolumeDiscountApplied: stats.VolumeDiscountApplied,
}
}