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  }