@vultisig/core-chain 1.1.0 → 1.2.1

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 (123) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/dist/amount/toChainAmount.d.ts +6 -1
  3. package/dist/amount/toChainAmount.d.ts.map +1 -1
  4. package/dist/amount/toChainAmount.js +88 -0
  5. package/dist/amount/toChainAmount.js.map +1 -1
  6. package/dist/chains/cosmos/qbtc/claim/BtcAddressType.d.ts +7 -0
  7. package/dist/chains/cosmos/qbtc/claim/BtcAddressType.d.ts.map +1 -0
  8. package/dist/chains/cosmos/qbtc/claim/BtcAddressType.js +9 -0
  9. package/dist/chains/cosmos/qbtc/claim/BtcAddressType.js.map +1 -0
  10. package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.d.ts +8 -0
  11. package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.d.ts.map +1 -0
  12. package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.js +2 -0
  13. package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.js.map +1 -0
  14. package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.d.ts +25 -0
  15. package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.d.ts.map +1 -0
  16. package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.js +43 -0
  17. package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.js.map +1 -0
  18. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.d.ts +26 -0
  19. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.d.ts.map +1 -0
  20. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.js +57 -0
  21. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.js.map +1 -0
  22. package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.d.ts +49 -0
  23. package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.d.ts.map +1 -0
  24. package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.js +85 -0
  25. package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.js.map +1 -0
  26. package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.d.ts +14 -0
  27. package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.d.ts.map +1 -0
  28. package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.js +31 -0
  29. package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.js.map +1 -0
  30. package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.d.ts +3 -0
  31. package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.d.ts.map +1 -0
  32. package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.js +13 -0
  33. package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.js.map +1 -0
  34. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.d.ts +14 -0
  35. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.d.ts.map +1 -0
  36. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.js +22 -0
  37. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.js.map +1 -0
  38. package/dist/chains/cosmos/qbtc/claim/proofService.d.ts +50 -0
  39. package/dist/chains/cosmos/qbtc/claim/proofService.d.ts.map +1 -0
  40. package/dist/chains/cosmos/qbtc/claim/proofService.js +71 -0
  41. package/dist/chains/cosmos/qbtc/claim/proofService.js.map +1 -0
  42. package/dist/chains/cosmos/thor/kujira-merge/kujiraCoinsOnThorChain.js +1 -1
  43. package/dist/chains/cosmos/thor/lp/halts.d.ts +56 -0
  44. package/dist/chains/cosmos/thor/lp/halts.d.ts.map +1 -0
  45. package/dist/chains/cosmos/thor/lp/halts.js +95 -0
  46. package/dist/chains/cosmos/thor/lp/halts.js.map +1 -0
  47. package/dist/chains/cosmos/thor/lp/index.d.ts +34 -11
  48. package/dist/chains/cosmos/thor/lp/index.d.ts.map +1 -1
  49. package/dist/chains/cosmos/thor/lp/index.js +9 -15
  50. package/dist/chains/cosmos/thor/lp/index.js.map +1 -1
  51. package/dist/chains/cosmos/thor/lp/lockup.d.ts +47 -0
  52. package/dist/chains/cosmos/thor/lp/lockup.d.ts.map +1 -0
  53. package/dist/chains/cosmos/thor/lp/lockup.js +56 -0
  54. package/dist/chains/cosmos/thor/lp/lockup.js.map +1 -0
  55. package/dist/chains/cosmos/thor/lp/lpChainMap.d.ts +25 -0
  56. package/dist/chains/cosmos/thor/lp/lpChainMap.d.ts.map +1 -0
  57. package/dist/chains/cosmos/thor/lp/lpChainMap.js +30 -0
  58. package/dist/chains/cosmos/thor/lp/lpChainMap.js.map +1 -0
  59. package/dist/chains/cosmos/thor/lp/math.d.ts +129 -0
  60. package/dist/chains/cosmos/thor/lp/math.d.ts.map +1 -0
  61. package/dist/chains/cosmos/thor/lp/math.js +227 -0
  62. package/dist/chains/cosmos/thor/lp/math.js.map +1 -0
  63. package/dist/chains/cosmos/thor/lp/memberPool.d.ts +4 -0
  64. package/dist/chains/cosmos/thor/lp/memberPool.d.ts.map +1 -0
  65. package/dist/chains/cosmos/thor/lp/memberPool.js +24 -0
  66. package/dist/chains/cosmos/thor/lp/memberPool.js.map +1 -0
  67. package/dist/chains/cosmos/thor/lp/memo.d.ts +38 -17
  68. package/dist/chains/cosmos/thor/lp/memo.d.ts.map +1 -1
  69. package/dist/chains/cosmos/thor/lp/memo.js +40 -16
  70. package/dist/chains/cosmos/thor/lp/memo.js.map +1 -1
  71. package/dist/chains/cosmos/thor/lp/pairing.d.ts +30 -0
  72. package/dist/chains/cosmos/thor/lp/pairing.d.ts.map +1 -0
  73. package/dist/chains/cosmos/thor/lp/pairing.js +44 -0
  74. package/dist/chains/cosmos/thor/lp/pairing.js.map +1 -0
  75. package/dist/chains/cosmos/thor/lp/payload.d.ts +30 -10
  76. package/dist/chains/cosmos/thor/lp/payload.d.ts.map +1 -1
  77. package/dist/chains/cosmos/thor/lp/payload.js +30 -18
  78. package/dist/chains/cosmos/thor/lp/payload.js.map +1 -1
  79. package/dist/chains/cosmos/thor/lp/position.d.ts +15 -22
  80. package/dist/chains/cosmos/thor/lp/position.d.ts.map +1 -1
  81. package/dist/chains/cosmos/thor/lp/position.js +82 -35
  82. package/dist/chains/cosmos/thor/lp/position.js.map +1 -1
  83. package/dist/chains/cosmos/thor/lp/positions.d.ts +15 -0
  84. package/dist/chains/cosmos/thor/lp/positions.d.ts.map +1 -0
  85. package/dist/chains/cosmos/thor/lp/positions.js +47 -0
  86. package/dist/chains/cosmos/thor/lp/positions.js.map +1 -0
  87. package/dist/chains/cosmos/thor/lp/types.d.ts +45 -0
  88. package/dist/chains/cosmos/thor/lp/types.d.ts.map +1 -0
  89. package/dist/chains/cosmos/thor/lp/types.js +2 -0
  90. package/dist/chains/cosmos/thor/lp/types.js.map +1 -0
  91. package/dist/chains/cosmos/thor/lp/validation.d.ts +32 -7
  92. package/dist/chains/cosmos/thor/lp/validation.d.ts.map +1 -1
  93. package/dist/chains/cosmos/thor/lp/validation.js +76 -11
  94. package/dist/chains/cosmos/thor/lp/validation.js.map +1 -1
  95. package/dist/chains/evm/tx/fee/tw/getEvmTwFeeFields.js +1 -1
  96. package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.d.ts +21 -0
  97. package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.d.ts.map +1 -0
  98. package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.js +182 -0
  99. package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.js.map +1 -0
  100. package/dist/coin/chainFeeCoin.js +1 -1
  101. package/dist/coin/coins.js +1 -1
  102. package/dist/coin/find/index.js +2 -2
  103. package/dist/coin/knownTokens/cosmos.js +1 -1
  104. package/dist/coin/knownTokens/utils.js +1 -1
  105. package/dist/publicKey/address/cardano.js +1 -1
  106. package/dist/publicKey/address/cardano.js.map +1 -1
  107. package/dist/publicKey/address/deriveQbtcAddress.js +2 -2
  108. package/dist/publicKey/address/deriveQbtcAddress.js.map +1 -1
  109. package/dist/scripts/printKnownTokens.js +1 -1
  110. package/dist/swap/quote/findSwapQuote.d.ts +1 -1
  111. package/dist/swap/quote/findSwapQuote.js +1 -1
  112. package/dist/tx/broadcast/resolvers/evm.d.ts.map +1 -1
  113. package/dist/tx/broadcast/resolvers/evm.js +1 -1
  114. package/dist/tx/broadcast/resolvers/evm.js.map +1 -1
  115. package/dist/tx/broadcast/resolvers/ton.js +1 -1
  116. package/dist/tx/broadcast/resolvers/ton.js.map +1 -1
  117. package/dist/tx/hash/resolvers/cardano.js +1 -1
  118. package/dist/tx/hash/resolvers/cardano.js.map +1 -1
  119. package/package.json +91 -6
  120. package/dist/chains/cosmos/thor/lp/affiliate.d.ts +0 -16
  121. package/dist/chains/cosmos/thor/lp/affiliate.d.ts.map +0 -1
  122. package/dist/chains/cosmos/thor/lp/affiliate.js +0 -16
  123. package/dist/chains/cosmos/thor/lp/affiliate.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/validation.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAetE,CAAA"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/validation.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MAQhD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBxE,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,qBAAqB,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAiCtE,CAAA"}
@@ -10,26 +10,91 @@ const extractPoolStatus = (raw) => {
10
10
  return undefined;
11
11
  };
12
12
  /**
13
- * Verify a THORChain pool is currently depositable.
13
+ * Build the mimir flag key THORChain uses to pause LP deposits for a
14
+ * single pool. Format: `PAUSELPDEPOSIT-{CHAIN}-{ASSET_PLUS_CONTRACT}`.
14
15
  *
15
- * Hits the thornode `/thorchain/pool/{asset}` endpoint and asserts the
16
- * `status` field is `Available`. Throws on `Staged`, `Suspended`, or any
17
- * other non-Available state, and on network failures or unexpected payloads.
16
+ * Examples:
17
+ * BTC.BTC → PAUSELPDEPOSIT-BTC-BTC
18
+ * DOGE.DOGE → PAUSELPDEPOSIT-DOGE-DOGE
19
+ * ETH.USDC-0XA0B... → PAUSELPDEPOSIT-ETH-USDC-0XA0B...
18
20
  *
19
- * Use this as the fail-fast gate before building an LP add payload — it is
20
- * cheaper than building the payload first and discovering at broadcast time
21
- * that the pool is paused.
21
+ * Note: `CHAIN.ASSET` splits on the FIRST `.`; the rest (including any
22
+ * `-CONTRACT` suffix) is the asset portion, which is appended with a
23
+ * single `-` separator.
24
+ */
25
+ export const poolPauseMimirKey = (pool) => {
26
+ const dotIdx = pool.indexOf('.');
27
+ if (dotIdx <= 0 || dotIdx >= pool.length - 1) {
28
+ throw new Error(`poolPauseMimirKey: invalid pool id ${pool}`);
29
+ }
30
+ const chain = pool.slice(0, dotIdx);
31
+ const asset = pool.slice(dotIdx + 1);
32
+ return `PAUSELPDEPOSIT-${chain}-${asset}`;
33
+ };
34
+ /**
35
+ * Fetch the raw thornode mimir map. Returns an object with flag keys as
36
+ * numbers. Used to check per-pool LP deposit pauses (PAUSELPDEPOSIT-*),
37
+ * liquidity lockup (LIQUIDITYLOCKUPBLOCKS), etc.
38
+ */
39
+ export const getThorchainMimir = async () => {
40
+ const url = `${cosmosRpcUrl[Chain.THORChain]}/thorchain/mimir`;
41
+ const raw = await queryUrl(url);
42
+ if (!raw || typeof raw !== 'object') {
43
+ throw new Error(`getThorchainMimir: unexpected response shape from ${url}`);
44
+ }
45
+ // thornode /thorchain/mimir returns numeric values, but the JSON could
46
+ // deserialize as number or numeric string depending on the upstream
47
+ // proxy. Normalize to number, drop entries we can't coerce — downstream
48
+ // callers do `typeof v === 'number' && v > 0` checks anyway, and a NaN
49
+ // would silently defeat those.
50
+ const out = {};
51
+ for (const [k, v] of Object.entries(raw)) {
52
+ if (typeof v === 'number' && Number.isFinite(v)) {
53
+ out[k] = v;
54
+ }
55
+ else if (typeof v === 'string' && /^-?\d+$/.test(v)) {
56
+ out[k] = Number(v);
57
+ }
58
+ }
59
+ return out;
60
+ };
61
+ /**
62
+ * Verify a THORChain pool is currently depositable. Checks TWO layers:
63
+ *
64
+ * 1. **Thornode pool status** — `/thorchain/pool/{asset}.status` must be
65
+ * `Available`. Catches staged / suspended pools.
66
+ * 2. **Mimir per-pool pause flag** — `PAUSELPDEPOSIT-{chain}-{asset}`
67
+ * must not be set. Catches the case where the pool is listed as
68
+ * available BUT the THORChain handler rejects LP adds for it via
69
+ * mimir (what happened to BTC.BTC on 2026-04-10: pool.status was
70
+ * `Available`, deposits silently accepted into mempool, handler
71
+ * rejected at execution with "deposits are paused for asset
72
+ * (btc.btc): internal error"). Without the mimir check, the user
73
+ * signs a tx that is guaranteed to fail on-chain.
74
+ *
75
+ * Use this as the fail-fast gate before building an LP add payload.
22
76
  */
23
77
  export const assertPoolDepositable = async (pool) => {
24
78
  assertValidPoolId(pool);
25
- const url = `${cosmosRpcUrl[Chain.THORChain]}/thorchain/pool/${encodeURIComponent(pool)}`;
26
- const raw = await queryUrl(url);
27
- const status = extractPoolStatus(raw);
79
+ // Run both checks in parallel — they hit different endpoints so there
80
+ // is no reason to serialize them.
81
+ const [poolRaw, mimir] = await Promise.all([
82
+ queryUrl(`${cosmosRpcUrl[Chain.THORChain]}/thorchain/pool/${encodeURIComponent(pool)}`),
83
+ getThorchainMimir(),
84
+ ]);
85
+ // Check 1: thornode pool.status
86
+ const status = extractPoolStatus(poolRaw);
28
87
  if (status === undefined) {
29
- throw new Error(`assertPoolDepositable: pool ${pool} response from ${url} did not include a string \`status\` field`);
88
+ throw new Error(`assertPoolDepositable: pool ${pool} response from thornode did not include a string \`status\` field`);
30
89
  }
31
90
  if (status !== 'Available') {
32
91
  throw new Error(`assertPoolDepositable: pool ${pool} status is ${status}, must be Available for LP add`);
33
92
  }
93
+ // Check 2: mimir per-pool PAUSELPDEPOSIT flag
94
+ const pauseKey = poolPauseMimirKey(pool);
95
+ const pauseValue = mimir[pauseKey];
96
+ if (typeof pauseValue === 'number' && pauseValue > 0) {
97
+ throw new Error(`assertPoolDepositable: pool ${pool} has LP deposits paused on-chain via mimir ${pauseKey}=${pauseValue}. THORChain validators have disabled new adds for this pool; any tx would be rejected at handler execution time.`);
98
+ }
34
99
  };
35
100
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAA;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAE3C,MAAM,iBAAiB,GAAG,CAAC,GAAY,EAAsB,EAAE;IAC7D,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;QACtD,MAAM,MAAM,GAAI,GAA2B,CAAC,MAAM,CAAA;QAClD,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IACxD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,IAAY,EAAiB,EAAE;IACzE,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACvB,MAAM,GAAG,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAA;IACzF,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAU,GAAG,CAAC,CAAA;IACxC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,+BAA+B,IAAI,kBAAkB,GAAG,4CAA4C,CACrG,CAAA;IACH,CAAC;IACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,+BAA+B,IAAI,cAAc,MAAM,gCAAgC,CACxF,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/validation.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { match } from '@vultisig/lib-utils/match';
2
2
  import { TW } from '@trustwallet/wallet-core';
3
3
  import { toEvmTwAmount } from '../../tw/toEvmTwAmount.js';
4
- import { evmChainTxFeeFormat } from '..';
4
+ import { evmChainTxFeeFormat } from '../index.js';
5
5
  export const getEvmTwFeeFields = ({ chain, maxFeePerGasWei, priorityFee, gasLimit, }) => {
6
6
  const feeFormat = evmChainTxFeeFormat[chain];
7
7
  return match(feeFormat, {
@@ -0,0 +1,21 @@
1
+ import { SignBitcoin } from '@vultisig/core-mpc/types/vultisig/keysign/v1/wasm_execute_contract_payload_pb';
2
+ import { Network, Psbt } from 'bitcoinjs-lib';
3
+ type BuildSignBitcoinFromPsbtInput = {
4
+ psbt: Psbt;
5
+ senderAddress: string;
6
+ /** Bitcoin network for address decoding. Defaults to mainnet. */
7
+ network?: Network;
8
+ };
9
+ /**
10
+ * Decompose a BIP-174 PSBT into a structured SignBitcoin proto message.
11
+ * Co-signing devices can verify every input/output and compute exact sighashes
12
+ * from these fields without receiving an opaque blob.
13
+ *
14
+ * Currently supports P2WPKH and P2SH-P2WPKH inputs only.
15
+ * P2TR (Taproot/BIP-341) requires a different sighash algorithm and is planned for follow-up.
16
+ * P2PKH (legacy) requires legacy sighash (not BIP-143).
17
+ * See https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki
18
+ */
19
+ export declare const buildSignBitcoinFromPsbt: ({ psbt, senderAddress, network, }: BuildSignBitcoinFromPsbtInput) => SignBitcoin;
20
+ export {};
21
+ //# sourceMappingURL=buildSignBitcoinFromPsbt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildSignBitcoinFromPsbt.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/utxo/tx/buildSignBitcoinFromPsbt.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,WAAW,EAEZ,MAAM,+EAA+E,CAAA;AACtF,OAAO,EAEL,OAAO,EAGP,IAAI,EAGL,MAAM,eAAe,CAAA;AAsEtB,KAAK,6BAA6B,GAAG;IACnC,IAAI,EAAE,IAAI,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,GAAI,mCAItC,6BAA6B,KAAG,WA4IlC,CAAA"}
@@ -0,0 +1,182 @@
1
+ import { create } from '@bufbuild/protobuf';
2
+ import { BitcoinInputSchema, BitcoinOutputSchema, SignBitcoinSchema, } from '@vultisig/core-mpc/types/vultisig/keysign/v1/wasm_execute_contract_payload_pb';
3
+ import { address as btcAddress, networks, opcodes, script as bscript, Transaction, } from 'bitcoinjs-lib';
4
+ /**
5
+ * Detect the script type from a scriptPubKey buffer.
6
+ * See https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki
7
+ */
8
+ const detectScriptType = (scriptPubKey, redeemScript) => {
9
+ // P2WPKH: OP_0 PUSH_20 <20-byte-hash> (22 bytes)
10
+ if (scriptPubKey.length === 22 && scriptPubKey[0] === 0x00 && scriptPubKey[1] === 0x14) {
11
+ return 'p2wpkh';
12
+ }
13
+ // P2PKH: OP_DUP OP_HASH160 PUSH_20 <20-byte-hash> OP_EQUALVERIFY OP_CHECKSIG (25 bytes)
14
+ if (scriptPubKey.length === 25 &&
15
+ scriptPubKey[0] === 0x76 &&
16
+ scriptPubKey[1] === 0xa9 &&
17
+ scriptPubKey[2] === 0x14 &&
18
+ scriptPubKey[23] === 0x88 &&
19
+ scriptPubKey[24] === 0xac) {
20
+ return 'p2pkh';
21
+ }
22
+ // P2TR: OP_1 PUSH_32 <32-byte-key> (34 bytes)
23
+ if (scriptPubKey.length === 34 && scriptPubKey[0] === 0x51 && scriptPubKey[1] === 0x20) {
24
+ return 'p2tr';
25
+ }
26
+ // P2WSH: OP_0 PUSH_32 <32-byte-hash> (34 bytes)
27
+ if (scriptPubKey.length === 34 && scriptPubKey[0] === 0x00 && scriptPubKey[1] === 0x20) {
28
+ return 'p2wsh';
29
+ }
30
+ // P2SH-P2WPKH: only when redeemScript is a valid P2WPKH witness program
31
+ const redeem = redeemScript ? Buffer.from(redeemScript) : undefined;
32
+ if (scriptPubKey.length === 23 &&
33
+ scriptPubKey[0] === 0xa9 &&
34
+ scriptPubKey[1] === 0x14 &&
35
+ scriptPubKey[22] === 0x87 &&
36
+ redeem?.length === 22 &&
37
+ redeem[0] === 0x00 &&
38
+ redeem[1] === 0x14) {
39
+ return 'p2sh-p2wpkh';
40
+ }
41
+ return 'unknown';
42
+ };
43
+ /** Script types that computePreSigningHashes can produce sighashes for. */
44
+ const SUPPORTED_SCRIPT_TYPES = new Set(['p2wpkh', 'p2sh-p2wpkh']);
45
+ const isOpReturn = (script) => {
46
+ const chunks = bscript.decompile(script);
47
+ return chunks !== null && chunks[0] === opcodes.OP_RETURN;
48
+ };
49
+ const getOpReturnHex = (script) => {
50
+ const chunks = bscript.decompile(script);
51
+ if (!chunks || chunks[0] !== opcodes.OP_RETURN)
52
+ return undefined;
53
+ const dataChunks = chunks
54
+ .slice(1)
55
+ .filter((chunk) => Buffer.isBuffer(chunk));
56
+ if (dataChunks.length === 0)
57
+ return undefined;
58
+ return Buffer.concat(dataChunks).toString('hex');
59
+ };
60
+ /**
61
+ * Decompose a BIP-174 PSBT into a structured SignBitcoin proto message.
62
+ * Co-signing devices can verify every input/output and compute exact sighashes
63
+ * from these fields without receiving an opaque blob.
64
+ *
65
+ * Currently supports P2WPKH and P2SH-P2WPKH inputs only.
66
+ * P2TR (Taproot/BIP-341) requires a different sighash algorithm and is planned for follow-up.
67
+ * P2PKH (legacy) requires legacy sighash (not BIP-143).
68
+ * See https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki
69
+ */
70
+ export const buildSignBitcoinFromPsbt = ({ psbt, senderAddress, network = networks.bitcoin, }) => {
71
+ // Compute anyInputHasBip32 once (not per-input) for O(n) ownership detection
72
+ const anyInputHasBip32 = psbt.data.inputs.some(inp => (inp.bip32Derivation && inp.bip32Derivation.length > 0) ||
73
+ (inp.tapBip32Derivation &&
74
+ inp.tapBip32Derivation.length > 0));
75
+ const inputs = psbt.txInputs.map((txInput, i) => {
76
+ const inputData = psbt.data.inputs[i];
77
+ // Prefer witnessUtxo; fall back to nonWitnessUtxo (full prev tx)
78
+ let scriptPubKey;
79
+ let inputValue;
80
+ if (inputData.witnessUtxo) {
81
+ scriptPubKey = Buffer.from(inputData.witnessUtxo.script);
82
+ inputValue = BigInt(inputData.witnessUtxo.value);
83
+ // Fee snipe mitigation: cross-validate against nonWitnessUtxo if present.
84
+ // A malicious PSBT can lie about witnessUtxo.value; BIP-143 commits to it
85
+ // in the sighash, causing excess fees if the actual UTXO is worth more.
86
+ // See https://blog.trezor.io/details-of-the-multisig-change-address-issue-and-its-mitigation-6370ad73ed2a
87
+ if (inputData.nonWitnessUtxo) {
88
+ const prevTx = Transaction.fromBuffer(Buffer.from(inputData.nonWitnessUtxo));
89
+ // BIP-174: verify nonWitnessUtxo txid matches the input's prevout hash
90
+ const prevTxId = prevTx.getId();
91
+ const expectedTxId = Buffer.from(txInput.hash).reverse().toString('hex');
92
+ if (prevTxId !== expectedTxId) {
93
+ throw new Error(`Input #${i}: nonWitnessUtxo txid (${prevTxId.slice(0, 16)}...) does not match ` +
94
+ `input prevout (${expectedTxId.slice(0, 16)}...)`);
95
+ }
96
+ const prevOutput = prevTx.outs[txInput.index];
97
+ if (prevOutput && BigInt(prevOutput.value) !== inputValue) {
98
+ throw new Error(`Input #${i}: witnessUtxo value (${inputValue}) does not match ` +
99
+ `nonWitnessUtxo value (${prevOutput.value}) - possible fee snipe`);
100
+ }
101
+ }
102
+ }
103
+ else if (inputData.nonWitnessUtxo) {
104
+ const prevTx = Transaction.fromBuffer(Buffer.from(inputData.nonWitnessUtxo));
105
+ const prevOutput = prevTx.outs[txInput.index];
106
+ if (!prevOutput) {
107
+ throw new Error(`Input #${i}: nonWitnessUtxo has no output at index ${txInput.index}`);
108
+ }
109
+ scriptPubKey = Buffer.from(prevOutput.script);
110
+ inputValue = BigInt(prevOutput.value);
111
+ }
112
+ else {
113
+ throw new Error(`Input #${i} missing both witnessUtxo and nonWitnessUtxo`);
114
+ }
115
+ if (inputValue < 0n) {
116
+ throw new Error(`Input #${i}: negative amount (${inputValue})`);
117
+ }
118
+ const scriptType = detectScriptType(scriptPubKey, inputData.redeemScript);
119
+ // Fail early for unsupported script types rather than at sighash time.
120
+ // This gives a clearer error at decomposition time.
121
+ const hasBip32 = (inputData.bip32Derivation && inputData.bip32Derivation.length > 0) ||
122
+ (inputData.tapBip32Derivation &&
123
+ inputData.tapBip32Derivation.length > 0);
124
+ const isOurs = anyInputHasBip32 ? !!hasBip32 : true;
125
+ if (isOurs && !SUPPORTED_SCRIPT_TYPES.has(scriptType)) {
126
+ const hints = {
127
+ p2tr: 'P2TR (Taproot) requires BIP-341 sighash. See https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki',
128
+ p2pkh: 'P2PKH (legacy) requires legacy sighash, not BIP-143.',
129
+ p2wsh: 'P2WSH requires BIP-143 with the full witnessScript as scriptCode.',
130
+ unknown: `Unrecognized scriptPubKey: ${scriptPubKey.toString('hex')}`,
131
+ };
132
+ throw new Error(`Input #${i}: unsupported script type '${scriptType}' for signing. ${hints[scriptType] ?? ''}`);
133
+ }
134
+ const sighashType = inputData.sighashType ?? 1; // SIGHASH_ALL
135
+ const redeemScript = inputData.redeemScript
136
+ ? Buffer.from(inputData.redeemScript).toString('hex')
137
+ : undefined;
138
+ return create(BitcoinInputSchema, {
139
+ hash: Buffer.from(txInput.hash).reverse().toString('hex'),
140
+ index: txInput.index,
141
+ amount: inputValue,
142
+ scriptPubKey: scriptPubKey.toString('hex'),
143
+ scriptType,
144
+ sighashType,
145
+ isOurs,
146
+ redeemScript,
147
+ sequence: txInput.sequence,
148
+ });
149
+ });
150
+ const outputs = psbt.txOutputs.map((txOutput, outputIndex) => {
151
+ const script = Buffer.from(txOutput.script);
152
+ const opReturn = isOpReturn(script);
153
+ let outputAddress = '';
154
+ if (!opReturn) {
155
+ try {
156
+ outputAddress = btcAddress.fromOutputScript(txOutput.script, network);
157
+ }
158
+ catch {
159
+ // Non-standard output - address stays empty
160
+ }
161
+ }
162
+ // Change detection: Vultisig uses a single address per UTXO chain (no HD change
163
+ // derivation), so address comparison is the primary signal. BIP32 derivation on
164
+ // outputs is NOT used alone because a malicious dApp could inject derivation paths
165
+ // on attacker outputs to disguise them as change. Address match is unforgeable
166
+ // since only the vault owner knows the private key for that address.
167
+ return create(BitcoinOutputSchema, {
168
+ amount: BigInt(txOutput.value),
169
+ address: outputAddress,
170
+ opReturnData: opReturn ? getOpReturnHex(script) : undefined,
171
+ scriptPubKey: script.toString('hex'),
172
+ isChange: outputAddress !== '' && outputAddress === senderAddress,
173
+ });
174
+ });
175
+ return create(SignBitcoinSchema, {
176
+ version: psbt.version,
177
+ locktime: psbt.locktime,
178
+ inputs,
179
+ outputs,
180
+ });
181
+ };
182
+ //# sourceMappingURL=buildSignBitcoinFromPsbt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildSignBitcoinFromPsbt.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/utxo/tx/buildSignBitcoinFromPsbt.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Chain, EthereumL2Chain } from '@vultisig/core-chain/Chain';
2
2
  import { recordMap } from '@vultisig/lib-utils/record/recordMap';
3
- import { kujiraCoinsMigratedToThorChainMetadata } from '../chains/cosmos/thor/kujira-merge.js';
3
+ import { kujiraCoinsMigratedToThorChainMetadata } from '../chains/cosmos/thor/kujira-merge/index.js';
4
4
  const ether = {
5
5
  ticker: 'ETH',
6
6
  logo: 'eth',
@@ -1,5 +1,5 @@
1
1
  import { chainFeeCoin } from './chainFeeCoin.js';
2
- import { knownTokens } from './knownTokens.js';
2
+ import { knownTokens } from './knownTokens/index.js';
3
3
  export const coins = [
4
4
  ...Object.values(chainFeeCoin),
5
5
  ...Object.values(knownTokens).flat(),
@@ -3,8 +3,8 @@ import { isOneOf } from '@vultisig/lib-utils/array/isOneOf';
3
3
  import { coinFinderChainKinds, } from './CoinFinderChainKind.js';
4
4
  import { findCardanoCoins } from './resolvers/cardano.js';
5
5
  import { findCosmosCoins } from './resolvers/cosmos.js';
6
- import { findEvmCoins } from './resolvers/evm.js';
7
- import { findSolanaCoins } from './resolvers/solana.js';
6
+ import { findEvmCoins } from './resolvers/evm/index.js';
7
+ import { findSolanaCoins } from './resolvers/solana/index.js';
8
8
  const resolvers = {
9
9
  cosmos: findCosmosCoins,
10
10
  evm: findEvmCoins,
@@ -1,5 +1,5 @@
1
1
  import { Chain } from '../../Chain.js';
2
- import { kujiraCoinsMigratedToThorChainMetadata } from '../../chains/cosmos/thor/kujira-merge.js';
2
+ import { kujiraCoinsMigratedToThorChainMetadata } from '../../chains/cosmos/thor/kujira-merge/index.js';
3
3
  import { kujiraCoinsOnThorChain } from '../../chains/cosmos/thor/kujira-merge/kujiraCoinsOnThorChain.js';
4
4
  import { yieldBearingThorChainTokens } from '../../chains/cosmos/thor/yield-bearing-tokens/yAssetsOnThorChain.js';
5
5
  export const knownCosmosTokens = {
@@ -1,5 +1,5 @@
1
1
  import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
2
- import { knownTokensIndex } from '.';
2
+ import { knownTokensIndex } from './index.js';
3
3
  const getKnownToken = (key) => {
4
4
  return knownTokensIndex[key.chain]?.[key.id.toLowerCase()];
5
5
  };
@@ -1,4 +1,4 @@
1
- import { blake2b } from '@noble/hashes/blake2.js';
1
+ import { blake2b } from '@noble/hashes/blake2b';
2
2
  export const deriveCardanoAddress = ({ publicKey, walletCore }) => {
3
3
  const extendedKeyData = publicKey.data();
4
4
  const spendingKeyData = extendedKeyData.slice(0, 32);
@@ -1 +1 @@
1
- {"version":3,"file":"cardano.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/publicKey/address/cardano.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAWjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAS,EAAE,EAAE;IACvE,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,CAAA;IACxC,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;IAEpD,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;IACtC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACrB,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAExB,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AACtD,CAAC,CAAA"}
1
+ {"version":3,"file":"cardano.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/publicKey/address/cardano.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAW/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAS,EAAE,EAAE;IACvE,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,CAAA;IACxC,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;IAEpD,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;IACtC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACrB,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAExB,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AACtD,CAAC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { toBech32 } from '@cosmjs/encoding';
2
- import { ripemd160 } from '@noble/hashes/legacy.js';
3
- import { sha256 } from '@noble/hashes/sha2.js';
2
+ import { ripemd160 } from '@noble/hashes/ripemd160';
3
+ import { sha256 } from '@noble/hashes/sha256';
4
4
  const qbtcBech32Prefix = 'qbtc';
5
5
  /** Derives a QBTC address from an MLDSA public key using Bech32(RIPEMD160(SHA256(pubkey))). */
6
6
  export const deriveQbtcAddress = (mldsaPublicKeyHex) => {
@@ -1 +1 @@
1
- {"version":3,"file":"deriveQbtcAddress.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/publicKey/address/deriveQbtcAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAE9C,MAAM,gBAAgB,GAAG,MAAM,CAAA;AAE/B,+FAA+F;AAC/F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,iBAAyB,EAAU,EAAE;IACrE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;IACzD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;IAC3C,OAAO,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;AACzC,CAAC,CAAA"}
1
+ {"version":3,"file":"deriveQbtcAddress.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/publicKey/address/deriveQbtcAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAE7C,MAAM,gBAAgB,GAAG,MAAM,CAAA;AAE/B,+FAA+F;AAC/F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,iBAAyB,EAAU,EAAE;IACrE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;IACzD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;IAC3C,OAAO,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;AACzC,CAAC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { recordMap } from '@vultisig/lib-utils/record/recordMap';
2
2
  import { sortRecordKeysAlphabetically } from '@vultisig/lib-utils/record/sortRecordKeysAlphabetically';
3
3
  import { execSync } from 'child_process';
4
- import { knownTokens } from '../coin/knownTokens.js';
4
+ import { knownTokens } from '../coin/knownTokens/index.js';
5
5
  const main = () => {
6
6
  const sorted = sortRecordKeysAlphabetically(recordMap(knownTokens, tokens => [...tokens].sort((a, b) => a.ticker.localeCompare(b.ticker))));
7
7
  const output = JSON.stringify(sorted, null, 2);
@@ -1,6 +1,6 @@
1
1
  import { AccountCoin } from '@vultisig/core-chain/coin/AccountCoin';
2
2
  import { TransferDirection } from '@vultisig/lib-utils/TransferDirection';
3
- import { VultDiscountTier } from '../affiliate.js';
3
+ import { VultDiscountTier } from '../affiliate/index.js';
4
4
  import { SwapQuote } from './SwapQuote.js';
5
5
  export type FindSwapQuoteInput = Record<TransferDirection, AccountCoin> & {
6
6
  amount: bigint;
@@ -12,7 +12,7 @@ import { asyncFallbackChain } from '@vultisig/lib-utils/promise/asyncFallbackCha
12
12
  import { pick } from '@vultisig/lib-utils/record/pick';
13
13
  import { Chain } from '../../Chain.js';
14
14
  import { isChainOfKind } from '../../ChainKind.js';
15
- import { getSwapAffiliateBps } from '../affiliate.js';
15
+ import { getSwapAffiliateBps } from '../affiliate/index.js';
16
16
  import { getKyberSwapQuote } from '../general/kyber/api/quote.js';
17
17
  import { kyberSwapEnabledChains } from '../general/kyber/chains.js';
18
18
  import { getNativeSwapQuote } from '../native/api/getNativeSwapQuote.js';
@@ -1 +1 @@
1
- {"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAMrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc,EAAE,mBAAmB,CAAC,QAAQ,CA6BxD,CAAA"}
1
+ {"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAMrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc,EAAE,mBAAmB,CAAC,QAAQ,CAyBxD,CAAA"}
@@ -8,7 +8,7 @@ export const broadcastEvmTx = async ({ chain, tx, }) => {
8
8
  serializedTransaction: ensureHexPrefix(Buffer.from(tx.encoded).toString('hex')),
9
9
  }));
10
10
  if (error &&
11
- !isInError(error, 'already known', 'transaction is temporarily banned', 'nonce too low', 'transaction already exists', 'future transaction tries to replace pending', 'could not replace existing tx', 'tx already in mempool')) {
11
+ !isInError(error, 'already known', 'transaction already exists', 'tx already in mempool')) {
12
12
  throw error;
13
13
  }
14
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"evm.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/evm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAIzE,MAAM,CAAC,MAAM,cAAc,GAAkC,KAAK,EAAE,EAClE,KAAK,EACL,EAAE,GACH,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAElC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC7B,MAAM,CAAC,kBAAkB,CAAC;QACxB,qBAAqB,EAAE,eAAe,CACpC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACxC;KACF,CAAC,CACH,CAAA;IAED,IACE,KAAK;QACL,CAAC,SAAS,CACR,KAAK,EACL,eAAe,EACf,mCAAmC,EACnC,eAAe,EACf,4BAA4B,EAC5B,6CAA6C,EAC7C,+BAA+B,EAC/B,uBAAuB,CACxB,EACD,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"evm.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/evm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAIzE,MAAM,CAAC,MAAM,cAAc,GAAkC,KAAK,EAAE,EAClE,KAAK,EACL,EAAE,GACH,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAElC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC7B,MAAM,CAAC,kBAAkB,CAAC;QACxB,qBAAqB,EAAE,eAAe,CACpC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACxC;KACF,CAAC,CACH,CAAA;IAED,IACE,KAAK;QACL,CAAC,SAAS,CACR,KAAK,EACL,eAAe,EACf,4BAA4B,EAC5B,uBAAuB,CACxB,EACD,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA"}
@@ -7,7 +7,7 @@ export const broadcastTonTx = async ({ tx, }) => {
7
7
  const { error } = await attempt(queryUrl(url, {
8
8
  body: { boc: tx.encoded },
9
9
  }));
10
- if (error && !isInError(error, 'duplicate message')) {
10
+ if (error && !isInError(error, 'duplicate message', 'duplicate msg_seqno')) {
11
11
  throw error;
12
12
  }
13
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ton.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ton.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAI7D,MAAM,CAAC,MAAM,cAAc,GAAwC,KAAK,EAAE,EACxE,EAAE,GACH,EAAE,EAAE;IACH,MAAM,GAAG,GAAG,GAAG,UAAU,2BAA2B,CAAA;IAEpD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC7B,QAAQ,CAA+B,GAAG,EAAE;QAC1C,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE;KAC1B,CAAC,CACH,CAAA;IAED,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,mBAAmB,CAAC,EAAE,CAAC;QACpD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"ton.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ton.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAI7D,MAAM,CAAC,MAAM,cAAc,GAAwC,KAAK,EAAE,EACxE,EAAE,GACH,EAAE,EAAE;IACH,MAAM,GAAG,GAAG,GAAG,UAAU,2BAA2B,CAAA;IAEpD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC7B,QAAQ,CAA+B,GAAG,EAAE;QAC1C,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE;KAC1B,CAAC,CACH,CAAA;IAED,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,EAAE,CAAC;QAC3E,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
- import { blake2b } from '@noble/hashes/blake2.js';
1
+ import { blake2b } from '@noble/hashes/blake2b';
2
2
  import { decode, encode } from 'cbor-x';
3
3
  export const getCardanoTxHash = tx => {
4
4
  // Prefer pre-computed txId (set by compileTx to avoid cbor-x
@@ -1 +1 @@
1
- {"version":3,"file":"cardano.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/hash/resolvers/cardano.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAIvC,MAAM,CAAC,MAAM,gBAAgB,GAAuC,EAAE,CAAC,EAAE;IACvE,6DAA6D;IAC7D,oDAAoD;IACpD,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;IAE/C,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC5C,CAAC,CAAA"}
1
+ {"version":3,"file":"cardano.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/hash/resolvers/cardano.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAIvC,MAAM,CAAC,MAAM,gBAAgB,GAAuC,EAAE,CAAC,EAAE;IACvE,6DAA6D;IAC7D,oDAAoD;IACpD,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;IAE/C,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC5C,CAAC,CAAA"}