github.com/cosmos/cosmos-sdk@v0.50.10/x/staking/migrations/v5/keys.go (about) 1 package v5 2 3 import ( 4 "bytes" 5 "encoding/binary" 6 "fmt" 7 8 sdk "github.com/cosmos/cosmos-sdk/types" 9 "github.com/cosmos/cosmos-sdk/types/address" 10 ) 11 12 const ( 13 // ModuleName is the name of the module 14 ModuleName = "staking" 15 ) 16 17 var ( 18 DelegationKey = []byte{0x31} // key for a delegation 19 HistoricalInfoKey = []byte{0x50} // prefix for the historical info 20 DelegationByValIndexKey = []byte{0x71} // key for delegations by a validator 21 ) 22 23 // ParseDelegationKey parses given key and returns delagator, validator address bytes 24 func ParseDelegationKey(bz []byte) (sdk.AccAddress, sdk.ValAddress, error) { 25 prefixLength := len(DelegationKey) 26 if prefix := bz[:prefixLength]; !bytes.Equal(prefix, DelegationKey) { 27 return nil, nil, fmt.Errorf("invalid prefix; expected: %X, got: %x", DelegationKey, prefix) 28 } 29 30 bz = bz[prefixLength:] // remove the prefix byte 31 if len(bz) == 0 { 32 return nil, nil, fmt.Errorf("no bytes left to parse: %X", bz) 33 } 34 35 delAddrLen := bz[0] 36 bz = bz[1:] // remove the length byte of delegator address. 37 if len(bz) == 0 { 38 return nil, nil, fmt.Errorf("no bytes left to parse delegator address: %X", bz) 39 } 40 41 del := bz[:int(delAddrLen)] 42 bz = bz[int(delAddrLen):] // remove the length byte of a delegator address 43 if len(bz) == 0 { 44 return nil, nil, fmt.Errorf("no bytes left to parse delegator address: %X", bz) 45 } 46 47 bz = bz[1:] // remove the validator address bytes. 48 if len(bz) == 0 { 49 return nil, nil, fmt.Errorf("no bytes left to parse validator address: %X", bz) 50 } 51 52 val := bz 53 54 return del, val, nil 55 } 56 57 // GetHistoricalInfoKey returns a key prefix for indexing HistoricalInfo objects. 58 func GetHistoricalInfoKey(height int64) []byte { 59 heightBytes := make([]byte, 8) 60 binary.BigEndian.PutUint64(heightBytes, uint64(height)) 61 return append(HistoricalInfoKey, heightBytes...) 62 } 63 64 // GetDelegationsByValPrefixKey builds a prefix key bytes with the given validator address bytes. 65 func GetDelegationsByValPrefixKey(valAddr sdk.ValAddress) []byte { 66 return append(DelegationByValIndexKey, address.MustLengthPrefix(valAddr)...) 67 } 68 69 // GetDelegationsByValKey creates the key for delegations by validator address 70 // VALUE: staking/Delegation 71 func GetDelegationsByValKey(valAddr sdk.ValAddress, delAddr sdk.AccAddress) []byte { 72 return append(GetDelegationsByValPrefixKey(valAddr), delAddr...) 73 }