github.com/Finschia/finschia-sdk@v0.48.1/types/address/store_key.go (about)

     1  package address
     2  
     3  import (
     4  	sdkerrors "github.com/Finschia/finschia-sdk/types/errors"
     5  )
     6  
     7  // MaxAddrLen is the maximum allowed length (in bytes) for an address.
     8  const MaxAddrLen = 255
     9  
    10  // LengthPrefix prefixes the address bytes with its length, this is used
    11  // for example for variable-length components in store keys.
    12  func LengthPrefix(bz []byte) ([]byte, error) {
    13  	bzLen := len(bz)
    14  	if bzLen == 0 {
    15  		return bz, nil
    16  	}
    17  
    18  	if bzLen > MaxAddrLen {
    19  		return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownAddress, "address length should be max %d bytes, got %d", MaxAddrLen, bzLen)
    20  	}
    21  
    22  	return append([]byte{byte(bzLen)}, bz...), nil
    23  }
    24  
    25  // MustLengthPrefix is LengthPrefix with panic on error.
    26  func MustLengthPrefix(bz []byte) []byte {
    27  	res, err := LengthPrefix(bz)
    28  	if err != nil {
    29  		panic(err)
    30  	}
    31  
    32  	return res
    33  }