github.com/Finschia/finschia-sdk@v0.49.1/x/feegrant/key.go (about) 1 package feegrant 2 3 import ( 4 sdk "github.com/Finschia/finschia-sdk/types" 5 "github.com/Finschia/finschia-sdk/types/address" 6 "github.com/Finschia/finschia-sdk/types/kv" 7 ) 8 9 const ( 10 // ModuleName is the module name constant used in many places 11 ModuleName = "feegrant" 12 13 // StoreKey is the store key string for supply 14 StoreKey = ModuleName 15 16 // RouterKey is the message route for supply 17 RouterKey = ModuleName 18 19 // QuerierRoute is the querier route for supply 20 QuerierRoute = ModuleName 21 ) 22 23 // FeeAllowanceKeyPrefix is the set of the kvstore for fee allowance data 24 var FeeAllowanceKeyPrefix = []byte{0x00} 25 26 // FeeAllowanceKey is the canonical key to store a grant from granter to grantee 27 // We store by grantee first to allow searching by everyone who granted to you 28 func FeeAllowanceKey(granter, grantee sdk.AccAddress) []byte { 29 return append(FeeAllowancePrefixByGrantee(grantee), address.MustLengthPrefix(granter.Bytes())...) 30 } 31 32 // FeeAllowancePrefixByGrantee returns a prefix to scan for all grants to this given address. 33 func FeeAllowancePrefixByGrantee(grantee sdk.AccAddress) []byte { 34 return append(FeeAllowanceKeyPrefix, address.MustLengthPrefix(grantee.Bytes())...) 35 } 36 37 func ParseAddressesFromFeeAllowanceKey(key []byte) (granter, grantee sdk.AccAddress) { 38 // key is of format: 39 // 0x00<granteeAddressLen (1 Byte)><granteeAddress_Bytes><granterAddressLen (1 Byte)><granterAddress_Bytes><msgType_Bytes> 40 kv.AssertKeyAtLeastLength(key, 2) 41 granteeAddrLen := key[1] // remove prefix key 42 kv.AssertKeyAtLeastLength(key, int(2+granteeAddrLen)) 43 grantee = sdk.AccAddress(key[2 : 2+granteeAddrLen]) 44 granterAddrLen := int(key[2+granteeAddrLen]) 45 kv.AssertKeyAtLeastLength(key, 3+int(granteeAddrLen+byte(granterAddrLen))) 46 granter = sdk.AccAddress(key[3+granterAddrLen : 3+granteeAddrLen+byte(granterAddrLen)]) 47 48 return granter, grantee 49 }