github.com/Finschia/finschia-sdk@v0.48.1/x/distribution/legacy/v040/keys.go (about)

     1  // Package v040 is copy-pasted from:
     2  // https://github.com/cosmos/cosmos-sdk/blob/v0.41.0/x/distribution/types/keys.go
     3  package v040
     4  
     5  import (
     6  	"encoding/binary"
     7  
     8  	sdk "github.com/Finschia/finschia-sdk/types"
     9  	"github.com/Finschia/finschia-sdk/types/kv"
    10  	v040auth "github.com/Finschia/finschia-sdk/x/auth/legacy/v040"
    11  )
    12  
    13  const (
    14  	// ModuleName is the module name constant used in many places
    15  	ModuleName = "distribution"
    16  
    17  	// StoreKey is the store key string for distribution
    18  	StoreKey = ModuleName
    19  
    20  	// RouterKey is the message route for distribution
    21  	RouterKey = ModuleName
    22  
    23  	// QuerierRoute is the querier route for distribution
    24  	QuerierRoute = ModuleName
    25  )
    26  
    27  // Keys for distribution store
    28  // Items are stored with the following key: values
    29  //
    30  // - 0x00<proposalID_Bytes>: FeePol
    31  //
    32  // - 0x01: sdk.ConsAddress
    33  //
    34  // - 0x02<valAddr_Bytes>: ValidatorOutstandingRewards
    35  //
    36  // - 0x03<accAddr_Bytes>: sdk.AccAddress
    37  //
    38  // - 0x04<valAddr_Bytes><accAddr_Bytes>: DelegatorStartingInfo
    39  //
    40  // - 0x05<valAddr_Bytes><period_Bytes>: ValidatorHistoricalRewards
    41  //
    42  // - 0x06<valAddr_Bytes>: ValidatorCurrentRewards
    43  //
    44  // - 0x07<valAddr_Bytes>: ValidatorCurrentRewards
    45  //
    46  // - 0x08<valAddr_Bytes><height>: ValidatorSlashEvent
    47  var (
    48  	FeePoolKey                        = []byte{0x00} // key for global distribution state
    49  	ProposerKey                       = []byte{0x01} // key for the proposer operator address
    50  	ValidatorOutstandingRewardsPrefix = []byte{0x02} // key for outstanding rewards
    51  
    52  	DelegatorWithdrawAddrPrefix          = []byte{0x03} // key for delegator withdraw address
    53  	DelegatorStartingInfoPrefix          = []byte{0x04} // key for delegator starting info
    54  	ValidatorHistoricalRewardsPrefix     = []byte{0x05} // key for historical validators rewards / stake
    55  	ValidatorCurrentRewardsPrefix        = []byte{0x06} // key for current validator rewards
    56  	ValidatorAccumulatedCommissionPrefix = []byte{0x07} // key for accumulated validator commission
    57  	ValidatorSlashEventPrefix            = []byte{0x08} // key for validator slash fraction
    58  )
    59  
    60  // gets an address from a validator's outstanding rewards key
    61  func GetValidatorOutstandingRewardsAddress(key []byte) (valAddr sdk.ValAddress) {
    62  	kv.AssertKeyAtLeastLength(key, 2)
    63  	addr := key[1:]
    64  	kv.AssertKeyLength(addr, v040auth.AddrLen)
    65  	return sdk.ValAddress(addr)
    66  }
    67  
    68  // gets an address from a delegator's withdraw info key
    69  func GetDelegatorWithdrawInfoAddress(key []byte) (delAddr sdk.AccAddress) {
    70  	kv.AssertKeyAtLeastLength(key, 2)
    71  	addr := key[1:]
    72  	kv.AssertKeyLength(addr, v040auth.AddrLen)
    73  	return sdk.AccAddress(addr)
    74  }
    75  
    76  // gets the addresses from a delegator starting info key
    77  func GetDelegatorStartingInfoAddresses(key []byte) (valAddr sdk.ValAddress, delAddr sdk.AccAddress) {
    78  	kv.AssertKeyAtLeastLength(key, 2+v040auth.AddrLen)
    79  	addr := key[1 : 1+v040auth.AddrLen]
    80  	kv.AssertKeyLength(addr, v040auth.AddrLen)
    81  	valAddr = sdk.ValAddress(addr)
    82  	addr = key[1+v040auth.AddrLen:]
    83  	kv.AssertKeyLength(addr, v040auth.AddrLen)
    84  	delAddr = sdk.AccAddress(addr)
    85  	return
    86  }
    87  
    88  // gets the address & period from a validator's historical rewards key
    89  func GetValidatorHistoricalRewardsAddressPeriod(key []byte) (valAddr sdk.ValAddress, period uint64) {
    90  	kv.AssertKeyAtLeastLength(key, 2+v040auth.AddrLen)
    91  	addr := key[1 : 1+v040auth.AddrLen]
    92  	kv.AssertKeyLength(addr, v040auth.AddrLen)
    93  	valAddr = sdk.ValAddress(addr)
    94  	b := key[1+v040auth.AddrLen:]
    95  	kv.AssertKeyLength(addr, 8)
    96  	period = binary.LittleEndian.Uint64(b)
    97  	return
    98  }
    99  
   100  // gets the address from a validator's current rewards key
   101  func GetValidatorCurrentRewardsAddress(key []byte) (valAddr sdk.ValAddress) {
   102  	kv.AssertKeyAtLeastLength(key, 2)
   103  	addr := key[1:]
   104  	kv.AssertKeyLength(addr, v040auth.AddrLen)
   105  	return sdk.ValAddress(addr)
   106  }
   107  
   108  // gets the address from a validator's accumulated commission key
   109  func GetValidatorAccumulatedCommissionAddress(key []byte) (valAddr sdk.ValAddress) {
   110  	kv.AssertKeyAtLeastLength(key, 2)
   111  	addr := key[1:]
   112  	kv.AssertKeyLength(addr, v040auth.AddrLen)
   113  	return sdk.ValAddress(addr)
   114  }
   115  
   116  // gets the height from a validator's slash event key
   117  func GetValidatorSlashEventAddressHeight(key []byte) (valAddr sdk.ValAddress, height uint64) {
   118  	kv.AssertKeyAtLeastLength(key, 2+v040auth.AddrLen)
   119  	addr := key[1 : 1+v040auth.AddrLen]
   120  	kv.AssertKeyLength(addr, v040auth.AddrLen)
   121  	valAddr = sdk.ValAddress(addr)
   122  	startB := 1 + v040auth.AddrLen
   123  	kv.AssertKeyAtLeastLength(key, startB+9)
   124  	b := key[startB : startB+8] // the next 8 bytes represent the height
   125  	height = binary.BigEndian.Uint64(b)
   126  	return
   127  }
   128  
   129  // gets the outstanding rewards key for a validator
   130  func GetValidatorOutstandingRewardsKey(valAddr sdk.ValAddress) []byte {
   131  	return append(ValidatorOutstandingRewardsPrefix, valAddr.Bytes()...)
   132  }
   133  
   134  // gets the key for a delegator's withdraw addr
   135  func GetDelegatorWithdrawAddrKey(delAddr sdk.AccAddress) []byte {
   136  	return append(DelegatorWithdrawAddrPrefix, delAddr.Bytes()...)
   137  }
   138  
   139  // gets the key for a delegator's starting info
   140  func GetDelegatorStartingInfoKey(v sdk.ValAddress, d sdk.AccAddress) []byte {
   141  	return append(append(DelegatorStartingInfoPrefix, v.Bytes()...), d.Bytes()...)
   142  }
   143  
   144  // gets the prefix key for a validator's historical rewards
   145  func GetValidatorHistoricalRewardsPrefix(v sdk.ValAddress) []byte {
   146  	return append(ValidatorHistoricalRewardsPrefix, v.Bytes()...)
   147  }
   148  
   149  // gets the key for a validator's historical rewards
   150  func GetValidatorHistoricalRewardsKey(v sdk.ValAddress, k uint64) []byte {
   151  	b := make([]byte, 8)
   152  	binary.LittleEndian.PutUint64(b, k)
   153  	return append(append(ValidatorHistoricalRewardsPrefix, v.Bytes()...), b...)
   154  }
   155  
   156  // gets the key for a validator's current rewards
   157  func GetValidatorCurrentRewardsKey(v sdk.ValAddress) []byte {
   158  	return append(ValidatorCurrentRewardsPrefix, v.Bytes()...)
   159  }
   160  
   161  // gets the key for a validator's current commission
   162  func GetValidatorAccumulatedCommissionKey(v sdk.ValAddress) []byte {
   163  	return append(ValidatorAccumulatedCommissionPrefix, v.Bytes()...)
   164  }
   165  
   166  // gets the prefix key for a validator's slash fractions
   167  func GetValidatorSlashEventPrefix(v sdk.ValAddress) []byte {
   168  	return append(ValidatorSlashEventPrefix, v.Bytes()...)
   169  }
   170  
   171  // gets the prefix key for a validator's slash fraction (ValidatorSlashEventPrefix + height)
   172  func GetValidatorSlashEventKeyPrefix(v sdk.ValAddress, height uint64) []byte {
   173  	heightBz := make([]byte, 8)
   174  	binary.BigEndian.PutUint64(heightBz, height)
   175  	return append(
   176  		ValidatorSlashEventPrefix,
   177  		append(v.Bytes(), heightBz...)...,
   178  	)
   179  }
   180  
   181  // gets the key for a validator's slash fraction
   182  func GetValidatorSlashEventKey(v sdk.ValAddress, height, period uint64) []byte {
   183  	periodBz := make([]byte, 8)
   184  	binary.BigEndian.PutUint64(periodBz, period)
   185  	prefix := GetValidatorSlashEventKeyPrefix(v, height)
   186  	return append(prefix, periodBz...)
   187  }