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 }