-
Notifications
You must be signed in to change notification settings - Fork 12
/
poolstats.go
130 lines (106 loc) · 3.86 KB
/
poolstats.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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package model
import (
"io"
"github.com/iotaledger/hive.go/ierrors"
"github.com/iotaledger/hive.go/serializer/v2/stream"
"github.com/iotaledger/hive.go/stringify"
iotago "github.com/iotaledger/iota.go/v4"
)
// PoolsStats contains stats about the pools from all the validators for an epoch.
type PoolsStats struct {
TotalStake iotago.BaseToken
TotalValidatorStake iotago.BaseToken
ProfitMargin uint64
}
func PoolStatsFromReader(reader io.ReadSeeker) (*PoolsStats, error) {
p := new(PoolsStats)
var err error
if p.TotalStake, err = stream.Read[iotago.BaseToken](reader); err != nil {
return nil, ierrors.Wrap(err, "failed to read TotalStake")
}
if p.TotalValidatorStake, err = stream.Read[iotago.BaseToken](reader); err != nil {
return nil, ierrors.Wrap(err, "failed to read TotalValidatorStake")
}
if p.ProfitMargin, err = stream.Read[uint64](reader); err != nil {
return nil, ierrors.Wrap(err, "failed to read ProfitMargin")
}
return p, nil
}
func PoolsStatsFromBytes(bytes []byte) (*PoolsStats, int, error) {
byteReader := stream.NewByteReader(bytes)
p, err := PoolStatsFromReader(byteReader)
if err != nil {
return nil, 0, ierrors.Wrap(err, "failed to parse PoolStats")
}
return p, byteReader.BytesRead(), nil
}
func (p *PoolsStats) Bytes() ([]byte, error) {
byteBuffer := stream.NewByteBuffer()
if err := stream.Write(byteBuffer, p.TotalStake); err != nil {
return nil, ierrors.Wrap(err, "failed to write TotalStake")
}
if err := stream.Write(byteBuffer, p.TotalValidatorStake); err != nil {
return nil, ierrors.Wrap(err, "failed to write TotalValidatorStake")
}
if err := stream.Write(byteBuffer, p.ProfitMargin); err != nil {
return nil, ierrors.Wrap(err, "failed to write ProfitMargin")
}
return byteBuffer.Bytes()
}
func (p *PoolsStats) String() string {
return stringify.Struct("PoolsStats",
stringify.NewStructField("TotalStake", uint64(p.TotalStake)),
stringify.NewStructField("TotalValidatorStake", uint64(p.TotalValidatorStake)),
stringify.NewStructField("ProfitMargin", p.ProfitMargin),
)
}
type PoolRewards struct {
// Total stake of the validator including delegations
PoolStake iotago.BaseToken
// Rewards normalized by performance factor
PoolRewards iotago.Mana
// What the validator charges for its staking duties
FixedCost iotago.Mana
}
func PoolRewardsFromReader(reader io.ReadSeeker) (*PoolRewards, error) {
var err error
p := new(PoolRewards)
if p.PoolStake, err = stream.Read[iotago.BaseToken](reader); err != nil {
return nil, ierrors.Wrap(err, "failed to read PoolStake")
}
if p.PoolRewards, err = stream.Read[iotago.Mana](reader); err != nil {
return nil, ierrors.Wrap(err, "failed to read PoolRewards")
}
if p.FixedCost, err = stream.Read[iotago.Mana](reader); err != nil {
return nil, ierrors.Wrap(err, "failed to read FixedCost")
}
return p, nil
}
func PoolRewardsFromBytes(bytes []byte) (*PoolRewards, int, error) {
byteReader := stream.NewByteReader(bytes)
p, err := PoolRewardsFromReader(byteReader)
if err != nil {
return nil, 0, ierrors.Wrap(err, "failed to parse PoolRewards")
}
return p, byteReader.BytesRead(), nil
}
func (p *PoolRewards) Bytes() ([]byte, error) {
byteBuffer := stream.NewByteBuffer()
if err := stream.Write(byteBuffer, p.PoolStake); err != nil {
return nil, ierrors.Wrap(err, "failed to write PoolStake")
}
if err := stream.Write(byteBuffer, p.PoolRewards); err != nil {
return nil, ierrors.Wrap(err, "failed to write PoolRewards")
}
if err := stream.Write(byteBuffer, p.FixedCost); err != nil {
return nil, ierrors.Wrap(err, "failed to write FixedCost")
}
return byteBuffer.Bytes()
}
func (p *PoolRewards) String() string {
return stringify.Struct("PoolRewards",
stringify.NewStructField("PoolStake", uint64(p.PoolStake)),
stringify.NewStructField("PoolRewards", uint64(p.PoolRewards)),
stringify.NewStructField("FixedCost", uint64(p.FixedCost)),
)
}