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  }