@vultisig/core-chain 2.5.0 → 2.7.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 +64 -0
- package/dist/chains/cosmos/account/getCosmosAccountInfo.d.ts.map +1 -1
- package/dist/chains/cosmos/account/getCosmosAccountInfo.js +41 -5
- package/dist/chains/cosmos/account/getCosmosAccountInfo.js.map +1 -1
- package/dist/swap/NoSwapRoutesError.d.ts +2 -1
- package/dist/swap/NoSwapRoutesError.d.ts.map +1 -1
- package/dist/swap/NoSwapRoutesError.js +3 -2
- package/dist/swap/NoSwapRoutesError.js.map +1 -1
- package/dist/swap/SwapError.d.ts +18 -0
- package/dist/swap/SwapError.d.ts.map +1 -0
- package/dist/swap/SwapError.js +22 -0
- package/dist/swap/SwapError.js.map +1 -0
- package/dist/swap/general/GeneralSwapProvider.d.ts +1 -1
- package/dist/swap/general/GeneralSwapProvider.d.ts.map +1 -1
- package/dist/swap/general/GeneralSwapProvider.js +2 -1
- package/dist/swap/general/GeneralSwapProvider.js.map +1 -1
- package/dist/swap/general/GeneralSwapQuote.d.ts +34 -0
- package/dist/swap/general/GeneralSwapQuote.d.ts.map +1 -1
- package/dist/swap/general/cowswap/api/getCowSwapOrderStatus.d.ts +9 -0
- package/dist/swap/general/cowswap/api/getCowSwapOrderStatus.d.ts.map +1 -0
- package/dist/swap/general/cowswap/api/getCowSwapOrderStatus.js +11 -0
- package/dist/swap/general/cowswap/api/getCowSwapOrderStatus.js.map +1 -0
- package/dist/swap/general/cowswap/api/getCowSwapQuote.d.ts +14 -0
- package/dist/swap/general/cowswap/api/getCowSwapQuote.d.ts.map +1 -0
- package/dist/swap/general/cowswap/api/getCowSwapQuote.js +51 -0
- package/dist/swap/general/cowswap/api/getCowSwapQuote.js.map +1 -0
- package/dist/swap/general/cowswap/api/submitCowSwapOrder.d.ts +12 -0
- package/dist/swap/general/cowswap/api/submitCowSwapOrder.d.ts.map +1 -0
- package/dist/swap/general/cowswap/api/submitCowSwapOrder.js +17 -0
- package/dist/swap/general/cowswap/api/submitCowSwapOrder.js.map +1 -0
- package/dist/swap/general/cowswap/config.d.ts +18 -0
- package/dist/swap/general/cowswap/config.d.ts.map +1 -0
- package/dist/swap/general/cowswap/config.js +83 -0
- package/dist/swap/general/cowswap/config.js.map +1 -0
- package/dist/swap/general/cowswap/permit/buildEip2612Permit.d.ts +39 -0
- package/dist/swap/general/cowswap/permit/buildEip2612Permit.d.ts.map +1 -0
- package/dist/swap/general/cowswap/permit/buildEip2612Permit.js +32 -0
- package/dist/swap/general/cowswap/permit/buildEip2612Permit.js.map +1 -0
- package/dist/swap/general/cowswap/sign/buildCowSwapOrder.d.ts +31 -0
- package/dist/swap/general/cowswap/sign/buildCowSwapOrder.d.ts.map +1 -0
- package/dist/swap/general/cowswap/sign/buildCowSwapOrder.js +45 -0
- package/dist/swap/general/cowswap/sign/buildCowSwapOrder.js.map +1 -0
- package/dist/swap/general/cowswap/sign/buildEip712Domain.d.ts +9 -0
- package/dist/swap/general/cowswap/sign/buildEip712Domain.d.ts.map +1 -0
- package/dist/swap/general/cowswap/sign/buildEip712Domain.js +11 -0
- package/dist/swap/general/cowswap/sign/buildEip712Domain.js.map +1 -0
- package/dist/swap/general/cowswap/types.d.ts +31 -0
- package/dist/swap/general/cowswap/types.d.ts.map +1 -0
- package/dist/swap/general/cowswap/types.js +2 -0
- package/dist/swap/general/cowswap/types.js.map +1 -0
- package/dist/swap/general/lifi/api/getLifiSwapQuote.d.ts +11 -1
- package/dist/swap/general/lifi/api/getLifiSwapQuote.d.ts.map +1 -1
- package/dist/swap/general/lifi/api/getLifiSwapQuote.js +34 -2
- package/dist/swap/general/lifi/api/getLifiSwapQuote.js.map +1 -1
- package/dist/swap/general/swapkit/SwapKitErrors.d.ts +17 -0
- package/dist/swap/general/swapkit/SwapKitErrors.d.ts.map +1 -0
- package/dist/swap/general/swapkit/SwapKitErrors.js +22 -0
- package/dist/swap/general/swapkit/SwapKitErrors.js.map +1 -0
- package/dist/swap/general/swapkit/SwapKitProviders.d.ts +38 -0
- package/dist/swap/general/swapkit/SwapKitProviders.d.ts.map +1 -0
- package/dist/swap/general/swapkit/SwapKitProviders.js +134 -0
- package/dist/swap/general/swapkit/SwapKitProviders.js.map +1 -0
- package/dist/swap/general/swapkit/api/getSwapKitQuote.d.ts.map +1 -1
- package/dist/swap/general/swapkit/api/getSwapKitQuote.js +19 -5
- package/dist/swap/general/swapkit/api/getSwapKitQuote.js.map +1 -1
- package/dist/swap/keysign/getSwapDestinationAddress.d.ts.map +1 -1
- package/dist/swap/keysign/getSwapDestinationAddress.js +8 -0
- package/dist/swap/keysign/getSwapDestinationAddress.js.map +1 -1
- package/dist/swap/native/api/getNativeSwapQuote.d.ts.map +1 -1
- package/dist/swap/native/api/getNativeSwapQuote.js +1 -2
- package/dist/swap/native/api/getNativeSwapQuote.js.map +1 -1
- package/dist/swap/quote/findSwapQuote.d.ts +1 -1
- package/dist/swap/quote/findSwapQuote.d.ts.map +1 -1
- package/dist/swap/quote/findSwapQuote.js +31 -5
- package/dist/swap/quote/findSwapQuote.js.map +1 -1
- package/dist/swap/utils/getSwapExplorerUrl/index.d.ts +35 -0
- package/dist/swap/utils/getSwapExplorerUrl/index.d.ts.map +1 -0
- package/dist/swap/utils/getSwapExplorerUrl/index.js +53 -0
- package/dist/swap/utils/getSwapExplorerUrl/index.js.map +1 -0
- package/package.json +61 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,69 @@
|
|
|
1
1
|
# @vultisig/core-chain
|
|
2
2
|
|
|
3
|
+
## 2.7.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#585](https://github.com/vultisig/vultisig-sdk/pull/585) [`1bf8a6d`](https://github.com/vultisig/vultisig-sdk/commit/1bf8a6d36788b702092d92918294d67cdc6e11b7) Thanks [@NeOMakinG](https://github.com/NeOMakinG)! - Add `getSwapExplorerUrl` helper for swap-provider tx links ([#426](https://github.com/vultisig/vultisig-sdk/issues/426)).
|
|
8
|
+
|
|
9
|
+
Tx history surfaces (vultisig-windows, vultiagent-app, future RN SDK) now have a single source of truth for "View on Explorer" URLs that point to the swap **provider's** scanner — `scan.li.fi`, `orb.helius.dev` for LI.FI Solana settlement, `runescan.io` for THORChain, and the MayaChain explorer — instead of every consumer reimplementing the routing and most defaulting to the source-chain explorer (which hides cross-chain routes from users).
|
|
10
|
+
- New: `getSwapExplorerUrl({ provider, txHash, fromChain })` in `@vultisig/core-chain/swap/utils/getSwapExplorerUrl`
|
|
11
|
+
- New: `Vultisig.getSwapExplorerUrl(provider, txHash, fromChain)` static method for parity with `getTxExplorerUrl`
|
|
12
|
+
- For `1inch` / `kyber` / `swapkit`, falls back to the source-chain explorer (no public per-tx aggregator page)
|
|
13
|
+
- Mirrors iOS `ExplorerLinkBuilder.swift` and Android `ExplorerLinkRepository.getSwapProgressLink`
|
|
14
|
+
- Pure URL builder, no new deps
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- [#600](https://github.com/vultisig/vultisig-sdk/pull/600) [`d1c12b2`](https://github.com/vultisig/vultisig-sdk/commit/d1c12b24bc55a318a8f87998d2320651f875b00a) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - fix(swap/swapkit): reclassify noRoutesFound as "amount too small" when the pair is structurally supported - cross-checks the cached /providers snapshot so low-amount swaps (e.g. BCH->ETH) surface an actionable message instead of a misleading "no route" error
|
|
19
|
+
|
|
20
|
+
## 2.6.0
|
|
21
|
+
|
|
22
|
+
### Minor Changes
|
|
23
|
+
|
|
24
|
+
- [#584](https://github.com/vultisig/vultisig-sdk/pull/584) [`a13c644`](https://github.com/vultisig/vultisig-sdk/commit/a13c644be796a7bf10dc0ab426ac888b9e962585) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - feat(cowswap): add CowSwap RFQ as swap provider for same-chain EVM trades (phase 1 sdk scaffold)
|
|
25
|
+
|
|
26
|
+
New `cowswap` module under `packages/core/chain/swap/general/cowswap/`:
|
|
27
|
+
- `config.ts` - chain configs (Ethereum, Arbitrum, Base, Avalanche), static EIP-2612 permit allowlist, app code / affiliate constants
|
|
28
|
+
- `types.ts` - CowSwap API response types
|
|
29
|
+
- `sign/buildCowSwapOrder.ts` - builds the EIP-712 CowSwap order struct; exports `buildCowSwapAppData` and `keccak256Hex` (uses viem)
|
|
30
|
+
- `sign/buildEip712Domain.ts` - EIP-712 domain for GPv2 settlement contract
|
|
31
|
+
- `api/getCowSwapQuote.ts` - POSTs to `/api/v1/quote`, returns `GeneralSwapQuote` with new `cowswap_order` tx arm
|
|
32
|
+
- `api/submitCowSwapOrder.ts` - POSTs signed order to `/api/v1/orders`
|
|
33
|
+
- `api/getCowSwapOrderStatus.ts` - polls order status
|
|
34
|
+
- `permit/buildEip2612Permit.ts` - builds EIP-2612 permit typed data for permit-eligible sell tokens
|
|
35
|
+
|
|
36
|
+
`GeneralSwapTx` union extended with `cowswap_order` arm.
|
|
37
|
+
`GeneralSwapProvider` extended with `'cowswap'`.
|
|
38
|
+
CowSwap is intentionally NOT registered as a live `findSwapQuote` fetcher (nor in
|
|
39
|
+
`aggregatorPreferenceOrder`) in phase 1 — the consumer build/sign path is wired in phase 2.
|
|
40
|
+
All `matchRecordUnion` call-sites over `GeneralSwapTx` updated for exhaustiveness.
|
|
41
|
+
|
|
42
|
+
No live fetcher registration, no mcp-ts wiring, no app UI changes. Consumer (mcp-ts) is responsible for USD threshold gating in phase 2.
|
|
43
|
+
|
|
44
|
+
- [#584](https://github.com/vultisig/vultisig-sdk/pull/584) [`a13c644`](https://github.com/vultisig/vultisig-sdk/commit/a13c644be796a7bf10dc0ab426ac888b9e962585) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - ## New
|
|
45
|
+
- Polkadot Asset Hub USDT (asset_id 1984) + USDC (asset_id 1337) token registry ([#562](https://github.com/vultisig/vultisig-sdk/issues/562))
|
|
46
|
+
- Polkadot `pallet_assets.Account` balance resolver for Asset Hub tokens - replaces placeholder 0n guard ([#563](https://github.com/vultisig/vultisig-sdk/issues/563))
|
|
47
|
+
- Tron native send `data` field (proto field 12) for THORChain memos + exchange deposit memos; `BuildTronSendOptions` and `BuildTrc20TransferOptions` gain optional `data?: Uint8Array` field ([#559](https://github.com/vultisig/vultisig-sdk/issues/559))
|
|
48
|
+
|
|
49
|
+
## Fixed
|
|
50
|
+
- Tron TRC-20 fee estimate now subtracts sender's available energy before charging TRX ([#556](https://github.com/vultisig/vultisig-sdk/issues/556))
|
|
51
|
+
- Tron native send free bandwidth check prevents spurious fee charge when bandwidth is available ([#555](https://github.com/vultisig/vultisig-sdk/issues/555))
|
|
52
|
+
|
|
53
|
+
### Patch Changes
|
|
54
|
+
|
|
55
|
+
- [#602](https://github.com/vultisig/vultisig-sdk/pull/602) [`5bb56a4`](https://github.com/vultisig/vultisig-sdk/commit/5bb56a4daba8b896626c54fabd94fd6c9a35320e) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - `getCosmosAccountInfo` now retries against a registered fallback LCD when the primary endpoint fails. Without this, a single-provider degradation (e.g. `terra-classic-lcd.publicnode.com` outage on 2026-05-28) hard-failed every cosmos signing surface that touches this code path — there was no recovery.
|
|
56
|
+
|
|
57
|
+
Fallback URLs per chain (Polkachu mirrors where available; Hexxagon for `TerraClassic` since polkachu has no Terra Classic endpoint, verified 2026-05-28). Chains not in the map preserve fail-closed behaviour.
|
|
58
|
+
|
|
59
|
+
Parallel to vultiagent-app#1017 (app-side fix) + mcp-ts#266 (mcp-side fix).
|
|
60
|
+
|
|
61
|
+
- [#592](https://github.com/vultisig/vultisig-sdk/pull/592) [`c4b4560`](https://github.com/vultisig/vultisig-sdk/commit/c4b45604f043700068aaf1c3c1a1ecad5c8a874f) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - lifi: tighten slippage to 0.3% for stablecoin pairs (USDC/USDT/DAI/...), keep 1% for volatile pairs
|
|
62
|
+
|
|
63
|
+
- [#596](https://github.com/vultisig/vultisig-sdk/pull/596) [`880cde0`](https://github.com/vultisig/vultisig-sdk/commit/880cde00a5978e8a4dff2cf8adb627059e4af5bf) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - Remove i18next dependency from `getNativeSwapQuote` — the lone `t()` call was the only i18next usage in the entire chain package, and consuming apps that don't initialize i18next (or initialize it without a Backend plugin) crash with `Cannot read property 'reload' of undefined` whenever code touches the SDK swap path. Replaced with a plain English fallback string. Drops i18next from `dependencies`.
|
|
64
|
+
|
|
65
|
+
- [#593](https://github.com/vultisig/vultisig-sdk/pull/593) [`5d11cf3`](https://github.com/vultisig/vultisig-sdk/commit/5d11cf3bfb81aba929fe8e81bb77e7aebff15129) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - refactor(swap): typed SwapError class with stable codes at findSwapQuote throw sites - enables instanceof checks instead of message string matching
|
|
66
|
+
|
|
3
67
|
## 2.5.0
|
|
4
68
|
|
|
5
69
|
### Minor Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCosmosAccountInfo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"getCosmosAccountInfo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAyGhE,eAAO,MAAM,oBAAoB,GAAU,oBAAoB,YAAY,CAAC,WAAW,CAAC;;;;;;EAgCvF,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Chain } from '@vultisig/core-chain/Chain';
|
|
1
2
|
import { getCosmosClient } from '@vultisig/core-chain/chains/cosmos/client';
|
|
2
3
|
import { cosmosRpcUrl } from '@vultisig/core-chain/chains/cosmos/cosmosRpcUrl';
|
|
3
4
|
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
@@ -23,19 +24,54 @@ const parseLcdAccount = (resp) => {
|
|
|
23
24
|
// LCD uses a different infra path (REST vs Tendermint RPC), supports
|
|
24
25
|
// extended account types (vesting, module wrappers) via JSON shape parsing,
|
|
25
26
|
// and gives us a second chance before we ship a doomed tx.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
//
|
|
28
|
+
// SamYap timeout report (vultiagent-app#1017, 2026-05-28): the primary LCD
|
|
29
|
+
// for Terra Classic (terra-classic-lcd.publicnode.com) was degraded for
|
|
30
|
+
// hours, causing every cosmos signing surface that touches this code path
|
|
31
|
+
// to hard-fail. The single-URL design had no recovery. Add a fallback URL
|
|
32
|
+
// per chain so a publicnode degradation doesn't take out signing entirely.
|
|
33
|
+
//
|
|
34
|
+
// Polkachu mirrors per cosmos chain. Hexxagon for columbus-5 since polkachu
|
|
35
|
+
// has no Terra Classic endpoint (verified 2026-05-28 — see
|
|
36
|
+
// vultiagent-app#1017 + mcp-ts#266). Keys are the chain id used by
|
|
37
|
+
// cosmos-sdk; chains not in this map have no fallback (degrade fail-closed
|
|
38
|
+
// behaviour preserved).
|
|
39
|
+
const COSMOS_LCD_FALLBACK_URLS = {
|
|
40
|
+
[Chain.Cosmos]: 'https://cosmos-api.polkachu.com',
|
|
41
|
+
[Chain.Osmosis]: 'https://osmosis-api.polkachu.com',
|
|
42
|
+
[Chain.Kujira]: 'https://kujira-api.polkachu.com',
|
|
43
|
+
[Chain.Terra]: 'https://terra-api.polkachu.com',
|
|
44
|
+
[Chain.TerraClassic]: 'https://lcd.terra-classic.hexxagon.io',
|
|
45
|
+
[Chain.THORChain]: 'https://thorchain-api.polkachu.com',
|
|
46
|
+
[Chain.Noble]: 'https://noble-api.polkachu.com',
|
|
47
|
+
[Chain.Dydx]: 'https://dydx-api.polkachu.com',
|
|
48
|
+
[Chain.Akash]: 'https://akash-api.polkachu.com',
|
|
49
|
+
};
|
|
50
|
+
const tryLcd = async (base, address) => {
|
|
30
51
|
try {
|
|
31
52
|
const resp = await queryUrl(`${base}/cosmos/auth/v1beta1/accounts/${address}`);
|
|
32
53
|
return parseLcdAccount(resp);
|
|
33
54
|
}
|
|
34
55
|
catch {
|
|
35
|
-
// 404 (account not found) or transient LCD error — caller decides.
|
|
36
56
|
return null;
|
|
37
57
|
}
|
|
38
58
|
};
|
|
59
|
+
const fetchAccountViaLcd = async (chain, address) => {
|
|
60
|
+
const base = cosmosRpcUrl[chain];
|
|
61
|
+
if (!base)
|
|
62
|
+
return null;
|
|
63
|
+
const primary = await tryLcd(base, address);
|
|
64
|
+
if (primary)
|
|
65
|
+
return primary;
|
|
66
|
+
// Primary failed (network / 5xx / shape mismatch). Try the registered
|
|
67
|
+
// fallback for this chain. Both-failed surfaces as null and the caller
|
|
68
|
+
// ships with sequence:0 default — same legacy behaviour, but only after
|
|
69
|
+
// we've actually exhausted both endpoints.
|
|
70
|
+
const fallback = COSMOS_LCD_FALLBACK_URLS[chain];
|
|
71
|
+
if (!fallback)
|
|
72
|
+
return null;
|
|
73
|
+
return tryLcd(fallback, address);
|
|
74
|
+
};
|
|
39
75
|
export const getCosmosAccountInfo = async ({ chain, address }) => {
|
|
40
76
|
const client = await getCosmosClient(chain);
|
|
41
77
|
const [accountInfo, block] = await Promise.all([client.getAccount(address), client.getBlock()]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCosmosAccountInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getCosmosAccountInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoSwapRoutesError.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/NoSwapRoutesError.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,
|
|
1
|
+
{"version":3,"file":"NoSwapRoutesError.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/NoSwapRoutesError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,MAAM,aAAa,CAAA;AAEtD,qBAAa,iBAAkB,SAAQ,SAAS;;CAI/C"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import { SwapError, SwapErrorCode } from './SwapError.js';
|
|
2
|
+
export class NoSwapRoutesError extends SwapError {
|
|
2
3
|
constructor() {
|
|
3
|
-
super(`No swap routes found.`);
|
|
4
|
+
super(SwapErrorCode.NoRoutesFound, `No swap routes found.`);
|
|
4
5
|
}
|
|
5
6
|
}
|
|
6
7
|
//# sourceMappingURL=NoSwapRoutesError.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoSwapRoutesError.js","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/NoSwapRoutesError.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAkB,SAAQ,
|
|
1
|
+
{"version":3,"file":"NoSwapRoutesError.js","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/NoSwapRoutesError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEtD,MAAM,OAAO,iBAAkB,SAAQ,SAAS;IAC9C;QACE,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAA;IAC7D,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare enum SwapErrorCode {
|
|
2
|
+
/** No swap provider supports this chain pair - swap cannot be attempted at all */
|
|
3
|
+
NoRoutesFound = "SWAP_NO_ROUTES_FOUND",
|
|
4
|
+
/** Amount is below the dust threshold of one or more providers */
|
|
5
|
+
AmountTooSmall = "SWAP_AMOUNT_TOO_SMALL",
|
|
6
|
+
/** Amount is below a provider's minimum but above dust - provider surfaced an explicit min */
|
|
7
|
+
AmountBelowMinimum = "SWAP_AMOUNT_BELOW_MINIMUM",
|
|
8
|
+
/** All configured providers were attempted and all failed */
|
|
9
|
+
AllProvidersFailed = "SWAP_ALL_PROVIDERS_FAILED",
|
|
10
|
+
/** Caller passed invalid configuration (e.g. mixed-case THORName affiliateFeeAddress) */
|
|
11
|
+
InvalidConfig = "SWAP_INVALID_CONFIG"
|
|
12
|
+
}
|
|
13
|
+
export declare class SwapError extends Error {
|
|
14
|
+
readonly code: SwapErrorCode;
|
|
15
|
+
readonly name = "SwapError";
|
|
16
|
+
constructor(code: SwapErrorCode, message: string);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=SwapError.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export var SwapErrorCode;
|
|
2
|
+
(function (SwapErrorCode) {
|
|
3
|
+
/** No swap provider supports this chain pair - swap cannot be attempted at all */
|
|
4
|
+
SwapErrorCode["NoRoutesFound"] = "SWAP_NO_ROUTES_FOUND";
|
|
5
|
+
/** Amount is below the dust threshold of one or more providers */
|
|
6
|
+
SwapErrorCode["AmountTooSmall"] = "SWAP_AMOUNT_TOO_SMALL";
|
|
7
|
+
/** Amount is below a provider's minimum but above dust - provider surfaced an explicit min */
|
|
8
|
+
SwapErrorCode["AmountBelowMinimum"] = "SWAP_AMOUNT_BELOW_MINIMUM";
|
|
9
|
+
/** All configured providers were attempted and all failed */
|
|
10
|
+
SwapErrorCode["AllProvidersFailed"] = "SWAP_ALL_PROVIDERS_FAILED";
|
|
11
|
+
/** Caller passed invalid configuration (e.g. mixed-case THORName affiliateFeeAddress) */
|
|
12
|
+
SwapErrorCode["InvalidConfig"] = "SWAP_INVALID_CONFIG";
|
|
13
|
+
})(SwapErrorCode || (SwapErrorCode = {}));
|
|
14
|
+
export class SwapError extends Error {
|
|
15
|
+
code;
|
|
16
|
+
name = 'SwapError';
|
|
17
|
+
constructor(code, message) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.code = code;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=SwapError.js.map
|
|
@@ -0,0 +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,4 +1,4 @@
|
|
|
1
|
-
export declare const generalSwapProviders: readonly ["1inch", "li.fi", "kyber", "swapkit"];
|
|
1
|
+
export declare const generalSwapProviders: readonly ["1inch", "li.fi", "kyber", "swapkit", "cowswap"];
|
|
2
2
|
export type GeneralSwapProvider = (typeof generalSwapProviders)[number];
|
|
3
3
|
export declare const generalSwapProviderName: Record<GeneralSwapProvider, string>;
|
|
4
4
|
//# sourceMappingURL=GeneralSwapProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneralSwapProvider.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/GeneralSwapProvider.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"GeneralSwapProvider.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/GeneralSwapProvider.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,4DAA6D,CAAA;AAE9F,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvE,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAMvE,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export const generalSwapProviders = ['1inch', 'li.fi', 'kyber', 'swapkit'];
|
|
1
|
+
export const generalSwapProviders = ['1inch', 'li.fi', 'kyber', 'swapkit', 'cowswap'];
|
|
2
2
|
export const generalSwapProviderName = {
|
|
3
3
|
'1inch': '1Inch',
|
|
4
4
|
'li.fi': 'LI.FI',
|
|
5
5
|
kyber: 'KyberSwap',
|
|
6
6
|
swapkit: 'SwapKit',
|
|
7
|
+
cowswap: 'CowSwap',
|
|
7
8
|
};
|
|
8
9
|
//# sourceMappingURL=GeneralSwapProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneralSwapProvider.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/GeneralSwapProvider.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"GeneralSwapProvider.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/GeneralSwapProvider.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAU,CAAA;AAI9F,MAAM,CAAC,MAAM,uBAAuB,GAAwC;IAC1E,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACnB,CAAA"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { SwapFee } from '@vultisig/core-chain/swap/SwapFee';
|
|
2
|
+
import { CowSwapTokenBalance } from './cowswap/sign/buildCowSwapOrder.js';
|
|
3
|
+
import { CowSwapOrderKind } from './cowswap/types.js';
|
|
2
4
|
import { GeneralSwapProvider } from './GeneralSwapProvider.js';
|
|
3
5
|
export type GeneralSwapTx = {
|
|
4
6
|
evm: {
|
|
@@ -25,7 +27,39 @@ export type GeneralSwapTx = {
|
|
|
25
27
|
inboundAddress?: string;
|
|
26
28
|
swapId?: string;
|
|
27
29
|
};
|
|
30
|
+
} | {
|
|
31
|
+
cowswap_order: {
|
|
32
|
+
sellToken: string;
|
|
33
|
+
buyToken: string;
|
|
34
|
+
receiver: string;
|
|
35
|
+
sellAmount: string;
|
|
36
|
+
buyAmount: string;
|
|
37
|
+
validTo: number;
|
|
38
|
+
appData: string;
|
|
39
|
+
appDataHash: string;
|
|
40
|
+
feeAmount: string;
|
|
41
|
+
kind: CowSwapOrderKind;
|
|
42
|
+
partiallyFillable: boolean;
|
|
43
|
+
sellTokenBalance: CowSwapTokenBalance;
|
|
44
|
+
buyTokenBalance: CowSwapTokenBalance;
|
|
45
|
+
chainId: number;
|
|
46
|
+
apiBase: string;
|
|
47
|
+
/** Set to true when the sellToken supports EIP-2612 permit. When true
|
|
48
|
+
* the signing flow should build and include a permit signature alongside
|
|
49
|
+
* the order signature, avoiding a separate ERC-20 approve transaction. */
|
|
50
|
+
permitRequired?: true;
|
|
51
|
+
};
|
|
28
52
|
};
|
|
53
|
+
/**
|
|
54
|
+
* Quote returned by an EVM/Solana general-purpose swap aggregator.
|
|
55
|
+
*
|
|
56
|
+
* Consumers building a "View on Explorer" link should call
|
|
57
|
+
* `getSwapExplorerUrl({ provider, txHash, fromChain })` from
|
|
58
|
+
* `@vultisig/core-chain/swap/utils/getSwapExplorerUrl` instead of routing
|
|
59
|
+
* by hand — the helper covers the LI.FI / Helius scanners and falls back to
|
|
60
|
+
* the source-chain explorer for `1inch` / `kyber` / `swapkit` (none of which
|
|
61
|
+
* expose a per-tx aggregator page).
|
|
62
|
+
*/
|
|
29
63
|
export type GeneralSwapQuote = {
|
|
30
64
|
dstAmount: string;
|
|
31
65
|
provider: GeneralSwapProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneralSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/GeneralSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,MAAM,MAAM,aAAa,GACrB;IACE,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAA;QACZ,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,CAAA;CACF,GACD;IACE,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,OAAO,CAAA;KACjB,CAAA;CACF,GACD;IACE,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,UAAU,CAAA;QACtB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF,CAAA;AAEL,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,EAAE,EAAE,aAAa,CAAA;CAClB,CAAA"}
|
|
1
|
+
{"version":3,"file":"GeneralSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/GeneralSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,MAAM,MAAM,aAAa,GACrB;IACE,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAA;QACZ,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,CAAA;CACF,GACD;IACE,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,OAAO,CAAA;KACjB,CAAA;CACF,GACD;IACE,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,UAAU,CAAA;QACtB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF,GACD;IACE,aAAa,EAAE;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,QAAQ,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,MAAM,CAAA;QAChB,UAAU,EAAE,MAAM,CAAA;QAClB,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,SAAS,EAAE,MAAM,CAAA;QACjB,IAAI,EAAE,gBAAgB,CAAA;QACtB,iBAAiB,EAAE,OAAO,CAAA;QAC1B,gBAAgB,EAAE,mBAAmB,CAAA;QACrC,eAAe,EAAE,mBAAmB,CAAA;QACpC,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf;;kFAE0E;QAC1E,cAAc,CAAC,EAAE,IAAI,CAAA;KACtB,CAAA;CACF,CAAA;AAEL;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,EAAE,EAAE,aAAa,CAAA;CAClB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CowSwapOrderStatusResponse } from '../types.js';
|
|
2
|
+
type GetCowSwapOrderStatusInput = {
|
|
3
|
+
apiBase: string;
|
|
4
|
+
uid: string;
|
|
5
|
+
};
|
|
6
|
+
/** GET /api/v1/orders/{uid} — poll order status. */
|
|
7
|
+
export declare function getCowSwapOrderStatus({ apiBase, uid, }: GetCowSwapOrderStatusInput): Promise<CowSwapOrderStatusResponse>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=getCowSwapOrderStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCowSwapOrderStatus.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/getCowSwapOrderStatus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAA;AAErD,KAAK,0BAA0B,GAAG;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,oDAAoD;AACpD,wBAAsB,qBAAqB,CAAC,EAC1C,OAAO,EACP,GAAG,GACJ,EAAE,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAUlE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
2
|
+
/** GET /api/v1/orders/{uid} — poll order status. */
|
|
3
|
+
export async function getCowSwapOrderStatus({ apiBase, uid, }) {
|
|
4
|
+
const raw = await queryUrl(`${apiBase}/api/v1/orders/${uid}`);
|
|
5
|
+
return {
|
|
6
|
+
status: raw.status,
|
|
7
|
+
txHash: raw.txHash,
|
|
8
|
+
executedBuyAmount: raw.executedBuyAmount,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=getCowSwapOrderStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCowSwapOrderStatus.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/getCowSwapOrderStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAS7D,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAC1C,OAAO,EACP,GAAG,GACwB;IAC3B,MAAM,GAAG,GAAG,MAAM,QAAQ,CACxB,GAAG,OAAO,kBAAkB,GAAG,EAAE,CAClC,CAAA;IAED,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAA8C;QAC1D,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;KACzC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { GeneralSwapQuote } from '../../GeneralSwapQuote.js';
|
|
2
|
+
import { CowSwapChainConfig } from '../config.js';
|
|
3
|
+
type GetCowSwapQuoteInput = {
|
|
4
|
+
sellToken: string;
|
|
5
|
+
buyToken: string;
|
|
6
|
+
sellAmount: bigint;
|
|
7
|
+
from: string;
|
|
8
|
+
receiver: string;
|
|
9
|
+
chainConfig: CowSwapChainConfig;
|
|
10
|
+
affiliateBps?: number;
|
|
11
|
+
};
|
|
12
|
+
export declare function getCowSwapQuote({ sellToken, buyToken, sellAmount, from, receiver, chainConfig, affiliateBps, }: GetCowSwapQuoteInput): Promise<GeneralSwapQuote>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=getCowSwapQuote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCowSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/getCowSwapQuote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAGL,kBAAkB,EAEnB,MAAM,WAAW,CAAA;AAiBlB,KAAK,oBAAoB,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,kBAAkB,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,wBAAsB,eAAe,CAAC,EACpC,SAAS,EACT,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,YAAY,GACb,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqDlD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
2
|
+
import { COWSWAP_DEFAULT_AFFILIATE_BPS, COWSWAP_FEE_RECIPIENT, KNOWN_PERMIT_TOKENS, } from '../config.js';
|
|
3
|
+
import { buildCowSwapAppData, keccak256Hex } from '../sign/buildCowSwapOrder.js';
|
|
4
|
+
export async function getCowSwapQuote({ sellToken, buyToken, sellAmount, from, receiver, chainConfig, affiliateBps, }) {
|
|
5
|
+
const bps = affiliateBps ?? COWSWAP_DEFAULT_AFFILIATE_BPS;
|
|
6
|
+
const appData = buildCowSwapAppData(bps, COWSWAP_FEE_RECIPIENT);
|
|
7
|
+
const appDataHash = keccak256Hex(appData);
|
|
8
|
+
const body = {
|
|
9
|
+
sellToken: sellToken.toLowerCase(),
|
|
10
|
+
buyToken: buyToken.toLowerCase(),
|
|
11
|
+
sellAmountBeforeFee: sellAmount.toString(),
|
|
12
|
+
from: from.toLowerCase(),
|
|
13
|
+
receiver: receiver.toLowerCase(),
|
|
14
|
+
kind: 'sell',
|
|
15
|
+
signingScheme: 'eip712',
|
|
16
|
+
partiallyFillable: false,
|
|
17
|
+
appData,
|
|
18
|
+
appDataHash,
|
|
19
|
+
};
|
|
20
|
+
const response = await queryUrl(`${chainConfig.apiBase}/api/v1/quote`, {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
body,
|
|
23
|
+
});
|
|
24
|
+
const { quote } = response;
|
|
25
|
+
const permitRequired = KNOWN_PERMIT_TOKENS[chainConfig.chainId]?.some(addr => addr.toLowerCase() === sellToken.toLowerCase());
|
|
26
|
+
return {
|
|
27
|
+
dstAmount: quote.buyAmount,
|
|
28
|
+
provider: 'cowswap',
|
|
29
|
+
tx: {
|
|
30
|
+
cowswap_order: {
|
|
31
|
+
sellToken: quote.sellToken,
|
|
32
|
+
buyToken: quote.buyToken,
|
|
33
|
+
receiver,
|
|
34
|
+
sellAmount: quote.sellAmount,
|
|
35
|
+
buyAmount: quote.buyAmount,
|
|
36
|
+
validTo: quote.validTo,
|
|
37
|
+
appData,
|
|
38
|
+
appDataHash,
|
|
39
|
+
feeAmount: quote.feeAmount,
|
|
40
|
+
kind: quote.kind,
|
|
41
|
+
partiallyFillable: quote.partiallyFillable,
|
|
42
|
+
sellTokenBalance: 'erc20',
|
|
43
|
+
buyTokenBalance: 'erc20',
|
|
44
|
+
chainId: chainConfig.chainId,
|
|
45
|
+
apiBase: chainConfig.apiBase,
|
|
46
|
+
...(permitRequired ? { permitRequired: true } : {}),
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=getCowSwapQuote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCowSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/getCowSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAG7D,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EAErB,mBAAmB,GACpB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AA0B7E,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,SAAS,EACT,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,YAAY,GACS;IACrB,MAAM,GAAG,GAAG,YAAY,IAAI,6BAA6B,CAAA;IACzD,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAA;IAC/D,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAEzC,MAAM,IAAI,GAAwB;QAChC,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;QAClC,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE;QAChC,mBAAmB,EAAE,UAAU,CAAC,QAAQ,EAAE;QAC1C,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;QACxB,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE;QAChC,IAAI,EAAE,MAAM;QACZ,aAAa,EAAE,QAAQ;QACvB,iBAAiB,EAAE,KAAK;QACxB,OAAO;QACP,WAAW;KACZ,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA0B,GAAG,WAAW,CAAC,OAAO,eAAe,EAAE;QAC9F,MAAM,EAAE,MAAM;QACd,IAAI;KACL,CAAC,CAAA;IAEF,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAA;IAE1B,MAAM,cAAc,GAAG,mBAAmB,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,CACnE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CACvD,CAAA;IAED,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,SAAS;QACnB,EAAE,EAAE;YACF,aAAa,EAAE;gBACb,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ;gBACR,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO;gBACP,WAAW;gBACX,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,gBAAgB,EAAE,OAAO;gBACzB,eAAe,EAAE,OAAO;gBACxB,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpD;SACF;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CowSwapOrder } from '../sign/buildCowSwapOrder.js';
|
|
2
|
+
type SubmitCowSwapOrderInput = {
|
|
3
|
+
apiBase: string;
|
|
4
|
+
order: CowSwapOrder;
|
|
5
|
+
signature: string;
|
|
6
|
+
from: string;
|
|
7
|
+
};
|
|
8
|
+
/** POST /api/v1/orders — submit a signed CowSwap order.
|
|
9
|
+
* Returns the orderUid assigned by the API. */
|
|
10
|
+
export declare function submitCowSwapOrder({ apiBase, order, signature, from, }: SubmitCowSwapOrderInput): Promise<string>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=submitCowSwapOrder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submitCowSwapOrder.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/submitCowSwapOrder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,KAAK,uBAAuB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,YAAY,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;+CAC+C;AAC/C,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,KAAK,EACL,SAAS,EACT,IAAI,GACL,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAc3C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
2
|
+
/** POST /api/v1/orders — submit a signed CowSwap order.
|
|
3
|
+
* Returns the orderUid assigned by the API. */
|
|
4
|
+
export async function submitCowSwapOrder({ apiBase, order, signature, from, }) {
|
|
5
|
+
const body = {
|
|
6
|
+
...order,
|
|
7
|
+
signature,
|
|
8
|
+
signingScheme: 'eip712',
|
|
9
|
+
from: from.toLowerCase(),
|
|
10
|
+
};
|
|
11
|
+
const orderUid = await queryUrl(`${apiBase}/api/v1/orders`, {
|
|
12
|
+
method: 'POST',
|
|
13
|
+
body,
|
|
14
|
+
});
|
|
15
|
+
return orderUid;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=submitCowSwapOrder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submitCowSwapOrder.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/submitCowSwapOrder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAW7D;+CAC+C;AAC/C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,OAAO,EACP,KAAK,EACL,SAAS,EACT,IAAI,GACoB;IACxB,MAAM,IAAI,GAAG;QACX,GAAG,KAAK;QACR,SAAS;QACT,aAAa,EAAE,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;KACzB,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAS,GAAG,OAAO,gBAAgB,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,IAAI;KACL,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const cowSwapSupportedChains: readonly ["Ethereum", "Arbitrum", "Base", "Avalanche"];
|
|
2
|
+
export type CowSwapSupportedChain = (typeof cowSwapSupportedChains)[number];
|
|
3
|
+
export declare const COW_SETTLEMENT_ADDRESS = "0x9008D19f58AAbD9eD0D60971565AA8510560ab41";
|
|
4
|
+
export declare const COW_VAULT_RELAYER_ADDRESS = "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110";
|
|
5
|
+
export type CowSwapChainConfig = {
|
|
6
|
+
apiBase: string;
|
|
7
|
+
settlementContract: string;
|
|
8
|
+
vaultRelayer: string;
|
|
9
|
+
chainId: number;
|
|
10
|
+
};
|
|
11
|
+
export declare const cowSwapChainConfig: Record<CowSwapSupportedChain, CowSwapChainConfig>;
|
|
12
|
+
export declare const KNOWN_PERMIT_TOKENS: Record<number, string[]>;
|
|
13
|
+
export declare const COWSWAP_APP_CODE = "vultisig";
|
|
14
|
+
export declare const COWSWAP_APP_VERSION = "0.1.0";
|
|
15
|
+
export declare const COWSWAP_DEFAULT_AFFILIATE_BPS = 50;
|
|
16
|
+
export declare const COWSWAP_FEE_RECIPIENT = "0x8E247a480449c84a5fDD25974A8501f3EFa4ABb9";
|
|
17
|
+
export declare const COWSWAP_VALID_TO_SECONDS: number;
|
|
18
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/cowswap/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,wDAAqF,CAAA;AAExH,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAA;AAG3E,eAAO,MAAM,sBAAsB,+CAA+C,CAAA;AAClF,eAAO,MAAM,yBAAyB,+CAA+C,CAAA;AAErF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAyBhF,CAAA;AAqBD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAqBxD,CAAA;AAED,eAAO,MAAM,gBAAgB,aAAa,CAAA;AAC1C,eAAO,MAAM,mBAAmB,UAAU,CAAA;AAK1C,eAAO,MAAM,6BAA6B,KAAK,CAAA;AAG/C,eAAO,MAAM,qBAAqB,+CAA+C,CAAA;AAGjF,eAAO,MAAM,wBAAwB,QAAU,CAAA"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { EvmChain } from '@vultisig/core-chain/Chain';
|
|
2
|
+
export const cowSwapSupportedChains = [EvmChain.Ethereum, EvmChain.Arbitrum, EvmChain.Base, EvmChain.Avalanche];
|
|
3
|
+
// CowSwap GPv2 contract addresses — same across all supported EVM chains.
|
|
4
|
+
export const COW_SETTLEMENT_ADDRESS = '0x9008D19f58AAbD9eD0D60971565AA8510560ab41';
|
|
5
|
+
export const COW_VAULT_RELAYER_ADDRESS = '0xC92E8bdf79f0507f65a392b0ab4667716BFE0110';
|
|
6
|
+
export const cowSwapChainConfig = {
|
|
7
|
+
[EvmChain.Ethereum]: {
|
|
8
|
+
apiBase: 'https://api.cow.fi/mainnet',
|
|
9
|
+
settlementContract: COW_SETTLEMENT_ADDRESS,
|
|
10
|
+
vaultRelayer: COW_VAULT_RELAYER_ADDRESS,
|
|
11
|
+
chainId: 1,
|
|
12
|
+
},
|
|
13
|
+
[EvmChain.Arbitrum]: {
|
|
14
|
+
apiBase: 'https://api.cow.fi/arbitrum_one',
|
|
15
|
+
settlementContract: COW_SETTLEMENT_ADDRESS,
|
|
16
|
+
vaultRelayer: COW_VAULT_RELAYER_ADDRESS,
|
|
17
|
+
chainId: 42161,
|
|
18
|
+
},
|
|
19
|
+
[EvmChain.Base]: {
|
|
20
|
+
apiBase: 'https://api.cow.fi/base',
|
|
21
|
+
settlementContract: COW_SETTLEMENT_ADDRESS,
|
|
22
|
+
vaultRelayer: COW_VAULT_RELAYER_ADDRESS,
|
|
23
|
+
chainId: 8453,
|
|
24
|
+
},
|
|
25
|
+
[EvmChain.Avalanche]: {
|
|
26
|
+
apiBase: 'https://api.cow.fi/avalanche',
|
|
27
|
+
settlementContract: COW_SETTLEMENT_ADDRESS,
|
|
28
|
+
vaultRelayer: COW_VAULT_RELAYER_ADDRESS,
|
|
29
|
+
chainId: 43114,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
// Static allowlist of EIP-2612 permit-supporting tokens per chain.
|
|
33
|
+
// Tradeoff: an RPC-probe approach would be fully dynamic but requires an extra
|
|
34
|
+
// call per token per quote. Static list covers the vast majority of common
|
|
35
|
+
// pairs (USDC/USDT on all v1 chains) at zero overhead. Track additions
|
|
36
|
+
// as a follow-up when new permit tokens need support.
|
|
37
|
+
//
|
|
38
|
+
// IMPORTANT: every entry MUST implement the canonical EIP-2612 Permit struct
|
|
39
|
+
// (`owner,spender,value,nonce,deadline`). Tokens with a non-EIP-2612 permit, or
|
|
40
|
+
// no permit at all, are deliberately EXCLUDED — flagging them `permitRequired`
|
|
41
|
+
// would have Phase 2 build an EIP-2612 signature the token can't honor, and the
|
|
42
|
+
// CowSwap order would fail at settlement. On-chain `PERMIT_TYPEHASH()` /
|
|
43
|
+
// `DOMAIN_SEPARATOR()` verified 2026-05-28:
|
|
44
|
+
// - Ethereum DAI (0x6B17…) — Maker-style permit (holder,spender,nonce,expiry,
|
|
45
|
+
// allowed); typehash 0xea2aa0a1…, NOT EIP-2612. EXCLUDED.
|
|
46
|
+
// - Ethereum USDT (0xdAC1…) — no EIP-2612 permit (DOMAIN_SEPARATOR reverts).
|
|
47
|
+
// EXCLUDED.
|
|
48
|
+
// - Base DAI (0x50c5…) / Avalanche DAI.e (0xd586…) — bridged tokens with no
|
|
49
|
+
// EIP-2612 permit (DOMAIN_SEPARATOR reverts). EXCLUDED.
|
|
50
|
+
// - Arbitrum DAI (0xDA10…) — genuine EIP-2612 permit. KEPT.
|
|
51
|
+
export const KNOWN_PERMIT_TOKENS = {
|
|
52
|
+
// Ethereum
|
|
53
|
+
1: [
|
|
54
|
+
'0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
|
|
55
|
+
],
|
|
56
|
+
// Arbitrum
|
|
57
|
+
42161: [
|
|
58
|
+
'0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', // USDC.e
|
|
59
|
+
'0xaf88d065e77c8cC2239327C5EDb3A432268e5831', // USDC native
|
|
60
|
+
'0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', // USDT
|
|
61
|
+
'0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', // DAI (EIP-2612 on Arbitrum)
|
|
62
|
+
],
|
|
63
|
+
// Base
|
|
64
|
+
8453: [
|
|
65
|
+
'0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // USDC
|
|
66
|
+
],
|
|
67
|
+
// Avalanche
|
|
68
|
+
43114: [
|
|
69
|
+
'0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', // USDC
|
|
70
|
+
'0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7', // USDT
|
|
71
|
+
],
|
|
72
|
+
};
|
|
73
|
+
export const COWSWAP_APP_CODE = 'vultisig';
|
|
74
|
+
export const COWSWAP_APP_VERSION = '0.1.0';
|
|
75
|
+
// CowSwap partner fee BPS for affiliate revenue.
|
|
76
|
+
// Phase 2 (mcp-ts) will wire the consumer-level affiliateBps through.
|
|
77
|
+
// Phase 1 uses a fixed default matching the vultisig-0 baseline.
|
|
78
|
+
export const COWSWAP_DEFAULT_AFFILIATE_BPS = 50;
|
|
79
|
+
// Vultisig fee recipient address for CowSwap partner fees.
|
|
80
|
+
export const COWSWAP_FEE_RECIPIENT = '0x8E247a480449c84a5fDD25974A8501f3EFa4ABb9';
|
|
81
|
+
// Order validity window in seconds (15 minutes).
|
|
82
|
+
export const COWSWAP_VALID_TO_SECONDS = 15 * 60;
|
|
83
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/cowswap/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAErD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAU,CAAA;AAIxH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,4CAA4C,CAAA;AAClF,MAAM,CAAC,MAAM,yBAAyB,GAAG,4CAA4C,CAAA;AASrF,MAAM,CAAC,MAAM,kBAAkB,GAAsD;IACnF,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACnB,OAAO,EAAE,4BAA4B;QACrC,kBAAkB,EAAE,sBAAsB;QAC1C,YAAY,EAAE,yBAAyB;QACvC,OAAO,EAAE,CAAC;KACX;IACD,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACnB,OAAO,EAAE,iCAAiC;QAC1C,kBAAkB,EAAE,sBAAsB;QAC1C,YAAY,EAAE,yBAAyB;QACvC,OAAO,EAAE,KAAK;KACf;IACD,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACf,OAAO,EAAE,yBAAyB;QAClC,kBAAkB,EAAE,sBAAsB;QAC1C,YAAY,EAAE,yBAAyB;QACvC,OAAO,EAAE,IAAI;KACd;IACD,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;QACpB,OAAO,EAAE,8BAA8B;QACvC,kBAAkB,EAAE,sBAAsB;QAC1C,YAAY,EAAE,yBAAyB;QACvC,OAAO,EAAE,KAAK;KACf;CACF,CAAA;AAED,mEAAmE;AACnE,+EAA+E;AAC/E,2EAA2E;AAC3E,uEAAuE;AACvE,sDAAsD;AACtD,EAAE;AACF,6EAA6E;AAC7E,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,yEAAyE;AACzE,4CAA4C;AAC5C,gFAAgF;AAChF,8DAA8D;AAC9D,+EAA+E;AAC/E,gBAAgB;AAChB,8EAA8E;AAC9E,4DAA4D;AAC5D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAA6B;IAC3D,WAAW;IACX,CAAC,EAAE;QACD,4CAA4C,EAAE,OAAO;KACtD;IACD,WAAW;IACX,KAAK,EAAE;QACL,4CAA4C,EAAE,SAAS;QACvD,4CAA4C,EAAE,cAAc;QAC5D,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,6BAA6B;KAC5E;IACD,OAAO;IACP,IAAI,EAAE;QACJ,4CAA4C,EAAE,OAAO;KACtD;IACD,YAAY;IACZ,KAAK,EAAE;QACL,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;KACtD;CACF,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAA;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAA;AAE1C,iDAAiD;AACjD,sEAAsE;AACtE,iEAAiE;AACjE,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAA;AAE/C,2DAA2D;AAC3D,MAAM,CAAC,MAAM,qBAAqB,GAAG,4CAA4C,CAAA;AAEjF,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,CAAA"}
|