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 }