func (kcl Client) ExportMultisig(walletHandle, walletPassword, addr string) (resp ExportMultisigResponse, err error) {
	req := ExportMultisigRequest{
		WalletHandleToken: walletHandle,
		WalletPassword:    walletPassword,
		Address:           addr,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
ExportMultisig accepts a wallet handle, wallet password, and multisig
address, and returns an ExportMultisigResponse containing the stored
multisig preimage. The preimage contains all of the information necessary
to derive the multisig address, including version, threshold, and a list of
public keys.
package kmd
import (
	"golang.org/x/crypto/ed25519"
	"github.com/algorand/go-algorand-sdk/encoding/msgpack"
	"github.com/algorand/go-algorand-sdk/types"
)
func (kcl Client) Version() (resp VersionsResponse, err error) {
	req := VersionsRequest{}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) ListWallets() (resp ListWalletsResponse, err error) {
	req := ListWalletsRequest{}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) CreateWallet(walletName, walletPassword, walletDriverName string, walletMDK types.MasterDerivationKey) (resp CreateWalletResponse, err error) {
	req := CreateWalletRequest{
		WalletName:          walletName,
		WalletDriverName:    walletDriverName,
		WalletPassword:      walletPassword,
		MasterDerivationKey: walletMDK,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) InitWalletHandle(walletID, walletPassword string) (resp InitWalletHandleResponse, err error) {
	req := InitWalletHandleRequest{
		WalletID:       walletID,
		WalletPassword: walletPassword,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) ReleaseWalletHandle(walletHandle string) (resp ReleaseWalletHandleResponse, err error) {
	req := ReleaseWalletHandleRequest{
		WalletHandleToken: walletHandle,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) RenewWalletHandle(walletHandle string) (resp RenewWalletHandleResponse, err error) {
	req := RenewWalletHandleRequest{
		WalletHandleToken: walletHandle,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) RenameWallet(walletID, walletPassword, newWalletName string) (resp RenameWalletResponse, err error) {
	req := RenameWalletRequest{
		WalletID:       walletID,
		WalletPassword: walletPassword,
		NewWalletName:  newWalletName,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) GetWallet(walletHandle string) (resp GetWalletResponse, err error) {
	req := GetWalletRequest{
		WalletHandleToken: walletHandle,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) ExportMasterDerivationKey(walletHandle, walletPassword string) (resp ExportMasterDerivationKeyResponse, err error) {
	req := ExportMasterDerivationKeyRequest{
		WalletHandleToken: walletHandle,
		WalletPassword:    walletPassword,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) ImportKey(walletHandle string, secretKey ed25519.PrivateKey) (resp ImportKeyResponse, err error) {
	req := ImportKeyRequest{
		WalletHandleToken: walletHandle,
		PrivateKey:        secretKey,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) ExportKey(walletHandle, walletPassword, addr string) (resp ExportKeyResponse, err error) {
	req := ExportKeyRequest{
		WalletHandleToken: walletHandle,
		WalletPassword:    walletPassword,
		Address:           addr,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) GenerateKey(walletHandle string) (resp GenerateKeyResponse, err error) {
	req := GenerateKeyRequest{
		WalletHandleToken: walletHandle,
		DisplayMnemonic:   false,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) DeleteKey(walletHandle, walletPassword, addr string) (resp DeleteKeyResponse, err error) {
	req := DeleteKeyRequest{
		WalletHandleToken: walletHandle,
		WalletPassword:    walletPassword,
		Address:           addr,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) ListKeys(walletHandle string) (resp ListKeysResponse, err error) {
	req := ListKeysRequest{
		WalletHandleToken: walletHandle,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) SignTransactionWithSpecificPublicKey(walletHandle, walletPassword string, tx types.Transaction, pk ed25519.PublicKey) (resp SignTransactionResponse, err error) {
	txBytes := msgpack.Encode(tx)
	req := SignTransactionRequest{
		WalletHandleToken: walletHandle,
		WalletPassword:    walletPassword,
		Transaction:       txBytes,
		PublicKey:         pk,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) SignTransaction(walletHandle, walletPassword string, tx types.Transaction) (resp SignTransactionResponse, err error) {
	txBytes := msgpack.Encode(tx)
	req := SignTransactionRequest{
		WalletHandleToken: walletHandle,
		WalletPassword:    walletPassword,
		Transaction:       txBytes,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) ListMultisig(walletHandle string) (resp ListMultisigResponse, err error) {
	req := ListMultisigRequest{
		WalletHandleToken: walletHandle,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}
func (kcl Client) ImportMultisig(walletHandle string, version, threshold uint8, pks []ed25519.PublicKey) (resp ImportMultisigResponse, err error) {
	req := ImportMultisigRequest{
		WalletHandleToken: walletHandle,
		Version:           version,
		Threshold:         threshold,
		PKs:               pks,
	}
	err = kcl.DoV1Request(req, &resp)
	return
}