github.com/Finschia/finschia-sdk@v0.48.1/x/authz/keeper/keys.go (about) 1 package keeper 2 3 import ( 4 "github.com/Finschia/finschia-sdk/internal/conv" 5 sdk "github.com/Finschia/finschia-sdk/types" 6 "github.com/Finschia/finschia-sdk/types/address" 7 "github.com/Finschia/finschia-sdk/types/kv" 8 "github.com/Finschia/finschia-sdk/x/authz" 9 ) 10 11 // Keys for store prefixes 12 var ( 13 GrantKey = []byte{0x01} // prefix for each key 14 ) 15 16 // StoreKey is the store key string for authz 17 const StoreKey = authz.ModuleName 18 19 // grantStoreKey - return authorization store key 20 // Items are stored with the following key: values 21 // 22 // - 0x01<granterAddressLen (1 Byte)><granterAddress_Bytes><granteeAddressLen (1 Byte)><granteeAddress_Bytes><msgType_Bytes>: Grant 23 func grantStoreKey(grantee sdk.AccAddress, granter sdk.AccAddress, msgType string) []byte { 24 m := conv.UnsafeStrToBytes(msgType) 25 granter = address.MustLengthPrefix(granter) 26 grantee = address.MustLengthPrefix(grantee) 27 28 l := 1 + len(grantee) + len(granter) + len(m) 29 key := make([]byte, l) 30 copy(key, GrantKey) 31 copy(key[1:], granter) 32 copy(key[1+len(granter):], grantee) 33 copy(key[l-len(m):], m) 34 // fmt.Println(">>>> len", l, key) 35 return key 36 } 37 38 // addressesFromGrantStoreKey - split granter & grantee address from the authorization key 39 func addressesFromGrantStoreKey(key []byte) (granterAddr, granteeAddr sdk.AccAddress) { 40 // key is of format: 41 // 0x01<granterAddressLen (1 Byte)><granterAddress_Bytes><granteeAddressLen (1 Byte)><granteeAddress_Bytes><msgType_Bytes> 42 kv.AssertKeyAtLeastLength(key, 2) 43 granterAddrLen := key[1] // remove prefix key 44 kv.AssertKeyAtLeastLength(key, int(3+granterAddrLen)) 45 granterAddr = sdk.AccAddress(key[2 : 2+granterAddrLen]) 46 granteeAddrLen := int(key[2+granterAddrLen]) 47 kv.AssertKeyAtLeastLength(key, 4+int(granterAddrLen+byte(granteeAddrLen))) 48 granteeAddr = sdk.AccAddress(key[3+granterAddrLen : 3+granterAddrLen+byte(granteeAddrLen)]) 49 50 return granterAddr, granteeAddr 51 } 52 53 // firstAddressFromGrantStoreKey parses the first address only 54 func firstAddressFromGrantStoreKey(key []byte) sdk.AccAddress { 55 addrLen := key[0] 56 return sdk.AccAddress(key[1 : 1+addrLen]) 57 }