From 54121fa494bc3a5b425a041ec8a64a233876fc8a Mon Sep 17 00:00:00 2001 From: hailin Date: Wed, 31 Dec 2025 07:58:36 -0800 Subject: [PATCH] revert: undo incorrect threshold conversion that broke keygen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverts e81757ad - the threshold conversion was wrong. Keygen works with original thresholdT/thresholdN parameters. The signing issue needs a different fix. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../service-party-app/electron/main.ts | 56 +++-------------- .../service-party-app/src/pages/Create.tsx | 60 ++++++++----------- .../service-party-app/src/types/electron.d.ts | 8 +-- 3 files changed, 36 insertions(+), 88 deletions(-) diff --git a/backend/mpc-system/services/service-party-app/electron/main.ts b/backend/mpc-system/services/service-party-app/electron/main.ts index 086af62c..a760ac9a 100644 --- a/backend/mpc-system/services/service-party-app/electron/main.ts +++ b/backend/mpc-system/services/service-party-app/electron/main.ts @@ -1226,54 +1226,16 @@ function setupIpcHandlers() { return { success: false, error: '请先连接到消息路由器' }; } - // Support both old format (thresholdT, thresholdN) and new format (requiredSigners, totalParties) - // New format uses user-friendly "required signers" which needs conversion to tss-lib threshold - let thresholdT: number; - let thresholdN: number; - let externalCount: number; - let persistentCount: number; - - if (params.requiredSigners !== undefined && params.totalParties !== undefined) { - // New format: Convert user-friendly parameters to tss-lib parameters - // In tss-lib, threshold_t means you need (t+1) parties to sign - // So if user wants 3 signers, threshold_t = 3 - 1 = 2 - const requiredSigners = params.requiredSigners; - const totalParties = params.totalParties; - - thresholdT = requiredSigners - 1; // tss-lib threshold - thresholdN = totalParties; - externalCount = requiredSigners; // user parties = required signers - persistentCount = totalParties - requiredSigners; // server backup parties - - console.log('[CreateSession] Converting user-friendly params to tss-lib:', { - requiredSigners, - totalParties, - 'tss-lib threshold_t': thresholdT, - 'tss-lib threshold_n': thresholdN, - externalCount, - persistentCount, - }); - } else { - // Old format: Use thresholdT and thresholdN directly (backward compatible) - thresholdT = params.thresholdT; - thresholdN = params.thresholdN; - // 动态计算 server-party 数量: persistent = n - t - // 例如: 2-of-3 -> persistent=1, 3-of-5 -> persistent=2, 4-of-7 -> persistent=3 - persistentCount = thresholdN - thresholdT; - externalCount = thresholdT; - - console.log('[CreateSession] Using legacy params (backward compatible):', { - thresholdT, - thresholdN, - externalCount, - persistentCount, - }); - } + // 动态计算 server-party 数量: persistent = n - t + // 例如: 2-of-3 -> persistent=1, 3-of-5 -> persistent=2, 4-of-7 -> persistent=3 + // 这样平台备份方数量等于"允许丢失的份额数",确保用户丢失密钥后仍可恢复 + const persistentCount = params.thresholdN - params.thresholdT; + const externalCount = params.thresholdT; // 用户持有的份额数量 const result = await accountClient?.createKeygenSession({ wallet_name: params.walletName, - threshold_t: thresholdT, - threshold_n: thresholdN, + threshold_t: params.thresholdT, + threshold_n: params.thresholdN, initiator_party_id: partyId, initiator_name: params.initiatorName || '发起者', persistent_count: persistentCount, @@ -1309,8 +1271,8 @@ function setupIpcHandlers() { partyIndex: joinResult.party_index, participants: participants, threshold: { - t: thresholdT, - n: thresholdN, + t: params.thresholdT, + n: params.thresholdN, }, walletName: params.walletName, encryptionPassword: '', // 不使用加密密码 diff --git a/backend/mpc-system/services/service-party-app/src/pages/Create.tsx b/backend/mpc-system/services/service-party-app/src/pages/Create.tsx index f0a62433..76e7226a 100644 --- a/backend/mpc-system/services/service-party-app/src/pages/Create.tsx +++ b/backend/mpc-system/services/service-party-app/src/pages/Create.tsx @@ -13,11 +13,8 @@ export default function Create() { const navigate = useNavigate(); const [walletName, setWalletName] = useState(''); - // requiredSigners: 用户选择的"需要几人签名"(用户直观理解) - // 例如:用户选择 3 表示需要 3 人签名 - // 在 tss-lib 中,threshold_t = requiredSigners - 1(因为 tss-lib 需要 t+1 人签名) - const [requiredSigners, setRequiredSigners] = useState(3); - const [totalParties, setTotalParties] = useState(5); + const [thresholdT, setThresholdT] = useState(3); + const [thresholdN, setThresholdN] = useState(5); const [participantName, setParticipantName] = useState(''); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); @@ -33,15 +30,15 @@ export default function Create() { setError('请输入您的名称'); return; } - if (requiredSigners > totalParties) { - setError('签名人数不能大于参与方总数'); + if (thresholdT > thresholdN) { + setError('签名阈值不能大于参与方总数'); return; } - if (requiredSigners < 2) { - setError('签名人数至少为 2'); + if (thresholdT < 1) { + setError('签名阈值至少为 1'); return; } - if (totalParties < 2) { + if (thresholdN < 2) { setError('参与方总数至少为 2'); return; } @@ -51,17 +48,10 @@ export default function Create() { setError(null); try { - // Pass user-friendly parameters directly - // main.ts will convert to tss-lib parameters - console.log('[Create] Sending parameters:', { - requiredSigners, - totalParties, - }); - const createResult = await window.electronAPI.grpc.createSession({ walletName: walletName.trim(), - requiredSigners, - totalParties, + thresholdT, + thresholdN, initiatorName: participantName.trim(), }); @@ -132,23 +122,23 @@ export default function Create() {
- +
- 需要签名人数 + 签名阈值 (T)
- {requiredSigners} + {thresholdT} @@ -156,24 +146,24 @@ export default function Create() {
of
- 参与方总数 + 参与方总数 (N)
- {totalParties} + {thresholdN} @@ -181,7 +171,7 @@ export default function Create() {

- 需要 {requiredSigners} 个参与方共同签名才能执行交易 (其中 {totalParties - requiredSigners} 个由平台托管用于备份) + 需要 {thresholdT} 个参与方共同签名才能执行交易 (其中 2 个由平台托管用于备份)

diff --git a/backend/mpc-system/services/service-party-app/src/types/electron.d.ts b/backend/mpc-system/services/service-party-app/src/types/electron.d.ts index 16b44694..85d57ae0 100644 --- a/backend/mpc-system/services/service-party-app/src/types/electron.d.ts +++ b/backend/mpc-system/services/service-party-app/src/types/electron.d.ts @@ -112,12 +112,8 @@ interface Settings { interface CreateSessionParams { walletName: string; - // New format: user-friendly parameters (preferred) - requiredSigners?: number; // Number of signers needed (e.g., 3 for "3-of-5") - totalParties?: number; // Total parties (e.g., 5 for "3-of-5") - // Legacy format: tss-lib parameters (backward compatible) - thresholdT?: number; // tss-lib threshold (requiredSigners - 1) - thresholdN?: number; // Same as totalParties + thresholdT: number; + thresholdN: number; initiatorName: string; }