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  }