func NewMerklePath(keyPath ...string) MerklePath {
	return MerklePath{
		KeyPath: keyPath,
	}
}
NewMerklePath creates a new MerklePath instance
The keys must be passed in from root-to-leaf order
package types
import (
	"bytes"
	"fmt"
	"net/url"
	ics23 "github.com/confio/ics23/go"
	"github.com/gogo/protobuf/proto"
	tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto"
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
	"github.com/bianjieai/tibc-go/modules/tibc/core/exported"
)
var sdkSpecs = []*ics23.ProofSpec{ics23.IavlSpec, ics23.TendermintSpec}
var _ exported.Root = (*MerkleRoot)(nil)
func GetSDKSpecs() []*ics23.ProofSpec {
	return sdkSpecs
}
func NewMerkleRoot(hash []byte) MerkleRoot {
	return MerkleRoot{
		Hash: hash,
	}
}
func (mr MerkleRoot) GetHash() []byte {
	return mr.Hash
}
func (mr MerkleRoot) Empty() bool {
	return len(mr.GetHash()) == 0
}
var _ exported.Prefix = (*MerklePrefix)(nil)
func NewMerklePrefix(keyPrefix []byte) MerklePrefix {
	return MerklePrefix{
		KeyPrefix: keyPrefix,
	}
}
func (mp MerklePrefix) Bytes() []byte {
	return mp.KeyPrefix
}
func (mp MerklePrefix) Empty() bool {
	return len(mp.Bytes()) == 0
}
var _ exported.Path = (*MerklePath)(nil)