@vultisig/core-chain 2.8.0 → 2.9.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @vultisig/core-chain
2
2
 
3
+ ## 2.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#610](https://github.com/vultisig/vultisig-sdk/pull/610) [`c87816b`](https://github.com/vultisig/vultisig-sdk/commit/c87816b6797e8237d7a94923025311e479e0c520) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - fix(swap): proactively detect below-minimum native swaps ([#604](https://github.com/vultisig/vultisig-sdk/issues/604))
8
+
9
+ Small cross-chain swaps below the economic minimum (e.g. ETH→BTC ~$2.81) no longer surface a misleading generic "No swap route found" error. `findSwapQuote` now computes the THORChain minimum up front from the destination chain's `outbound_fee` and spot pool prices, and surfaces an actionable `AmountBelowMinimum` error with the concrete threshold ("Minimum is ~0.012 ETH. Please increase the amount.") instead of relying on brittle provider error-string matching.
10
+ - New exported helper `getNativeSwapMinAmountIn` (and `NATIVE_SWAP_MIN_OUTBOUND_FEE_MULTIPLIER`) so consumers can show the minimum proactively as the user types.
11
+ - The computed minimum is now `max(outbound-fee minimum, source dust threshold)` — THORChain rejects an input below the source chain's `dust_threshold` ("amount less than dust threshold") before economics apply (e.g. DOGE's ~1 DOGE floor), so the threshold is included alongside the outbound-fee economics. The result exposes `dustThresholdBaseUnit` and `binding: 'outbound' | 'dust'` for diagnostics.
12
+ - Eager short-circuit only when a native protocol is the sole route family; multi-provider pairs still query every provider so an aggregator with a lower minimum is never blocked.
13
+ - The generic all-fail path now logs raw provider error messages so future sub-minimum wordings become data-driven instead of guessed.
14
+ - Trading-halt detection: when a native protocol rejects with "trading is halted" (THORChain mimir `HALT<CHAIN>TRADING`, pool ragnarok, churn) the pair fails for _every_ amount, so a new `TradingHalted` error surfaces "This swap route is temporarily unavailable — trading is halted on …" instead of the misleading generic "No swap route found" / "increase the amount".
15
+
3
16
  ## 2.8.0
4
17
 
5
18
  ### Minor Changes
@@ -7,6 +7,8 @@ export declare enum SwapErrorCode {
7
7
  AmountBelowMinimum = "SWAP_AMOUNT_BELOW_MINIMUM",
8
8
  /** All configured providers were attempted and all failed */
9
9
  AllProvidersFailed = "SWAP_ALL_PROVIDERS_FAILED",
10
+ /** Trading for this pair is temporarily halted by the provider (not an amount problem) */
11
+ TradingHalted = "SWAP_TRADING_HALTED",
10
12
  /** Caller passed invalid configuration (e.g. mixed-case THORName affiliateFeeAddress) */
11
13
  InvalidConfig = "SWAP_INVALID_CONFIG"
12
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SwapError.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/SwapError.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,kFAAkF;IAClF,aAAa,yBAAyB;IACtC,kEAAkE;IAClE,cAAc,0BAA0B;IACxC,8FAA8F;IAC9F,kBAAkB,8BAA8B;IAChD,6DAA6D;IAC7D,kBAAkB,8BAA8B;IAChD,yFAAyF;IACzF,aAAa,wBAAwB;CACtC;AAED,qBAAa,SAAU,SAAQ,KAAK;aAIhB,IAAI,EAAE,aAAa;IAHrC,QAAQ,CAAC,IAAI,eAAc;gBAGT,IAAI,EAAE,aAAa,EACnC,OAAO,EAAE,MAAM;CAIlB"}
1
+ {"version":3,"file":"SwapError.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/SwapError.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,kFAAkF;IAClF,aAAa,yBAAyB;IACtC,kEAAkE;IAClE,cAAc,0BAA0B;IACxC,8FAA8F;IAC9F,kBAAkB,8BAA8B;IAChD,6DAA6D;IAC7D,kBAAkB,8BAA8B;IAChD,0FAA0F;IAC1F,aAAa,wBAAwB;IACrC,yFAAyF;IACzF,aAAa,wBAAwB;CACtC;AAED,qBAAa,SAAU,SAAQ,KAAK;aAIhB,IAAI,EAAE,aAAa;IAHrC,QAAQ,CAAC,IAAI,eAAc;gBAGT,IAAI,EAAE,aAAa,EACnC,OAAO,EAAE,MAAM;CAIlB"}
@@ -8,6 +8,8 @@ export var SwapErrorCode;
8
8
  SwapErrorCode["AmountBelowMinimum"] = "SWAP_AMOUNT_BELOW_MINIMUM";
9
9
  /** All configured providers were attempted and all failed */
10
10
  SwapErrorCode["AllProvidersFailed"] = "SWAP_ALL_PROVIDERS_FAILED";
11
+ /** Trading for this pair is temporarily halted by the provider (not an amount problem) */
12
+ SwapErrorCode["TradingHalted"] = "SWAP_TRADING_HALTED";
11
13
  /** Caller passed invalid configuration (e.g. mixed-case THORName affiliateFeeAddress) */
12
14
  SwapErrorCode["InvalidConfig"] = "SWAP_INVALID_CONFIG";
13
15
  })(SwapErrorCode || (SwapErrorCode = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"SwapError.js","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/SwapError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAWX;AAXD,WAAY,aAAa;IACvB,kFAAkF;IAClF,uDAAsC,CAAA;IACtC,kEAAkE;IAClE,yDAAwC,CAAA;IACxC,8FAA8F;IAC9F,iEAAgD,CAAA;IAChD,6DAA6D;IAC7D,iEAAgD,CAAA;IAChD,yFAAyF;IACzF,sDAAqC,CAAA;AACvC,CAAC,EAXW,aAAa,KAAb,aAAa,QAWxB;AAED,MAAM,OAAO,SAAU,SAAQ,KAAK;IAIhB;IAHT,IAAI,GAAG,WAAW,CAAA;IAE3B,YACkB,IAAmB,EACnC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,SAAI,GAAJ,IAAI,CAAe;IAIrC,CAAC;CACF"}
1
+ {"version":3,"file":"SwapError.js","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/SwapError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAaX;AAbD,WAAY,aAAa;IACvB,kFAAkF;IAClF,uDAAsC,CAAA;IACtC,kEAAkE;IAClE,yDAAwC,CAAA;IACxC,8FAA8F;IAC9F,iEAAgD,CAAA;IAChD,6DAA6D;IAC7D,iEAAgD,CAAA;IAChD,0FAA0F;IAC1F,sDAAqC,CAAA;IACrC,yFAAyF;IACzF,sDAAqC,CAAA;AACvC,CAAC,EAbW,aAAa,KAAb,aAAa,QAaxB;AAED,MAAM,OAAO,SAAU,SAAQ,KAAK;IAIhB;IAHT,IAAI,GAAG,WAAW,CAAA;IAE3B,YACkB,IAAmB,EACnC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,SAAI,GAAJ,IAAI,CAAe;IAIrC,CAAC;CACF"}
@@ -0,0 +1,69 @@
1
+ import { AccountCoin } from '@vultisig/core-chain/coin/AccountCoin';
2
+ import { getThorchainInboundAddress } from '../../../chains/cosmos/thor/getThorchainInboundAddress.js';
3
+ import { ThorchainPoolSummary } from '../../../chains/cosmos/thor/lp/pools.js';
4
+ import { NativeSwapChain } from '../NativeSwapChain.js';
5
+ /**
6
+ * Multiplier applied to the destination chain's `outbound_fee` to derive the
7
+ * minimum economically-viable swap output. A swap whose output barely covers
8
+ * the outbound fee is dust by the time it lands, so THORChain rejects it with
9
+ * no route. Requiring the output to clear ~2x the outbound fee keeps the
10
+ * proactive threshold conservative (we'd rather under-report the minimum than
11
+ * tell a user an amount is fine and then have the quote fail). Tunable.
12
+ */
13
+ export declare const NATIVE_SWAP_MIN_OUTBOUND_FEE_MULTIPLIER = 2;
14
+ export type NativeSwapMinAmountIn = {
15
+ swapChain: NativeSwapChain;
16
+ /** Minimum input amount in the `from` coin's native base units (`from.decimals`). */
17
+ minAmountInBaseUnits: bigint;
18
+ /** Short human-readable minimum input for display, e.g. `"0.0042"`. */
19
+ minAmountInHuman: string;
20
+ /** Destination chain `outbound_fee`, in THORChain 1e8 units of the dest gas asset. */
21
+ outboundFeeBaseUnit: string;
22
+ /**
23
+ * Source chain `dust_threshold`, in THORChain 1e8 units of the source gas
24
+ * asset. `undefined` when the source chain is absent from `inbound_addresses`.
25
+ */
26
+ dustThresholdBaseUnit?: string;
27
+ /**
28
+ * Which constraint produced the returned minimum: the destination
29
+ * outbound-fee economics (`'outbound'`) or the source-chain dust threshold
30
+ * (`'dust'`). Useful for instrumentation when diagnosing rejected swaps.
31
+ */
32
+ binding: 'outbound' | 'dust';
33
+ };
34
+ type NativeSwapMinDeps = {
35
+ /** Injectable for tests. Defaults to the live thornode `inbound_addresses` fetch. */
36
+ fetchInboundAddresses?: typeof getThorchainInboundAddress;
37
+ /** Injectable for tests. Defaults to the live Midgard `/v2/pools` fetch (all statuses). */
38
+ fetchPools?: () => Promise<ThorchainPoolSummary[]>;
39
+ };
40
+ /**
41
+ * Compute the minimum input amount for a native (THORChain) swap. The minimum
42
+ * is the larger of two independent THORChain constraints:
43
+ *
44
+ * 1. Outbound economics — the swap OUTPUT must cover the destination chain's
45
+ * outbound fee (×BUFFER). We value that floor in RUNE via the dest
46
+ * gas-asset pool, then convert back to the `from` asset via its pool —
47
+ * `minIn = outbound_fee × BUFFER × price(destGas)/price(from)`.
48
+ * 2. Source dust threshold — THORChain rejects an INPUT below the source
49
+ * chain's `dust_threshold` ("amount less than dust threshold") before
50
+ * economics even apply (e.g. DOGE's threshold is ~1 DOGE). It is
51
+ * denominated in the source chain's gas asset and converted into the
52
+ * `from` asset (identity when `from` IS the gas asset).
53
+ *
54
+ * The returned minimum is `max(constraint1, constraint2)` so it holds whichever
55
+ * way the swap would be rejected. A spot-price conversion is sufficient because
56
+ * slippage is negligible at minimum sizes.
57
+ *
58
+ * Returns `null` (never throws) when the minimum can't be determined —
59
+ * MayaChain (CACAO economics differ), a destination chain absent from
60
+ * `inbound_addresses`, a missing pool, or any fetch error. Callers treat
61
+ * `null` as "no proactive signal" and fall back to provider errors.
62
+ */
63
+ export declare const getNativeSwapMinAmountIn: ({ from, to, swapChain, }: {
64
+ from: AccountCoin;
65
+ to: AccountCoin;
66
+ swapChain: NativeSwapChain;
67
+ }, deps?: NativeSwapMinDeps) => Promise<NativeSwapMinAmountIn | null>;
68
+ export {};
69
+ //# sourceMappingURL=getNativeSwapMinAmountIn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getNativeSwapMinAmountIn.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/minimum/getNativeSwapMinAmountIn.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAInE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAA;AACnG,OAAO,EAAqB,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAE9F,OAAO,EAAE,eAAe,EAA+C,MAAM,oBAAoB,CAAA;AAEjG;;;;;;;GAOG;AACH,eAAO,MAAM,uCAAuC,IAAI,CAAA;AAQxD,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,eAAe,CAAA;IAC1B,qFAAqF;IACrF,oBAAoB,EAAE,MAAM,CAAA;IAC5B,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAA;IACxB,sFAAsF;IACtF,mBAAmB,EAAE,MAAM,CAAA;IAC3B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B;;;;OAIG;IACH,OAAO,EAAE,UAAU,GAAG,MAAM,CAAA;CAC7B,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,qFAAqF;IACrF,qBAAqB,CAAC,EAAE,OAAO,0BAA0B,CAAA;IACzD,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAA;CACnD,CAAA;AAgBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,wBAAwB,GACnC,0BAIG;IACD,IAAI,EAAE,WAAW,CAAA;IACjB,EAAE,EAAE,WAAW,CAAA;IACf,SAAS,EAAE,eAAe,CAAA;CAC3B,EACD,OAAM,iBAAsB,KAC3B,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAsHtC,CAAA"}
@@ -0,0 +1,167 @@
1
+ import { toChainAmount } from '@vultisig/core-chain/amount/toChainAmount';
2
+ import { Chain } from '@vultisig/core-chain/Chain';
3
+ import { chainFeeCoin } from '@vultisig/core-chain/coin/chainFeeCoin';
4
+ import { isOneOf } from '@vultisig/lib-utils/array/isOneOf';
5
+ import { getThorchainInboundAddress } from '../../../chains/cosmos/thor/getThorchainInboundAddress.js';
6
+ import { getThorchainPools } from '../../../chains/cosmos/thor/lp/pools.js';
7
+ import { toNativeSwapAsset } from '../asset/toNativeSwapAsset.js';
8
+ import { nativeSwapChainIds, nativeSwapEnabledChains } from '../NativeSwapChain.js';
9
+ /**
10
+ * Multiplier applied to the destination chain's `outbound_fee` to derive the
11
+ * minimum economically-viable swap output. A swap whose output barely covers
12
+ * the outbound fee is dust by the time it lands, so THORChain rejects it with
13
+ * no route. Requiring the output to clear ~2x the outbound fee keeps the
14
+ * proactive threshold conservative (we'd rather under-report the minimum than
15
+ * tell a user an amount is fine and then have the quote fail). Tunable.
16
+ */
17
+ export const NATIVE_SWAP_MIN_OUTBOUND_FEE_MULTIPLIER = 2;
18
+ /**
19
+ * THORChain reports every pool depth and the `inbound_addresses` `outbound_fee`
20
+ * in 1e8 base units regardless of the asset's native precision.
21
+ */
22
+ const THORCHAIN_BASE_DECIMALS = 8;
23
+ const CACHE_TTL_MS = 5_000;
24
+ let inboundCache;
25
+ let poolsCache;
26
+ const cached = (entry, load) => {
27
+ if (entry && Date.now() - entry.at < CACHE_TTL_MS) {
28
+ return entry;
29
+ }
30
+ return { at: Date.now(), value: load() };
31
+ };
32
+ /**
33
+ * Compute the minimum input amount for a native (THORChain) swap. The minimum
34
+ * is the larger of two independent THORChain constraints:
35
+ *
36
+ * 1. Outbound economics — the swap OUTPUT must cover the destination chain's
37
+ * outbound fee (×BUFFER). We value that floor in RUNE via the dest
38
+ * gas-asset pool, then convert back to the `from` asset via its pool —
39
+ * `minIn = outbound_fee × BUFFER × price(destGas)/price(from)`.
40
+ * 2. Source dust threshold — THORChain rejects an INPUT below the source
41
+ * chain's `dust_threshold` ("amount less than dust threshold") before
42
+ * economics even apply (e.g. DOGE's threshold is ~1 DOGE). It is
43
+ * denominated in the source chain's gas asset and converted into the
44
+ * `from` asset (identity when `from` IS the gas asset).
45
+ *
46
+ * The returned minimum is `max(constraint1, constraint2)` so it holds whichever
47
+ * way the swap would be rejected. A spot-price conversion is sufficient because
48
+ * slippage is negligible at minimum sizes.
49
+ *
50
+ * Returns `null` (never throws) when the minimum can't be determined —
51
+ * MayaChain (CACAO economics differ), a destination chain absent from
52
+ * `inbound_addresses`, a missing pool, or any fetch error. Callers treat
53
+ * `null` as "no proactive signal" and fall back to provider errors.
54
+ */
55
+ export const getNativeSwapMinAmountIn = async ({ from, to, swapChain, }, deps = {}) => {
56
+ // MayaChain (CACAO-denominated economics) is intentionally out of scope for
57
+ // v1 — the THORChain minimum is the binding one for the reported repro.
58
+ if (swapChain !== Chain.THORChain) {
59
+ return null;
60
+ }
61
+ // Both legs must be THORChain-routable for the asset notation / chain codes
62
+ // below to resolve. Anything else has no native minimum to compute.
63
+ if (!isOneOf(to.chain, nativeSwapEnabledChains) || !isOneOf(from.chain, nativeSwapEnabledChains)) {
64
+ return null;
65
+ }
66
+ try {
67
+ const injected = deps.fetchInboundAddresses !== undefined || deps.fetchPools !== undefined;
68
+ const loadInbound = deps.fetchInboundAddresses ?? getThorchainInboundAddress;
69
+ const loadPools = deps.fetchPools ?? (() => getThorchainPools({ status: null }));
70
+ let inbound;
71
+ let pools;
72
+ if (injected) {
73
+ ;
74
+ [inbound, pools] = await Promise.all([loadInbound(), loadPools()]);
75
+ }
76
+ else {
77
+ inboundCache = cached(inboundCache, loadInbound);
78
+ poolsCache = cached(poolsCache, loadPools);
79
+ [inbound, pools] = await Promise.all([inboundCache.value, poolsCache.value]);
80
+ }
81
+ const destChainId = nativeSwapChainIds[to.chain];
82
+ const destInfo = inbound.find(info => info.chain === destChainId);
83
+ if (!destInfo) {
84
+ return null;
85
+ }
86
+ const outboundFee = Number(destInfo.outbound_fee);
87
+ if (!Number.isFinite(outboundFee) || outboundFee <= 0) {
88
+ return null;
89
+ }
90
+ const poolByAsset = new Map(pools.map(pool => [pool.asset.toUpperCase(), pool]));
91
+ // Price of one asset base unit in RUNE base units (both 1e8). RUNE = 1.
92
+ const priceInRune = (assetId) => {
93
+ const upper = assetId.toUpperCase();
94
+ if (upper === 'THOR.RUNE') {
95
+ return 1;
96
+ }
97
+ const pool = poolByAsset.get(upper);
98
+ if (!pool) {
99
+ return null;
100
+ }
101
+ const rune = Number(pool.runeDepth);
102
+ const asset = Number(pool.assetDepth);
103
+ if (!Number.isFinite(rune) || !Number.isFinite(asset) || asset <= 0) {
104
+ return null;
105
+ }
106
+ return rune / asset;
107
+ };
108
+ // `outbound_fee` is denominated in the destination chain's gas (fee) asset.
109
+ const destGasAssetId = `${destChainId}.${chainFeeCoin[to.chain].ticker}`;
110
+ const fromAssetId = toNativeSwapAsset(from);
111
+ const priceGas = priceInRune(destGasAssetId);
112
+ const priceFrom = priceInRune(fromAssetId);
113
+ if (priceGas === null || priceFrom === null || priceFrom <= 0) {
114
+ return null;
115
+ }
116
+ // Constraint 1 — outbound economics. The minimum output value (in RUNE) the
117
+ // input must clear, converted back to `from`.
118
+ const outboundMinInThorUnits = (outboundFee * NATIVE_SWAP_MIN_OUTBOUND_FEE_MULTIPLIER * priceGas) / priceFrom;
119
+ // Constraint 2 — source dust threshold. Denominated in the source chain's
120
+ // gas asset (1e8 thor units); convert into the `from` asset — identity when
121
+ // `from` IS the gas asset, otherwise via the source gas-asset pool. Absent
122
+ // source-chain inbound info or a zero threshold contributes nothing.
123
+ const fromChainId = nativeSwapChainIds[from.chain];
124
+ const fromInfo = inbound.find(info => info.chain === fromChainId);
125
+ const fromGasAssetId = `${fromChainId}.${chainFeeCoin[from.chain].ticker}`;
126
+ const dustThreshold = fromInfo ? Number(fromInfo.dust_threshold) : 0;
127
+ let dustMinInThorUnits = 0;
128
+ if (Number.isFinite(dustThreshold) && dustThreshold > 0) {
129
+ if (fromAssetId.toUpperCase() === fromGasAssetId.toUpperCase()) {
130
+ dustMinInThorUnits = dustThreshold;
131
+ }
132
+ else {
133
+ const priceFromGas = priceInRune(fromGasAssetId);
134
+ if (priceFromGas !== null) {
135
+ dustMinInThorUnits = (dustThreshold * priceFromGas) / priceFrom;
136
+ }
137
+ }
138
+ }
139
+ // The input must satisfy BOTH constraints — the binding one is the larger.
140
+ const minInThorUnits = Math.max(outboundMinInThorUnits, dustMinInThorUnits);
141
+ const minHuman = minInThorUnits / 10 ** THORCHAIN_BASE_DECIMALS;
142
+ if (!Number.isFinite(minHuman) || minHuman <= 0) {
143
+ return null;
144
+ }
145
+ // Full-precision base units (bigint via parseUnits) for exact comparison,
146
+ // plus a short rounded string for display.
147
+ const minHumanFixed = minHuman.toFixed(from.decimals);
148
+ const minAmountInBaseUnits = toChainAmount(minHumanFixed, from.decimals);
149
+ return {
150
+ swapChain,
151
+ minAmountInBaseUnits,
152
+ minAmountInHuman: formatMinForDisplay(minHuman),
153
+ outboundFeeBaseUnit: destInfo.outbound_fee,
154
+ dustThresholdBaseUnit: fromInfo?.dust_threshold,
155
+ binding: dustMinInThorUnits > outboundMinInThorUnits ? 'dust' : 'outbound',
156
+ };
157
+ }
158
+ catch {
159
+ return null;
160
+ }
161
+ };
162
+ /** Render the minimum with ~4 significant digits and no trailing zero noise. */
163
+ const formatMinForDisplay = (value) => {
164
+ const precise = value < 1 ? value.toPrecision(2) : value.toPrecision(4);
165
+ return String(Number(precise));
166
+ };
167
+ //# sourceMappingURL=getNativeSwapMinAmountIn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getNativeSwapMinAmountIn.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/minimum/getNativeSwapMinAmountIn.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"findSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/quote/findSwapQuote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAuB,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAM3F,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAA;AAG7F,OAAO,EAEL,sBAAsB,EACvB,MAAM,mEAAmE,CAAA;AAQ1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAA;AAW1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAEzE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC;;;;8CAI8C;AAC9C,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,CAAC,EAAE,yBAAyB,CAAA;IAClC,OAAO,CAAC,EAAE,sBAAsB,CAAA;IAChC,KAAK,CAAC,EAAE,4BAA4B,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,GAAG;IACxE,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC1C,eAAe,CAAC,EAAE,mBAAmB,CAAA;CACtC,CAAA;AAED,KAAK,qBAAqB,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAA;AA2D/G;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,qBAAqB,EAQ5D,CAAA;AAkFV,eAAO,MAAM,aAAa,GAAU,oEAOjC,kBAAkB,KAAG,OAAO,CAAC,SAAS,CAyRxC,CAAA"}
1
+ {"version":3,"file":"findSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/quote/findSwapQuote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAuB,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAM3F,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAA;AAG7F,OAAO,EAEL,sBAAsB,EACvB,MAAM,mEAAmE,CAAA;AAQ1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAA;AAe1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAEzE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC;;;;8CAI8C;AAC9C,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,CAAC,EAAE,yBAAyB,CAAA;IAClC,OAAO,CAAC,EAAE,sBAAsB,CAAA;IAChC,KAAK,CAAC,EAAE,4BAA4B,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,GAAG;IACxE,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC1C,eAAe,CAAC,EAAE,mBAAmB,CAAA;CACtC,CAAA;AAED,KAAK,qBAAqB,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAA;AA2D/G;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,qBAAqB,EAQ5D,CAAA;AAkFV,eAAO,MAAM,aAAa,GAAU,oEAOjC,kBAAkB,KAAG,OAAO,CAAC,SAAS,CAiXxC,CAAA"}
@@ -13,6 +13,7 @@ import { getSwapKitQuote } from '@vultisig/core-chain/swap/general/swapkit/api/g
13
13
  import { swapKitEnabledChains, swapKitSourceChains, } from '@vultisig/core-chain/swap/general/swapkit/SwapKitEnabledChains';
14
14
  import { SwapKitAmountBelowMinimumError } from '@vultisig/core-chain/swap/general/swapkit/SwapKitErrors';
15
15
  import { getNativeSwapQuote } from '@vultisig/core-chain/swap/native/api/getNativeSwapQuote';
16
+ import { getNativeSwapMinAmountIn, } from '@vultisig/core-chain/swap/native/minimum/getNativeSwapMinAmountIn';
16
17
  import { nativeSwapChains, nativeSwapEnabledChainsRecord } from '@vultisig/core-chain/swap/native/NativeSwapChain';
17
18
  import { getNativeSwapDecimals } from '@vultisig/core-chain/swap/native/utils/getNativeSwapDecimals';
18
19
  import { NoSwapRoutesError } from '@vultisig/core-chain/swap/NoSwapRoutesError';
@@ -287,12 +288,37 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
287
288
  return result;
288
289
  };
289
290
  const shouldPreferGeneralSwap = [from.chain, to.chain].every(chain => isChainOfKind(chain, 'evm')) && [from.id, to.id].some(v => v);
291
+ const generalFetchers = getGeneralFetchers();
292
+ const nativeFetchers = getNativeFetchers();
290
293
  const fetchers = shouldPreferGeneralSwap
291
- ? [...getGeneralFetchers(), ...getNativeFetchers()]
292
- : [...getNativeFetchers(), ...getGeneralFetchers()];
294
+ ? [...generalFetchers, ...nativeFetchers]
295
+ : [...nativeFetchers, ...generalFetchers];
293
296
  if (isEmpty(fetchers)) {
294
297
  throw new NoSwapRoutesError();
295
298
  }
299
+ // Proactive THORChain minimum (#604). Derived from the destination chain's
300
+ // `outbound_fee` and spot pool prices, this yields an actionable threshold
301
+ // instead of a generic "no route" for sub-minimum amounts. Computed only when
302
+ // a native protocol can route AND we actually need it (sole-family pre-flight
303
+ // or the all-fail path) — never on every quote — so valid swaps pay no extra
304
+ // network cost. Resolves to `null` when not determinable.
305
+ const computeNativeMin = () => matchingSwapChains.includes(Chain.THORChain)
306
+ ? getNativeSwapMinAmountIn({ from, to, swapChain: Chain.THORChain })
307
+ : Promise.resolve(null);
308
+ // Eager short-circuit ONLY when THORChain is the *sole* possible route: no
309
+ // aggregators AND no MayaChain. We only compute a proactive minimum for
310
+ // THORChain (`computeNativeMin`), so if any other family can route — an
311
+ // aggregator (SwapKit/Chainflip) or MayaChain (its own, possibly lower
312
+ // minimum) — short-circuiting on THORChain's number would wrongly reject an
313
+ // amount they could fill. Multi-provider pairs let every provider run and
314
+ // only fall back to the computed minimum if they all fail. (#604, CodeRabbit)
315
+ const thorIsSoleRoute = generalFetchers.length === 0 && matchingSwapChains.length === 1 && matchingSwapChains[0] === Chain.THORChain;
316
+ if (thorIsSoleRoute) {
317
+ const nativeMin = await computeNativeMin();
318
+ if (nativeMin && amount < nativeMin.minAmountInBaseUnits) {
319
+ throw belowNativeMinimumError(nativeMin, from);
320
+ }
321
+ }
296
322
  const settled = await Promise.allSettled(fetchers.map(async (fetcher) => {
297
323
  const quote = await withTimeout(fetcher.fetch(), QUOTE_FETCH_TIMEOUT_MS);
298
324
  return {
@@ -335,7 +361,23 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
335
361
  lower.includes('amount too small') ||
336
362
  lower.includes('below the minimum'));
337
363
  };
364
+ // Native protocols halt trading per-chain (THORChain mimir `HALT<CHAIN>TRADING`,
365
+ // pool ragnarok, churn). The quote API then rejects EVERY amount with
366
+ // "trading is halted" — an operational state, not an amount problem. Detect it
367
+ // so we surface a "temporarily unavailable" message instead of the misleading
368
+ // generic "no route" (which reads like the pair is unsupported). Also match the
369
+ // "trading paused" wordings emitted by the THOR halt helpers in
370
+ // `chains/cosmos/thor/lp/halts.ts` (`global trading paused`,
371
+ // `<chain> chain trading paused`). (#604, CodeRabbit)
372
+ const isTradingHaltedMsg = (msg) => {
373
+ const lower = msg.toLowerCase();
374
+ return (lower.includes('halted') ||
375
+ lower.includes('trading halt') ||
376
+ lower.includes('trading paused') ||
377
+ lower.includes('trading is paused'));
378
+ };
338
379
  const belowMinimumByProvider = new Map();
380
+ const haltedProviders = new Set();
339
381
  for (let i = 0; i < settled.length; i++) {
340
382
  const result = settled[i];
341
383
  if (result.status !== 'rejected') {
@@ -356,6 +398,9 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
356
398
  belowMinimumByProvider.set(providerName, msg);
357
399
  }
358
400
  }
401
+ if (isTradingHaltedMsg(msg)) {
402
+ haltedProviders.add(fetchers[i].providerName);
403
+ }
359
404
  }
360
405
  if (belowMinimumByProvider.size > 0) {
361
406
  // Pick the message from the highest-preference provider that has one.
@@ -365,6 +410,22 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
365
410
  : [...belowMinimumByProvider.values()][0];
366
411
  throw new SwapError(SwapErrorCode.AmountBelowMinimum, `Amount below the minimum required by a swap provider. ${belowMinimumMessage}`);
367
412
  }
413
+ // Trading-halt takes precedence over the speculative computed minimum and the
414
+ // generic fallback: when a native protocol reports a halt, NO amount can route,
415
+ // so telling the user to "increase the amount" would be actively misleading. A
416
+ // genuine provider-reported below-minimum (handled above) still wins, since
417
+ // that provider is responding and the amount is the actionable lever. (#604)
418
+ if (haltedProviders.size > 0) {
419
+ throw new SwapError(SwapErrorCode.TradingHalted, `This swap route is temporarily unavailable — trading is halted on ${[...haltedProviders].join(', ')}. Please try again later.`);
420
+ }
421
+ // No provider returned a parseable below-minimum hint. Before falling back to
422
+ // the generic "no route" message, check the proactively-computed THORChain
423
+ // minimum: providers reject sub-minimum swaps with wordings we can't reliably
424
+ // match, so the computed threshold is the authoritative signal here (#604).
425
+ const nativeMin = await computeNativeMin();
426
+ if (nativeMin && amount < nativeMin.minAmountInBaseUnits) {
427
+ throw belowNativeMinimumError(nativeMin, from);
428
+ }
368
429
  const failedProviders = settled
369
430
  .map((result, index) => {
370
431
  if (result.status === 'fulfilled') {
@@ -373,6 +434,16 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
373
434
  return fetchers[index].providerName;
374
435
  })
375
436
  .filter((providerName) => providerName !== null);
437
+ // Instrument the fallback (#604): the raw provider messages are the only way
438
+ // to learn which sub-minimum/error wordings still slip through. Logging them
439
+ // makes future classification data-driven instead of guessed.
440
+ const rawProviderErrors = settled
441
+ .map((result, index) => result.status === 'rejected'
442
+ ? `${fetchers[index].providerName}: ${result.reason instanceof Error ? result.reason.message : String(result.reason)}`
443
+ : null)
444
+ .filter((entry) => entry !== null);
445
+ console.warn(`[findSwapQuote] no route for ${from.ticker} -> ${to.ticker}; raw provider errors: ${rawProviderErrors.join(' | ')}`);
376
446
  throw new SwapError(SwapErrorCode.AllProvidersFailed, `No swap route found after trying ${failedProviders.join(', ')}.`);
377
447
  };
448
+ const belowNativeMinimumError = (min, from) => new SwapError(SwapErrorCode.AmountBelowMinimum, `Amount is below the minimum for this swap. Minimum is ~${min.minAmountInHuman} ${from.ticker}. Please increase the amount.`);
378
449
  //# sourceMappingURL=findSwapQuote.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"findSwapQuote.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/quote/findSwapQuote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"findSwapQuote.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/quote/findSwapQuote.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"polkadot.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/polkadot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAKvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAQjD,eAAO,MAAM,mBAAmB,EAAE,mBAAmB,CAAC,UAAU,CAAC,QAAQ,CA0BxE,CAAA"}
1
+ {"version":3,"file":"polkadot.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/polkadot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAKvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AA6CjD,eAAO,MAAM,mBAAmB,EAAE,mBAAmB,CAAC,UAAU,CAAC,QAAQ,CAkCxE,CAAA"}
@@ -2,6 +2,39 @@ import { ensureHexPrefix } from '@vultisig/lib-utils/hex/ensureHexPrefix';
2
2
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
3
3
  import { polkadotRpcUrl } from '../../../chains/polkadot/client.js';
4
4
  import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
5
+ /**
6
+ * Substrate Pool errors that mean "this extrinsic is already in the pool /
7
+ * imported / banned because a peer just submitted it." In an MPC ceremony,
8
+ * the initiator and the joiner both broadcast the same signed extrinsic; the
9
+ * slower device hits exactly these messages while the tx is in fact already
10
+ * on chain. Treat them as idempotent successes — the alternative is showing
11
+ * the slower device a "Signing Error" screen for a transaction that did
12
+ * confirm. Fast path so we don't rely on `verifyBroadcastByHash`, which can't
13
+ * help on Polkadot until tx-status polling moves off the gated Subscan API.
14
+ *
15
+ * Substrate sources for the exact strings:
16
+ * substrate/client/transaction-pool/api/src/error.rs (AlreadyImported,
17
+ * TemporarilyBanned, NoTagsProvided, ImmediatelyDropped) and
18
+ * primitives/runtime/src/transaction_validity.rs (Stale).
19
+ */
20
+ const idempotentBroadcastErrorPatterns = [
21
+ /already imported/i,
22
+ /already known/i,
23
+ /temporarily banned/i,
24
+ ];
25
+ const isIdempotentBroadcastError = (text) => idempotentBroadcastErrorPatterns.some(pattern => pattern.test(text));
26
+ /**
27
+ * Substrate's JSON-RPC error shape is `{ code, message, data? }`. For
28
+ * `InvalidTransaction::*` rejections (code 1010) the `message` is the
29
+ * generic `"Invalid Transaction"` and the specific reason ("Transaction has
30
+ * a bad signature", "Transaction is outdated", "Inability to pay some fees",
31
+ * etc.) lives in `data`. Surfacing only `message` makes every failure look
32
+ * identical in the UI and strips the information we need to triage.
33
+ */
34
+ const formatRpcError = ({ code, message, data }) => {
35
+ const head = message ?? `code ${code}`;
36
+ return data ? `${head}: ${data}` : head;
37
+ };
5
38
  export const broadcastPolkadotTx = async ({ chain, tx }) => {
6
39
  const hexWithPrefix = ensureHexPrefix(Buffer.from(tx.encoded).toString('hex'));
7
40
  try {
@@ -14,7 +47,15 @@ export const broadcastPolkadotTx = async ({ chain, tx }) => {
14
47
  },
15
48
  });
16
49
  if (response.error) {
17
- throw new Error(`Polkadot broadcast failed: ${response.error.message ?? `code ${response.error.code}`}`);
50
+ // Slow device in an MPC peer race — the initiator (or any other peer)
51
+ // already submitted this exact tx; the node tells us with a Pool error
52
+ // (string usually in `message`) or, less commonly, an Invalid
53
+ // Transaction variant whose duplicate signal lives in `data`.
54
+ const errorText = `${response.error.message ?? ''} ${response.error.data ?? ''}`;
55
+ if (isIdempotentBroadcastError(errorText)) {
56
+ return;
57
+ }
58
+ throw new Error(`Polkadot broadcast failed: ${formatRpcError(response.error)}`);
18
59
  }
19
60
  // Per JSON-RPC 2.0 a valid response must have exactly one of `result` /
20
61
  // `error`. If both are missing (malformed gateway response, truncated
@@ -1 +1 @@
1
- {"version":3,"file":"polkadot.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/polkadot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAEhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAOhE,MAAM,CAAC,MAAM,mBAAmB,GAA6C,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IACnG,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IAE9E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAc,cAAc,EAAE;YAC3D,IAAI,EAAE;gBACJ,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,wBAAwB;gBAChC,MAAM,EAAE,CAAC,aAAa,CAAC;gBACvB,EAAE,EAAE,CAAC;aACN;SACF,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,QAAQ,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAC1G,CAAC;QAED,wEAAwE;QACxE,sEAAsE;QACtE,qEAAqE;QACrE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;QACtF,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":"polkadot.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/polkadot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAEhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAOhE;;;;;;;;;;;;;;GAcG;AACH,MAAM,gCAAgC,GAAsB;IAC1D,mBAAmB;IACnB,gBAAgB;IAChB,qBAAqB;CACtB,CAAA;AAED,MAAM,0BAA0B,GAAG,CAAC,IAAY,EAAW,EAAE,CAC3D,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAEtE;;;;;;;GAOG;AACH,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAoD,EAAU,EAAE;IAC3G,MAAM,IAAI,GAAG,OAAO,IAAI,QAAQ,IAAI,EAAE,CAAA;IACtC,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AACzC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAA6C,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IACnG,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IAE9E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAc,cAAc,EAAE;YAC3D,IAAI,EAAE;gBACJ,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,wBAAwB;gBAChC,MAAM,EAAE,CAAC,aAAa,CAAC;gBACvB,EAAE,EAAE,CAAC;aACN;SACF,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,sEAAsE;YACtE,uEAAuE;YACvE,8DAA8D;YAC9D,8DAA8D;YAC9D,MAAM,SAAS,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAA;YAChF,IAAI,0BAA0B,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1C,OAAM;YACR,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACjF,CAAC;QAED,wEAAwE;QACxE,sEAAsE;QACtE,qEAAqE;QACrE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;QACtF,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 +1 @@
1
- {"version":3,"file":"polkadot.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/polkadot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAK9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAgB9C,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAgCrE,CAAA"}
1
+ {"version":3,"file":"polkadot.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/polkadot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAK9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAgB9C,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAyCrE,CAAA"}
@@ -8,11 +8,20 @@ export const getPolkadotTxStatus = async ({ hash }) => {
8
8
  body: { hash },
9
9
  }));
10
10
  if (error || !response || response.code !== 0 || !response.data) {
11
- return { status: 'pending' };
11
+ // Subscan does not know this hash (or the API errored). Mark
12
+ // `isKnown: false` so the verify-by-hash safety net does NOT swallow
13
+ // the original broadcast error. Otherwise an `author_submitExtrinsic`
14
+ // rejection is silently reported as success and the UI shows a fake
15
+ // "done" with a hash that has no on-chain counterpart. Mirrors
16
+ // ripple.ts:25 / solana.ts:19.
17
+ return { status: 'pending', isKnown: false };
12
18
  }
13
19
  const { success, finalized, fee_used } = response.data;
14
20
  if (!finalized) {
15
- return { status: 'pending' };
21
+ // Subscan has indexed the extrinsic but it is not finalized yet —
22
+ // genuinely in flight. This is the legitimate peer-race case where
23
+ // verify-by-hash should swallow the slower device's duplicate error.
24
+ return { status: 'pending', isKnown: true };
16
25
  }
17
26
  const feeCoin = chainFeeCoin[Chain.Polkadot];
18
27
  const feeAmount = fee_used ?? response.data.fee;
@@ -1 +1 @@
1
- {"version":3,"file":"polkadot.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/polkadot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAI7D,MAAM,mBAAmB,GAAG,6DAA6D,CAAA;AAczF,MAAM,CAAC,MAAM,mBAAmB,GAA0C,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAC3F,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC7C,QAAQ,CAA2B,mBAAmB,EAAE;QACtD,IAAI,EAAE,EAAE,IAAI,EAAE;KACf,CAAC,CACH,CAAA;IAED,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;IAC9B,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAA;IAEtD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;IAC9B,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC5C,MAAM,SAAS,GAAG,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAA;IAC/C,MAAM,OAAO,GACX,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE;QACnC,CAAC,CAAC;YACE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;YAC5B,WAAW,EAAE,OAAO,CAAC,QAAQ;YAC7B,SAAS,EAAE,OAAO,CAAC,MAAM;SAC1B;QACH,CAAC,CAAC,SAAS,CAAA;IAEf,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QACrC,OAAO;KACR,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"polkadot.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/polkadot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAI7D,MAAM,mBAAmB,GAAG,6DAA6D,CAAA;AAczF,MAAM,CAAC,MAAM,mBAAmB,GAA0C,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAC3F,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC7C,QAAQ,CAA2B,mBAAmB,EAAE;QACtD,IAAI,EAAE,EAAE,IAAI,EAAE;KACf,CAAC,CACH,CAAA;IAED,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChE,6DAA6D;QAC7D,qEAAqE;QACrE,sEAAsE;QACtE,oEAAoE;QACpE,+DAA+D;QAC/D,+BAA+B;QAC/B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC9C,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAA;IAEtD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,kEAAkE;QAClE,mEAAmE;QACnE,qEAAqE;QACrE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC5C,MAAM,SAAS,GAAG,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAA;IAC/C,MAAM,OAAO,GACX,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE;QACnC,CAAC,CAAC;YACE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;YAC5B,WAAW,EAAE,OAAO,CAAC,QAAQ;YAC7B,SAAS,EAAE,OAAO,CAAC,MAAM;SAC1B;QACH,CAAC,CAAC,SAAS,CAAA;IAEf,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QACrC,OAAO;KACR,CAAA;AACH,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vultisig/core-chain",
3
- "version": "2.8.0",
3
+ "version": "2.9.0",
4
4
  "description": "Blockchain chain logic shared across Vultisig clients",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1430,6 +1430,11 @@
1430
1430
  "import": "./dist/swap/native/asset/toNativeSwapAsset.js",
1431
1431
  "default": "./dist/swap/native/asset/toNativeSwapAsset.js"
1432
1432
  },
1433
+ "./swap/native/minimum/getNativeSwapMinAmountIn": {
1434
+ "types": "./dist/swap/native/minimum/getNativeSwapMinAmountIn.d.ts",
1435
+ "import": "./dist/swap/native/minimum/getNativeSwapMinAmountIn.js",
1436
+ "default": "./dist/swap/native/minimum/getNativeSwapMinAmountIn.js"
1437
+ },
1433
1438
  "./swap/native/nativeSwapAffiliateConfig": {
1434
1439
  "types": "./dist/swap/native/nativeSwapAffiliateConfig.d.ts",
1435
1440
  "import": "./dist/swap/native/nativeSwapAffiliateConfig.js",