lotus-sdk
Version:
Central repository for several classes of tools for integrating with, and building for, the Lotusia ecosystem
78 lines • 3.14 kB
TypeScript
import { PublicKey } from '../publickey.js';
import { PrivateKey } from '../privatekey.js';
import { Point, BN, Signature } from '../crypto/index.js';
import { type MuSigKeyAggContext, type MuSigNonce, type MuSigAggregatedNonce } from '../crypto/musig2.js';
export declare enum MuSigSessionPhase {
INIT = "init",
NONCE_EXCHANGE = "nonce-exchange",
PARTIAL_SIG_EXCHANGE = "partial-sig-exchange",
COMPLETE = "complete",
ABORTED = "aborted"
}
export interface SessionManagerResult {
shouldTransitionTo?: MuSigSessionPhase;
shouldRevealNonces?: boolean;
broadcastNonces?: [Point, Point];
shouldCreatePartialSig?: boolean;
shouldBroadcastPartialSig?: boolean;
broadcastPartialSig?: BN;
shouldFinalize?: boolean;
finalSignature?: Signature;
error?: string;
}
export interface MuSigSession {
sessionId: string;
signers: PublicKey[];
myIndex: number;
keyAggContext: MuSigKeyAggContext;
message: Buffer;
metadata?: Record<string, unknown>;
mySecretNonce?: MuSigNonce;
myPublicNonce?: [Point, Point];
receivedPublicNonces: Map<number, [Point, Point]>;
aggregatedNonce?: MuSigAggregatedNonce;
myPartialSig?: BN;
receivedPartialSigs: Map<number, BN>;
finalSignature?: Signature;
phase: MuSigSessionPhase;
createdAt: number;
updatedAt: number;
abortReason?: string;
electionMethod?: string;
coordinatorIndex?: number;
electionProof?: string;
backupCoordinators?: number[];
}
export declare class MuSigSessionManager {
createSession(signers: PublicKey[], myPrivateKey: PrivateKey, message: Buffer, metadata?: Record<string, unknown>): MuSigSession;
generateNonces(session: MuSigSession, privateKey: PrivateKey, extraInput?: Buffer): [Point, Point];
receiveNonces(session: MuSigSession, signerIndex: number, publicNonces: [Point, Point]): void;
createPartialSignature(session: MuSigSession, privateKey: PrivateKey): BN;
receivePartialSignature(session: MuSigSession, signerIndex: number, partialSig: BN): void;
getFinalSignature(session: MuSigSession): Signature;
abortSession(session: MuSigSession, reason: string): void;
getSessionStatus(session: MuSigSession): {
phase: MuSigSessionPhase;
noncesCollected: number;
noncesTotal: number;
partialSigsCollected: number;
partialSigsTotal: number;
isComplete: boolean;
isAborted: boolean;
abortReason?: string;
};
private _generateSessionId;
_transitionPhaseForTesting(session: MuSigSession, newPhase: MuSigSessionPhase): void;
private _aggregateNonces;
private _finalizeSignature;
private _clearSecretNonce;
private _abortSession;
hasAllNonces(session: MuSigSession): boolean;
hasAllPartialSignatures(session: MuSigSession): boolean;
isCoordinator(session: MuSigSession): boolean;
validateBIP327Compliance(session: MuSigSession): void;
private areKeysSorted;
private validateMuSig2Rounds;
initiateRound1(session: MuSigSession, privateKey: PrivateKey): SessionManagerResult;
}
//# sourceMappingURL=session.d.ts.map