34 lines
800 B
Go
34 lines
800 B
Go
package address
|
|
|
|
import (
|
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
|
)
|
|
|
|
// MaxAddrLen is the maximum allowed length (in bytes) for an address.
|
|
const MaxAddrLen = 255
|
|
|
|
// LengthPrefix prefixes the address bytes with its length, this is used
|
|
// for example for variable-length components in store keys.
|
|
func LengthPrefix(bz []byte) ([]byte, error) {
|
|
bzLen := len(bz)
|
|
if bzLen == 0 {
|
|
return bz, nil
|
|
}
|
|
|
|
if bzLen > MaxAddrLen {
|
|
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownAddress, "address length should be max %d bytes, got %d", MaxAddrLen, bzLen)
|
|
}
|
|
|
|
return append([]byte{byte(bzLen)}, bz...), nil
|
|
}
|
|
|
|
// MustLengthPrefix is LengthPrefix with panic on error.
|
|
func MustLengthPrefix(bz []byte) []byte {
|
|
res, err := LengthPrefix(bz)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return res
|
|
}
|