@vultisig/core-chain 1.7.0 → 2.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 (36) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/chains/cosmos/cosmosRpcUrl.d.ts +9 -1
  3. package/dist/chains/cosmos/cosmosRpcUrl.d.ts.map +1 -1
  4. package/dist/chains/cosmos/cosmosRpcUrl.js +14 -1
  5. package/dist/chains/cosmos/cosmosRpcUrl.js.map +1 -1
  6. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.d.ts +11 -1
  7. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.d.ts.map +1 -1
  8. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.js +8 -2
  9. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.js.map +1 -1
  10. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.d.ts +4 -0
  11. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.d.ts.map +1 -1
  12. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.js +38 -18
  13. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.js.map +1 -1
  14. package/dist/coin/balance/resolvers/cosmos.d.ts.map +1 -1
  15. package/dist/coin/balance/resolvers/cosmos.js +2 -9
  16. package/dist/coin/balance/resolvers/cosmos.js.map +1 -1
  17. package/dist/coin/chainFeeCoin.js +1 -1
  18. package/dist/coin/find/resolvers/evm/index.d.ts.map +1 -1
  19. package/dist/coin/find/resolvers/evm/index.js +41 -14
  20. package/dist/coin/find/resolvers/evm/index.js.map +1 -1
  21. package/dist/coin/token/metadata/resolvers/cosmos.d.ts.map +1 -1
  22. package/dist/coin/token/metadata/resolvers/cosmos.js +41 -4
  23. package/dist/coin/token/metadata/resolvers/cosmos.js.map +1 -1
  24. package/dist/swap/native/NativeSwapChain.d.ts +22 -1
  25. package/dist/swap/native/NativeSwapChain.d.ts.map +1 -1
  26. package/dist/swap/native/NativeSwapChain.js.map +1 -1
  27. package/dist/swap/native/asset/toNativeSwapAsset.d.ts.map +1 -1
  28. package/dist/swap/native/asset/toNativeSwapAsset.js +43 -1
  29. package/dist/swap/native/asset/toNativeSwapAsset.js.map +1 -1
  30. package/dist/tx/broadcast/resolvers/ripple.d.ts.map +1 -1
  31. package/dist/tx/broadcast/resolvers/ripple.js +44 -12
  32. package/dist/tx/broadcast/resolvers/ripple.js.map +1 -1
  33. package/dist/tx/status/resolvers/ripple.d.ts.map +1 -1
  34. package/dist/tx/status/resolvers/ripple.js +13 -3
  35. package/dist/tx/status/resolvers/ripple.js.map +1 -1
  36. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @vultisig/core-chain
2
2
 
3
+ ## 2.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - [#478](https://github.com/vultisig/vultisig-sdk/pull/478) [`2174118`](https://github.com/vultisig/vultisig-sdk/commit/2174118523eacfb97e04ecfa8de96f22059afe99) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - qbtc: add required `broadcaster` field to `BuildMsgClaimWithProofInput` (proto field 9). Mirrors the chain-side signer rework in btcq-org/qbtc#171 - `claimer` is now payload-only (mint destination), while `broadcaster` is the cosmos tx signer. Callers must populate `broadcaster` (typically equal to `claimer` for wallet flows where the user's own MLDSA key signs the tx).
8
+
9
+ BREAKING CHANGE: `BuildMsgClaimWithProofInput` now requires a new `broadcaster: string` field. Existing callers will fail at TypeScript compile-time (or runtime if TS is bypassed) until updated. For wallet flows pass `broadcaster === claimer`.
10
+
11
+ ### Patch Changes
12
+
13
+ - [#467](https://github.com/vultisig/vultisig-sdk/pull/467) [`2d85653`](https://github.com/vultisig/vultisig-sdk/commit/2d85653c23379bc39bb579acf83d7998070b9ed4) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Discover non-zero EVM tokens even when OneInch metadata lacks a logo or CoinGecko provider, with on-chain metadata fallback when token metadata is missing.
14
+
15
+ - [#474](https://github.com/vultisig/vultisig-sdk/pull/474) [`37c2f82`](https://github.com/vultisig/vultisig-sdk/commit/37c2f82379725ac4ac4d63679afea5c3ac1b7683) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Refresh vulnerable dependency paths for high-severity audit cleanup.
16
+
17
+ ## 1.7.1
18
+
19
+ ### Patch Changes
20
+
21
+ - [#455](https://github.com/vultisig/vultisig-sdk/pull/455) [`5102976`](https://github.com/vultisig/vultisig-sdk/commit/5102976d7c13fa9578bbbc6e5122526cefc1ec66) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Normalize THORChain/MayaChain native swap asset ids: single-segment denoms and simple `x/…` paths map to `THOR.<ticker>` / `MAYA.<ticker>`; secured `chain-symbol-0x…` denoms map to `CHAIN.SYMBOL` notation using the canonical `nativeSwapChainIds` mapping. Full `CHAIN.SYMBOL` strings and unrecognized complex denoms remain unchanged.
22
+
23
+ - [#456](https://github.com/vultisig/vultisig-sdk/pull/456) [`b36eb62`](https://github.com/vultisig/vultisig-sdk/commit/b36eb62842051b8b2bae06f1e123a5ebcf6cad88) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Add Terra CW20 metadata resolution and build CW20 token sends as CosmWasm execute transfers.
24
+
3
25
  ## 1.7.0
4
26
 
5
27
  ### Minor Changes
@@ -1,5 +1,13 @@
1
1
  import { CosmosChain } from '@vultisig/core-chain/Chain';
2
2
  import { AccountCoinKey } from '@vultisig/core-chain/coin/AccountCoin';
3
+ type CosmosWasmContract = {
4
+ chain: CosmosChain;
5
+ id: string;
6
+ };
3
7
  export declare const cosmosRpcUrl: Record<CosmosChain, string>;
4
- export declare const getCosmosWasmTokenBalanceUrl: ({ chain, id, address, }: AccountCoinKey<CosmosChain>) => string;
8
+ export declare const isCosmosWasmTokenId: (id?: string) => id is string;
9
+ export declare const getCosmosWasmSmartQueryUrl: ({ chain, id }: CosmosWasmContract, query: object) => string;
10
+ export declare const getCosmosWasmTokenBalanceUrl: ({ chain, id, address }: AccountCoinKey<CosmosChain>) => string;
11
+ export declare const getCosmosWasmTokenInfoUrl: (input: CosmosWasmContract) => string;
12
+ export {};
5
13
  //# sourceMappingURL=cosmosRpcUrl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cosmosRpcUrl.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/cosmosRpcUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAGtE,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAWpD,CAAA;AAED,eAAO,MAAM,4BAA4B,GAAI,yBAI1C,cAAc,CAAC,WAAW,CAAC,WAC4F,CAAA"}
1
+ {"version":3,"file":"cosmosRpcUrl.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/cosmosRpcUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAItE,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,WAAW,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAWpD,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,KAAG,EAAE,IAAI,MAQvD,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAI,eAAe,kBAAkB,EAAE,OAAO,MAAM,WACY,CAAA;AAEvG,eAAO,MAAM,4BAA4B,GAAI,wBAAwB,cAAc,CAAC,WAAW,CAAC,WAO7F,CAAA;AAEH,eAAO,MAAM,yBAAyB,GAAI,OAAO,kBAAkB,WACZ,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
1
2
  import { base64Encode } from '@vultisig/lib-utils/base64Encode';
2
3
  export const cosmosRpcUrl = {
3
4
  Cosmos: 'https://cosmos-rest.publicnode.com',
@@ -11,5 +12,17 @@ export const cosmosRpcUrl = {
11
12
  MayaChain: 'https://mayanode.mayachain.info',
12
13
  Akash: 'https://akash-rest.publicnode.com',
13
14
  };
14
- export const getCosmosWasmTokenBalanceUrl = ({ chain, id, address, }) => `${cosmosRpcUrl[chain]}/cosmwasm/wasm/v1/contract/${id}/smart/${base64Encode(JSON.stringify({ balance: { address } }))}`;
15
+ export const isCosmosWasmTokenId = (id) => {
16
+ if (!id || id.startsWith('ibc/') || id.startsWith('factory/')) {
17
+ return false;
18
+ }
19
+ const wasmTokenPattern = /^[a-z]+1[a-z0-9]{20,80}$/;
20
+ return wasmTokenPattern.test(id);
21
+ };
22
+ export const getCosmosWasmSmartQueryUrl = ({ chain, id }, query) => `${cosmosRpcUrl[chain]}/cosmwasm/wasm/v1/contract/${id}/smart/${base64Encode(JSON.stringify(query))}`;
23
+ export const getCosmosWasmTokenBalanceUrl = ({ chain, id, address }) => getCosmosWasmSmartQueryUrl({
24
+ chain,
25
+ id: shouldBePresent(id),
26
+ }, { balance: { address } });
27
+ export const getCosmosWasmTokenInfoUrl = (input) => getCosmosWasmSmartQueryUrl(input, { token_info: {} });
15
28
  //# sourceMappingURL=cosmosRpcUrl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cosmosRpcUrl.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/cosmosRpcUrl.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAE/D,MAAM,CAAC,MAAM,YAAY,GAAgC;IACvD,MAAM,EAAE,oCAAoC;IAC5C,OAAO,EAAE,qCAAqC;IAC9C,IAAI,EAAE,kCAAkC;IACxC,MAAM,EAAE,oCAAoC;IAC5C,KAAK,EAAE,kCAAkC;IACzC,YAAY,EAAE,0CAA0C;IACxD,KAAK,EAAE,gCAAgC;IACvC,SAAS,EAAE,iDAAiD;IAC5D,SAAS,EAAE,iCAAiC;IAC5C,KAAK,EAAE,mCAAmC;CAC3C,CAAA;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,EAC3C,KAAK,EACL,EAAE,EACF,OAAO,GACqB,EAAE,EAAE,CAChC,GAAG,YAAY,CAAC,KAAK,CAAC,8BAA8B,EAAE,UAAU,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAA"}
1
+ {"version":3,"file":"cosmosRpcUrl.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/cosmosRpcUrl.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAO/D,MAAM,CAAC,MAAM,YAAY,GAAgC;IACvD,MAAM,EAAE,oCAAoC;IAC5C,OAAO,EAAE,qCAAqC;IAC9C,IAAI,EAAE,kCAAkC;IACxC,MAAM,EAAE,oCAAoC;IAC5C,KAAK,EAAE,kCAAkC;IACzC,YAAY,EAAE,0CAA0C;IACxD,KAAK,EAAE,gCAAgC;IACvC,SAAS,EAAE,iDAAiD;IAC5D,SAAS,EAAE,iCAAiC;IAC5C,KAAK,EAAE,mCAAmC;CAC3C,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAW,EAAgB,EAAE;IAC/D,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,0BAA0B,CAAA;IAEnD,OAAO,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAsB,EAAE,KAAa,EAAE,EAAE,CAC7F,GAAG,YAAY,CAAC,KAAK,CAAC,8BAA8B,EAAE,UAAU,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;AAEvG,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAA+B,EAAE,EAAE,CAClG,0BAA0B,CACxB;IACE,KAAK;IACL,EAAE,EAAE,eAAe,CAAC,EAAE,CAAC;CACxB,EACD,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,CACzB,CAAA;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAyB,EAAE,EAAE,CACrE,0BAA0B,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAA"}
@@ -3,7 +3,10 @@ type UtxoRef = {
3
3
  vout: number;
4
4
  };
5
5
  type BuildMsgClaimWithProofInput = {
6
- /** QBTC bech32 address of the claimer. */
6
+ /**
7
+ * QBTC bech32 address of the claimer (mint destination). Payload-only —
8
+ * no longer the cosmos signer since btcq-org/qbtc#171.
9
+ */
7
10
  claimer: string;
8
11
  /** UTXOs to include in the claim (1-50, no duplicates). */
9
12
  utxos: UtxoRef[];
@@ -22,6 +25,13 @@ type BuildMsgClaimWithProofInput = {
22
25
  * Returned by the proof service as `pub_key_hash_sha256`.
23
26
  */
24
27
  pubKeyHashSha256: string;
28
+ /**
29
+ * QBTC bech32 address of the cosmos tx signer (broadcaster). Required
30
+ * since btcq-org/qbtc#171 — the address derived from
31
+ * `signer_infos[0].pub_key` must equal this value. For wallet flows where
32
+ * the user signs the cosmos tx themselves, set `broadcaster === claimer`.
33
+ */
34
+ broadcaster: string;
25
35
  };
26
36
  /** Validates the claim input against the chain's constraints (Section 5). */
27
37
  export declare const validateClaimInput: (input: BuildMsgClaimWithProofInput) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"buildClaimTx.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/buildClaimTx.ts"],"names":[],"mappings":"AASA,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAA;IACvB;;;;;OAKG;IACH,gBAAgB,EAAE,MAAM,CAAA;CACzB,CAAA;AAYD,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB,GAAI,OAAO,2BAA2B,SAuCpE,CAAA;AAuBD,uDAAuD;AACvD,eAAO,MAAM,sBAAsB,GACjC,OAAO,2BAA2B,KACjC,UAOF,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,GAC3B,OAAO,2BAA2B,KACjC,UAGF,CAAA"}
1
+ {"version":3,"file":"buildClaimTx.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/buildClaimTx.ts"],"names":[],"mappings":"AASA,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAA;IACvB;;;;;OAKG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;;;OAKG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAYD,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB,GAAI,OAAO,2BAA2B,SAgDpE,CAAA;AAwBD,uDAAuD;AACvD,eAAO,MAAM,sBAAsB,GACjC,OAAO,2BAA2B,KACjC,UAOF,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,GAC3B,OAAO,2BAA2B,KACjC,UAGF,CAAA"}
@@ -8,7 +8,13 @@ const assertHex = (value, name, expectedLength) => {
8
8
  };
9
9
  /** Validates the claim input against the chain's constraints (Section 5). */
10
10
  export const validateClaimInput = (input) => {
11
- const { utxos, proof, messageHash, addressHash, qbtcAddressHash, pubKeyHashSha256, } = input;
11
+ const { claimer, utxos, proof, messageHash, addressHash, qbtcAddressHash, pubKeyHashSha256, broadcaster, } = input;
12
+ if (claimer.length === 0) {
13
+ throw new Error('claimer is required');
14
+ }
15
+ if (broadcaster.length === 0) {
16
+ throw new Error('broadcaster is required');
17
+ }
12
18
  if (utxos.length === 0 || utxos.length > 50) {
13
19
  throw new Error(`UTXOs count must be 1-50, got ${utxos.length}`);
14
20
  }
@@ -42,7 +48,7 @@ const encodeUtxoRef = ({ txid, vout }) => concatBytes(protoString(1, txid), prot
42
48
  /** Encodes MsgClaimWithProof as protobuf bytes. */
43
49
  const buildMsgClaimWithProof = (input) => {
44
50
  const utxoBytes = input.utxos.map(utxo => protoBytes(2, encodeUtxoRef(utxo)));
45
- return concatBytes(protoString(1, input.claimer), ...utxoBytes, protoString(3, input.proof), protoString(4, input.messageHash), protoString(5, input.addressHash), protoString(6, input.qbtcAddressHash), protoString(7, input.pubKeyHashSha256));
51
+ return concatBytes(protoString(1, input.claimer), ...utxoBytes, protoString(3, input.proof), protoString(4, input.messageHash), protoString(5, input.addressHash), protoString(6, input.qbtcAddressHash), protoString(7, input.pubKeyHashSha256), protoString(9, input.broadcaster));
46
52
  };
47
53
  /** Wraps MsgClaimWithProof in a Cosmos Any message. */
48
54
  export const buildClaimWithProofAny = (input) => {
@@ -1 +1 @@
1
- {"version":3,"file":"buildClaimTx.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/buildClaimTx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildClaimTx.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/buildClaimTx.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,10 @@ type GetClaimableUtxosInput = {
10
10
  * appear "spendable" after the QBTC chain has consumed it. Cross-checking
11
11
  * against the chain's UTXO endpoint (btcq-org/qbtc#141) prevents the user
12
12
  * from selecting a stale entry and burning ~90s on a no-op claim.
13
+ *
14
+ * The returned `amount` reflects the chain's remaining `entitled_amount`,
15
+ * not the Blockchair-reported BTC value — partial payouts on a UTXO would
16
+ * otherwise mislead the user about what they're about to claim.
13
17
  */
14
18
  export declare const getClaimableUtxos: ({ btcAddress, }: GetClaimableUtxosInput) => Promise<ClaimableUtxo[]>;
15
19
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"getClaimableUtxos.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/getClaimableUtxos.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,KAAK,sBAAsB,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AA0BD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAAU,iBAErC,sBAAsB,KAAG,OAAO,CAAC,aAAa,EAAE,CAqBlD,CAAA"}
1
+ {"version":3,"file":"getClaimableUtxos.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/getClaimableUtxos.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,KAAK,sBAAsB,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAiDD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,GAAU,iBAErC,sBAAsB,KAAG,OAAO,CAAC,aAAa,EAAE,CAyBlD,CAAA"}
@@ -2,21 +2,31 @@ import { Chain } from '@vultisig/core-chain/Chain';
2
2
  import { qbtcRestUrl } from '@vultisig/core-chain/chains/cosmos/qbtc/tendermintRpcUrl';
3
3
  import { getUtxoAddressInfo } from '@vultisig/core-chain/chains/utxo/client/getUtxoAddressInfo';
4
4
  /**
5
- * Asks the QBTC chain whether a given UTXO is still claimable
6
- * (i.e. registered + unclaimed) via `GET /qbtc/v1/utxo/{txid}/{vout}`.
5
+ * Asks the QBTC chain how much of a given UTXO is still claimable via
6
+ * `GET /qbtc/v1/utxo/{txid}/{vout}`.
7
7
  *
8
- * - 200 claimable
9
- * - 404 already claimed or never registered
10
- * - other propagated as a hard error so transient network failures
11
- * don't silently drop UTXOs from the user's list.
8
+ * The chain returns the UTXO record with its remaining `entitled_amount`
9
+ * even after a full payout `entitled_amount` is `"0"` once consumed.
10
+ * So a 200 alone is not enough; we have to inspect the body. 404 still
11
+ * happens for UTXOs the chain has never registered.
12
+ *
13
+ * Returns `null` when the UTXO is no longer claimable; otherwise returns
14
+ * the remaining entitled amount in satoshis. Other non-2xx responses
15
+ * propagate so transient network failures don't silently drop UTXOs.
12
16
  */
13
- const isUtxoClaimableOnChain = async ({ txid, vout, }) => {
17
+ const getOnChainEntitledAmount = async ({ txid, vout, }) => {
14
18
  const response = await fetch(`${qbtcRestUrl}/qbtc/v1/utxo/${txid}/${vout}`);
15
- if (response.ok)
16
- return true;
17
19
  if (response.status === 404)
18
- return false;
19
- throw new Error(`Failed to verify UTXO ${txid}:${vout} on QBTC chain (${response.status} ${response.statusText})`);
20
+ return null;
21
+ if (!response.ok) {
22
+ throw new Error(`Failed to verify UTXO ${txid}:${vout} on QBTC chain (${response.status} ${response.statusText})`);
23
+ }
24
+ const body = await response.json();
25
+ const entitled = body.utxo?.entitled_amount;
26
+ if (entitled === undefined)
27
+ return null;
28
+ const remaining = BigInt(entitled);
29
+ return remaining > 0n ? remaining : null;
20
30
  };
21
31
  /**
22
32
  * Fetches Bitcoin UTXOs for the given address via Blockchair and filters
@@ -26,6 +36,10 @@ const isUtxoClaimableOnChain = async ({ txid, vout, }) => {
26
36
  * appear "spendable" after the QBTC chain has consumed it. Cross-checking
27
37
  * against the chain's UTXO endpoint (btcq-org/qbtc#141) prevents the user
28
38
  * from selecting a stale entry and burning ~90s on a no-op claim.
39
+ *
40
+ * The returned `amount` reflects the chain's remaining `entitled_amount`,
41
+ * not the Blockchair-reported BTC value — partial payouts on a UTXO would
42
+ * otherwise mislead the user about what they're about to claim.
29
43
  */
30
44
  export const getClaimableUtxos = async ({ btcAddress, }) => {
31
45
  const response = await getUtxoAddressInfo({
@@ -33,12 +47,18 @@ export const getClaimableUtxos = async ({ btcAddress, }) => {
33
47
  chain: Chain.Bitcoin,
34
48
  });
35
49
  const btcUtxos = response.data[btcAddress]?.utxo ?? [];
36
- const candidates = btcUtxos.map(({ transaction_hash, index, value }) => ({
37
- txid: transaction_hash,
38
- vout: index,
39
- amount: value,
40
- }));
41
- const claimableFlags = await Promise.all(candidates.map(({ txid, vout }) => isUtxoClaimableOnChain({ txid, vout })));
42
- return candidates.filter((_, i) => claimableFlags[i]);
50
+ const entitledAmounts = await Promise.all(btcUtxos.map(({ transaction_hash, index }) => getOnChainEntitledAmount({ txid: transaction_hash, vout: index })));
51
+ return btcUtxos.flatMap(({ transaction_hash, index }, i) => {
52
+ const remaining = entitledAmounts[i];
53
+ if (remaining === null)
54
+ return [];
55
+ return [
56
+ {
57
+ txid: transaction_hash,
58
+ vout: index,
59
+ amount: Number(remaining),
60
+ },
61
+ ];
62
+ });
43
63
  };
44
64
  //# sourceMappingURL=getClaimableUtxos.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getClaimableUtxos.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/getClaimableUtxos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,0DAA0D,CAAA;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4DAA4D,CAAA;AAQ/F;;;;;;;;GAQG;AACH,MAAM,sBAAsB,GAAG,KAAK,EAAE,EACpC,IAAI,EACJ,IAAI,GAIL,EAAoB,EAAE;IACrB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,iBAAiB,IAAI,IAAI,IAAI,EAAE,CAAC,CAAA;IAC3E,IAAI,QAAQ,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;IAC5B,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,KAAK,CAAA;IACzC,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,IAAI,IAAI,mBAAmB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,GAAG,CAClG,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,EACtC,UAAU,GACa,EAA4B,EAAE;IACrD,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC;QACxC,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,KAAK,CAAC,OAAO;KACrB,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,IAAI,EAAE,CAAA;IAEtD,MAAM,UAAU,GAAoB,QAAQ,CAAC,GAAG,CAC9C,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,KAAK;KACd,CAAC,CACH,CAAA;IAED,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAC3E,CAAA;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;AACvD,CAAC,CAAA"}
1
+ {"version":3,"file":"getClaimableUtxos.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/getClaimableUtxos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,0DAA0D,CAAA;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4DAA4D,CAAA;AAiB/F;;;;;;;;;;;;GAYG;AACH,MAAM,wBAAwB,GAAG,KAAK,EAAE,EACtC,IAAI,EACJ,IAAI,GAIL,EAA0B,EAAE;IAC3B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,iBAAiB,IAAI,IAAI,IAAI,EAAE,CAAC,CAAA;IAE3E,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IAExC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,IAAI,IAAI,mBAAmB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,GAAG,CAClG,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAqB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAA;IAC3C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IAEvC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;IAClC,OAAO,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;AAC1C,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,EACtC,UAAU,GACa,EAA4B,EAAE;IACrD,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC;QACxC,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,KAAK,CAAC,OAAO;KACrB,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,IAAI,EAAE,CAAA;IAEtD,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,CAC3C,wBAAwB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAClE,CACF,CAAA;IAED,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACzD,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;QACpC,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,EAAE,CAAA;QACjC,OAAO;YACL;gBACE,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;aAC1B;SACF,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"cosmos.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/cosmos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAMxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAYjD,eAAO,MAAM,oBAAoB,EAAE,mBAAmB,CACpD,WAAW,CAeZ,CAAA"}
1
+ {"version":3,"file":"cosmos.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/cosmos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAMxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,oBAAoB,EAAE,mBAAmB,CAAC,WAAW,CAcjE,CAAA"}
@@ -1,16 +1,9 @@
1
1
  import { getCosmosClient } from '@vultisig/core-chain/chains/cosmos/client';
2
- import { getCosmosWasmTokenBalanceUrl } from '@vultisig/core-chain/chains/cosmos/cosmosRpcUrl';
2
+ import { getCosmosWasmTokenBalanceUrl, isCosmosWasmTokenId } from '@vultisig/core-chain/chains/cosmos/cosmosRpcUrl';
3
3
  import { getDenom } from '@vultisig/core-chain/coin/utils/getDenom';
4
4
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
5
- const isWasmToken = (id) => {
6
- if (id.startsWith('ibc/') || id.startsWith('factory/')) {
7
- return false;
8
- }
9
- const wasmTokenPattern = /^[a-z]+1[a-z0-9]{20,80}$/;
10
- return wasmTokenPattern.test(id);
11
- };
12
5
  export const getCosmosCoinBalance = async (input) => {
13
- if (input.id && isWasmToken(input.id)) {
6
+ if (isCosmosWasmTokenId(input.id)) {
14
7
  const url = getCosmosWasmTokenBalanceUrl(input);
15
8
  const { data } = await queryUrl(url);
16
9
  return BigInt(data.balance ?? 0);
@@ -1 +1 @@
1
- {"version":3,"file":"cosmos.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/cosmos.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAA;AAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAI7D,MAAM,WAAW,GAAG,CAAC,EAAU,EAAW,EAAE;IAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACvD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,0BAA0B,CAAA;IAEnD,OAAO,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAE7B,KAAK,EAAC,KAAK,EAAC,EAAE;IAChB,IAAI,KAAK,CAAC,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAoB,GAAG,CAAC,CAAA;QACvD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAA;IAClC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAEjD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAE7D,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC,CAAA"}
1
+ {"version":3,"file":"cosmos.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/cosmos.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAA;AACnH,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAI7D,MAAM,CAAC,MAAM,oBAAoB,GAAqC,KAAK,EAAC,KAAK,EAAC,EAAE;IAClF,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAoB,GAAG,CAAC,CAAA;QACvD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAA;IAClC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAEjD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAE7D,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC,CAAA"}
@@ -197,7 +197,7 @@ const leanChainFeeCoin = {
197
197
  [Chain.QBTC]: {
198
198
  ticker: 'QBTC',
199
199
  logo: 'qbtc',
200
- decimals: 6,
200
+ decimals: 8,
201
201
  priceProviderId: 'qbtc-testnet',
202
202
  },
203
203
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/coin/find/resolvers/evm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAKrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAU3E,eAAO,MAAM,YAAY,EAAE,iBAAiB,CAAC,QAAQ,CA+FpD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/coin/find/resolvers/evm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAKrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAsD3E,eAAO,MAAM,YAAY,EAAE,iBAAiB,CAAC,QAAQ,CAkGpD,CAAA"}
@@ -4,10 +4,36 @@ import { evmNativeCoinAddress } from '@vultisig/core-chain/chains/evm/config';
4
4
  import { getErc20Balance } from '@vultisig/core-chain/chains/evm/erc20/getErc20Balance';
5
5
  import { queryOneInch } from '@vultisig/core-chain/coin/find/resolvers/evm/queryOneInch';
6
6
  import { vult } from '@vultisig/core-chain/coin/knownTokens';
7
+ import { getEvmTokenMetadata } from '@vultisig/core-chain/coin/token/metadata/resolvers/evm';
7
8
  import { without } from '@vultisig/lib-utils/array/without';
8
9
  import { attempt } from '@vultisig/lib-utils/attempt';
9
10
  import { NoDataError } from '@vultisig/lib-utils/error/NoDataError';
10
11
  import { hexToNumber } from '@vultisig/lib-utils/hex/hexToNumber';
12
+ const getDiscoveredEvmCoin = async ({ address, chain, tokenAddress, token, }) => {
13
+ if (token) {
14
+ return {
15
+ chain,
16
+ id: token.address,
17
+ decimals: token.decimals,
18
+ logo: token.logoURI,
19
+ ticker: token.symbol,
20
+ address,
21
+ };
22
+ }
23
+ const metadataResult = await attempt(() => getEvmTokenMetadata({ chain, id: tokenAddress }));
24
+ if ('error' in metadataResult) {
25
+ if (metadataResult.error instanceof NoDataError) {
26
+ return undefined;
27
+ }
28
+ throw metadataResult.error;
29
+ }
30
+ return {
31
+ chain,
32
+ id: tokenAddress,
33
+ address,
34
+ ...metadataResult.data,
35
+ };
36
+ };
11
37
  export const findEvmCoins = async ({ address, chain, }) => {
12
38
  const oneInchSupportedChains = [
13
39
  EvmChain.Ethereum,
@@ -37,20 +63,21 @@ export const findEvmCoins = async ({ address, chain, }) => {
37
63
  .filter(tokenAddress => tokenAddress !== evmNativeCoinAddress);
38
64
  let discoveredCoins = [];
39
65
  if (nonZeroBalanceTokenAddresses.length > 0) {
40
- const tokenInfoData = await queryOneInch(`/token/v1.2/${oneInchChainId}/custom?addresses=${nonZeroBalanceTokenAddresses.join(',')}`);
41
- const tokens = without(nonZeroBalanceTokenAddresses.map(tokenAddress => tokenInfoData[tokenAddress]), undefined);
42
- discoveredCoins = without(tokens.map(token => {
43
- if (token.logoURI && token.providers.includes('CoinGecko')) {
44
- return {
45
- chain,
46
- id: token.address,
47
- decimals: token.decimals,
48
- logo: token.logoURI,
49
- ticker: token.symbol,
50
- address,
51
- };
52
- }
53
- }), undefined);
66
+ const tokenInfoResult = await attempt(queryOneInch(`/token/v1.2/${oneInchChainId}/custom?addresses=${nonZeroBalanceTokenAddresses.join(',')}`));
67
+ let tokenInfoData = {};
68
+ if ('data' in tokenInfoResult) {
69
+ tokenInfoData = tokenInfoResult.data ?? {};
70
+ }
71
+ else if (!(tokenInfoResult.error instanceof NoDataError)) {
72
+ throw tokenInfoResult.error;
73
+ }
74
+ discoveredCoins = without(await Promise.all(nonZeroBalanceTokenAddresses.map(tokenAddress => getDiscoveredEvmCoin({
75
+ address,
76
+ chain,
77
+ tokenAddress,
78
+ token: tokenInfoData[tokenAddress] ??
79
+ tokenInfoData[tokenAddress.toLowerCase()],
80
+ }))), undefined);
54
81
  }
55
82
  if (chain !== EvmChain.Ethereum ||
56
83
  discoveredCoins.some(coin => coin.id?.toLowerCase() === vult.id.toLowerCase())) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/coin/find/resolvers/evm/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/coin/find/resolvers/evm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAA;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAA;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,uDAAuD,CAAA;AAGvF,OAAO,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAA;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,uCAAuC,CAAA;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wDAAwD,CAAA;AAC5F,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAUjE,MAAM,oBAAoB,GAAG,KAAK,EAAE,EAClC,OAAO,EACP,KAAK,EACL,YAAY,EACZ,KAAK,GACqB,EAAoC,EAAE;IAChE,IAAI,KAAK,EAAE,CAAC;QACV,OAAO;YACL,KAAK;YACL,EAAE,EAAE,KAAK,CAAC,OAAO;YACjB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,OAAO;YACnB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO;SACR,CAAA;IACH,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,CACxC,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CACjD,CAAA;IAED,IAAI,OAAO,IAAI,cAAc,EAAE,CAAC;QAC9B,IAAI,cAAc,CAAC,KAAK,YAAY,WAAW,EAAE,CAAC;YAChD,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,cAAc,CAAC,KAAK,CAAA;IAC5B,CAAC;IAED,OAAO;QACL,KAAK;QACL,EAAE,EAAE,YAAY;QAChB,OAAO;QACP,GAAG,cAAc,CAAC,IAAI;KACvB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAgC,KAAK,EAAE,EAC9D,OAAO,EACP,KAAK,GACN,EAAE,EAAE;IACH,MAAM,sBAAsB,GAAe;QACzC,QAAQ,CAAC,QAAQ;QACjB,QAAQ,CAAC,IAAI;QACb,QAAQ,CAAC,QAAQ;QACjB,QAAQ,CAAC,OAAO;QAChB,QAAQ,CAAC,QAAQ;QACjB,QAAQ,CAAC,GAAG;QACZ,QAAQ,CAAC,SAAS;KACnB,CAAA;IAED,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;IAExD,MAAM,aAAa,GAAG,MAAM,OAAO,CACjC,YAAY,CACV,iBAAiB,cAAc,aAAa,OAAO,EAAE,CACtD,CACF,CAAA;IAED,IAAI,WAAW,GAA2B,EAAE,CAAA;IAC5C,IAAI,MAAM,IAAI,aAAa,EAAE,CAAC;QAC5B,WAAW,GAAG,aAAa,CAAC,IAAI,IAAI,EAAE,CAAA;IACxC,CAAC;SAAM,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,YAAY,WAAW,CAAC,EAAE,CAAC;QACzD,MAAM,aAAa,CAAC,KAAK,CAAA;IAC3B,CAAC;IAED,sCAAsC;IACtC,MAAM,4BAA4B,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;SAC7D,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,iCAAiC;SAC1F,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC;SACrC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,KAAK,oBAAoB,CAAC,CAAA;IAEhE,IAAI,eAAe,GAAkB,EAAE,CAAA;IACvC,IAAI,4BAA4B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,eAAe,GAAG,MAAM,OAAO,CACnC,YAAY,CACV,eAAe,cAAc,qBAAqB,4BAA4B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC3F,CACF,CAAA;QAED,IAAI,aAAa,GAAiC,EAAE,CAAA;QACpD,IAAI,MAAM,IAAI,eAAe,EAAE,CAAC;YAC9B,aAAa,GAAG,eAAe,CAAC,IAAI,IAAI,EAAE,CAAA;QAC5C,CAAC;aAAM,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,YAAY,WAAW,CAAC,EAAE,CAAC;YAC3D,MAAM,eAAe,CAAC,KAAK,CAAA;QAC7B,CAAC;QAED,eAAe,GAAG,OAAO,CACvB,MAAM,OAAO,CAAC,GAAG,CACf,4BAA4B,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAC9C,oBAAoB,CAAC;YACnB,OAAO;YACP,KAAK;YACL,YAAY;YACZ,KAAK,EACH,aAAa,CAAC,YAAY,CAAC;gBAC3B,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SAC5C,CAAC,CACH,CACF,EACD,SAAS,CACV,CAAA;IACH,CAAC;IAED,IACE,KAAK,KAAK,QAAQ,CAAC,QAAQ;QAC3B,eAAe,CAAC,IAAI,CAClB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CACzD,EACD,CAAC;QACD,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,CAC3C,eAAe,CAAC;QACd,KAAK;QACL,OAAO,EAAE,IAAI,CAAC,EAAa;QAC3B,cAAc,EAAE,OAAkB;KACnC,CAAC,CACH,CAAA;IAED,IAAI,MAAM,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACxE,IAAI,iBAAiB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;YAChC,eAAe,CAAC,IAAI,CAAC;gBACnB,GAAG,IAAI;gBACP,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,eAAe,CAAA;AACxB,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"cosmos.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/coin/token/metadata/resolvers/cosmos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAGxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAA;AA+DzF,eAAO,MAAM,sBAAsB,EAAE,qBAAqB,CACxD,WAAW,CAqBZ,CAAA"}
1
+ {"version":3,"file":"cosmos.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/coin/token/metadata/resolvers/cosmos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAQxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAA;AAgFzF,eAAO,MAAM,sBAAsB,EAAE,qBAAqB,CAAC,WAAW,CAuCrE,CAAA"}
@@ -1,4 +1,4 @@
1
- import { cosmosRpcUrl } from '@vultisig/core-chain/chains/cosmos/cosmosRpcUrl';
1
+ import { cosmosRpcUrl, getCosmosWasmTokenInfoUrl, isCosmosWasmTokenId, } from '@vultisig/core-chain/chains/cosmos/cosmosRpcUrl';
2
2
  import { knownCosmosTokens } from '@vultisig/core-chain/coin/knownTokens/cosmos';
3
3
  import { getLastItem } from '@vultisig/lib-utils/array/getLastItem';
4
4
  import { attempt } from '@vultisig/lib-utils/attempt';
@@ -7,8 +7,15 @@ import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
7
7
  const decimalsFromMeta = (meta) => {
8
8
  if (!meta.denom_units || !meta.display)
9
9
  return null;
10
- const unit = meta.denom_units.find(u => u.denom === (meta.symbol || meta.display));
11
- return unit?.exponent ?? null;
10
+ const byDisplay = meta.denom_units.find(u => u.denom === meta.display);
11
+ if (byDisplay)
12
+ return byDisplay.exponent;
13
+ if (meta.symbol) {
14
+ const bySymbol = meta.denom_units.find(u => u.denom === meta.symbol);
15
+ if (bySymbol)
16
+ return bySymbol.exponent;
17
+ }
18
+ return null;
12
19
  };
13
20
  const deriveTicker = (denom, meta) => {
14
21
  if (meta.symbol)
@@ -41,6 +48,20 @@ const getDenomMetaFromLCD = async (lcdBase, denom) => {
41
48
  return listRes.data?.metadatas?.find(data => data.base === denom) ?? null;
42
49
  });
43
50
  };
51
+ const getCw20MetaFromLCD = async (chain, id) => {
52
+ const { data } = await queryUrl(getCosmosWasmTokenInfoUrl({ chain, id }));
53
+ const ticker = data?.symbol?.trim();
54
+ if (!ticker)
55
+ throw new Error(`Could not fetch CW20 symbol for ${id}`);
56
+ const decimals = data?.decimals;
57
+ if (typeof decimals !== 'number' || !Number.isInteger(decimals) || decimals < 0) {
58
+ throw new Error(`Could not fetch CW20 decimals for ${id}`);
59
+ }
60
+ return {
61
+ ticker,
62
+ decimals,
63
+ };
64
+ };
44
65
  export const getCosmosTokenMetadata = async ({ chain, id }) => {
45
66
  const knownMeta = knownCosmosTokens[chain]?.[id];
46
67
  if (knownMeta) {
@@ -49,12 +70,28 @@ export const getCosmosTokenMetadata = async ({ chain, id }) => {
49
70
  decimals: knownMeta.decimals,
50
71
  };
51
72
  }
73
+ if (isCosmosWasmTokenId(id)) {
74
+ return asyncFallbackChain(async () => getCw20MetaFromLCD(chain, id), async () => {
75
+ const lcd = cosmosRpcUrl[chain];
76
+ const meta = await getDenomMetaFromLCD(lcd, id);
77
+ if (!meta)
78
+ throw new Error(`No denom meta information available for ${id}`);
79
+ const decimals = decimalsFromMeta(meta);
80
+ if (decimals === null)
81
+ throw new Error(`Could not fetch decimal for ${id}`);
82
+ const ticker = deriveTicker(id, meta);
83
+ return {
84
+ ticker,
85
+ decimals,
86
+ };
87
+ });
88
+ }
52
89
  const lcd = cosmosRpcUrl[chain];
53
90
  const meta = await getDenomMetaFromLCD(lcd, id);
54
91
  if (!meta)
55
92
  throw new Error(`No denom meta information available for ${id}`);
56
93
  const decimals = decimalsFromMeta(meta);
57
- if (!decimals)
94
+ if (decimals === null)
58
95
  throw new Error(`Could not fetch decimal for ${id}`);
59
96
  const ticker = deriveTicker(id, meta);
60
97
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"cosmos.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/coin/token/metadata/resolvers/cosmos.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cosmos.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/coin/token/metadata/resolvers/cosmos.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,28 @@ export declare const nativeSwapEnabledChainsRecord: {
14
14
  };
15
15
  type NativeSwapEnabledChain = (typeof nativeSwapEnabledChainsRecord)[NativeSwapChain][number];
16
16
  export declare const nativeSwapEnabledChains: NativeSwapEnabledChain[];
17
- export declare const nativeSwapChainIds: Record<NativeSwapEnabledChain, string>;
17
+ export declare const nativeSwapChainIds: {
18
+ Avalanche: string;
19
+ "Bitcoin-Cash": string;
20
+ BSC: string;
21
+ Bitcoin: string;
22
+ Dogecoin: string;
23
+ Ethereum: string;
24
+ Cosmos: string;
25
+ Litecoin: string;
26
+ THORChain: string;
27
+ MayaChain: string;
28
+ Kujira: string;
29
+ Dash: string;
30
+ Arbitrum: string;
31
+ Zcash: string;
32
+ Ripple: string;
33
+ Base: string;
34
+ Solana: string;
35
+ Tron: string;
36
+ Noble: string;
37
+ };
38
+ export type NativeSwapChainId = (typeof nativeSwapChainIds)[NativeSwapEnabledChain];
18
39
  type NativeSwapPayloadCase = 'thorchainSwapPayload' | 'mayachainSwapPayload';
19
40
  export declare const nativeSwapPayloadCase: Record<NativeSwapChain, NativeSwapPayloadCase>;
20
41
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"NativeSwapChain.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapChain.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,qCAA8C,CAAA;AAC3E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/D,wFAAwF;AACxF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGvE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,0CAA0C,MAAM,CAAA;AAE7D,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGhE,CAAA;AAmBD,eAAO,MAAM,6BAA6B;;;CAYhC,CAAA;AAEV,KAAK,sBAAsB,GACzB,CAAC,OAAO,6BAA6B,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,eAAO,MAAM,uBAAuB,EAE/B,sBAAsB,EAAE,CAAA;AAE7B,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAoBrE,CAAA;AAED,KAAK,qBAAqB,GACtB,sBAAsB,GACtB,sBAAsB,CAAA;AAE1B,eAAO,MAAM,qBAAqB,EAAE,MAAM,CACxC,eAAe,EACf,qBAAqB,CAItB,CAAA"}
1
+ {"version":3,"file":"NativeSwapChain.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapChain.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,qCAA8C,CAAA;AAC3E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/D,wFAAwF;AACxF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGvE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,0CAA0C,MAAM,CAAA;AAE7D,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGhE,CAAA;AAmBD,eAAO,MAAM,6BAA6B;;;CAYhC,CAAA;AAEV,KAAK,sBAAsB,GACzB,CAAC,OAAO,6BAA6B,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,eAAO,MAAM,uBAAuB,EAE/B,sBAAsB,EAAE,CAAA;AAE7B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;CAoBmB,CAAA;AAClD,MAAM,MAAM,iBAAiB,GAC3B,CAAC,OAAO,kBAAkB,CAAC,CAAC,sBAAsB,CAAC,CAAA;AAErD,KAAK,qBAAqB,GACtB,sBAAsB,GACtB,sBAAsB,CAAA;AAE1B,eAAO,MAAM,qBAAqB,EAAE,MAAM,CACxC,eAAe,EACf,qBAAqB,CAItB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"NativeSwapChain.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapChain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NativeSwapChain.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapChain.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"toNativeSwapAsset.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/asset/toNativeSwapAsset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAA;AAShF,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,GAAI,wBAI/B,OAAO,GAAG,gBAAgB,KAAG,MAgB/B,CAAA"}
1
+ {"version":3,"file":"toNativeSwapAsset.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/asset/toNativeSwapAsset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAA;AA2EhF,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,GAAI,wBAI/B,OAAO,GAAG,gBAAgB,KAAG,MAoB/B,CAAA"}
@@ -2,6 +2,44 @@ import { isOneOf } from '@vultisig/lib-utils/array/isOneOf';
2
2
  import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
3
3
  import { isFeeCoin } from '../../../coin/utils/isFeeCoin.js';
4
4
  import { nativeSwapChainIds, nativeSwapChains, nativeSwapEnabledChains, } from '../NativeSwapChain.js';
5
+ const nativeSwapChainIdValues = Object.values(nativeSwapChainIds);
6
+ const securedAssetDenomChainKeyToSwapId = Object.fromEntries(nativeSwapChainIdValues.map(swapId => [
7
+ swapId.toLowerCase(),
8
+ swapId,
9
+ ]));
10
+ const getSecuredAssetSwapId = (chainKey) => securedAssetDenomChainKeyToSwapId[chainKey.toLowerCase()];
11
+ const formatSecuredAssetRest = (rest) => {
12
+ const evmTail = rest.match(/^(.+)-(0x[0-9a-fA-F]+)$/i);
13
+ if (evmTail) {
14
+ return `${evmTail[1].toUpperCase()}-${evmTail[2]}`;
15
+ }
16
+ return rest.toUpperCase();
17
+ };
18
+ const normalizeNativeSwapChainDenom = ({ chain, id, ticker, }) => {
19
+ let denom = id;
20
+ if (id.startsWith('x/')) {
21
+ const tail = id.slice(2);
22
+ if (!tail.includes('/')) {
23
+ denom = shouldBePresent(tail);
24
+ }
25
+ }
26
+ if (denom.includes('.')) {
27
+ return denom;
28
+ }
29
+ const segments = denom.split('-');
30
+ if (segments.length >= 2) {
31
+ const swapId = getSecuredAssetSwapId(segments[0]);
32
+ if (swapId) {
33
+ const rest = segments.slice(1).join('-');
34
+ return `${swapId}.${formatSecuredAssetRest(rest)}`;
35
+ }
36
+ }
37
+ if (!denom.includes('-') && !denom.includes('/')) {
38
+ const swapChainId = nativeSwapChainIds[chain];
39
+ return `${swapChainId}.${ticker}`;
40
+ }
41
+ return id;
42
+ };
5
43
  /** Converts a coin to the asset notation used by THORChain/MayaChain swap APIs */
6
44
  export const toNativeSwapAsset = ({ chain, id, ticker, }) => {
7
45
  if (!isOneOf(chain, nativeSwapEnabledChains)) {
@@ -12,7 +50,11 @@ export const toNativeSwapAsset = ({ chain, id, ticker, }) => {
12
50
  return `${swapChainId}.${ticker}`;
13
51
  }
14
52
  if (isOneOf(chain, nativeSwapChains)) {
15
- return shouldBePresent(id);
53
+ return normalizeNativeSwapChainDenom({
54
+ chain,
55
+ id: shouldBePresent(id),
56
+ ticker,
57
+ });
16
58
  }
17
59
  const swapChainId = nativeSwapChainIds[chain];
18
60
  return `${swapChainId}.${ticker}-${id}`;
@@ -1 +1 @@
1
- {"version":3,"file":"toNativeSwapAsset.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/asset/toNativeSwapAsset.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAG5E,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AACzD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,oBAAoB,CAAA;AAE3B,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,KAAK,EACL,EAAE,EACF,MAAM,GACqB,EAAU,EAAE;IACvC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,uBAAuB,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,0CAA0C,KAAK,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;QAC7C,OAAO,GAAG,WAAW,IAAI,MAAM,EAAE,CAAA;IACnC,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC;QACrC,OAAO,eAAe,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAC7C,OAAO,GAAG,WAAW,IAAI,MAAM,IAAI,EAAE,EAAE,CAAA;AACzC,CAAC,CAAA"}
1
+ {"version":3,"file":"toNativeSwapAsset.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/asset/toNativeSwapAsset.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAGvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,eAAO,MAAM,iBAAiB,EAAE,mBAAmB,CACjD,UAAU,CAAC,MAAM,CAyBlB,CAAA"}
1
+ {"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAGvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AA0BjD,eAAO,MAAM,iBAAiB,EAAE,mBAAmB,CACjD,UAAU,CAAC,MAAM,CAuClB,CAAA"}
@@ -1,26 +1,58 @@
1
1
  import { getRippleClient } from '@vultisig/core-chain/chains/ripple/client';
2
2
  import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
3
+ /**
4
+ * Engine result codes from XRPL `submit` that indicate the tx may already
5
+ * be on-chain via another MPC peer's broadcast (peer-race recovery path).
6
+ *
7
+ * `tefALREADY` — exact duplicate already seen; the fast peer landed it.
8
+ * `tefPAST_SEQ` — sequence number behind; the fast peer's tx already
9
+ * consumed this sequence.
10
+ *
11
+ * For these we go through `verifyBroadcastByHash` to confirm the tx is
12
+ * actually on-chain before swallowing the duplicate error. Any OTHER
13
+ * non-success engine result (`tem*` malformed, `tec*` claim failures,
14
+ * `tel*` local-policy rejections, `ter*` retry-later, the remaining
15
+ * `tef*` failures) is the chain's authoritative "no" at preflight —
16
+ * propagate directly so the caller sees the real failure.
17
+ *
18
+ * Going through `verifyBroadcastByHash` for non-peer-race rejections
19
+ * would silently swallow the error: `getRippleTxStatus` returns
20
+ * `'pending'` for `txnNotFound`, and the safety net treats `'pending'`
21
+ * as "tx is in flight" (correct for EVM-style chains, wrong for XRPL
22
+ * where rejected txs are never on-chain).
23
+ */
24
+ const PEER_RACE_ENGINE_RESULTS = new Set(['tefALREADY', 'tefPAST_SEQ']);
3
25
  export const broadcastRippleTx = async ({ chain, tx }) => {
4
26
  const client = await getRippleClient();
27
+ // RPC-level errors (network blip, connection drop) get the safety-net
28
+ // verify-by-hash path: another peer's broadcast may have landed the tx.
29
+ let response;
5
30
  try {
6
- // XRPL's `submit` resolves successfully even when the tx is rejected
7
- // (e.g. `tefPAST_SEQ` / `tefALREADY` for duplicates, `tec*` for fee or
8
- // balance failures). The rejection is carried in the response payload,
9
- // not via a thrown error — inspect `engine_result` / `engine_result_code`
10
- // so non-success outcomes still take the hash-verify path.
11
- const response = await client.request({
31
+ response = await client.request({
12
32
  command: 'submit',
13
33
  tx_blob: Buffer.from(tx.encoded).toString('hex'),
14
34
  });
15
- const engineResultCode = response?.result?.engine_result_code;
16
- if (typeof engineResultCode === 'number' && engineResultCode !== 0) {
17
- const engineResult = response.result.engine_result ?? 'unknown';
18
- const engineResultMessage = response.result.engine_result_message ?? '';
19
- throw new Error(`Ripple broadcast rejected: ${engineResult}${engineResultMessage ? ` — ${engineResultMessage}` : ''}`);
20
- }
21
35
  }
22
36
  catch (error) {
23
37
  await verifyBroadcastByHash({ chain, tx, error });
38
+ return;
24
39
  }
40
+ const engineResultCode = response?.result?.engine_result_code;
41
+ if (typeof engineResultCode !== 'number' || engineResultCode === 0) {
42
+ // tesSUCCESS (applied / queued for next ledger). All good.
43
+ return;
44
+ }
45
+ const engineResult = response.result.engine_result ?? 'unknown';
46
+ const engineResultMessage = response.result.engine_result_message ?? '';
47
+ const error = new Error(`Ripple broadcast rejected: ${engineResult}${engineResultMessage ? ` — ${engineResultMessage}` : ''}`);
48
+ if (PEER_RACE_ENGINE_RESULTS.has(engineResult)) {
49
+ // Duplicate / past-sequence: fast MPC peer's broadcast may have
50
+ // already landed the tx. Verify before swallowing.
51
+ await verifyBroadcastByHash({ chain, tx, error });
52
+ return;
53
+ }
54
+ // Authoritative rejection at preflight (tem*/tec*/tel*/ter*/remaining tef*).
55
+ // Propagate so the caller sees the real failure instead of a fake hash.
56
+ throw error;
25
57
  };
26
58
  //# sourceMappingURL=ripple.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ripple.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAG3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,CAAC,MAAM,iBAAiB,GAE1B,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1B,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAA;IAEtC,IAAI,CAAC;QACH,qEAAqE;QACrE,uEAAuE;QACvE,uEAAuE;QACvE,0EAA0E;QAC1E,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YACpC,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;SACjD,CAAC,CAAA;QACF,MAAM,gBAAgB,GAAG,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAA;QAC7D,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;YACnE,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAA;YAC/D,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAA;YACvE,MAAM,IAAI,KAAK,CACb,8BAA8B,YAAY,GAAG,mBAAmB,CAAC,CAAC,CAAC,MAAM,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACtG,CAAA;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IACnD,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ripple.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAG3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAA;AAEvE,MAAM,CAAC,MAAM,iBAAiB,GAE1B,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1B,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAA;IAEtC,sEAAsE;IACtE,wEAAwE;IACxE,IAAI,QAAQ,CAAA;IACZ,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YAC9B,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;SACjD,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IAED,MAAM,gBAAgB,GAAG,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAA;IAC7D,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QACnE,2DAA2D;QAC3D,OAAM;IACR,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAA;IAC/D,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAA;IACvE,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,8BAA8B,YAAY,GAAG,mBAAmB,CAAC,CAAC,CAAC,MAAM,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACtG,CAAA;IAED,IAAI,wBAAwB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,gEAAgE;QAChE,mDAAmD;QACnD,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IAED,6EAA6E;IAC7E,wEAAwE;IACxE,MAAM,KAAK,CAAA;AACb,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAK9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,CA6CjE,CAAA"}
1
+ {"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAK9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAyDjE,CAAA"}
@@ -8,8 +8,17 @@ export const getRippleTxStatus = async ({ hash, }) => {
8
8
  command: 'tx',
9
9
  transaction: hash,
10
10
  }));
11
- if (error || !response) {
12
- return { status: 'pending' };
11
+ if (error ||
12
+ !response ||
13
+ typeof response.result !== 'object' ||
14
+ response.result === null) {
15
+ // The chain says it doesn't know this hash, OR the response is
16
+ // shaped unexpectedly (e.g. malformed payload `{}` without `result`).
17
+ // Either case: mark `isKnown: false` so the verify-by-hash safety
18
+ // net does NOT swallow broadcast errors. Mirrors `solana.ts:19`.
19
+ // Status itself stays `'pending'` so status-polling UI can re-query
20
+ // later.
21
+ return { status: 'pending', isKnown: false };
13
22
  }
14
23
  const { validated, meta, tx_json } = response.result;
15
24
  if (validated) {
@@ -29,6 +38,7 @@ export const getRippleTxStatus = async ({ hash, }) => {
29
38
  : undefined;
30
39
  return { status, receipt };
31
40
  }
32
- return { status: 'pending' };
41
+ // Genuinely in the ledger but not yet validated — XRPL knows about it.
42
+ return { status: 'pending', isKnown: true };
33
43
  };
34
44
  //# sourceMappingURL=ripple.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAIrD,MAAM,CAAC,MAAM,iBAAiB,GAAwC,KAAK,EAAE,EAC3E,IAAI,GACL,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAA;IAEtC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC7C,MAAM,CAAC,OAAO,CAAC;QACb,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI;KAClB,CAAC,CACH,CAAA;IAED,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;IAC9B,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,MAI7C,CAAA;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,OAAO,GACX,OAAO,IAAI,KAAK,QAAQ;YACxB,IAAI,KAAK,IAAI;YACb,mBAAmB,IAAI,IAAI;YAC3B,IAAI,CAAC,iBAAiB,KAAK,YAAY,CAAA;QAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAA;QAC5C,MAAM,MAAM,GAAG,OAAO,EAAE,GAAG,CAAA;QAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC1C,MAAM,OAAO,GACX,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,EAAE;YAC7B,CAAC,CAAC;gBACE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;gBACzB,WAAW,EAAE,OAAO,CAAC,QAAQ;gBAC7B,SAAS,EAAE,OAAO,CAAC,MAAM;aAC1B;YACH,CAAC,CAAC,SAAS,CAAA;QAEf,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;IAC5B,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AAC9B,CAAC,CAAA"}
1
+ {"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAIrD,MAAM,CAAC,MAAM,iBAAiB,GAAwC,KAAK,EAAE,EAC3E,IAAI,GACL,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAA;IAEtC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC7C,MAAM,CAAC,OAAO,CAAC;QACb,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI;KAClB,CAAC,CACH,CAAA;IAED,IACE,KAAK;QACL,CAAC,QAAQ;QACT,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ;QACnC,QAAQ,CAAC,MAAM,KAAK,IAAI,EACxB,CAAC;QACD,+DAA+D;QAC/D,sEAAsE;QACtE,kEAAkE;QAClE,iEAAiE;QACjE,oEAAoE;QACpE,SAAS;QACT,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC9C,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,MAI7C,CAAA;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,OAAO,GACX,OAAO,IAAI,KAAK,QAAQ;YACxB,IAAI,KAAK,IAAI;YACb,mBAAmB,IAAI,IAAI;YAC3B,IAAI,CAAC,iBAAiB,KAAK,YAAY,CAAA;QAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAA;QAC5C,MAAM,MAAM,GAAG,OAAO,EAAE,GAAG,CAAA;QAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC1C,MAAM,OAAO,GACX,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,EAAE;YAC7B,CAAC,CAAC;gBACE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;gBACzB,WAAW,EAAE,OAAO,CAAC,QAAQ;gBAC7B,SAAS,EAAE,OAAO,CAAC,MAAM;aAC1B;YACH,CAAC,CAAC,SAAS,CAAA;QAEf,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;IAC5B,CAAC;IAED,uEAAuE;IACvE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC7C,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vultisig/core-chain",
3
- "version": "1.7.0",
3
+ "version": "2.0.0",
4
4
  "description": "Blockchain chain logic shared across Vultisig clients",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1695,7 +1695,7 @@
1695
1695
  "@solana/web3.js": "^1.98.4",
1696
1696
  "@ton/core": "^0.63.1",
1697
1697
  "@ton/crypto": "^3.3.0",
1698
- "@trustwallet/wallet-core": "^4.6.7",
1698
+ "@trustwallet/wallet-core": "^4.6.9",
1699
1699
  "@vultisig/core-config": "0.9.1",
1700
1700
  "@vultisig/lib-utils": "0.10.1",
1701
1701
  "bip32": "^5.0.1",