github.com/InjectiveLabs/sdk-go@v1.53.0/chain/exchange/types/trading_rewards.go (about) 1 package types 2 3 import ( 4 "sort" 5 6 "cosmossdk.io/math" 7 ) 8 9 type TradingRewardPoints map[string]math.LegacyDec 10 11 func NewTradingRewardPoints() TradingRewardPoints { 12 tradingRewardPoints := make(TradingRewardPoints) 13 14 return tradingRewardPoints 15 } 16 17 func (l TradingRewardPoints) GetSortedAccountKeys() []string { 18 accountKeys := make([]string, 0, len(l)) 19 for k := range l { 20 accountKeys = append(accountKeys, k) 21 } 22 sort.Strings(accountKeys) 23 return accountKeys 24 } 25 26 func (l TradingRewardPoints) AddPointsForAddress(addr string, newPoints math.LegacyDec) { 27 if !newPoints.IsPositive() { 28 return 29 } 30 v, found := l[addr] 31 if !found { 32 l[addr] = newPoints 33 } else { 34 l[addr] = v.Add(newPoints) 35 } 36 } 37 38 func (l *TradingRewardPoints) GetAllAccountAddresses() []string { 39 accountAddresses := make([]string, 0) 40 41 for k := range *l { 42 accountAddresses = append(accountAddresses, k) 43 } 44 45 return accountAddresses 46 } 47 48 func MergeTradingRewardPoints(m1, m2 TradingRewardPoints) TradingRewardPoints { 49 if len(m1) == 0 { 50 return m2 51 } else if len(m2) == 0 { 52 return m1 53 } 54 55 if len(m1) >= len(m2) { 56 for k, v := range m2 { 57 m1.AddPointsForAddress(k, v) 58 } 59 return m1 60 } else { 61 for k, v := range m1 { 62 m2.AddPointsForAddress(k, v) 63 } 64 return m2 65 } 66 67 }