@vultisig/core-chain 1.4.3 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/dist/chains/cosmos/cosmosGasLimitRecord.d.ts.map +1 -1
- package/dist/chains/cosmos/cosmosGasLimitRecord.js +7 -1
- package/dist/chains/cosmos/cosmosGasLimitRecord.js.map +1 -1
- package/dist/chains/solana/getDynamicPriorityFeePrice.d.ts +13 -2
- package/dist/chains/solana/getDynamicPriorityFeePrice.d.ts.map +1 -1
- package/dist/chains/solana/getDynamicPriorityFeePrice.js +35 -9
- package/dist/chains/solana/getDynamicPriorityFeePrice.js.map +1 -1
- package/dist/chains/solana/solanaConfig.d.ts +1 -0
- package/dist/chains/solana/solanaConfig.d.ts.map +1 -1
- package/dist/chains/solana/solanaConfig.js +19 -5
- package/dist/chains/solana/solanaConfig.js.map +1 -1
- package/dist/swap/native/NativeSwapChain.d.ts +6 -0
- package/dist/swap/native/NativeSwapChain.d.ts.map +1 -1
- package/dist/swap/native/NativeSwapChain.js +7 -1
- package/dist/swap/native/NativeSwapChain.js.map +1 -1
- package/dist/swap/native/NativeSwapQuote.d.ts +1 -0
- package/dist/swap/native/NativeSwapQuote.d.ts.map +1 -1
- package/dist/swap/native/api/getNativeSwapQuote.d.ts.map +1 -1
- package/dist/swap/native/api/getNativeSwapQuote.js +87 -11
- package/dist/swap/native/api/getNativeSwapQuote.js.map +1 -1
- package/dist/swap/native/utils/parseThorchainSwapMemoStreaming.d.ts +9 -0
- package/dist/swap/native/utils/parseThorchainSwapMemoStreaming.d.ts.map +1 -0
- package/dist/swap/native/utils/parseThorchainSwapMemoStreaming.js +18 -0
- package/dist/swap/native/utils/parseThorchainSwapMemoStreaming.js.map +1 -0
- package/package.json +7 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# @vultisig/core-chain
|
|
2
2
|
|
|
3
|
+
## 1.5.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#319](https://github.com/vultisig/vultisig-sdk/pull/319) [`03007d7`](https://github.com/vultisig/vultisig-sdk/commit/03007d7293b2f51f6269d39bf3725715182f933e) Thanks [@rcoderdev](https://github.com/rcoderdev)! - fix(chain): THORChain native swap `streaming_interval` 0 (Rapid Swaps)
|
|
8
|
+
|
|
9
|
+
THORChain can serve swaps in a single block and auto-stream when needed.
|
|
10
|
+
Using `1` forced streaming; `0` lets the protocol choose. MayaChain
|
|
11
|
+
unchanged (`3`).
|
|
12
|
+
|
|
13
|
+
Refs: https://github.com/vultisig/vultisig-windows/issues/3613
|
|
14
|
+
|
|
15
|
+
## 1.5.0
|
|
16
|
+
|
|
17
|
+
### Minor Changes
|
|
18
|
+
|
|
19
|
+
- [#320](https://github.com/vultisig/vultisig-sdk/pull/320) [`c33d1f0`](https://github.com/vultisig/vultisig-sdk/commit/c33d1f02b6740ef1c7db16cdc1f7290ec7b2f1f5) Thanks [@rcoderdev](https://github.com/rcoderdev)! - feat(chain): THORChain rapid quote with streaming fallback above 3% fee bps
|
|
20
|
+
|
|
21
|
+
THORChain swap quotes now request rapid (`streaming_interval=0`) first. When `fees.total_bps` exceeds 300, a second streaming quote is fetched (`interval=1`, optional `streaming_quantity` from `max_streaming_quantity`); the better `expected_amount_out` wins, with silent fallback to rapid on errors. `THORCHAIN_STREAMING_SLIPPAGE_THRESHOLD_BPS` disables the extra fetch when set to `Number.MAX_SAFE_INTEGER`. Keysign payload reads THOR streaming fields from the quote memo so they match the selected route.
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- Updated dependencies [[`a52980c`](https://github.com/vultisig/vultisig-sdk/commit/a52980c490633da7d7ae36128bc491f8ca3ff565)]:
|
|
26
|
+
- @vultisig/lib-utils@0.10.1
|
|
27
|
+
|
|
3
28
|
## 1.4.3
|
|
4
29
|
|
|
5
30
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cosmosGasLimitRecord.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/cosmosGasLimitRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAE/D,OAAO,EAAiB,OAAO,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"cosmosGasLimitRecord.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/cosmosGasLimitRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAE/D,OAAO,EAAiB,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAqBxD,eAAO,MAAM,iBAAiB,GAAI,MAAM,OAAO,CAAC,WAAW,CAAC,KAAG,MAM9D,CAAA"}
|
|
@@ -8,7 +8,13 @@ const cosmosGasLimitRecord = {
|
|
|
8
8
|
[Chain.Noble]: 200000n,
|
|
9
9
|
[Chain.Akash]: 200000n,
|
|
10
10
|
[Chain.Terra]: 300000n,
|
|
11
|
-
|
|
11
|
+
// TerraClassic default covers both bank.MsgSend (uluna ~80k) and
|
|
12
|
+
// ibc.MsgTransfer (~150-200k), with margin for chain load. uusd
|
|
13
|
+
// (USTC) MsgSend has its own 1M override below for the burn-tax /
|
|
14
|
+
// treasury post-handler path; IBC `MsgTransfer` is exempt from the
|
|
15
|
+
// burn tax (per classic-terra/core fee_tax.go::FilterMsgAndComputeTax)
|
|
16
|
+
// so it falls through to this default.
|
|
17
|
+
[Chain.TerraClassic]: 400000n,
|
|
12
18
|
[Chain.THORChain]: 20000000n,
|
|
13
19
|
[Chain.MayaChain]: 2000000000n,
|
|
14
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cosmosGasLimitRecord.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/cosmosGasLimitRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAe,MAAM,4BAA4B,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAW,MAAM,iBAAiB,CAAA;AAExD,MAAM,oBAAoB,GAAgC;IACxD,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO;IACvB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO;IACxB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO;IACvB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO;IACrB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;IACtB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;IACtB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;IACtB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,OAAO;IAC7B,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS;IAC5B,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,WAAW;CAC/B,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAA0B,EAAU,EAAE;IACtE,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACnE,OAAO,QAAU,CAAA;IACnB,CAAC;IAED,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"cosmosGasLimitRecord.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/cosmosGasLimitRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAe,MAAM,4BAA4B,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAW,MAAM,iBAAiB,CAAA;AAExD,MAAM,oBAAoB,GAAgC;IACxD,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO;IACvB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO;IACxB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO;IACvB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO;IACrB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;IACtB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;IACtB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;IACtB,iEAAiE;IACjE,gEAAgE;IAChE,kEAAkE;IAClE,mEAAmE;IACnE,uEAAuE;IACvE,uCAAuC;IACvC,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,OAAO;IAC7B,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS;IAC5B,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,WAAW;CAC/B,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAA0B,EAAU,EAAE;IACtE,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACnE,OAAO,QAAU,CAAA;IACnB,CAAC;IAED,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC,CAAA"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { PublicKey } from '@solana/web3.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fetches the 75th-percentile non-zero recent prioritization fee from the
|
|
4
|
+
* Solana RPC. When `writableAccounts` is provided, the query is scoped to
|
|
5
|
+
* slots that wrote to those accounts (vault-aware) — the global feed is
|
|
6
|
+
* dominated by no-op vote txs and underestimates fees for contended
|
|
7
|
+
* writes. Floors at `solanaConfig.priorityFeePrice` so a low-congestion
|
|
8
|
+
* percentile never undershoots the cross-platform minimum, AND falls
|
|
9
|
+
* back to the floor when the sample window is too sparse to extrapolate
|
|
10
|
+
* a reliable percentile (see MIN_SAMPLE_SIZE).
|
|
11
|
+
*/
|
|
12
|
+
export declare const getDynamicPriorityFeePrice: (writableAccounts?: PublicKey[]) => Promise<number>;
|
|
13
|
+
export declare const _MIN_SAMPLE_SIZE_FOR_TEST = 5;
|
|
3
14
|
//# sourceMappingURL=getDynamicPriorityFeePrice.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDynamicPriorityFeePrice.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/getDynamicPriorityFeePrice.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getDynamicPriorityFeePrice.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/getDynamicPriorityFeePrice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAoB3C;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,GACnC,mBAAkB,SAAS,EAAO,KACnC,OAAO,CAAC,MAAM,CA0BhB,CAAA;AAID,eAAO,MAAM,yBAAyB,IAAkB,CAAA"}
|
|
@@ -1,20 +1,46 @@
|
|
|
1
1
|
import { getSolanaClient } from './client.js';
|
|
2
2
|
import { solanaConfig } from './solanaConfig.js';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
const PRIORITY_FEE_PERCENTILE = 0.75;
|
|
4
|
+
/**
|
|
5
|
+
* Minimum sample size before the percentile selection is statistically
|
|
6
|
+
* meaningful. With the new lockedWritableAccounts scoping, sparse windows
|
|
7
|
+
* (1-3 non-zero fee slots in the recent window) become more likely - a
|
|
8
|
+
* single LP-add slot at e.g. 50_000_000 µLam/CU would dominate the
|
|
9
|
+
* percentile and set a wildly inflated fee for the next caller. Math.max
|
|
10
|
+
* floor below only protects against UNDER-payment; this guard protects
|
|
11
|
+
* against OVER-payment from a sparse-window spike. Below threshold we
|
|
12
|
+
* fall back to the cross-platform floor as the base rate (effectively
|
|
13
|
+
* "we don't have enough signal, pay the minimum").
|
|
14
|
+
*/
|
|
15
|
+
const MIN_SAMPLE_SIZE = 5;
|
|
16
|
+
/**
|
|
17
|
+
* Fetches the 75th-percentile non-zero recent prioritization fee from the
|
|
18
|
+
* Solana RPC. When `writableAccounts` is provided, the query is scoped to
|
|
19
|
+
* slots that wrote to those accounts (vault-aware) — the global feed is
|
|
20
|
+
* dominated by no-op vote txs and underestimates fees for contended
|
|
21
|
+
* writes. Floors at `solanaConfig.priorityFeePrice` so a low-congestion
|
|
22
|
+
* percentile never undershoots the cross-platform minimum, AND falls
|
|
23
|
+
* back to the floor when the sample window is too sparse to extrapolate
|
|
24
|
+
* a reliable percentile (see MIN_SAMPLE_SIZE).
|
|
25
|
+
*/
|
|
26
|
+
export const getDynamicPriorityFeePrice = async (writableAccounts = []) => {
|
|
5
27
|
const client = getSolanaClient();
|
|
6
|
-
const recentFees = await client.getRecentPrioritizationFees(
|
|
28
|
+
const recentFees = await client.getRecentPrioritizationFees(writableAccounts.length > 0
|
|
29
|
+
? { lockedWritableAccounts: writableAccounts }
|
|
30
|
+
: undefined);
|
|
7
31
|
const nonZeroFees = recentFees
|
|
8
32
|
.map(entry => entry.prioritizationFee)
|
|
9
33
|
.filter(fee => fee > 0)
|
|
10
34
|
.sort((a, b) => a - b);
|
|
11
|
-
|
|
35
|
+
// Sparse-window guard: too few non-zero samples means a single
|
|
36
|
+
// outlier slot would dominate the percentile. Fall back to floor.
|
|
37
|
+
if (nonZeroFees.length < MIN_SAMPLE_SIZE) {
|
|
12
38
|
return solanaConfig.priorityFeePrice;
|
|
13
39
|
}
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
return Math.round((nonZeroFees[mid - 1] + nonZeroFees[mid]) / 2);
|
|
17
|
-
}
|
|
18
|
-
return nonZeroFees[mid];
|
|
40
|
+
const index = Math.min(Math.floor(nonZeroFees.length * PRIORITY_FEE_PERCENTILE), nonZeroFees.length - 1);
|
|
41
|
+
return Math.max(nonZeroFees[index], solanaConfig.priorityFeePrice);
|
|
19
42
|
};
|
|
43
|
+
// Test-only export: lets unit tests pin the threshold without re-stating
|
|
44
|
+
// the magic number. Not exported from package barrel.
|
|
45
|
+
export const _MIN_SAMPLE_SIZE_FOR_TEST = MIN_SAMPLE_SIZE;
|
|
20
46
|
//# sourceMappingURL=getDynamicPriorityFeePrice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDynamicPriorityFeePrice.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/getDynamicPriorityFeePrice.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getDynamicPriorityFeePrice.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/getDynamicPriorityFeePrice.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,uBAAuB,GAAG,IAAI,CAAA;AAEpC;;;;;;;;;;GAUG;AACH,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAC3C,mBAAgC,EAAE,EACnB,EAAE;IACjB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAEhC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,2BAA2B,CACvD,gBAAgB,CAAC,MAAM,GAAG,CAAC;QACvB,CAAC,CAAC,EAAE,sBAAsB,EAAE,gBAAgB,EAAE;QAC9C,CAAC,CAAC,SAAS,CAClB,CAAA;IAED,MAAM,WAAW,GAAG,UAAU;SACzB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC;SACrC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;SACtB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAE1B,+DAA+D;IAC/D,kEAAkE;IAClE,IAAI,WAAW,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QACvC,OAAO,YAAY,CAAC,gBAAgB,CAAA;IACxC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,uBAAuB,CAAC,EACxD,WAAW,CAAC,MAAM,GAAG,CAAC,CACzB,CAAA;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAA;AACtE,CAAC,CAAA;AAED,yEAAyE;AACzE,sDAAsD;AACtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solanaConfig.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/solanaConfig.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"solanaConfig.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/solanaConfig.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;CAsBxB,CAAA"}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
export const solanaConfig = {
|
|
2
|
-
priorityFeeLimit: Number(100_000), //
|
|
3
|
-
priorityFeePrice: 1_000_000, //
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
|
|
2
|
+
priorityFeeLimit: Number(100_000), // Compute-unit limit for priority fee
|
|
3
|
+
priorityFeePrice: 1_000_000, // Floor price in micro-lamports per CU
|
|
4
|
+
// Solana charges 5000 lamports per signature. Vultisig sends are
|
|
5
|
+
// single-signer, so this is the per-tx base fee. If a future path
|
|
6
|
+
// emits multi-signer messages this becomes 5000 * N.
|
|
7
|
+
baseFee: 5000,
|
|
8
|
+
// Rent-exempt minimum for a 165-byte SPL token associated account, used
|
|
9
|
+
// when emitting `createAssociatedTokenAccount` alongside an SPL transfer.
|
|
10
|
+
//
|
|
11
|
+
// Derivation: (128-byte account header + 165-byte SPL Token data)
|
|
12
|
+
// × RENT_PER_BYTE_PER_YEAR (3480 lamports)
|
|
13
|
+
// × 2-year threshold
|
|
14
|
+
// = 293 × 3480 × 2
|
|
15
|
+
// = 2,039,280 lamports
|
|
16
|
+
//
|
|
17
|
+
// Constant on mainnet/devnet/testnet today — rent rate is hardcoded in
|
|
18
|
+
// the Solana runtime. If Solana ever bumps RENT_PER_BYTE_PER_YEAR or
|
|
19
|
+
// the 2-year threshold, re-derive from the formula above.
|
|
20
|
+
ataRentLamports: 2_039_280,
|
|
7
21
|
};
|
|
8
22
|
//# sourceMappingURL=solanaConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solanaConfig.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/solanaConfig.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"solanaConfig.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/solanaConfig.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,sCAAsC;IACzE,gBAAgB,EAAE,SAAS,EAAE,uCAAuC;IAEpE,iEAAiE;IACjE,kEAAkE;IAClE,qDAAqD;IACrD,OAAO,EAAE,IAAI;IAEb,wEAAwE;IACxE,0EAA0E;IAC1E,EAAE;IACF,kEAAkE;IAClE,uDAAuD;IACvD,iCAAiC;IACjC,6BAA6B;IAC7B,iCAAiC;IACjC,EAAE;IACF,uEAAuE;IACvE,qEAAqE;IACrE,0DAA0D;IAC1D,eAAe,EAAE,SAAS;CAC3B,CAAA"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
export declare const nativeSwapChains: readonly ["THORChain", "MayaChain"];
|
|
2
2
|
export type NativeSwapChain = (typeof nativeSwapChains)[number];
|
|
3
|
+
/** THORChain rapid swap (`streaming_interval=0`). Streaming retry uses interval `1`. */
|
|
3
4
|
export declare const nativeSwapStreamingInterval: Record<NativeSwapChain, number>;
|
|
5
|
+
/**
|
|
6
|
+
* THORChain-only: when a rapid quote's `fees.total_bps` exceeds this, fetch a streaming quote and pick the better outcome.
|
|
7
|
+
* Set to `Number.MAX_SAFE_INTEGER` to disable streaming fallback without removing code.
|
|
8
|
+
*/
|
|
9
|
+
export declare const THORCHAIN_STREAMING_SLIPPAGE_THRESHOLD_BPS = 300;
|
|
4
10
|
export declare const nativeSwapApiBaseUrl: Record<NativeSwapChain, string>;
|
|
5
11
|
export declare const nativeSwapEnabledChainsRecord: {
|
|
6
12
|
readonly THORChain: readonly ["Avalanche", import("@vultisig/core-chain/Chain").UtxoChain.BitcoinCash, "BSC", import("@vultisig/core-chain/Chain").UtxoChain.Bitcoin, import("@vultisig/core-chain/Chain").UtxoChain.Dogecoin, "Ethereum", "Cosmos", import("@vultisig/core-chain/Chain").UtxoChain.Litecoin, "THORChain", import("@vultisig/core-chain/Chain").OtherChain.Ripple, "Base", import("@vultisig/core-chain/Chain").OtherChain.Solana, import("@vultisig/core-chain/Chain").OtherChain.Tron, "Noble"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeSwapChain.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapChain.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,qCAA8C,CAAA;AAC3E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/D,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGvE,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGhE,CAAA;AAmBD,eAAO,MAAM,6BAA6B;;;CAYhC,CAAA;AAEV,KAAK,sBAAsB,GACzB,CAAC,OAAO,6BAA6B,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,eAAO,MAAM,uBAAuB,EAE/B,sBAAsB,EAAE,CAAA;AAE7B,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAoBrE,CAAA;AAED,KAAK,qBAAqB,GACtB,sBAAsB,GACtB,sBAAsB,CAAA;AAE1B,eAAO,MAAM,qBAAqB,EAAE,MAAM,CACxC,eAAe,EACf,qBAAqB,CAItB,CAAA"}
|
|
1
|
+
{"version":3,"file":"NativeSwapChain.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapChain.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,qCAA8C,CAAA;AAC3E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/D,wFAAwF;AACxF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGvE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,0CAA0C,MAAM,CAAA;AAE7D,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGhE,CAAA;AAmBD,eAAO,MAAM,6BAA6B;;;CAYhC,CAAA;AAEV,KAAK,sBAAsB,GACzB,CAAC,OAAO,6BAA6B,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,eAAO,MAAM,uBAAuB,EAE/B,sBAAsB,EAAE,CAAA;AAE7B,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAoBrE,CAAA;AAED,KAAK,qBAAqB,GACtB,sBAAsB,GACtB,sBAAsB,CAAA;AAE1B,eAAO,MAAM,qBAAqB,EAAE,MAAM,CACxC,eAAe,EACf,qBAAqB,CAItB,CAAA"}
|
|
@@ -2,10 +2,16 @@ import { Chain } from '@vultisig/core-chain/Chain';
|
|
|
2
2
|
import { cosmosRpcUrl } from '@vultisig/core-chain/chains/cosmos/cosmosRpcUrl';
|
|
3
3
|
import { withoutDuplicates } from '@vultisig/lib-utils/array/withoutDuplicates';
|
|
4
4
|
export const nativeSwapChains = [Chain.THORChain, Chain.MayaChain];
|
|
5
|
+
/** THORChain rapid swap (`streaming_interval=0`). Streaming retry uses interval `1`. */
|
|
5
6
|
export const nativeSwapStreamingInterval = {
|
|
6
|
-
[Chain.THORChain]:
|
|
7
|
+
[Chain.THORChain]: 0,
|
|
7
8
|
[Chain.MayaChain]: 3,
|
|
8
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* THORChain-only: when a rapid quote's `fees.total_bps` exceeds this, fetch a streaming quote and pick the better outcome.
|
|
12
|
+
* Set to `Number.MAX_SAFE_INTEGER` to disable streaming fallback without removing code.
|
|
13
|
+
*/
|
|
14
|
+
export const THORCHAIN_STREAMING_SLIPPAGE_THRESHOLD_BPS = 300;
|
|
9
15
|
export const nativeSwapApiBaseUrl = {
|
|
10
16
|
[Chain.THORChain]: `${cosmosRpcUrl[Chain.THORChain]}/thorchain`,
|
|
11
17
|
[Chain.MayaChain]: `${cosmosRpcUrl[Chain.MayaChain]}/mayachain`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeSwapChain.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapChain.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NativeSwapChain.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapChain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,eAAe,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,cAAc,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,2BAA2B,CAAC,EAAE,MAAM,CAAA;IACpC,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,qBAAqB,EAAE,MAAM,CAAA;IAC7B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,yBAAyB,EAAE,MAAM,CAAA;IACjC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,cAAc,GAAG;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA"}
|
|
1
|
+
{"version":3,"file":"NativeSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,eAAe,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,cAAc,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,2BAA2B,CAAC,EAAE,MAAM,CAAA;IACpC,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,qBAAqB,EAAE,MAAM,CAAA;IAC7B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,yBAAyB,EAAE,MAAM,CAAA;IACjC,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,cAAc,GAAG;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getNativeSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/api/getNativeSwapQuote.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getNativeSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/api/getNativeSwapQuote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAKzE,OAAO,EAEL,eAAe,EAGhB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAIpD,KAAK,uBAAuB,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,GAAG;IACtE,SAAS,EAAE,eAAe,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AA0ED,eAAO,MAAM,kBAAkB,GAAU,uEAQtC,uBAAuB,KAAG,OAAO,CAAC,eAAe,CA6FnD,CAAA"}
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import { toChainAmount } from '@vultisig/core-chain/amount/toChainAmount';
|
|
2
|
+
import { Chain } from '@vultisig/core-chain/Chain';
|
|
2
3
|
import { isInError } from '@vultisig/lib-utils/error/isInError';
|
|
3
4
|
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
4
5
|
import { t } from 'i18next';
|
|
5
6
|
import { chainFeeCoin } from '../../../coin/chainFeeCoin.js';
|
|
6
7
|
import { toNativeSwapAsset } from '../asset/toNativeSwapAsset.js';
|
|
7
|
-
import { nativeSwapApiBaseUrl, nativeSwapStreamingInterval, } from '../NativeSwapChain.js';
|
|
8
|
+
import { nativeSwapApiBaseUrl, nativeSwapStreamingInterval, THORCHAIN_STREAMING_SLIPPAGE_THRESHOLD_BPS, } from '../NativeSwapChain.js';
|
|
8
9
|
import { getNativeSwapDecimals } from '../utils/getNativeSwapDecimals.js';
|
|
9
10
|
import { buildAffiliateParams } from './affiliate.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const fromDecimals = getNativeSwapDecimals(from);
|
|
13
|
-
const chainAmount = toChainAmount(amount, fromDecimals);
|
|
14
|
-
const swapBaseUrl = `${nativeSwapApiBaseUrl[swapChain]}/quote/swap`;
|
|
11
|
+
const THORCHAIN_STREAMING_SWAP_INTERVAL = 1;
|
|
12
|
+
const requestNativeSwapQuote = async ({ swapChain, swapBaseUrl, fromAsset, toAsset, chainAmount, destination, streamingInterval, streamingQuantity, affiliateBps, referral, from, }) => {
|
|
15
13
|
const params = new URLSearchParams({
|
|
16
14
|
from_asset: fromAsset,
|
|
17
15
|
to_asset: toAsset,
|
|
18
16
|
amount: chainAmount.toString(),
|
|
19
17
|
destination,
|
|
20
|
-
streaming_interval: String(
|
|
18
|
+
streaming_interval: String(streamingInterval),
|
|
19
|
+
...(streamingQuantity !== undefined
|
|
20
|
+
? { streaming_quantity: String(streamingQuantity) }
|
|
21
|
+
: {}),
|
|
21
22
|
...(affiliateBps !== undefined
|
|
22
23
|
? buildAffiliateParams({
|
|
23
24
|
swapChain,
|
|
@@ -27,7 +28,9 @@ export const getNativeSwapQuote = async ({ swapChain, destination, from, to, amo
|
|
|
27
28
|
: {}),
|
|
28
29
|
});
|
|
29
30
|
const url = `${swapBaseUrl}?${params.toString()}`;
|
|
30
|
-
|
|
31
|
+
return queryUrl(url);
|
|
32
|
+
};
|
|
33
|
+
const assertOkQuote = (result, from) => {
|
|
31
34
|
if ('error' in result) {
|
|
32
35
|
if (isInError(result.error, 'not enough asset to pay for fees')) {
|
|
33
36
|
const { ticker } = chainFeeCoin[from.chain];
|
|
@@ -35,9 +38,82 @@ export const getNativeSwapQuote = async ({ swapChain, destination, from, to, amo
|
|
|
35
38
|
}
|
|
36
39
|
throw new Error(result.error);
|
|
37
40
|
}
|
|
38
|
-
return
|
|
39
|
-
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
export const getNativeSwapQuote = async ({ swapChain, destination, from, to, amount, affiliateBps, referral, }) => {
|
|
44
|
+
const [fromAsset, toAsset] = [from, to].map(asset => toNativeSwapAsset(asset));
|
|
45
|
+
const fromDecimals = getNativeSwapDecimals(from);
|
|
46
|
+
const chainAmount = toChainAmount(amount, fromDecimals);
|
|
47
|
+
const swapBaseUrl = `${nativeSwapApiBaseUrl[swapChain]}/quote/swap`;
|
|
48
|
+
if (swapChain !== Chain.THORChain) {
|
|
49
|
+
const result = await requestNativeSwapQuote({
|
|
50
|
+
swapChain,
|
|
51
|
+
swapBaseUrl,
|
|
52
|
+
fromAsset,
|
|
53
|
+
toAsset,
|
|
54
|
+
chainAmount,
|
|
55
|
+
destination,
|
|
56
|
+
streamingInterval: nativeSwapStreamingInterval[swapChain],
|
|
57
|
+
affiliateBps,
|
|
58
|
+
referral,
|
|
59
|
+
from,
|
|
60
|
+
});
|
|
61
|
+
return {
|
|
62
|
+
...assertOkQuote(result, from),
|
|
63
|
+
swapChain,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const rapidResult = await requestNativeSwapQuote({
|
|
40
67
|
swapChain,
|
|
41
|
-
|
|
68
|
+
swapBaseUrl,
|
|
69
|
+
fromAsset,
|
|
70
|
+
toAsset,
|
|
71
|
+
chainAmount,
|
|
72
|
+
destination,
|
|
73
|
+
streamingInterval: nativeSwapStreamingInterval[swapChain],
|
|
74
|
+
affiliateBps,
|
|
75
|
+
referral,
|
|
76
|
+
from,
|
|
77
|
+
});
|
|
78
|
+
const rapid = assertOkQuote(rapidResult, from);
|
|
79
|
+
const totalBps = rapid.fees.total_bps;
|
|
80
|
+
if (totalBps === undefined ||
|
|
81
|
+
totalBps <= THORCHAIN_STREAMING_SLIPPAGE_THRESHOLD_BPS) {
|
|
82
|
+
return { ...rapid, swapChain };
|
|
83
|
+
}
|
|
84
|
+
const streamingQuantity = rapid.max_streaming_quantity !== undefined &&
|
|
85
|
+
rapid.max_streaming_quantity > 0
|
|
86
|
+
? rapid.max_streaming_quantity
|
|
87
|
+
: undefined;
|
|
88
|
+
let streaming;
|
|
89
|
+
try {
|
|
90
|
+
const streamingRes = await requestNativeSwapQuote({
|
|
91
|
+
swapChain,
|
|
92
|
+
swapBaseUrl,
|
|
93
|
+
fromAsset,
|
|
94
|
+
toAsset,
|
|
95
|
+
chainAmount,
|
|
96
|
+
destination,
|
|
97
|
+
streamingInterval: THORCHAIN_STREAMING_SWAP_INTERVAL,
|
|
98
|
+
streamingQuantity,
|
|
99
|
+
affiliateBps,
|
|
100
|
+
referral,
|
|
101
|
+
from,
|
|
102
|
+
});
|
|
103
|
+
streaming = assertOkQuote(streamingRes, from);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
console.warn('[thorchain] streaming quote failed after elevated rapid slippage; using rapid quote', error);
|
|
107
|
+
return { ...rapid, swapChain };
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
if (BigInt(streaming.expected_amount_out) > BigInt(rapid.expected_amount_out)) {
|
|
111
|
+
return { ...streaming, swapChain };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return { ...rapid, swapChain };
|
|
116
|
+
}
|
|
117
|
+
return { ...rapid, swapChain };
|
|
42
118
|
};
|
|
43
119
|
//# sourceMappingURL=getNativeSwapQuote.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getNativeSwapQuote.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/api/getNativeSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAA;
|
|
1
|
+
{"version":3,"file":"getNativeSwapQuote.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/api/getNativeSwapQuote.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THORChain swap memos append `:<liquidity_tolerance>/<streaming_interval>/<streaming_quantity>`
|
|
3
|
+
* for streaming swaps. Rapid swaps omit this suffix.
|
|
4
|
+
*/
|
|
5
|
+
export declare const parseThorchainSwapMemoStreaming: (memo: string) => {
|
|
6
|
+
streamingInterval: string;
|
|
7
|
+
streamingQuantity: string;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=parseThorchainSwapMemoStreaming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseThorchainSwapMemoStreaming.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/utils/parseThorchainSwapMemoStreaming.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,+BAA+B,GAC1C,MAAM,MAAM,KACX;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAYxD,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THORChain swap memos append `:<liquidity_tolerance>/<streaming_interval>/<streaming_quantity>`
|
|
3
|
+
* for streaming swaps. Rapid swaps omit this suffix.
|
|
4
|
+
*/
|
|
5
|
+
export const parseThorchainSwapMemoStreaming = (memo) => {
|
|
6
|
+
const segments = memo.split(':');
|
|
7
|
+
for (let i = segments.length - 1; i >= 0; i -= 1) {
|
|
8
|
+
const triple = /^(\d+)\/(\d+)\/(\d+)$/.exec(segments[i]);
|
|
9
|
+
if (triple) {
|
|
10
|
+
return {
|
|
11
|
+
streamingInterval: triple[2],
|
|
12
|
+
streamingQuantity: triple[3],
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return { streamingInterval: '0', streamingQuantity: '0' };
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=parseThorchainSwapMemoStreaming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseThorchainSwapMemoStreaming.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/utils/parseThorchainSwapMemoStreaming.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,IAAY,EAC8C,EAAE;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QACxD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC5B,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;aAC7B,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAA;AAC3D,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vultisig/core-chain",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "Blockchain chain logic shared across Vultisig clients",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -1350,6 +1350,11 @@
|
|
|
1350
1350
|
"import": "./dist/swap/native/utils/getNativeSwapDecimals.js",
|
|
1351
1351
|
"default": "./dist/swap/native/utils/getNativeSwapDecimals.js"
|
|
1352
1352
|
},
|
|
1353
|
+
"./swap/native/utils/parseThorchainSwapMemoStreaming": {
|
|
1354
|
+
"types": "./dist/swap/native/utils/parseThorchainSwapMemoStreaming.d.ts",
|
|
1355
|
+
"import": "./dist/swap/native/utils/parseThorchainSwapMemoStreaming.js",
|
|
1356
|
+
"default": "./dist/swap/native/utils/parseThorchainSwapMemoStreaming.js"
|
|
1357
|
+
},
|
|
1353
1358
|
"./swap/NoSwapRoutesError": {
|
|
1354
1359
|
"types": "./dist/swap/NoSwapRoutesError.d.ts",
|
|
1355
1360
|
"import": "./dist/swap/NoSwapRoutesError.js",
|
|
@@ -1682,7 +1687,7 @@
|
|
|
1682
1687
|
"@ton/crypto": "^3.3.0",
|
|
1683
1688
|
"@trustwallet/wallet-core": "^4.6.0",
|
|
1684
1689
|
"@vultisig/core-config": "0.9.1",
|
|
1685
|
-
"@vultisig/lib-utils": "0.10.
|
|
1690
|
+
"@vultisig/lib-utils": "0.10.1",
|
|
1686
1691
|
"bip32": "^5.0.1",
|
|
1687
1692
|
"bitcoinjs-lib": "^7.0.1",
|
|
1688
1693
|
"bs58": "^6.0.0",
|