From 542a4c6eca18a1d89bbcd4f00a3ff59e960835de Mon Sep 17 00:00:00 2001 From: Marzooqa Naeema Kather Date: Mon, 19 Oct 2026 13:20:38 +0530 Subject: [PATCH] feat(me): add multisigTypeVersion routing for EdDSA MPCv2 key gen Add multisigTypeVersion as an optional request parameter to the generate wallet route (MPCv1 or MPCv2, default MPCv1 for backward compatibility), and branch the keyGenCallbacks routing in handleGenerateWallet.ts: EdDSA coins with multisigTypeVersion MPCv2 route to the WCI-895 callback factory (eddsaMPCv2Callbacks), while EdDSA coins without the flag keep the existing MPCv1 path (eddsaCallbacks) unchanged. ECDSA and onchain paths are untouched. Ticket: WCI-918 --- .../handlers/handleGenerateWallet.ts | 11 +++++++++-- src/masterBitgoExpress/routers/generateWalletRoute.ts | 9 +++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/masterBitgoExpress/handlers/handleGenerateWallet.ts b/src/masterBitgoExpress/handlers/handleGenerateWallet.ts index c7dcfaaa..ed2981e7 100644 --- a/src/masterBitgoExpress/handlers/handleGenerateWallet.ts +++ b/src/masterBitgoExpress/handlers/handleGenerateWallet.ts @@ -8,6 +8,7 @@ import { submitJobViaBridgeClient } from './utils/asyncUtils'; import { createEcdsaMPCv2KeyGenCallbacks, createEddsaKeyGenCallbacks, + createEddsaMPCv2KeyGenCallbacks, createOnchainKeyGenCallback, } from './walletGenerationCallbacks'; @@ -69,7 +70,7 @@ function keyGenCallbacks( algorithm: MPCAlgorithm | undefined, ): Pick< GenerateWalletWithExternalSignerOptions, - 'createKeychainCallback' | 'ecdsaMPCv2Callbacks' | 'eddsaCallbacks' + 'createKeychainCallback' | 'ecdsaMPCv2Callbacks' | 'eddsaCallbacks' | 'eddsaMPCv2Callbacks' > { const { awmUserClient, awmBackupClient } = req; assert(awmUserClient, 'User AWM client not initialized'); @@ -84,8 +85,14 @@ function keyGenCallbacks( return { ecdsaMPCv2Callbacks: createEcdsaMPCv2KeyGenCallbacks(awmUserClient, awmBackupClient), }; - case 'eddsa': + case 'eddsa': { + if (req.decoded.multisigTypeVersion === 'MPCv2') { + return { + eddsaMPCv2Callbacks: createEddsaMPCv2KeyGenCallbacks(awmUserClient, awmBackupClient), + }; + } return { eddsaCallbacks: createEddsaKeyGenCallbacks(awmUserClient, awmBackupClient) }; + } default: throw new BadRequestError( `Unsupported MPC algorithm: ${algorithm}. Supported algorithms: ecdsa, eddsa`, diff --git a/src/masterBitgoExpress/routers/generateWalletRoute.ts b/src/masterBitgoExpress/routers/generateWalletRoute.ts index aeed52f7..717e37b7 100644 --- a/src/masterBitgoExpress/routers/generateWalletRoute.ts +++ b/src/masterBitgoExpress/routers/generateWalletRoute.ts @@ -346,6 +346,15 @@ const GenerateWalletRequest = { * @pattern ^[0-9a-f]{32}$ */ evmKeyRingReferenceWalletId: optional(t.string), + + /** + * The MPC protocol version used for TSS wallet generation + * - MPCv1: Legacy MPC protocol (default for TSS wallets if absent) + * - MPCv2: Silence Labs MPC protocol (newer, currently opt-in) + * Only used when multisigType is 'tss'; if absent, the coin's default is used + * @example "MPCv2" + */ + multisigTypeVersion: optional(t.union([t.literal('MPCv1'), t.literal('MPCv2')])), }; /**