func MultisigAccountWithParams(version uint8, threshold uint8, addrs []types.Address) (ma MultisigAccount, err error) {
	ma.Version = version
	ma.Threshold = threshold
	ma.Pks = make([]ed25519.PublicKey, len(addrs))
	for i := 0; i < len(addrs); i++ {
		ma.Pks[i] = addrs[i][:]
	}
	err = ma.Validate()
	return
}
MultisigAccountWithParams creates a MultisigAccount with the given parameters
package crypto
import (
	"crypto/sha512"
	"errors"
	"fmt"
	"golang.org/x/crypto/ed25519"
	"github.com/algorand/go-algorand-sdk/types"
)
const msigAddrPrefix = "MultisigAddr"
type Account struct {
	PublicKey  ed25519.PublicKey
	PrivateKey ed25519.PrivateKey
	Address    types.Address
}
func init() {
	addrLen := len(types.Address{})
	pkLen := ed25519.PublicKeySize
	if addrLen != pkLen {
		panic("address and public key are different sizes")
	}
}
func GenerateAccount() (kp Account) {
	pk, sk, err := ed25519.GenerateKey(nil)
	if err != nil {
		panic(err)
	}
	var a types.Address
	n := copy(a[:], pk)
	if n != ed25519.PublicKeySize {
		panic("generated public key is the wrong size")
	}
	kp.PublicKey = pk
	kp.PrivateKey = sk
	kp.Address = a
	return
}
func AccountFromPrivateKey(sk ed25519.PrivateKey) (account Account, err error) {
	if len(sk) != ed25519.PrivateKeySize {
		err = errInvalidPrivateKey
		return
	}
	account.PrivateKey = make(ed25519.PrivateKey, len(sk))
	copy(account.PrivateKey, sk)
	account.PublicKey = sk.Public().(ed25519.PublicKey)
	if len(account.PublicKey) != ed25519.PublicKeySize {
		err = errors.New("generated public key is the wrong size")
		return
	}
	copy(account.Address[:], account.PublicKey)
	return
}
type MultisigAccount struct {
	Version uint8
	Threshold uint8
	Pks []ed25519.PublicKey
}