@vultisig/core-chain 2.8.0 → 2.10.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 +38 -0
- package/dist/chains/ton/api.d.ts +11 -0
- package/dist/chains/ton/api.d.ts.map +1 -1
- package/dist/chains/ton/api.js +44 -3
- package/dist/chains/ton/api.js.map +1 -1
- package/dist/coin/token/metadata/chains.d.ts +1 -1
- package/dist/coin/token/metadata/chains.d.ts.map +1 -1
- package/dist/coin/token/metadata/chains.js +1 -0
- package/dist/coin/token/metadata/chains.js.map +1 -1
- package/dist/coin/token/metadata/index.d.ts.map +1 -1
- package/dist/coin/token/metadata/index.js +2 -0
- package/dist/coin/token/metadata/index.js.map +1 -1
- package/dist/coin/token/metadata/resolvers/ton.d.ts +8 -0
- package/dist/coin/token/metadata/resolvers/ton.d.ts.map +1 -0
- package/dist/coin/token/metadata/resolvers/ton.js +10 -0
- package/dist/coin/token/metadata/resolvers/ton.js.map +1 -0
- package/dist/swap/SwapError.d.ts +2 -0
- package/dist/swap/SwapError.d.ts.map +1 -1
- package/dist/swap/SwapError.js +2 -0
- package/dist/swap/SwapError.js.map +1 -1
- package/dist/swap/general/lifi/api/getLifiSwapQuote.d.ts +5 -1
- package/dist/swap/general/lifi/api/getLifiSwapQuote.d.ts.map +1 -1
- package/dist/swap/general/lifi/api/getLifiSwapQuote.js +25 -9
- package/dist/swap/general/lifi/api/getLifiSwapQuote.js.map +1 -1
- package/dist/swap/general/lifi/config.d.ts +71 -0
- package/dist/swap/general/lifi/config.d.ts.map +1 -1
- package/dist/swap/general/lifi/config.js +66 -0
- package/dist/swap/general/lifi/config.js.map +1 -1
- package/dist/swap/native/minimum/getNativeSwapMinAmountIn.d.ts +69 -0
- package/dist/swap/native/minimum/getNativeSwapMinAmountIn.d.ts.map +1 -0
- package/dist/swap/native/minimum/getNativeSwapMinAmountIn.js +167 -0
- package/dist/swap/native/minimum/getNativeSwapMinAmountIn.js.map +1 -0
- package/dist/swap/quote/findSwapQuote.d.ts +2 -0
- package/dist/swap/quote/findSwapQuote.d.ts.map +1 -1
- package/dist/swap/quote/findSwapQuote.js +74 -2
- package/dist/swap/quote/findSwapQuote.js.map +1 -1
- package/dist/tx/broadcast/resolvers/polkadot.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/polkadot.js +42 -1
- package/dist/tx/broadcast/resolvers/polkadot.js.map +1 -1
- package/dist/tx/status/resolvers/polkadot.d.ts.map +1 -1
- package/dist/tx/status/resolvers/polkadot.js +11 -2
- package/dist/tx/status/resolvers/polkadot.js.map +1 -1
- package/dist/utils/getBlockExplorerUrl/index.js +2 -2
- package/dist/utils/getBlockExplorerUrl/index.js.map +1 -1
- package/package.json +11 -1
|
@@ -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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAA;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAE3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAA;AACnG,OAAO,EAAE,iBAAiB,EAAwB,MAAM,sCAAsC,CAAA;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAmB,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAEjG;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAA;AAExD;;;GAGG;AACH,MAAM,uBAAuB,GAAG,CAAC,CAAA;AAgCjC,MAAM,YAAY,GAAG,KAAK,CAAA;AAE1B,IAAI,YAA4F,CAAA;AAChG,IAAI,UAA0D,CAAA;AAE9D,MAAM,MAAM,GAAG,CAAI,KAAgC,EAAE,IAAsB,EAAiB,EAAE;IAC5F,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC;QAClD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAA;AAC1C,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,EACE,IAAI,EACJ,EAAE,EACF,SAAS,GAKV,EACD,OAA0B,EAAE,EACW,EAAE;IACzC,4EAA4E;IAC5E,wEAAwE;IACxE,IAAI,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;QAClC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,4EAA4E;IAC5E,oEAAoE;IACpE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,uBAAuB,CAAC,EAAE,CAAC;QACjG,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAA;QAE1F,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,IAAI,0BAA0B,CAAA;QAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAEhF,IAAI,OAA+D,CAAA;QACnE,IAAI,KAA6B,CAAA;QACjC,IAAI,QAAQ,EAAE,CAAC;YACb,CAAC;YAAA,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACrE,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;YAChD,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CACzC;YAAA,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/E,CAAC;QAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,CAAA;QACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAEhF,wEAAwE;QACxE,MAAM,WAAW,GAAG,CAAC,OAAe,EAAiB,EAAE;YACrD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;YACnC,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;gBAC1B,OAAO,CAAC,CAAA;YACV,CAAC;YACD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACnC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACpE,OAAO,IAAI,CAAA;YACb,CAAC;YACD,OAAO,IAAI,GAAG,KAAK,CAAA;QACrB,CAAC,CAAA;QAED,4EAA4E;QAC5E,MAAM,cAAc,GAAG,GAAG,WAAW,IAAI,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAA;QACxE,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAE3C,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,CAAA;QAC5C,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;QAC1C,IAAI,QAAQ,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAA;QACb,CAAC;QAED,4EAA4E;QAC5E,8CAA8C;QAC9C,MAAM,sBAAsB,GAAG,CAAC,WAAW,GAAG,uCAAuC,GAAG,QAAQ,CAAC,GAAG,SAAS,CAAA;QAE7G,0EAA0E;QAC1E,4EAA4E;QAC5E,2EAA2E;QAC3E,qEAAqE;QACrE,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,CAAA;QACjE,MAAM,cAAc,GAAG,GAAG,WAAW,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAA;QAC1E,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEpE,IAAI,kBAAkB,GAAG,CAAC,CAAA;QAC1B,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC/D,kBAAkB,GAAG,aAAa,CAAA;YACpC,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,CAAA;gBAChD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC1B,kBAAkB,GAAG,CAAC,aAAa,GAAG,YAAY,CAAC,GAAG,SAAS,CAAA;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;QAED,2EAA2E;QAC3E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,CAAA;QAC3E,MAAM,QAAQ,GAAG,cAAc,GAAG,EAAE,IAAI,uBAAuB,CAAA;QAC/D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,0EAA0E;QAC1E,2CAA2C;QAC3C,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrD,MAAM,oBAAoB,GAAG,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAExE,OAAO;YACL,SAAS;YACT,oBAAoB;YACpB,gBAAgB,EAAE,mBAAmB,CAAC,QAAQ,CAAC;YAC/C,mBAAmB,EAAE,QAAQ,CAAC,YAAY;YAC1C,qBAAqB,EAAE,QAAQ,EAAE,cAAc;YAC/C,OAAO,EAAE,kBAAkB,GAAG,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU;SAC3E,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED,gFAAgF;AAChF,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAU,EAAE;IACpD,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IACvE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;AAChC,CAAC,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AccountCoin } from '@vultisig/core-chain/coin/AccountCoin';
|
|
2
2
|
import { VultDiscountTier } from '@vultisig/core-chain/swap/affiliate';
|
|
3
3
|
import { KyberSwapBaseAffiliateConfig } from '@vultisig/core-chain/swap/general/kyber/config';
|
|
4
|
+
import { LifiAffiliateConfig } from '@vultisig/core-chain/swap/general/lifi/config';
|
|
4
5
|
import { OneInchAffiliateConfig } from '@vultisig/core-chain/swap/general/oneInch/api/getOneInchSwapQuote';
|
|
5
6
|
import { NativeSwapAffiliateConfig } from '@vultisig/core-chain/swap/native/api/affiliate';
|
|
6
7
|
import { TransferDirection } from '@vultisig/lib-utils/TransferDirection';
|
|
@@ -14,6 +15,7 @@ export type SwapAffiliateConfig = {
|
|
|
14
15
|
native?: NativeSwapAffiliateConfig;
|
|
15
16
|
oneInch?: OneInchAffiliateConfig;
|
|
16
17
|
kyber?: KyberSwapBaseAffiliateConfig;
|
|
18
|
+
lifi?: LifiAffiliateConfig;
|
|
17
19
|
};
|
|
18
20
|
export type FindSwapQuoteInput = Record<TransferDirection, AccountCoin> & {
|
|
19
21
|
amount: bigint;
|
|
@@ -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;
|
|
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;AAE7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAA;AAEnF,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;IACpC,IAAI,CAAC,EAAE,mBAAmB,CAAA;CAC3B,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,CAkXxC,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';
|
|
@@ -259,6 +260,7 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
|
|
|
259
260
|
},
|
|
260
261
|
amount: chainAmount,
|
|
261
262
|
affiliateBps,
|
|
263
|
+
lifiAffiliateConfig: affiliateConfig?.lifi,
|
|
262
264
|
});
|
|
263
265
|
return { quote: { general }, discounts: vultDiscount };
|
|
264
266
|
},
|
|
@@ -287,12 +289,37 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
|
|
|
287
289
|
return result;
|
|
288
290
|
};
|
|
289
291
|
const shouldPreferGeneralSwap = [from.chain, to.chain].every(chain => isChainOfKind(chain, 'evm')) && [from.id, to.id].some(v => v);
|
|
292
|
+
const generalFetchers = getGeneralFetchers();
|
|
293
|
+
const nativeFetchers = getNativeFetchers();
|
|
290
294
|
const fetchers = shouldPreferGeneralSwap
|
|
291
|
-
? [...
|
|
292
|
-
: [...
|
|
295
|
+
? [...generalFetchers, ...nativeFetchers]
|
|
296
|
+
: [...nativeFetchers, ...generalFetchers];
|
|
293
297
|
if (isEmpty(fetchers)) {
|
|
294
298
|
throw new NoSwapRoutesError();
|
|
295
299
|
}
|
|
300
|
+
// Proactive THORChain minimum (#604). Derived from the destination chain's
|
|
301
|
+
// `outbound_fee` and spot pool prices, this yields an actionable threshold
|
|
302
|
+
// instead of a generic "no route" for sub-minimum amounts. Computed only when
|
|
303
|
+
// a native protocol can route AND we actually need it (sole-family pre-flight
|
|
304
|
+
// or the all-fail path) — never on every quote — so valid swaps pay no extra
|
|
305
|
+
// network cost. Resolves to `null` when not determinable.
|
|
306
|
+
const computeNativeMin = () => matchingSwapChains.includes(Chain.THORChain)
|
|
307
|
+
? getNativeSwapMinAmountIn({ from, to, swapChain: Chain.THORChain })
|
|
308
|
+
: Promise.resolve(null);
|
|
309
|
+
// Eager short-circuit ONLY when THORChain is the *sole* possible route: no
|
|
310
|
+
// aggregators AND no MayaChain. We only compute a proactive minimum for
|
|
311
|
+
// THORChain (`computeNativeMin`), so if any other family can route — an
|
|
312
|
+
// aggregator (SwapKit/Chainflip) or MayaChain (its own, possibly lower
|
|
313
|
+
// minimum) — short-circuiting on THORChain's number would wrongly reject an
|
|
314
|
+
// amount they could fill. Multi-provider pairs let every provider run and
|
|
315
|
+
// only fall back to the computed minimum if they all fail. (#604, CodeRabbit)
|
|
316
|
+
const thorIsSoleRoute = generalFetchers.length === 0 && matchingSwapChains.length === 1 && matchingSwapChains[0] === Chain.THORChain;
|
|
317
|
+
if (thorIsSoleRoute) {
|
|
318
|
+
const nativeMin = await computeNativeMin();
|
|
319
|
+
if (nativeMin && amount < nativeMin.minAmountInBaseUnits) {
|
|
320
|
+
throw belowNativeMinimumError(nativeMin, from);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
296
323
|
const settled = await Promise.allSettled(fetchers.map(async (fetcher) => {
|
|
297
324
|
const quote = await withTimeout(fetcher.fetch(), QUOTE_FETCH_TIMEOUT_MS);
|
|
298
325
|
return {
|
|
@@ -335,7 +362,23 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
|
|
|
335
362
|
lower.includes('amount too small') ||
|
|
336
363
|
lower.includes('below the minimum'));
|
|
337
364
|
};
|
|
365
|
+
// Native protocols halt trading per-chain (THORChain mimir `HALT<CHAIN>TRADING`,
|
|
366
|
+
// pool ragnarok, churn). The quote API then rejects EVERY amount with
|
|
367
|
+
// "trading is halted" — an operational state, not an amount problem. Detect it
|
|
368
|
+
// so we surface a "temporarily unavailable" message instead of the misleading
|
|
369
|
+
// generic "no route" (which reads like the pair is unsupported). Also match the
|
|
370
|
+
// "trading paused" wordings emitted by the THOR halt helpers in
|
|
371
|
+
// `chains/cosmos/thor/lp/halts.ts` (`global trading paused`,
|
|
372
|
+
// `<chain> chain trading paused`). (#604, CodeRabbit)
|
|
373
|
+
const isTradingHaltedMsg = (msg) => {
|
|
374
|
+
const lower = msg.toLowerCase();
|
|
375
|
+
return (lower.includes('halted') ||
|
|
376
|
+
lower.includes('trading halt') ||
|
|
377
|
+
lower.includes('trading paused') ||
|
|
378
|
+
lower.includes('trading is paused'));
|
|
379
|
+
};
|
|
338
380
|
const belowMinimumByProvider = new Map();
|
|
381
|
+
const haltedProviders = new Set();
|
|
339
382
|
for (let i = 0; i < settled.length; i++) {
|
|
340
383
|
const result = settled[i];
|
|
341
384
|
if (result.status !== 'rejected') {
|
|
@@ -356,6 +399,9 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
|
|
|
356
399
|
belowMinimumByProvider.set(providerName, msg);
|
|
357
400
|
}
|
|
358
401
|
}
|
|
402
|
+
if (isTradingHaltedMsg(msg)) {
|
|
403
|
+
haltedProviders.add(fetchers[i].providerName);
|
|
404
|
+
}
|
|
359
405
|
}
|
|
360
406
|
if (belowMinimumByProvider.size > 0) {
|
|
361
407
|
// Pick the message from the highest-preference provider that has one.
|
|
@@ -365,6 +411,22 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
|
|
|
365
411
|
: [...belowMinimumByProvider.values()][0];
|
|
366
412
|
throw new SwapError(SwapErrorCode.AmountBelowMinimum, `Amount below the minimum required by a swap provider. ${belowMinimumMessage}`);
|
|
367
413
|
}
|
|
414
|
+
// Trading-halt takes precedence over the speculative computed minimum and the
|
|
415
|
+
// generic fallback: when a native protocol reports a halt, NO amount can route,
|
|
416
|
+
// so telling the user to "increase the amount" would be actively misleading. A
|
|
417
|
+
// genuine provider-reported below-minimum (handled above) still wins, since
|
|
418
|
+
// that provider is responding and the amount is the actionable lever. (#604)
|
|
419
|
+
if (haltedProviders.size > 0) {
|
|
420
|
+
throw new SwapError(SwapErrorCode.TradingHalted, `This swap route is temporarily unavailable — trading is halted on ${[...haltedProviders].join(', ')}. Please try again later.`);
|
|
421
|
+
}
|
|
422
|
+
// No provider returned a parseable below-minimum hint. Before falling back to
|
|
423
|
+
// the generic "no route" message, check the proactively-computed THORChain
|
|
424
|
+
// minimum: providers reject sub-minimum swaps with wordings we can't reliably
|
|
425
|
+
// match, so the computed threshold is the authoritative signal here (#604).
|
|
426
|
+
const nativeMin = await computeNativeMin();
|
|
427
|
+
if (nativeMin && amount < nativeMin.minAmountInBaseUnits) {
|
|
428
|
+
throw belowNativeMinimumError(nativeMin, from);
|
|
429
|
+
}
|
|
368
430
|
const failedProviders = settled
|
|
369
431
|
.map((result, index) => {
|
|
370
432
|
if (result.status === 'fulfilled') {
|
|
@@ -373,6 +435,16 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
|
|
|
373
435
|
return fetchers[index].providerName;
|
|
374
436
|
})
|
|
375
437
|
.filter((providerName) => providerName !== null);
|
|
438
|
+
// Instrument the fallback (#604): the raw provider messages are the only way
|
|
439
|
+
// to learn which sub-minimum/error wordings still slip through. Logging them
|
|
440
|
+
// makes future classification data-driven instead of guessed.
|
|
441
|
+
const rawProviderErrors = settled
|
|
442
|
+
.map((result, index) => result.status === 'rejected'
|
|
443
|
+
? `${fetchers[index].providerName}: ${result.reason instanceof Error ? result.reason.message : String(result.reason)}`
|
|
444
|
+
: null)
|
|
445
|
+
.filter((entry) => entry !== null);
|
|
446
|
+
console.warn(`[findSwapQuote] no route for ${from.ticker} -> ${to.ticker}; raw provider errors: ${rawProviderErrors.join(' | ')}`);
|
|
376
447
|
throw new SwapError(SwapErrorCode.AllProvidersFailed, `No swap route found after trying ${failedProviders.join(', ')}.`);
|
|
377
448
|
};
|
|
449
|
+
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
450
|
//# sourceMappingURL=findSwapQuote.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findSwapQuote.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/quote/findSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAE9D,OAAO,EAAE,mBAAmB,EAAoB,MAAM,qCAAqC,CAAA;AAE3F,OAAO,EAAE,eAAe,EAAE,MAAM,+DAA+D,CAAA;AAC/F,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAA;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAA;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAA;AAEvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAA;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,8DAA8D,CAAA;AACpG,OAAO,EACL,mBAAmB,GAEpB,MAAM,mEAAmE,CAAA;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oEAAoE,CAAA;AAC7G,OAAO,EAAE,eAAe,EAAE,MAAM,+DAA+D,CAAA;AAC/F,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gEAAgE,CAAA;AACvE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yDAAyD,CAAA;AAExG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAA;AAC5F,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAA;AAClH,OAAO,EAAE,qBAAqB,EAAE,MAAM,8DAA8D,CAAA;AACpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAA;AAC/E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAA;AAoCtD;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,mBAAmB,GAAG,CAAC,WAAW,EAAE,WAAW,CAAqD,CAAA;AAI1G,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAwB,mBAAmB,CAAC,CAAA;AAElF,MAAM,gBAAgB,GAAG,CAAC,IAA2B,EAA8B,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAEtH,MAAM,sBAAsB,GAAG,MAAM,CAAA;AAErC,MAAM,WAAW,GAAG,CAAI,CAAa,EAAE,EAAU,EAAc,EAAE;IAC/D,IAAI,SAAoD,CAAA;IACxD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACtD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACjG,CAAC,CAAC,CAAA;IACF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACpD,YAAY,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAqC;IACzE,wEAAwE;IACxE,uEAAuE;IACvE,mEAAmE;IACnE,WAAW;IACX,OAAO;IACP,MAAM;IACN,SAAS;CACD,CAAA;AAEV,MAAM,yBAAyB,GAAG,IAAI,GAAG,CACvC,yBAAyB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAC1D,CAAA;AAED,MAAM,2BAA2B,GAAG,CAAC,IAA2B,EAAU,EAAE,CAC1E,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAA;AAEjE,iFAAiF;AACjF,SAAS,cAAc,CAAC,KAAa,EAAE,YAAoB,EAAE,UAAkB;IAC7E,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,UAAU,GAAG,YAAY,EAAE,CAAC;QAC9B,OAAO,KAAK,GAAG,GAAG,IAAI,MAAM,CAAC,UAAU,GAAG,YAAY,CAAC,CAAA;IACzD,CAAC;IACD,OAAO,KAAK,GAAG,GAAG,IAAI,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,CAAA;AACzD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,yBAAyB,CAAC,CAAY,EAAE,EAAe;IAC9D,IAAI,QAAQ,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,eAAe,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAA;QACjD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;QACtD,OAAO,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAA;IAC1D,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AAC1C,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAgD;IAC/E,IAAI,UAAU,GAA2B,IAAI,CAAA;IAC7C,IAAI,cAAc,GAA2B,IAAI,CAAA;IACjD,IAAI,4BAA4B,GAAG,MAAM,CAAC,iBAAiB,CAAA;IAE3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QACzB,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,SAAQ;QACV,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAA;QAE9B,IAAI,gBAAgB,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7C,qDAAqD;YACrD,IAAI,UAAU,KAAK,IAAI,IAAI,SAAS,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;gBAC5E,UAAU,GAAG,SAAS,CAAA;YACxB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,sEAAsE;YACtE,oEAAoE;YACpE,mEAAmE;YACnE,wEAAwE;YACxE,qCAAqC;YACrC,MAAM,aAAa,GAAG,2BAA2B,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;YACzE,IACE,cAAc,KAAK,IAAI;gBACvB,SAAS,CAAC,YAAY,GAAG,cAAc,CAAC,YAAY;gBACpD,CAAC,SAAS,CAAC,YAAY,KAAK,cAAc,CAAC,YAAY,IAAI,aAAa,GAAG,4BAA4B,CAAC,EACxG,CAAC;gBACD,cAAc,GAAG,SAAS,CAAA;gBAC1B,4BAA4B,GAAG,aAAa,CAAA;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,2EAA2E;IAC3E,+DAA+D;IAC/D,OAAO,CAAC,UAAU,IAAI,cAAc,CAAC,EAAE,KAAK,IAAI,IAAI,CAAA;AACtD,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,EAClC,IAAI,EACJ,EAAE,EACF,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,eAAe,GACI,EAAsB,EAAE;IAC3C,iEAAiE;IACjE,8EAA8E;IAC9E,0EAA0E;IAC1E,+EAA+E;IAC/E,MAAM,yBAAyB,GAAG,eAAe,EAAE,MAAM,EAAE,mBAAmB,CAAA;IAC9E,IACE,yBAAyB,KAAK,SAAS;QACvC,yBAAyB,KAAK,yBAAyB,CAAC,WAAW,EAAE,EACrE,CAAC;QACD,MAAM,IAAI,SAAS,CACjB,aAAa,CAAC,aAAa,EAC3B,oGAAoG,yBAAyB,8CAA8C,CAC5K,CAAA;IACH,CAAC;IAED,MAAM,YAAY,GAAG,mBAAmB,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAA;IAElE,MAAM,YAAY,GAAmB,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAEnG,MAAM,gBAAgB,GAAmB,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAE3E,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IAE7C,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAC7D,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,6BAA6B,CAAC,SAAS,CAAC,CAAC,CAAC,CACxF,CAAA;IAED,MAAM,iBAAiB,GAAG,GAAuB,EAAE,CACjD,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnC,YAAY,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;QACvE,KAAK,EAAE,KAAK,IAAwB,EAAE;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;YAClC,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;YACzD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;gBACtC,SAAS;gBACT,WAAW,EAAE,EAAE,CAAC,OAAO;gBACvB,IAAI;gBACJ,EAAE;gBACF,MAAM,EAAE,YAAY;gBACpB,QAAQ;gBACR,YAAY;gBACZ,qBAAqB,EAAE,eAAe,EAAE,MAAM;aAC/C,CAAC,CAAA;YAEF,OAAO;gBACL,KAAK,EAAE,EAAE,MAAM,EAAE;gBACjB,SAAS,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,YAAY;aACjG,CAAA;QACH,CAAC;KACF,CAAC,CAAC,CAAA;IAEL,MAAM,kBAAkB,GAAG,GAAuB,EAAE;QAClD,MAAM,MAAM,GAAuB,EAAE,CAAA;QAErC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAA;QAC5B,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAA;QACxB,MAAM,WAAW,GAAG,MAAM,CAAA;QAE1B,yEAAyE;QACzE,sEAAsE;QACtE,yEAAyE;QACzE,sEAAsE;QACtE,uEAAuE;QACvE,uEAAuE;QACvE,wEAAwE;QACxE,EAAE;QACF,sEAAsE;QACtE,sDAAsD;QACtD,KAAK,eAAe,CAAA;QACpB,KAAK,kBAAkB,CAAA;QACvB,KAAK,sBAAsB,CAAA;QAE3B,IACE,OAAO,CAAC,SAAS,EAAE,sBAAsB,CAAC;YAC1C,OAAO,CAAC,OAAO,EAAE,sBAAsB,CAAC;YACxC,SAAS,KAAK,OAAO,EACrB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,YAAY,EAAE,WAAW;gBACzB,KAAK,EAAE,KAAK,IAAwB,EAAE;oBACpC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC;wBACtC,IAAI,EAAE;4BACJ,GAAG,IAAI;4BACP,KAAK,EAAE,SAAS;yBACjB;wBACD,EAAE,EAAE;4BACF,GAAG,EAAE;4BACL,KAAK,EAAE,OAAO;yBACf;wBACD,MAAM,EAAE,WAAW;wBACnB,YAAY;wBACZ,WAAW,EAAE,eAAe,EAAE,KAAK;qBACpC,CAAC,CAAA;oBAEF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAA;gBACxD,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,wBAAwB,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;YAC7E,MAAM,CAAC,IAAI,CAAC;gBACV,YAAY,EAAE,OAAO;gBACrB,KAAK,EAAE,KAAK,IAAwB,EAAE;oBACpC,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC;wBACxC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;wBACzC,UAAU,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM;wBAClC,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM;wBAC5B,MAAM,EAAE,WAAW;wBACnB,YAAY;wBACZ,aAAa,EAAE,eAAe,EAAE,OAAO;qBACxC,CAAC,CAAA;oBAEF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAA;gBACxD,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,CAAC;YACzF,MAAM,CAAC,IAAI,CAAC;gBACV,YAAY,EAAE,MAAM;gBACpB,KAAK,EAAE,KAAK,IAAwB,EAAE;oBACpC,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC;wBACrC,IAAI,EAAE;4BACJ,GAAG,IAAI;4BACP,KAAK,EAAE,SAAS;yBACjB;wBACD,EAAE,EAAE;4BACF,GAAG,EAAE;4BACL,KAAK,EAAE,OAAO;yBACf;wBACD,MAAM,EAAE,WAAW;wBACnB,YAAY;qBACb,CAAC,CAAA;oBAEF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAA;gBACxD,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC;YACtF,MAAM,CAAC,IAAI,CAAC;gBACV,YAAY,EAAE,SAAS;gBACvB,KAAK,EAAE,KAAK,IAAwB,EAAE;oBACpC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC;wBACpC,IAAI,EAAE;4BACJ,GAAG,IAAI;4BACP,KAAK,EAAE,SAAS;yBACjB;wBACD,EAAE,EAAE;4BACF,GAAG,EAAE;4BACL,KAAK,EAAE,OAAO;yBACf;wBACD,MAAM,EAAE,WAAW;wBACnB,YAAY;qBACb,CAAC,CAAA;oBAEF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAA;gBACxD,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAED,MAAM,uBAAuB,GAC3B,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAErG,MAAM,QAAQ,GAAG,uBAAuB;QACtC,CAAC,CAAC,CAAC,GAAG,kBAAkB,EAAE,EAAE,GAAG,iBAAiB,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC,GAAG,iBAAiB,EAAE,EAAE,GAAG,kBAAkB,EAAE,CAAC,CAAA;IAErD,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,iBAAiB,EAAE,CAAA;IAC/B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAA4B,EAAE;QACvD,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,sBAAsB,CAAC,CAAA;QACxE,OAAO;YACL,KAAK;YACL,YAAY,EAAE,yBAAyB,CAAC,KAAK,EAAE,EAAE,CAAC;YAClD,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAA;IACH,CAAC,CAAC,CACH,CAAA;IACD,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAA;IAE7C,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,IAAI,CAAA;IACb,CAAC;IAED,6EAA6E;IAC7E,0EAA0E;IAC1E,6BAA6B;IAC7B,EAAE;IACF,8EAA8E;IAC9E,8DAA8D;IAC9D,6EAA6E;IAC7E,wEAAwE;IACxE,4EAA4E;IAC5E,wEAAwE;IACxE,sEAAsE;IACtE,qEAAqE;IACrE,kEAAkE;IAClE,MAAM,yBAAyB,GAA4B;QACzD,0EAA0E;QAC1E,WAAW;QACX,OAAO;QACP,MAAM;QACN,SAAS;QACT,WAAW;QACX,WAAW;KACZ,CAAA;IAED,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;QAC/B,OAAO,CACL,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC/B,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAChC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5B,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAClC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CACpC,CAAA;IACH,CAAC,CAAA;IAED,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAiC,CAAA;IAEvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QACzB,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,SAAQ;QACV,CAAC;QAED,MAAM,GAAG,GAAW,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAElG,qEAAqE;QACrE,yEAAyE;QACzE,kDAAkD;QAClD,IACE,MAAM,CAAC,MAAM,YAAY,8BAA8B;YACvD,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC;YAC1C,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC5C,CAAC;YACD,MAAM,IAAI,SAAS,CAAC,aAAa,CAAC,cAAc,EAAE,+DAA+D,CAAC,CAAA;QACpH,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;YAC7C,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9C,sBAAsB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,sBAAsB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACpC,sEAAsE;QACtE,MAAM,SAAS,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACpF,MAAM,mBAAmB,GAAG,SAAS;YACnC,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAE;YACxC,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,IAAI,SAAS,CACjB,aAAa,CAAC,kBAAkB,EAChC,yDAAyD,mBAAmB,EAAE,CAC/E,CAAA;IACH,CAAC;IAED,MAAM,eAAe,GAAG,OAAO;SAC5B,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAA;IACrC,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,YAAY,EAAyC,EAAE,CAAC,YAAY,KAAK,IAAI,CAAC,CAAA;IAEzF,MAAM,IAAI,SAAS,CACjB,aAAa,CAAC,kBAAkB,EAChC,oCAAoC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAClE,CAAA;AACH,CAAC,CAAA"}
|
|
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;
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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"}
|
|
@@ -40,7 +40,7 @@ const blockExplorerBaseUrl = {
|
|
|
40
40
|
[Chain.Mantle]: 'https://explorer.mantle.xyz',
|
|
41
41
|
[Chain.Hyperliquid]: hyperliquidBlockExplorerUrl,
|
|
42
42
|
[Chain.Sei]: 'https://seiscan.io',
|
|
43
|
-
[Chain.QBTC]: 'https://explorer.qbtc
|
|
43
|
+
[Chain.QBTC]: 'https://explorer.qbtc.net/qbtc',
|
|
44
44
|
};
|
|
45
45
|
export const getBlockExplorerUrl = ({ chain, entity, value }) => {
|
|
46
46
|
const baseUrl = blockExplorerBaseUrl[chain];
|
|
@@ -83,7 +83,7 @@ export const getBlockExplorerUrl = ({ chain, entity, value }) => {
|
|
|
83
83
|
[Chain.Mantle]: () => `${baseUrl}/address/${value}`,
|
|
84
84
|
[Chain.Hyperliquid]: () => `${baseUrl}/address/${value}`,
|
|
85
85
|
[Chain.Sei]: () => `${baseUrl}/address/${value}`,
|
|
86
|
-
[Chain.QBTC]: () => `${baseUrl}/
|
|
86
|
+
[Chain.QBTC]: () => `${baseUrl}/account/${value}`,
|
|
87
87
|
}),
|
|
88
88
|
tx: () => match(chain, {
|
|
89
89
|
[Chain.Bitcoin]: () => `${baseUrl}/tx/${value}`,
|