Skip to content

feat(sdk-coin-ton): add MPCv2 signed hot recovery to Ton.recover() - #9421

Open
vibhavgo wants to merge 1 commit into
masterfrom
WCI-1225-sdk-coin-ton-mpcv2-signed-hot-recovery
Open

feat(sdk-coin-ton): add MPCv2 signed hot recovery to Ton.recover()#9421
vibhavgo wants to merge 1 commit into
masterfrom
WCI-1225-sdk-coin-ton-mpcv2-signed-hot-recovery

Conversation

@vibhavgo

@vibhavgo vibhavgo commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Extends Ton.recover() to automatically detect and handle MPCv2 CBOR keycards alongside the existing MPCv1 JSON path. No caller changes required — detection is driven by isEddsaMpcV1SigningMaterial.

Linear: WCI-1225

Changes

  • Add private isMpcv2SigningMaterial() method to detect keycard format once per recover() call
  • Add private addRecoverySignature() method dispatching to MPCv1 (getTSSSignature) or MPCv2 (signRecoveryEddsaMPCv2) based on detected format
  • Update recover() to use addRecoverySignature() for both native TON and Jetton paths
  • Add 4 new unit tests: MPCv2 native TON, MPCv2 Jetton, MPCv1 regression, commonKeyChain mismatch error
  • Fix pre-existing leaked sinon sandbox in unsigned sweep test

Test Plan

  • BITGOJS_TEST_PASSWORD=test yarn unit-test --scope @bitgo/sdk-coin-ton — all 137 tests pass
  • yarn build --scope @bitgo/sdk-coin-ton — clean TypeScript compile
  • MPCv2 native TON: real DKG key generation via MPSUtil.generateEdDsaDKGKeyShares(), asserts serializedTx non-empty and correct wallet address queried
  • MPCv2 Jetton: same flow with senderJettonAddress, asserts serializedTx non-empty
  • MPCv1 regression: stubs isMpcv2SigningMaterial → false, asserts getTSSSignature called
  • Mismatched bitgoKey: asserts rejection with expected error message

@linear-code

linear-code Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

WCI-1225

@vibhavgo
vibhavgo marked this pull request as ready for review August 5, 2026 08:54
@vibhavgo
vibhavgo requested a review from a team as a code owner August 5, 2026 08:54
@vibhavgo
vibhavgo force-pushed the WCI-1225-sdk-coin-ton-mpcv2-signed-hot-recovery branch from 40524ea to 24084a6 Compare August 5, 2026 11:10
MPCv1 wallets use JSON keycards; MPCv2 wallets use CBOR-encoded reduced
key shares. Without this change, recover() silently fails for MPCv2
wallets. Detection is automatic via isEddsaMpcV1SigningMaterial — no
caller changes required.

Ticket: WCI-1225
@vibhavgo
vibhavgo force-pushed the WCI-1225-sdk-coin-ton-mpcv2-signed-hot-recovery branch from 24084a6 to 2b8391a Compare August 5, 2026 11:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant