mpc

package
v0.3.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 12, 2025 License: Apache-2.0 Imports: 33 Imported by: 0

Documentation

Index

Constants

View Source
const (
	KEYGEN1               = "KGRound1Message"
	KEYGEN2aUnicast       = "KGRound2Message1"
	KEYGEN2b              = "KGRound2Message2"
	KEYGEN3               = "KGRound3Message"
	KEYSIGN1aUnicast      = "SignRound1Message1"
	KEYSIGN1b             = "SignRound1Message2"
	KEYSIGN2Unicast       = "SignRound2Message"
	KEYSIGN3              = "SignRound3Message"
	KEYSIGN4              = "SignRound4Message"
	KEYSIGN5              = "SignRound5Message"
	KEYSIGN6              = "SignRound6Message"
	KEYSIGN7              = "SignRound7Message"
	KEYSIGN8              = "SignRound8Message"
	KEYSIGN9              = "SignRound9Message"
	KEYRESHARING1Unicast  = "DGRound1Message"
	KEYRESHARING2aUnicast = "DGRound2Message1"
	KEYRESHARING2bUnicast = "DGRound2Message2"
	KEYRESHARING3aUnicast = "DGRound3Message1"
	KEYRESHARING3b        = "DGRound3Message2"
	KEYRESHARING4a        = "DGRound4Message1"
	KEYRESHARING4bUnicast = "DGRound4Message2"

	TSSKEYGENROUNDS  = 4
	TSSKEYSIGNROUNDS = 10
)
View Source
const (
	EDDSA_KEYGEN1            = "KGRound1Message"
	EDDSA_KEYGEN2aUnicast    = "KGRound2Message1"
	EDDSA_KEYGEN2b           = "KGRound2Message2"
	EDDSA_KEYSIGN1           = "SignRound1Message"
	EDDSA_KEYSIGN2           = "SignRound2Message"
	EDDSA_KEYSIGN3           = "SignRound3Message"
	EDDSA_RESHARING1         = "DGRound1Message"
	EDDSA_RESHARING2         = "DGRound2Message"
	EDDSA_RESHARING3aUnicast = "DGRound3Message1"
	EDDSA_RESHARING3bUnicast = "DGRound3Message2"
	EDDSA_RESHARING4         = "DGRound4Message"

	EDDSA_TSSKEYGENROUNDS  = 3
	EDDSA_TSSKEYSIGNROUNDS = 3
	EDDSA_RESHARINGROUNDS  = 4
)
View Source
const (
	PurposeKeygen  string = "keygen"
	PurposeSign    string = "sign"
	PurposeReshare string = "reshare"

	BackwardCompatibleVersion int = 0
	DefaultVersion            int = 1
)
View Source
const (
	TypeGenerateWalletResultFmt = "mpc.mpc_keygen_result.%s"
	TypeReshareWalletResultFmt  = "mpc.mpc_reshare_result.%s"
	TypeSigningResultFmt        = "mpc.mpc_signing_result.%s"

	SessionTypeECDSA SessionType = "session_ecdsa"
	SessionTypeEDDSA SessionType = "session_eddsa"
)
View Source
const (
	ReadinessCheckPeriod = 1 * time.Second
)

Variables

View Source
var (
	ErrNotEnoughParticipants = errors.New("Not enough participants to sign")
	ErrNotInParticipantList  = errors.New("Node is not in the participant list")
)

Functions

func ComparePartyIDs

func ComparePartyIDs(x, y *tss.PartyID) bool

func ComposeReadyKey

func ComposeReadyKey(nodeID string) string

func IsReshareRound added in v0.3.0

func IsReshareRound(roundMsg string) bool

func NewECDSAReshareSession added in v0.3.0

func NewECDSAReshareSession(
	walletID string,
	pubSub messaging.PubSub,
	direct messaging.DirectMessaging,
	participantPeerIDs []string,
	selfID *tss.PartyID,
	oldPartyIDs []*tss.PartyID,
	newPartyIDs []*tss.PartyID,
	threshold int,
	newThreshold int,
	preParams *keygen.LocalPreParams,
	kvstore kvstore.KVStore,
	keyinfoStore keyinfo.Store,
	resultQueue messaging.MessageQueue,
	identityStore identity.Store,
	newPeerIDs []string,
	isNewParty bool,
	version int,
) *ecdsaReshareSession

func NewEDDSAReshareSession added in v0.3.0

func NewEDDSAReshareSession(
	walletID string,
	pubSub messaging.PubSub,
	direct messaging.DirectMessaging,
	participantPeerIDs []string,
	selfID *tss.PartyID,
	oldPartyIDs []*tss.PartyID,
	newPartyIDs []*tss.PartyID,
	threshold int,
	newThreshold int,
	kvstore kvstore.KVStore,
	keyinfoStore keyinfo.Store,
	resultQueue messaging.MessageQueue,
	identityStore identity.Store,
	newPeerIDs []string,
	isNewParty bool,
	version int,
) *eddsaReshareSession

func NewRegistry

func NewRegistry(
	nodeID string,
	peerNodeIDs []string,
	consulKV infra.ConsulKV,
) *registry

func PartyIDToRoutingDest added in v0.3.0

func PartyIDToRoutingDest(partyID *tss.PartyID) string

Types

type GetRoundFunc

type GetRoundFunc func(msg []byte, partyID *tss.PartyID, isBroadcast bool) (RoundInfo, error)

type ID

type ID string

type KeyComposerFn

type KeyComposerFn func(id string) string

type KeyGenSession added in v0.3.0

type KeyGenSession interface {
	Session

	Init()
	GenerateKey(done func())
	GetPubKeyResult() []byte
}

type KeyType

type KeyType string
const (
	KeyTypeSecp256k1 KeyType = "secp256k1"
	KeyTypeEd25519   KeyType = "ed25519"
)

type Node

type Node struct {
	// contains filtered or unexported fields
}

func NewNode

func NewNode(
	nodeID string,
	peerIDs []string,
	pubSub messaging.PubSub,
	direct messaging.DirectMessaging,
	kvstore kvstore.KVStore,
	keyinfoStore keyinfo.Store,
	peerRegistry PeerRegistry,
	identityStore identity.Store,
) *Node

func (*Node) Close

func (p *Node) Close()

func (*Node) CreateKeyGenSession

func (p *Node) CreateKeyGenSession(
	sessionType SessionType,
	walletID string,
	threshold int,
	resultQueue messaging.MessageQueue,
) (KeyGenSession, error)

func (*Node) CreateReshareSession added in v0.3.0

func (p *Node) CreateReshareSession(
	sessionType SessionType,
	walletID string,
	newThreshold int,
	newPeerIDs []string,
	isNewPeer bool,
	resultQueue messaging.MessageQueue,
) (ReshareSession, error)

func (*Node) CreateSigningSession

func (p *Node) CreateSigningSession(
	sessionType SessionType,
	walletID string,
	txID string,
	networkInternalCode string,
	resultQueue messaging.MessageQueue,
	idempotentKey string,
) (SigningSession, error)

func (*Node) ID

func (p *Node) ID() string

type PeerRegistry

type PeerRegistry interface {
	Ready() error
	ArePeersReady() bool
	WatchPeersReady()
	// Resign is called by the node when it is going to shutdown
	Resign() error
	GetReadyPeersCount() int64
	GetReadyPeersIncludeSelf() []string // get ready peers include self
	GetTotalPeersCount() int64
}

type ReshareSession added in v0.3.0

type ReshareSession interface {
	Session
	Init() error
	Reshare(done func())
	GetPubKeyResult() []byte
}

type RoundInfo

type RoundInfo struct {
	Index         int
	RoundMsg      string
	MsgIdentifier string
}

func GetEcdsaMsgRound

func GetEcdsaMsgRound(msg []byte, partyID *tss.PartyID, isBroadcast bool) (RoundInfo, error)

func GetEddsaMsgRound

func GetEddsaMsgRound(msg []byte, partyID *tss.PartyID, isBroadcast bool) (RoundInfo, error)

type Session

type Session interface {
	ListenToIncomingMessageAsync()
	ErrChan() <-chan error
}

type SessionType

type SessionType string

type SigningSession

type SigningSession interface {
	Session

	Init(tx *big.Int) error
	Sign(onSuccess func(data []byte))
}

type TopicComposer

type TopicComposer struct {
	ComposeBroadcastTopic func() string
	ComposeDirectTopic    func(nodeID string) string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL