@vultisig/core-mpc 0.9.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/chains/cosmos/qbtc/QBTCHelper.d.ts +25 -0
  3. package/dist/chains/cosmos/qbtc/QBTCHelper.d.ts.map +1 -0
  4. package/dist/chains/cosmos/qbtc/QBTCHelper.js +158 -0
  5. package/dist/chains/cosmos/qbtc/QBTCHelper.js.map +1 -0
  6. package/dist/dkls/dkls.d.ts +6 -3
  7. package/dist/dkls/dkls.d.ts.map +1 -1
  8. package/dist/dkls/dkls.js +102 -57
  9. package/dist/dkls/dkls.js.map +1 -1
  10. package/dist/fast/api/batchReshareWithServer.d.ts +19 -0
  11. package/dist/fast/api/batchReshareWithServer.d.ts.map +1 -0
  12. package/dist/fast/api/batchReshareWithServer.js +7 -0
  13. package/dist/fast/api/batchReshareWithServer.js.map +1 -0
  14. package/dist/fast/api/createVaultWithServer.d.ts +14 -0
  15. package/dist/fast/api/createVaultWithServer.d.ts.map +1 -0
  16. package/dist/fast/api/createVaultWithServer.js +7 -0
  17. package/dist/fast/api/createVaultWithServer.js.map +1 -0
  18. package/dist/fast/api/keyImportWithServer.d.ts +3 -2
  19. package/dist/fast/api/keyImportWithServer.d.ts.map +1 -1
  20. package/dist/fast/api/keyImportWithServer.js +2 -2
  21. package/dist/fast/api/keyImportWithServer.js.map +1 -1
  22. package/dist/fast/api/reshareWithServer.d.ts +3 -1
  23. package/dist/fast/api/reshareWithServer.d.ts.map +1 -1
  24. package/dist/fast/api/reshareWithServer.js +2 -2
  25. package/dist/fast/api/reshareWithServer.js.map +1 -1
  26. package/dist/fast/api/sequentialKeyImportWithServer.d.ts +15 -0
  27. package/dist/fast/api/sequentialKeyImportWithServer.d.ts.map +1 -0
  28. package/dist/fast/api/sequentialKeyImportWithServer.js +7 -0
  29. package/dist/fast/api/sequentialKeyImportWithServer.js.map +1 -0
  30. package/dist/fast/api/setupVaultWithServer.d.ts +2 -1
  31. package/dist/fast/api/setupVaultWithServer.d.ts.map +1 -1
  32. package/dist/fast/api/setupVaultWithServer.js +1 -1
  33. package/dist/fast/api/setupVaultWithServer.js.map +1 -1
  34. package/dist/keygen/KeygenStep.d.ts +1 -1
  35. package/dist/keygen/KeygenStep.d.ts.map +1 -1
  36. package/dist/keygen/KeygenStep.js +7 -1
  37. package/dist/keygen/KeygenStep.js.map +1 -1
  38. package/dist/keysign/chainSpecific/KeysignChainSpecific.d.ts +1 -0
  39. package/dist/keysign/chainSpecific/KeysignChainSpecific.d.ts.map +1 -1
  40. package/dist/keysign/chainSpecific/KeysignChainSpecific.js +1 -0
  41. package/dist/keysign/chainSpecific/KeysignChainSpecific.js.map +1 -1
  42. package/dist/keysign/chainSpecific/index.d.ts.map +1 -1
  43. package/dist/keysign/chainSpecific/index.js +2 -0
  44. package/dist/keysign/chainSpecific/index.js.map +1 -1
  45. package/dist/keysign/chainSpecific/resolvers/qbtc.d.ts +3 -0
  46. package/dist/keysign/chainSpecific/resolvers/qbtc.d.ts.map +1 -0
  47. package/dist/keysign/chainSpecific/resolvers/qbtc.js +25 -0
  48. package/dist/keysign/chainSpecific/resolvers/qbtc.js.map +1 -0
  49. package/dist/keysign/chainSpecific/resolvers/solana/index.js +1 -1
  50. package/dist/keysign/chainSpecific/resolvers/solana/index.js.map +1 -1
  51. package/dist/keysign/cosigner.js +1 -1
  52. package/dist/keysign/cosigner.js.map +1 -1
  53. package/dist/keysign/fee/index.d.ts.map +1 -1
  54. package/dist/keysign/fee/index.js +2 -0
  55. package/dist/keysign/fee/index.js.map +1 -1
  56. package/dist/keysign/fee/resolvers/qbtc.d.ts +3 -0
  57. package/dist/keysign/fee/resolvers/qbtc.d.ts.map +1 -0
  58. package/dist/keysign/fee/resolvers/qbtc.js +6 -0
  59. package/dist/keysign/fee/resolvers/qbtc.js.map +1 -0
  60. package/dist/keysign/index.d.ts.map +1 -1
  61. package/dist/keysign/index.js +28 -19
  62. package/dist/keysign/index.js.map +1 -1
  63. package/dist/keysign/preSigningOutput/index.d.ts +1 -0
  64. package/dist/keysign/preSigningOutput/index.d.ts.map +1 -1
  65. package/dist/keysign/preSigningOutput/index.js +1 -0
  66. package/dist/keysign/preSigningOutput/index.js.map +1 -1
  67. package/dist/keysign/send/build.d.ts +4 -2
  68. package/dist/keysign/send/build.d.ts.map +1 -1
  69. package/dist/keysign/send/build.js +19 -10
  70. package/dist/keysign/send/build.js.map +1 -1
  71. package/dist/keysign/send/getSendFeeEstimate.d.ts.map +1 -1
  72. package/dist/keysign/send/getSendFeeEstimate.js +9 -1
  73. package/dist/keysign/send/getSendFeeEstimate.js.map +1 -1
  74. package/dist/keysign/setupMessage/make.d.ts.map +1 -1
  75. package/dist/keysign/setupMessage/make.js +12 -2
  76. package/dist/keysign/setupMessage/make.js.map +1 -1
  77. package/dist/keysign/signingInputs/core.d.ts +1 -0
  78. package/dist/keysign/signingInputs/core.d.ts.map +1 -1
  79. package/dist/keysign/signingInputs/core.js +1 -0
  80. package/dist/keysign/signingInputs/core.js.map +1 -1
  81. package/dist/keysign/signingInputs/index.d.ts.map +1 -1
  82. package/dist/keysign/signingInputs/index.js +3 -1
  83. package/dist/keysign/signingInputs/index.js.map +1 -1
  84. package/dist/keysign/signingInputs/resolvers/evm/incrementKeysignPayloadNonce.d.ts +3 -0
  85. package/dist/keysign/signingInputs/resolvers/evm/incrementKeysignPayloadNonce.d.ts.map +1 -0
  86. package/dist/keysign/signingInputs/resolvers/evm/incrementKeysignPayloadNonce.js +17 -0
  87. package/dist/keysign/signingInputs/resolvers/evm/incrementKeysignPayloadNonce.js.map +1 -0
  88. package/dist/keysign/signingInputs/resolvers/evm/index.js +1 -1
  89. package/dist/keysign/signingInputs/resolvers/evm/index.js.map +1 -1
  90. package/dist/keysign/signingInputs/resolvers/qbtc.d.ts +5 -0
  91. package/dist/keysign/signingInputs/resolvers/qbtc.d.ts.map +1 -0
  92. package/dist/keysign/signingInputs/resolvers/qbtc.js +4 -0
  93. package/dist/keysign/signingInputs/resolvers/qbtc.js.map +1 -0
  94. package/dist/keysign/signingInputs/resolvers/ton/index.d.ts.map +1 -1
  95. package/dist/keysign/signingInputs/resolvers/ton/index.js +25 -13
  96. package/dist/keysign/signingInputs/resolvers/ton/index.js.map +1 -1
  97. package/dist/keysign/signingInputs/resolvers/ton/jetton.d.ts.map +1 -1
  98. package/dist/keysign/signingInputs/resolvers/ton/jetton.js +2 -1
  99. package/dist/keysign/signingInputs/resolvers/ton/jetton.js.map +1 -1
  100. package/dist/keysign/signingInputs/resolvers/ton/native.d.ts +9 -0
  101. package/dist/keysign/signingInputs/resolvers/ton/native.d.ts.map +1 -1
  102. package/dist/keysign/signingInputs/resolvers/ton/native.js +31 -3
  103. package/dist/keysign/signingInputs/resolvers/ton/native.js.map +1 -1
  104. package/dist/keysign/swap/build.js +1 -1
  105. package/dist/keysign/swap/build.js.map +1 -1
  106. package/dist/keysign/utxo/getKeysignUtxoInfo.d.ts.map +1 -1
  107. package/dist/keysign/utxo/getKeysignUtxoInfo.js +11 -2
  108. package/dist/keysign/utxo/getKeysignUtxoInfo.js.map +1 -1
  109. package/dist/lib/initialize.d.ts.map +1 -1
  110. package/dist/lib/initialize.js +2 -0
  111. package/dist/lib/initialize.js.map +1 -1
  112. package/dist/lib/keyshare.d.ts +2 -1
  113. package/dist/lib/keyshare.d.ts.map +1 -1
  114. package/dist/lib/keyshare.js +2 -0
  115. package/dist/lib/keyshare.js.map +1 -1
  116. package/dist/lib/signSession.d.ts +3 -2
  117. package/dist/lib/signSession.d.ts.map +1 -1
  118. package/dist/lib/signSession.js +4 -1
  119. package/dist/lib/signSession.js.map +1 -1
  120. package/dist/mldsa/mldsaKeygen.d.ts +4 -0
  121. package/dist/mldsa/mldsaKeygen.d.ts.map +1 -1
  122. package/dist/mldsa/mldsaKeygen.js +9 -5
  123. package/dist/mldsa/mldsaKeygen.js.map +1 -1
  124. package/dist/mpcLib.d.ts +3 -3
  125. package/dist/mpcLib.d.ts.map +1 -1
  126. package/dist/schnorr/schnorrKeygen.d.ts +5 -3
  127. package/dist/schnorr/schnorrKeygen.d.ts.map +1 -1
  128. package/dist/schnorr/schnorrKeygen.js +72 -40
  129. package/dist/schnorr/schnorrKeygen.js.map +1 -1
  130. package/dist/security/blockaid/tx/simulation/input/index.d.ts +4 -0
  131. package/dist/security/blockaid/tx/simulation/input/index.d.ts.map +1 -0
  132. package/dist/security/blockaid/tx/simulation/input/index.js +26 -0
  133. package/dist/security/blockaid/tx/simulation/input/index.js.map +1 -0
  134. package/dist/security/blockaid/tx/simulation/input/resolver.d.ts +18 -0
  135. package/dist/security/blockaid/tx/simulation/input/resolver.d.ts.map +1 -0
  136. package/dist/security/blockaid/tx/simulation/input/resolver.js +2 -0
  137. package/dist/security/blockaid/tx/simulation/input/resolver.js.map +1 -0
  138. package/dist/security/blockaid/tx/simulation/input/resolvers/evm.d.ts +4 -0
  139. package/dist/security/blockaid/tx/simulation/input/resolvers/evm.d.ts.map +1 -0
  140. package/dist/security/blockaid/tx/simulation/input/resolvers/evm.js +67 -0
  141. package/dist/security/blockaid/tx/simulation/input/resolvers/evm.js.map +1 -0
  142. package/dist/security/blockaid/tx/simulation/input/resolvers/solana.d.ts +4 -0
  143. package/dist/security/blockaid/tx/simulation/input/resolvers/solana.d.ts.map +1 -0
  144. package/dist/security/blockaid/tx/simulation/input/resolvers/solana.js +31 -0
  145. package/dist/security/blockaid/tx/simulation/input/resolvers/solana.js.map +1 -0
  146. package/dist/security/blockaid/tx/utils/getCompiledTxsForBlockaidInput.d.ts +9 -0
  147. package/dist/security/blockaid/tx/utils/getCompiledTxsForBlockaidInput.d.ts.map +1 -0
  148. package/dist/security/blockaid/tx/utils/getCompiledTxsForBlockaidInput.js +50 -0
  149. package/dist/security/blockaid/tx/utils/getCompiledTxsForBlockaidInput.js.map +1 -0
  150. package/dist/security/blockaid/tx/validation/input/index.d.ts +4 -0
  151. package/dist/security/blockaid/tx/validation/input/index.d.ts.map +1 -0
  152. package/dist/security/blockaid/tx/validation/input/index.js +30 -0
  153. package/dist/security/blockaid/tx/validation/input/index.js.map +1 -0
  154. package/dist/security/blockaid/tx/validation/input/resolver.d.ts +16 -0
  155. package/dist/security/blockaid/tx/validation/input/resolver.d.ts.map +1 -0
  156. package/dist/security/blockaid/tx/validation/input/resolver.js +2 -0
  157. package/dist/security/blockaid/tx/validation/input/resolver.js.map +1 -0
  158. package/dist/security/blockaid/tx/validation/input/resolvers/evm.d.ts +4 -0
  159. package/dist/security/blockaid/tx/validation/input/resolvers/evm.d.ts.map +1 -0
  160. package/dist/security/blockaid/tx/validation/input/resolvers/evm.js +58 -0
  161. package/dist/security/blockaid/tx/validation/input/resolvers/evm.js.map +1 -0
  162. package/dist/security/blockaid/tx/validation/input/resolvers/solana.d.ts +4 -0
  163. package/dist/security/blockaid/tx/validation/input/resolvers/solana.d.ts.map +1 -0
  164. package/dist/security/blockaid/tx/validation/input/resolvers/solana.js +20 -0
  165. package/dist/security/blockaid/tx/validation/input/resolvers/solana.js.map +1 -0
  166. package/dist/security/blockaid/tx/validation/input/resolvers/sui.d.ts +4 -0
  167. package/dist/security/blockaid/tx/validation/input/resolvers/sui.d.ts.map +1 -0
  168. package/dist/security/blockaid/tx/validation/input/resolvers/sui.js +20 -0
  169. package/dist/security/blockaid/tx/validation/input/resolvers/sui.js.map +1 -0
  170. package/dist/security/blockaid/tx/validation/input/resolvers/utxo.d.ts +4 -0
  171. package/dist/security/blockaid/tx/validation/input/resolvers/utxo.d.ts.map +1 -0
  172. package/dist/security/blockaid/tx/validation/input/resolvers/utxo.js +19 -0
  173. package/dist/security/blockaid/tx/validation/input/resolvers/utxo.js.map +1 -0
  174. package/dist/swap/native/utils/nativeSwapQuoteToSwapPayload.d.ts +16 -0
  175. package/dist/swap/native/utils/nativeSwapQuoteToSwapPayload.d.ts.map +1 -0
  176. package/dist/swap/native/utils/nativeSwapQuoteToSwapPayload.js +31 -0
  177. package/dist/swap/native/utils/nativeSwapQuoteToSwapPayload.js.map +1 -0
  178. package/dist/swap/utils/getSwapTrackingUrl.d.ts +10 -0
  179. package/dist/swap/utils/getSwapTrackingUrl.d.ts.map +1 -0
  180. package/dist/swap/utils/getSwapTrackingUrl.js +29 -0
  181. package/dist/swap/utils/getSwapTrackingUrl.js.map +1 -0
  182. package/dist/tx/compile/compileTx.d.ts +14 -0
  183. package/dist/tx/compile/compileTx.d.ts.map +1 -0
  184. package/dist/tx/compile/compileTx.js +85 -0
  185. package/dist/tx/compile/compileTx.js.map +1 -0
  186. package/dist/tx/preSigningHashes/index.d.ts +10 -0
  187. package/dist/tx/preSigningHashes/index.d.ts.map +1 -0
  188. package/dist/tx/preSigningHashes/index.js +41 -0
  189. package/dist/tx/preSigningHashes/index.js.map +1 -0
  190. package/dist/tx/signature/generateSignature.d.ts +11 -0
  191. package/dist/tx/signature/generateSignature.d.ts.map +1 -0
  192. package/dist/tx/signature/generateSignature.js +20 -0
  193. package/dist/tx/signature/generateSignature.js.map +1 -0
  194. package/dist/types/utils/libType.d.ts +1 -2
  195. package/dist/types/utils/libType.d.ts.map +1 -1
  196. package/dist/types/utils/libType.js +2 -6
  197. package/dist/types/utils/libType.js.map +1 -1
  198. package/dist/types/vultisig/keysign/v1/keysign_message_pb.d.ts +7 -1
  199. package/dist/types/vultisig/keysign/v1/keysign_message_pb.d.ts.map +1 -1
  200. package/dist/types/vultisig/keysign/v1/keysign_message_pb.js +1 -1
  201. package/dist/types/vultisig/keysign/v1/keysign_message_pb.js.map +1 -1
  202. package/dist/types/vultisig/keysign/v1/wasm_execute_contract_payload_pb.d.ts +36 -0
  203. package/dist/types/vultisig/keysign/v1/wasm_execute_contract_payload_pb.d.ts.map +1 -1
  204. package/dist/types/vultisig/keysign/v1/wasm_execute_contract_payload_pb.js +12 -2
  205. package/dist/types/vultisig/keysign/v1/wasm_execute_contract_payload_pb.js.map +1 -1
  206. package/dist/vault/Vault.d.ts +4 -2
  207. package/dist/vault/Vault.d.ts.map +1 -1
  208. package/dist/vault/Vault.js.map +1 -1
  209. package/package.json +929 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @vultisig/core-mpc
2
2
 
3
+ ## 1.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - [#157](https://github.com/vultisig/vultisig-sdk/pull/157) [`5286b98`](https://github.com/vultisig/vultisig-sdk/commit/5286b98d19692acd216a2c95d5a7a903217bef36) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Regenerate explicit `package.json` exports for `@vultisig/core-config` and `@vultisig/lib-utils` so directory and flat subpaths resolve under Node, TypeScript, and Vite.
8
+
9
+ **Breaking (`@vultisig/core-chain`, `@vultisig/core-mpc`):** Remove the npm dependency cycle by dropping `@vultisig/core-mpc` from `core-chain`. Modules that required MPC types or keysign helpers now live under `@vultisig/core-mpc` (for example `tx/compile/compileTx`, `tx/preSigningHashes`, `chains/cosmos/qbtc/QBTCHelper`, Blockaid keysign input builders, `swap/native/utils/nativeSwapQuoteToSwapPayload`, `swap/utils/getSwapTrackingUrl`, and EVM `incrementKeysignPayloadNonce` at `keysign/signingInputs/resolvers/evm/incrementKeysignPayloadNonce`). `getUtxos` / `getCardanoUtxos` return plain `ChainPlainUtxo`; keysign maps to protobuf in MPC.
10
+
11
+ **SDK:** QBTC support, shared import updates, and alignment with the new package boundaries.
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [[`5286b98`](https://github.com/vultisig/vultisig-sdk/commit/5286b98d19692acd216a2c95d5a7a903217bef36)]:
16
+ - @vultisig/core-config@0.9.1
17
+ - @vultisig/lib-utils@0.9.1
18
+ - @vultisig/core-chain@1.0.0
19
+
20
+ ## 0.10.0
21
+
22
+ ### Minor Changes
23
+
24
+ - [#149](https://github.com/vultisig/vultisig-sdk/pull/149) [`67dc6ce`](https://github.com/vultisig/vultisig-sdk/commit/67dc6ceaa1b318144cfbe3812ddecb14b108eba4) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Sync Windows-style TSS batching: batched FastVault APIs (`/batch/keygen`, `/batch/import`, `/batch/reshare`), batched relay message IDs for ECDSA, EdDSA, MLDSA, and per-chain import, secure vault QR `tssBatching=1` for joiner alignment, sequential fallbacks, and test coverage.
25
+
26
+ ### Patch Changes
27
+
28
+ - Updated dependencies [[`67dc6ce`](https://github.com/vultisig/vultisig-sdk/commit/67dc6ceaa1b318144cfbe3812ddecb14b108eba4)]:
29
+ - @vultisig/core-chain@0.10.0
30
+
3
31
  ## 0.9.0
4
32
 
5
33
  ### Minor Changes
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Custom Cosmos transaction builder for QBTC chain.
3
+ * Bypasses WalletCore's TransactionCompiler because MLDSA keys
4
+ * are incompatible with WalletCore's secp256k1 verification.
5
+ * Builds Cosmos protobuf (SignDoc, TxRaw) manually.
6
+ */
7
+ import { KeysignSignature } from '../../../keysign/KeysignSignature.js';
8
+ import { CosmosSpecific } from '../../../types/vultisig/keysign/v1/blockchain_specific_pb.js';
9
+ import { KeysignPayload } from '../../../types/vultisig/keysign/v1/keysign_message_pb.js';
10
+ type QBTCKeysignInput = {
11
+ keysignPayload: KeysignPayload;
12
+ cosmosSpecific: CosmosSpecific;
13
+ };
14
+ /** Returns the SHA256 hash(es) of the SignDoc that must be signed. */
15
+ export declare const getQBTCPreSignedImageHash: ({ keysignPayload, cosmosSpecific, }: QBTCKeysignInput) => Uint8Array[];
16
+ type QBTCSignedTransactionInput = QBTCKeysignInput & {
17
+ signatures: Record<string, KeysignSignature>;
18
+ };
19
+ /** Assembles the signed transaction ready for broadcast. */
20
+ export declare const getQBTCSignedTransaction: ({ keysignPayload, cosmosSpecific, signatures, }: QBTCSignedTransactionInput) => {
21
+ serialized: string;
22
+ transactionHash: string;
23
+ };
24
+ export {};
25
+ //# sourceMappingURL=QBTCHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QBTCHelper.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/mpc/chains/cosmos/qbtc/QBTCHelper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,2DAA2D,CAAA;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,uDAAuD,CAAA;AAWtF,KAAK,gBAAgB,GAAG;IACtB,cAAc,EAAE,cAAc,CAAA;IAC9B,cAAc,EAAE,cAAc,CAAA;CAC/B,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,yBAAyB,GAAI,qCAGvC,gBAAgB,KAAG,UAAU,EAG/B,CAAA;AAED,KAAK,0BAA0B,GAAG,gBAAgB,GAAG;IACnD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CAC7C,CAAA;AAED,4DAA4D;AAC5D,eAAO,MAAM,wBAAwB,GAAI,iDAItC,0BAA0B,KAAG;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;CA+BxB,CAAA"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Custom Cosmos transaction builder for QBTC chain.
3
+ * Bypasses WalletCore's TransactionCompiler because MLDSA keys
4
+ * are incompatible with WalletCore's secp256k1 verification.
5
+ * Builds Cosmos protobuf (SignDoc, TxRaw) manually.
6
+ */
7
+ import { sha256 } from '@noble/hashes/sha2.js';
8
+ import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
9
+ import { concatBytes, protoBytes, protoString, protoVarint, } from '@vultisig/core-chain/chains/cosmos/qbtc/protoEncoding';
10
+ const pubKeyTypeURL = '/cosmos.crypto.mldsa.PubKey';
11
+ const msgSendTypeURL = '/cosmos.bank.v1beta1.MsgSend';
12
+ const msgTransferTypeURL = '/ibc.applications.transfer.v1.MsgTransfer';
13
+ const msgVoteTypeURL = '/cosmos.gov.v1beta1.MsgVote';
14
+ /** QBTC fee denom and chain ID (Cosmos SDK). */
15
+ const denom = 'qbtc';
16
+ const chainID = 'qbtc-testnet';
17
+ /** Returns the SHA256 hash(es) of the SignDoc that must be signed. */
18
+ export const getQBTCPreSignedImageHash = ({ keysignPayload, cosmosSpecific, }) => {
19
+ const signDoc = buildSignDoc({ keysignPayload, cosmosSpecific });
20
+ return [sha256(signDoc)];
21
+ };
22
+ /** Assembles the signed transaction ready for broadcast. */
23
+ export const getQBTCSignedTransaction = ({ keysignPayload, cosmosSpecific, signatures, }) => {
24
+ const { bodyBytes, authInfoBytes } = buildTxComponents({
25
+ keysignPayload,
26
+ cosmosSpecific,
27
+ });
28
+ const signDoc = buildSignDocFromComponents({
29
+ bodyBytes,
30
+ authInfoBytes,
31
+ accountNumber: cosmosSpecific.accountNumber,
32
+ });
33
+ const hashHex = Buffer.from(sha256(signDoc)).toString('hex');
34
+ const sig = shouldBePresent(signatures[hashHex], `QBTC signature for hash ${hashHex}`);
35
+ const sigData = Buffer.from(sig.der_signature, 'hex');
36
+ const txRaw = buildTxRaw({ bodyBytes, authInfoBytes, signature: sigData });
37
+ const txBytesBase64 = Buffer.from(txRaw).toString('base64');
38
+ const serialized = JSON.stringify({
39
+ tx_bytes: txBytesBase64,
40
+ mode: 'BROADCAST_MODE_SYNC',
41
+ });
42
+ const transactionHash = Buffer.from(sha256(txRaw))
43
+ .toString('hex')
44
+ .toUpperCase();
45
+ return { serialized, transactionHash };
46
+ };
47
+ const buildSignDoc = ({ keysignPayload, cosmosSpecific }) => {
48
+ const { bodyBytes, authInfoBytes } = buildTxComponents({
49
+ keysignPayload,
50
+ cosmosSpecific,
51
+ });
52
+ return buildSignDocFromComponents({
53
+ bodyBytes,
54
+ authInfoBytes,
55
+ accountNumber: cosmosSpecific.accountNumber,
56
+ });
57
+ };
58
+ const buildTxComponents = ({ keysignPayload, cosmosSpecific, }) => {
59
+ const coin = shouldBePresent(keysignPayload.coin);
60
+ const pubKeyData = Buffer.from(coin.hexPublicKey, 'hex');
61
+ const bodyBytes = buildTxBody({ keysignPayload, cosmosSpecific });
62
+ const authInfoBytes = buildAuthInfo({
63
+ pubKeyData,
64
+ sequence: cosmosSpecific.sequence,
65
+ gas: cosmosSpecific.gas,
66
+ });
67
+ return { bodyBytes, authInfoBytes };
68
+ };
69
+ const buildSignDocFromComponents = ({ bodyBytes, authInfoBytes, accountNumber, }) => concatBytes(protoBytes(1, bodyBytes), protoBytes(2, authInfoBytes), protoString(3, chainID), protoVarint(4, accountNumber));
70
+ const buildTxBody = ({ keysignPayload, cosmosSpecific, }) => {
71
+ const { transactionType, ibcDenomTraces } = cosmosSpecific;
72
+ let { memo } = keysignPayload;
73
+ let anyMsg;
74
+ if (transactionType === 3) {
75
+ anyMsg = buildIBCTransferAny({ keysignPayload, ibcDenomTraces });
76
+ const parts = memo?.split(':');
77
+ memo = parts && parts.length === 4 ? parts[3] : undefined;
78
+ }
79
+ else if (transactionType === 1) {
80
+ anyMsg = buildVoteAny(keysignPayload);
81
+ memo = undefined;
82
+ }
83
+ else {
84
+ anyMsg = buildMsgSendAny(keysignPayload);
85
+ }
86
+ return concatBytes(protoBytes(1, anyMsg), memo ? protoString(2, memo) : new Uint8Array(0));
87
+ };
88
+ const buildMsgSendAny = (keysignPayload) => {
89
+ const msgSend = buildMsgSend(keysignPayload);
90
+ return concatBytes(protoString(1, msgSendTypeURL), protoBytes(2, msgSend));
91
+ };
92
+ const buildMsgSend = (keysignPayload) => {
93
+ const coin = shouldBePresent(keysignPayload.coin);
94
+ const coinDenom = coin.isNativeToken ? denom : coin.contractAddress;
95
+ const coinProto = concatBytes(protoString(1, coinDenom), protoString(2, keysignPayload.toAmount));
96
+ return concatBytes(protoString(1, coin.address), protoString(2, keysignPayload.toAddress), protoBytes(3, coinProto));
97
+ };
98
+ const buildIBCTransferAny = ({ keysignPayload, ibcDenomTraces, }) => {
99
+ const msgTransfer = buildMsgTransfer({ keysignPayload, ibcDenomTraces });
100
+ return concatBytes(protoString(1, msgTransferTypeURL), protoBytes(2, msgTransfer));
101
+ };
102
+ const buildMsgTransfer = ({ keysignPayload, ibcDenomTraces, }) => {
103
+ const memo = shouldBePresent(keysignPayload.memo, 'IBC transfer memo');
104
+ const parts = memo.split(':');
105
+ if (parts.length < 2) {
106
+ throw new Error('QBTC: IBC transfer requires memo with source channel (ibc:channel-N:...)');
107
+ }
108
+ const sourceChannel = parts[1];
109
+ const timeouts = ibcDenomTraces?.latestBlock?.split('_') ?? [];
110
+ const timeoutStr = timeouts[timeouts.length - 1];
111
+ if (!timeoutStr || timeoutStr === '0') {
112
+ throw new Error('QBTC: IBC transfer requires valid timeout timestamp');
113
+ }
114
+ const timeout = BigInt(timeoutStr);
115
+ const coin = shouldBePresent(keysignPayload.coin);
116
+ const tokenDenom = coin.isNativeToken ? denom : coin.contractAddress;
117
+ const token = concatBytes(protoString(1, tokenDenom), protoString(2, keysignPayload.toAmount));
118
+ return concatBytes(protoString(1, 'transfer'), protoString(2, sourceChannel), protoBytes(3, token), protoString(4, coin.address), protoString(5, keysignPayload.toAddress), protoVarint(7, timeout));
119
+ };
120
+ const buildVoteAny = (keysignPayload) => {
121
+ const msgVote = buildMsgVote(keysignPayload);
122
+ return concatBytes(protoString(1, msgVoteTypeURL), protoBytes(2, msgVote));
123
+ };
124
+ const voteOptionValues = {
125
+ YES: 1n,
126
+ ABSTAIN: 2n,
127
+ NO: 3n,
128
+ NO_WITH_VETO: 4n,
129
+ NOWITHVETO: 4n,
130
+ };
131
+ const buildMsgVote = (keysignPayload) => {
132
+ const coin = shouldBePresent(keysignPayload.coin);
133
+ const voteStr = (keysignPayload.memo ?? '').replace('QBTC_VOTE:', '');
134
+ const parts = voteStr.split(':');
135
+ if (parts.length !== 2) {
136
+ throw new Error('QBTC: invalid vote memo format, expected OPTION:PROPOSAL_ID');
137
+ }
138
+ const optionKey = parts[0].toUpperCase();
139
+ const option = voteOptionValues[optionKey];
140
+ if (option === undefined) {
141
+ throw new Error(`QBTC: invalid vote option '${parts[0]}', expected one of: ${Object.keys(voteOptionValues).join(', ')}`);
142
+ }
143
+ const proposalId = BigInt(parts[1]);
144
+ return concatBytes(protoVarint(1, proposalId), protoString(2, coin.address), protoVarint(3, option));
145
+ };
146
+ const buildAuthInfo = ({ pubKeyData, sequence, gas, }) => {
147
+ const pubKeyMsg = protoBytes(1, pubKeyData);
148
+ const pubKeyAny = concatBytes(protoString(1, pubKeyTypeURL), protoBytes(2, pubKeyMsg));
149
+ const singleMode = protoVarint(1, 1n);
150
+ const modeInfo = protoBytes(1, singleMode);
151
+ const signerInfo = concatBytes(protoBytes(1, pubKeyAny), protoBytes(2, modeInfo), protoVarint(3, sequence));
152
+ const feeCoin = concatBytes(protoString(1, denom), protoString(2, gas.toString()));
153
+ const gasLimit = 300000n;
154
+ const fee = concatBytes(protoBytes(1, feeCoin), protoVarint(2, gasLimit));
155
+ return concatBytes(protoBytes(1, signerInfo), protoBytes(2, fee));
156
+ };
157
+ const buildTxRaw = ({ bodyBytes, authInfoBytes, signature, }) => concatBytes(protoBytes(1, bodyBytes), protoBytes(2, authInfoBytes), protoBytes(3, signature));
158
+ //# sourceMappingURL=QBTCHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QBTCHelper.js","sourceRoot":"","sources":["../../../../../../../packages/core/mpc/chains/cosmos/qbtc/QBTCHelper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAE5E,OAAO,EACL,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,uDAAuD,CAAA;AAM9D,MAAM,aAAa,GAAG,6BAA6B,CAAA;AACnD,MAAM,cAAc,GAAG,8BAA8B,CAAA;AACrD,MAAM,kBAAkB,GAAG,2CAA2C,CAAA;AACtE,MAAM,cAAc,GAAG,6BAA6B,CAAA;AAEpD,gDAAgD;AAChD,MAAM,KAAK,GAAG,MAAM,CAAA;AACpB,MAAM,OAAO,GAAG,cAAc,CAAA;AAO9B,sEAAsE;AACtE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,EACxC,cAAc,EACd,cAAc,GACG,EAAgB,EAAE;IACnC,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAA;IAChE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;AAC1B,CAAC,CAAA;AAMD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EACvC,cAAc,EACd,cAAc,EACd,UAAU,GACiB,EAG3B,EAAE;IACF,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,iBAAiB,CAAC;QACrD,cAAc;QACd,cAAc;KACf,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,0BAA0B,CAAC;QACzC,SAAS;QACT,aAAa;QACb,aAAa,EAAE,cAAc,CAAC,aAAa;KAC5C,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC5D,MAAM,GAAG,GAAG,eAAe,CACzB,UAAU,CAAC,OAAO,CAAC,EACnB,2BAA2B,OAAO,EAAE,CACrC,CAAA;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;IAErD,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;IAC1E,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,QAAQ,EAAE,aAAa;QACvB,IAAI,EAAE,qBAAqB;KAC5B,CAAC,CAAA;IACF,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC/C,QAAQ,CAAC,KAAK,CAAC;SACf,WAAW,EAAE,CAAA;IAEhB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA;AACxC,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,EAAE,cAAc,EAAE,cAAc,EAAoB,EAAE,EAAE;IAC5E,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,iBAAiB,CAAC;QACrD,cAAc;QACd,cAAc;KACf,CAAC,CAAA;IACF,OAAO,0BAA0B,CAAC;QAChC,SAAS;QACT,aAAa;QACb,aAAa,EAAE,cAAc,CAAC,aAAa;KAC5C,CAAC,CAAA;AACJ,CAAC,CAAA;AAOD,MAAM,iBAAiB,GAAG,CAAC,EACzB,cAAc,EACd,cAAc,GACG,EAA2B,EAAE;IAC9C,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;IAExD,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAA;IACjE,MAAM,aAAa,GAAG,aAAa,CAAC;QAClC,UAAU;QACV,QAAQ,EAAE,cAAc,CAAC,QAAQ;QACjC,GAAG,EAAE,cAAc,CAAC,GAAG;KACxB,CAAC,CAAA;IACF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA;AACrC,CAAC,CAAA;AAQD,MAAM,0BAA0B,GAAG,CAAC,EAClC,SAAS,EACT,aAAa,EACb,aAAa,GACmB,EAAE,EAAE,CACpC,WAAW,CACT,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,EACxB,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,EAC5B,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,EACvB,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAC9B,CAAA;AAEH,MAAM,WAAW,GAAG,CAAC,EACnB,cAAc,EACd,cAAc,GACG,EAAc,EAAE;IACjC,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,cAAc,CAAA;IAC1D,IAAI,EAAE,IAAI,EAAE,GAAG,cAAc,CAAA;IAC7B,IAAI,MAAkB,CAAA;IAEtB,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,mBAAmB,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAA;QAChE,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC3D,CAAC;SAAM,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAA;QACrC,IAAI,GAAG,SAAS,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,WAAW,CAChB,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EACrB,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAChD,CAAA;AACH,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,cAA8B,EAAc,EAAE;IACrE,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,CAAC,CAAA;IAC5C,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;AAC5E,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,cAA8B,EAAc,EAAE;IAClE,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAA;IAEnE,MAAM,SAAS,GAAG,WAAW,CAC3B,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,EACzB,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CACxC,CAAA;IAED,OAAO,WAAW,CAChB,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAC5B,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,EACxC,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CACzB,CAAA;AACH,CAAC,CAAA;AAOD,MAAM,mBAAmB,GAAG,CAAC,EAC3B,cAAc,EACd,cAAc,GACW,EAAc,EAAE;IACzC,MAAM,WAAW,GAAG,gBAAgB,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAA;IACxE,OAAO,WAAW,CAChB,WAAW,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAClC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAC3B,CAAA;AACH,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,EACxB,cAAc,EACd,cAAc,GACW,EAAc,EAAE;IACzC,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAA;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAA;IACH,CAAC;IACD,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAE9B,MAAM,QAAQ,GAAG,cAAc,EAAE,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;IAC9D,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAChD,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACxE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;IAElC,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAA;IAEpE,MAAM,KAAK,GAAG,WAAW,CACvB,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,EAC1B,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CACxC,CAAA;IAED,OAAO,WAAW,CAChB,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,EAC1B,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,EAC7B,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,EACpB,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAC5B,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,EACxC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CACxB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,cAA8B,EAAc,EAAE;IAClE,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,CAAC,CAAA;IAC5C,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;AAC5E,CAAC,CAAA;AAED,MAAM,gBAAgB,GAA2B;IAC/C,GAAG,EAAE,EAAE;IACP,OAAO,EAAE,EAAE;IACX,EAAE,EAAE,EAAE;IACN,YAAY,EAAE,EAAE;IAChB,UAAU,EAAE,EAAE;CACf,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,cAA8B,EAAc,EAAE;IAClE,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IACrE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAA;IACH,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IACxC,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAA;IAC1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,8BAA8B,KAAK,CAAC,CAAC,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxG,CAAA;IACH,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAEnC,OAAO,WAAW,CAChB,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,EAC1B,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAC5B,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CACvB,CAAA;AACH,CAAC,CAAA;AAQD,MAAM,aAAa,GAAG,CAAC,EACrB,UAAU,EACV,QAAQ,EACR,GAAG,GACgB,EAAc,EAAE;IACnC,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;IAE3C,MAAM,SAAS,GAAG,WAAW,CAC3B,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,EAC7B,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CACzB,CAAA;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAErC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;IAE1C,MAAM,UAAU,GAAG,WAAW,CAC5B,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,EACxB,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,EACvB,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,CACzB,CAAA;IAED,MAAM,OAAO,GAAG,WAAW,CACzB,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,EACrB,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAC/B,CAAA;IAED,MAAM,QAAQ,GAAG,OAAO,CAAA;IAExB,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEzE,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;AACnE,CAAC,CAAA;AAQD,MAAM,UAAU,GAAG,CAAC,EAClB,SAAS,EACT,aAAa,EACb,SAAS,GACO,EAAc,EAAE,CAChC,WAAW,CACT,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,EACxB,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,EAC5B,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CACzB,CAAA"}
@@ -15,6 +15,7 @@ export declare class DKLS {
15
15
  private inboundSequenceNo;
16
16
  private cache;
17
17
  private setupMessage;
18
+ private pendingKeyImportSession;
18
19
  private readonly localUI?;
19
20
  private readonly publicKey?;
20
21
  private readonly chainCode?;
@@ -27,21 +28,23 @@ export declare class DKLS {
27
28
  });
28
29
  private processOutbound;
29
30
  private processInbound;
31
+ prepareKeygenSetup(): Promise<void>;
30
32
  private startKeygen;
31
- startKeygenWithRetry(): Promise<{
33
+ startKeygenWithRetry(messageId?: string): Promise<{
32
34
  keyshare: string;
33
35
  publicKey: string;
34
36
  chaincode: string;
35
37
  }>;
36
38
  getSetupMessage(): Uint8Array<ArrayBufferLike>;
37
39
  private startReshare;
38
- startReshareWithRetry(keyshare: string | undefined): Promise<{
40
+ startReshareWithRetry(keyshare: string | undefined, messageId?: string): Promise<{
39
41
  keyshare: string;
40
42
  publicKey: string;
41
43
  chaincode: string;
42
44
  }>;
45
+ prepareKeyImportSetup(hexPrivateKey: string, hexChainCode: string, messageId?: string): Promise<void>;
43
46
  private startKeyImport;
44
- startKeyImportWithRetry(privateKey: string, chainCode: string, additionalHeader?: string): Promise<{
47
+ startKeyImportWithRetry(privateKey: string, chainCode: string, setupMessageId?: string, protocolMessageId?: string): Promise<{
45
48
  keyshare: string;
46
49
  publicKey: string;
47
50
  chaincode: string;
@@ -1 +1 @@
1
- {"version":3,"file":"dkls.d.ts","sourceRoot":"","sources":["../../../../../packages/core/mpc/dkls/dkls.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAY3D,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAElC;IACT,OAAO,CAAC,gBAAgB,CAAiB;IACzC,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAQ;gBAEjC,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,OAAO,EACzB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EAAE,EACzB,kBAAkB,EAAE,MAAM,EAAE,EAC5B,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,yBAAyB,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,IAAI,CAAA;KAChE;YAiBW,eAAe;YA2Cf,cAAc;YA2Dd,WAAW;IA4EZ,oBAAoB;;;;;IAY1B,eAAe;YAIR,YAAY;IAgGb,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS;;;;;YAYjD,cAAc;IA+Ef,uBAAuB,CAClC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM;;;;;CAkB5B"}
1
+ {"version":3,"file":"dkls.d.ts","sourceRoot":"","sources":["../../../../../packages/core/mpc/dkls/dkls.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAY3D,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAElC;IACT,OAAO,CAAC,gBAAgB,CAAiB;IACzC,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,uBAAuB,CAAkC;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAQ;gBAEjC,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,OAAO,EACzB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EAAE,EACzB,kBAAkB,EAAE,MAAM,EAAE,EAC5B,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,yBAAyB,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,IAAI,CAAA;KAChE;YAiBW,eAAe;YA6Cf,cAAc;IA8Df,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;YAmClC,WAAW;IA6DZ,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM;;;;;IAY7C,eAAe;YAIR,YAAY;IAiGb,qBAAqB,CAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,CAAC,EAAE,MAAM;;;;;IAcP,qBAAqB,CAChC,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;YA+BF,cAAc;IAuFf,uBAAuB,CAClC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE,MAAM,EACvB,iBAAiB,CAAC,EAAE,MAAM;;;;;CAmB7B"}
package/dist/dkls/dkls.js CHANGED
@@ -27,6 +27,7 @@ export class DKLS {
27
27
  inboundSequenceNo = 0;
28
28
  cache = {};
29
29
  setupMessage = new Uint8Array();
30
+ pendingKeyImportSession = null;
30
31
  localUI;
31
32
  publicKey;
32
33
  chainCode;
@@ -45,7 +46,7 @@ export class DKLS {
45
46
  this.timeoutMs = options?.timeoutMs ?? 60000;
46
47
  this.onInboundSequenceNoChange = options?.onInboundSequenceNoChange;
47
48
  }
48
- async processOutbound(session) {
49
+ async processOutbound(session, messageId) {
49
50
  try {
50
51
  const message = session.outputMessage();
51
52
  if (message === undefined) {
@@ -55,7 +56,7 @@ export class DKLS {
55
56
  }
56
57
  else {
57
58
  await sleep(100);
58
- return await this.processOutbound(session);
59
+ return await this.processOutbound(session, messageId);
59
60
  }
60
61
  }
61
62
  console.log('outbound message:', message);
@@ -74,29 +75,31 @@ export class DKLS {
74
75
  serverUrl: this.serverURL,
75
76
  message: relayMessage,
76
77
  sessionId: this.sessionId,
78
+ messageId,
77
79
  });
78
80
  this.sequenceNo++;
79
81
  });
80
82
  await sleep(100);
81
- return await this.processOutbound(session);
83
+ return await this.processOutbound(session, messageId);
82
84
  }
83
85
  catch (error) {
84
86
  console.error('processOutbound error:', error);
85
87
  await sleep(100);
86
- return await this.processOutbound(session);
88
+ return await this.processOutbound(session, messageId);
87
89
  }
88
90
  }
89
- async processInbound(session, start) {
91
+ async processInbound(session, start, messageId) {
90
92
  try {
91
93
  const parsedMessages = await getMpcRelayMessages({
92
94
  serverUrl: this.serverURL,
93
95
  localPartyId: this.localPartyId,
94
96
  sessionId: this.sessionId,
97
+ messageId,
95
98
  });
96
99
  if (parsedMessages.length === 0) {
97
100
  // no message to download, backoff for 100ms
98
101
  await sleep(100);
99
- return await this.processInbound(session, start);
102
+ return await this.processInbound(session, start, messageId);
100
103
  }
101
104
  for (const msg of parsedMessages) {
102
105
  const cacheKey = `${msg.session_id}-${msg.from}-${msg.hash}`;
@@ -120,6 +123,7 @@ export class DKLS {
120
123
  localPartyId: this.localPartyId,
121
124
  sessionId: this.sessionId,
122
125
  messageHash: msg.hash,
126
+ messageId,
123
127
  });
124
128
  }
125
129
  const end = Date.now();
@@ -129,39 +133,54 @@ export class DKLS {
129
133
  return false;
130
134
  }
131
135
  await sleep(100);
132
- return await this.processInbound(session, start);
136
+ return await this.processInbound(session, start, messageId);
133
137
  }
134
138
  catch (error) {
135
139
  console.error('processInbound error:', error);
136
140
  await sleep(100);
137
- return await this.processInbound(session, start);
141
+ return await this.processInbound(session, start, messageId);
138
142
  }
139
143
  }
140
- async startKeygen(attempt) {
144
+ async prepareKeygenSetup() {
145
+ if (this.setupMessage.length > 0) {
146
+ return;
147
+ }
148
+ if (this.isInitiateDevice) {
149
+ const threshold = getKeygenThreshold(this.keygenCommittee.length);
150
+ this.setupMessage = KeygenSession.setup(undefined, threshold, this.keygenCommittee);
151
+ const encryptedSetupMsg = toMpcServerMessage(this.setupMessage, this.hexEncryptionKey);
152
+ await uploadMpcSetupMessage({
153
+ serverUrl: this.serverURL,
154
+ message: encryptedSetupMsg,
155
+ sessionId: this.sessionId,
156
+ });
157
+ console.log('uploaded setup message successfully');
158
+ return;
159
+ }
160
+ const encodedEncryptedSetupMsg = await waitForSetupMessage({
161
+ serverUrl: this.serverURL,
162
+ sessionId: this.sessionId,
163
+ });
164
+ this.setupMessage = fromMpcServerMessage(encodedEncryptedSetupMsg, this.hexEncryptionKey);
165
+ }
166
+ async startKeygen(attempt, messageId) {
141
167
  console.log('startKeygen attempt:', attempt);
142
168
  console.log('session id:', this.sessionId);
143
169
  this.isKeygenComplete = false;
144
170
  this.inboundSequenceNo = 0;
145
171
  this.onInboundSequenceNoChange?.(this.inboundSequenceNo);
146
172
  try {
147
- if (this.isInitiateDevice && attempt === 0) {
148
- const threshold = getKeygenThreshold(this.keygenCommittee.length);
149
- this.setupMessage = KeygenSession.setup(undefined, threshold, this.keygenCommittee);
150
- // upload setup message to server
151
- const encryptedSetupMsg = toMpcServerMessage(this.setupMessage, this.hexEncryptionKey);
152
- await uploadMpcSetupMessage({
153
- serverUrl: this.serverURL,
154
- message: encryptedSetupMsg,
155
- sessionId: this.sessionId,
156
- });
157
- console.log('uploaded setup message successfully');
158
- }
159
- else {
160
- const encodedEncryptedSetupMsg = await waitForSetupMessage({
161
- serverUrl: this.serverURL,
162
- sessionId: this.sessionId,
163
- });
164
- this.setupMessage = fromMpcServerMessage(encodedEncryptedSetupMsg, this.hexEncryptionKey);
173
+ if (this.setupMessage.length === 0) {
174
+ if (this.isInitiateDevice && attempt === 0) {
175
+ await this.prepareKeygenSetup();
176
+ }
177
+ else {
178
+ const encodedEncryptedSetupMsg = await waitForSetupMessage({
179
+ serverUrl: this.serverURL,
180
+ sessionId: this.sessionId,
181
+ });
182
+ this.setupMessage = fromMpcServerMessage(encodedEncryptedSetupMsg, this.hexEncryptionKey);
183
+ }
165
184
  }
166
185
  let session;
167
186
  if ('create' in this.keygenOperation) {
@@ -176,8 +195,8 @@ export class DKLS {
176
195
  throw new Error('Invalid keygen operation');
177
196
  }
178
197
  const start = Date.now();
179
- const outbound = this.processOutbound(session);
180
- const inbound = this.processInbound(session, start);
198
+ const outbound = this.processOutbound(session, messageId);
199
+ const inbound = this.processInbound(session, start, messageId);
181
200
  const [, inboundResult] = await Promise.all([outbound, inbound]);
182
201
  if (inboundResult) {
183
202
  const keyShare = session.finish();
@@ -197,11 +216,11 @@ export class DKLS {
197
216
  throw error;
198
217
  }
199
218
  }
200
- async startKeygenWithRetry() {
219
+ async startKeygenWithRetry(messageId) {
201
220
  await initializeMpcLib('ecdsa');
202
221
  for (let i = 0; i < 3; i++) {
203
222
  try {
204
- const result = await this.startKeygen(i);
223
+ const result = await this.startKeygen(i, messageId);
205
224
  return result;
206
225
  }
207
226
  catch (error) {
@@ -213,7 +232,7 @@ export class DKLS {
213
232
  getSetupMessage() {
214
233
  return this.setupMessage;
215
234
  }
216
- async startReshare(dklsKeyshare, attempt) {
235
+ async startReshare(dklsKeyshare, attempt, messageId) {
217
236
  console.log('startReshare dkls, attempt:', attempt);
218
237
  this.isKeygenComplete = false;
219
238
  this.inboundSequenceNo = 0;
@@ -261,8 +280,8 @@ export class DKLS {
261
280
  const session = new QcSession(setupMessage, this.localPartyId, localKeyshare);
262
281
  try {
263
282
  const start = Date.now();
264
- const outbound = this.processOutbound(session);
265
- const inbound = this.processInbound(session, start);
283
+ const outbound = this.processOutbound(session, messageId);
284
+ const inbound = this.processInbound(session, start, messageId);
266
285
  const [, inboundResult] = await Promise.all([outbound, inbound]);
267
286
  if (inboundResult) {
268
287
  const keyShare = session.finish();
@@ -289,11 +308,11 @@ export class DKLS {
289
308
  throw error;
290
309
  }
291
310
  }
292
- async startReshareWithRetry(keyshare) {
311
+ async startReshareWithRetry(keyshare, messageId) {
293
312
  await initializeMpcLib('ecdsa');
294
313
  for (let i = 0; i < 3; i++) {
295
314
  try {
296
- const result = await this.startReshare(keyshare, i);
315
+ const result = await this.startReshare(keyshare, i, messageId);
297
316
  return result;
298
317
  }
299
318
  catch (error) {
@@ -302,33 +321,58 @@ export class DKLS {
302
321
  }
303
322
  throw new Error('DKLS reshare failed');
304
323
  }
305
- async startKeyImport(hexPrivateKey, hexChainCode, attempt, additionalHeader) {
324
+ async prepareKeyImportSetup(hexPrivateKey, hexChainCode, messageId) {
325
+ if (!this.isInitiateDevice) {
326
+ return;
327
+ }
328
+ const threshold = getKeygenThreshold(this.keygenCommittee.length);
329
+ const privateKey = Buffer.from(hexPrivateKey, 'hex');
330
+ const chainCode = Buffer.from(hexChainCode, 'hex');
331
+ this.pendingKeyImportSession = new KeyImportInitiator(Uint8Array.from(privateKey), Uint8Array.from(chainCode), threshold, this.keygenCommittee);
332
+ this.setupMessage = this.pendingKeyImportSession.setup;
333
+ const encryptedSetupMsg = toMpcServerMessage(this.setupMessage, this.hexEncryptionKey);
334
+ await uploadMpcSetupMessage({
335
+ serverUrl: this.serverURL,
336
+ message: encryptedSetupMsg,
337
+ sessionId: this.sessionId,
338
+ messageId,
339
+ });
340
+ console.log('uploaded setup message successfully');
341
+ }
342
+ async startKeyImport(hexPrivateKey, hexChainCode, attempt, setupMessageId, protocolMessageId) {
306
343
  console.log('startKeyImport attempt:', attempt);
307
344
  this.isKeygenComplete = false;
308
345
  try {
309
346
  let session = null;
310
347
  if (this.isInitiateDevice) {
311
- const threshold = getKeygenThreshold(this.keygenCommittee.length);
312
- const privateKey = Buffer.from(hexPrivateKey, 'hex');
313
- const chainCode = Buffer.from(hexChainCode, 'hex');
314
- const keyImportSession = new KeyImportInitiator(Uint8Array.from(privateKey), Uint8Array.from(chainCode), threshold, this.keygenCommittee);
315
- this.setupMessage = keyImportSession.setup;
316
- session = keyImportSession;
317
- // upload setup message to server
318
- const encryptedSetupMsg = toMpcServerMessage(this.setupMessage, this.hexEncryptionKey);
319
- await uploadMpcSetupMessage({
320
- serverUrl: this.serverURL,
321
- message: encryptedSetupMsg,
322
- sessionId: this.sessionId,
323
- messageId: additionalHeader,
324
- });
325
- console.log('uploaded setup message successfully');
348
+ if (attempt === 0 && this.pendingKeyImportSession) {
349
+ const pendingSession = this.pendingKeyImportSession;
350
+ session = pendingSession;
351
+ this.setupMessage = pendingSession.setup;
352
+ this.pendingKeyImportSession = null;
353
+ }
354
+ else {
355
+ const threshold = getKeygenThreshold(this.keygenCommittee.length);
356
+ const privateKey = Buffer.from(hexPrivateKey, 'hex');
357
+ const chainCode = Buffer.from(hexChainCode, 'hex');
358
+ const keyImportSession = new KeyImportInitiator(Uint8Array.from(privateKey), Uint8Array.from(chainCode), threshold, this.keygenCommittee);
359
+ this.setupMessage = keyImportSession.setup;
360
+ session = keyImportSession;
361
+ const encryptedSetupMsg = toMpcServerMessage(this.setupMessage, this.hexEncryptionKey);
362
+ await uploadMpcSetupMessage({
363
+ serverUrl: this.serverURL,
364
+ message: encryptedSetupMsg,
365
+ sessionId: this.sessionId,
366
+ messageId: setupMessageId,
367
+ });
368
+ console.log('uploaded setup message successfully');
369
+ }
326
370
  }
327
371
  else {
328
372
  const encodedEncryptedSetupMsg = await waitForSetupMessage({
329
373
  serverUrl: this.serverURL,
330
374
  sessionId: this.sessionId,
331
- messageId: additionalHeader,
375
+ messageId: setupMessageId,
332
376
  });
333
377
  this.setupMessage = fromMpcServerMessage(encodedEncryptedSetupMsg, this.hexEncryptionKey);
334
378
  }
@@ -343,9 +387,10 @@ export class DKLS {
343
387
  if (session === null) {
344
388
  throw new Error('DKLS key import session is null');
345
389
  }
390
+ const exchangeMessageId = protocolMessageId;
346
391
  const start = Date.now();
347
- const outbound = this.processOutbound(session);
348
- const inbound = this.processInbound(session, start);
392
+ const outbound = this.processOutbound(session, exchangeMessageId);
393
+ const inbound = this.processInbound(session, start, exchangeMessageId);
349
394
  const [, inboundResult] = await Promise.all([outbound, inbound]);
350
395
  if (inboundResult) {
351
396
  const keyShare = session.finish();
@@ -365,11 +410,11 @@ export class DKLS {
365
410
  throw error;
366
411
  }
367
412
  }
368
- async startKeyImportWithRetry(privateKey, chainCode, additionalHeader) {
413
+ async startKeyImportWithRetry(privateKey, chainCode, setupMessageId, protocolMessageId) {
369
414
  await initializeMpcLib('ecdsa');
370
415
  for (let i = 0; i < 3; i++) {
371
416
  try {
372
- const result = await this.startKeyImport(privateKey, chainCode, i, additionalHeader);
417
+ const result = await this.startKeyImport(privateKey, chainCode, i, setupMessageId, protocolMessageId);
373
418
  return result;
374
419
  }
375
420
  catch (error) {