@vultisig/core-chain 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +75 -0
- package/dist/Chain.d.ts +0 -4
- package/dist/Chain.d.ts.map +1 -1
- package/dist/Chain.js +0 -1
- package/dist/Chain.js.map +1 -1
- package/dist/ChainKind.d.ts +0 -1
- package/dist/ChainKind.d.ts.map +1 -1
- package/dist/ChainKind.js +0 -1
- package/dist/ChainKind.js.map +1 -1
- package/dist/chainRegistry.d.ts +0 -1
- package/dist/chainRegistry.d.ts.map +1 -1
- package/dist/chainRegistry.js +0 -1
- package/dist/chainRegistry.js.map +1 -1
- package/dist/chains/cardano/cip30/buildCoseStructures.d.ts +1 -1
- package/dist/chains/cardano/cip30/buildCoseStructures.js +2 -2
- package/dist/chains/cardano/cip30/buildCoseStructures.js.map +1 -1
- package/dist/chains/cardano/config.d.ts +31 -0
- package/dist/chains/cardano/config.d.ts.map +1 -1
- package/dist/chains/cardano/config.js +31 -0
- package/dist/chains/cardano/config.js.map +1 -1
- package/dist/chains/cosmos/account/getCosmosAccountInfo.d.ts.map +1 -1
- package/dist/chains/cosmos/account/getCosmosAccountInfo.js +0 -5
- package/dist/chains/cosmos/account/getCosmosAccountInfo.js.map +1 -1
- package/dist/chains/cosmos/chainInfo.d.ts.map +1 -1
- package/dist/chains/cosmos/chainInfo.js +0 -1
- package/dist/chains/cosmos/chainInfo.js.map +1 -1
- package/dist/chains/cosmos/cosmosFeeCoinDenom.d.ts.map +1 -1
- package/dist/chains/cosmos/cosmosFeeCoinDenom.js +0 -1
- package/dist/chains/cosmos/cosmosFeeCoinDenom.js.map +1 -1
- package/dist/chains/cosmos/cosmosGasLimitRecord.d.ts.map +1 -1
- package/dist/chains/cosmos/cosmosGasLimitRecord.js +0 -2
- package/dist/chains/cosmos/cosmosGasLimitRecord.js.map +1 -1
- package/dist/chains/cosmos/cosmosHrp.d.ts +39 -0
- package/dist/chains/cosmos/cosmosHrp.d.ts.map +1 -0
- package/dist/chains/cosmos/cosmosHrp.js +65 -0
- package/dist/chains/cosmos/cosmosHrp.js.map +1 -0
- package/dist/chains/cosmos/cosmosMemoCap.d.ts.map +1 -1
- package/dist/chains/cosmos/cosmosMemoCap.js +0 -1
- package/dist/chains/cosmos/cosmosMemoCap.js.map +1 -1
- package/dist/chains/cosmos/cosmosRpcUrl.d.ts.map +1 -1
- package/dist/chains/cosmos/cosmosRpcUrl.js +0 -3
- package/dist/chains/cosmos/cosmosRpcUrl.js.map +1 -1
- package/dist/chains/cosmos/gas.d.ts.map +1 -1
- package/dist/chains/cosmos/gas.js +0 -1
- package/dist/chains/cosmos/gas.js.map +1 -1
- package/dist/chains/cosmos/tendermintRpcUrl.d.ts.map +1 -1
- package/dist/chains/cosmos/tendermintRpcUrl.js +0 -1
- package/dist/chains/cosmos/tendermintRpcUrl.js.map +1 -1
- package/dist/chains/cosmos/thor/thorchainLp.d.ts.map +1 -1
- package/dist/chains/cosmos/thor/thorchainLp.js +0 -1
- package/dist/chains/cosmos/thor/thorchainLp.js.map +1 -1
- package/dist/chains/ripple/issuedCurrency.d.ts +13 -3
- package/dist/chains/ripple/issuedCurrency.d.ts.map +1 -1
- package/dist/chains/ripple/issuedCurrency.js +54 -6
- package/dist/chains/ripple/issuedCurrency.js.map +1 -1
- package/dist/chains/ton/address.d.ts +14 -0
- package/dist/chains/ton/address.d.ts.map +1 -1
- package/dist/chains/ton/address.js +15 -0
- package/dist/chains/ton/address.js.map +1 -1
- package/dist/chains/ton/comment.d.ts +51 -0
- package/dist/chains/ton/comment.d.ts.map +1 -0
- package/dist/chains/ton/comment.js +75 -0
- package/dist/chains/ton/comment.js.map +1 -0
- package/dist/chains/ton/messageBounce.d.ts +17 -0
- package/dist/chains/ton/messageBounce.d.ts.map +1 -0
- package/dist/chains/ton/messageBounce.js +41 -0
- package/dist/chains/ton/messageBounce.js.map +1 -0
- package/dist/chains/tron/getTronBlockInfo.d.ts.map +1 -1
- package/dist/chains/tron/getTronBlockInfo.js +4 -5
- package/dist/chains/tron/getTronBlockInfo.js.map +1 -1
- package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.d.ts +1 -1
- package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.d.ts.map +1 -1
- package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.js +1 -1
- package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.js.map +1 -1
- package/dist/coin/chainFeeCoin.d.ts.map +1 -1
- package/dist/coin/chainFeeCoin.js +0 -5
- package/dist/coin/chainFeeCoin.js.map +1 -1
- package/dist/coin/coinType.d.ts.map +1 -1
- package/dist/coin/coinType.js +0 -1
- package/dist/coin/coinType.js.map +1 -1
- package/dist/coin/knownTokens/cosmos.d.ts.map +1 -1
- package/dist/coin/knownTokens/cosmos.js +0 -64
- package/dist/coin/knownTokens/cosmos.js.map +1 -1
- package/dist/coin/knownTokens/index.d.ts +1 -1
- package/dist/coin/knownTokens/index.d.ts.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/security/tokenTransferGuards.d.ts +78 -0
- package/dist/security/tokenTransferGuards.d.ts.map +1 -0
- package/dist/security/tokenTransferGuards.js +203 -0
- package/dist/security/tokenTransferGuards.js.map +1 -0
- package/dist/swap/general/swapkit/SwapKitEnabledChains.d.ts +14 -3
- package/dist/swap/general/swapkit/SwapKitEnabledChains.d.ts.map +1 -1
- package/dist/swap/general/swapkit/SwapKitEnabledChains.js +14 -1
- package/dist/swap/general/swapkit/SwapKitEnabledChains.js.map +1 -1
- package/dist/swap/general/swapkit/SwapKitProviders.d.ts +19 -3
- package/dist/swap/general/swapkit/SwapKitProviders.d.ts.map +1 -1
- package/dist/swap/general/swapkit/SwapKitProviders.js +161 -8
- package/dist/swap/general/swapkit/SwapKitProviders.js.map +1 -1
- package/dist/swap/general/swapkit/api/getSwapKitQuote.d.ts +1 -3
- package/dist/swap/general/swapkit/api/getSwapKitQuote.d.ts.map +1 -1
- package/dist/swap/general/swapkit/api/getSwapKitQuote.js +59 -73
- package/dist/swap/general/swapkit/api/getSwapKitQuote.js.map +1 -1
- package/dist/swap/general/swapkit/getSwapKitTrackerUrl.d.ts +2 -1
- package/dist/swap/general/swapkit/getSwapKitTrackerUrl.d.ts.map +1 -1
- package/dist/swap/general/swapkit/getSwapKitTrackerUrl.js +2 -1
- package/dist/swap/general/swapkit/getSwapKitTrackerUrl.js.map +1 -1
- package/dist/swap/native/NativeSwapChain.d.ts +1 -2
- package/dist/swap/native/NativeSwapChain.d.ts.map +1 -1
- package/dist/swap/native/NativeSwapChain.js +0 -2
- package/dist/swap/native/NativeSwapChain.js.map +1 -1
- package/dist/swap/native/limitSwapMemo.d.ts.map +1 -1
- package/dist/swap/native/limitSwapMemo.js +18 -5
- package/dist/swap/native/limitSwapMemo.js.map +1 -1
- package/dist/swap/native/thorchainMemoAsset.d.ts +1 -1
- package/dist/swap/native/thorchainMemoAsset.js +1 -1
- package/dist/swap/quote/findSwapQuote.d.ts.map +1 -1
- package/dist/swap/quote/findSwapQuote.js +2 -2
- package/dist/swap/quote/findSwapQuote.js.map +1 -1
- package/dist/swap/skip/skipRouting.d.ts.map +1 -1
- package/dist/swap/skip/skipRouting.js +0 -1
- package/dist/swap/skip/skipRouting.js.map +1 -1
- package/dist/swap/swapEnabledChains.d.ts +1 -1
- package/dist/swap/swapEnabledChains.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/tron.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/tron.js +6 -1
- package/dist/tx/broadcast/resolvers/tron.js.map +1 -1
- package/dist/tx/broadcast/verifyBroadcastByHash.js +1 -1
- package/dist/tx/broadcast/verifyBroadcastByHash.js.map +1 -1
- package/dist/tx/status/resolver.d.ts +9 -1
- package/dist/tx/status/resolver.d.ts.map +1 -1
- package/dist/tx/status/resolvers/ripple.d.ts.map +1 -1
- package/dist/tx/status/resolvers/ripple.js +62 -0
- package/dist/tx/status/resolvers/ripple.js.map +1 -1
- package/dist/tx/status/resolvers/ton.d.ts +6 -0
- package/dist/tx/status/resolvers/ton.d.ts.map +1 -1
- package/dist/tx/status/resolvers/ton.js +39 -10
- package/dist/tx/status/resolvers/ton.js.map +1 -1
- package/dist/tx/status/resolvers/tron.d.ts.map +1 -1
- package/dist/tx/status/resolvers/tron.js +18 -2
- package/dist/tx/status/resolvers/tron.js.map +1 -1
- package/package.json +22 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { knownTokensIndex } from '@vultisig/core-chain/coin/knownTokens';
|
|
2
|
+
const EVM_ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/;
|
|
3
|
+
/**
|
|
4
|
+
* Throws when a plain token-transfer `recipient` is itself a known token
|
|
5
|
+
* contract address on `chain` — most commonly the SAME token being sent to
|
|
6
|
+
* its own contract, but also catches a transfer aimed at a different known
|
|
7
|
+
* token's contract.
|
|
8
|
+
*
|
|
9
|
+
* Call this ONLY on plain-transfer recipients (a native/ERC-20 send, or a
|
|
10
|
+
* decoded ERC-20 `transfer` hidden inside an arbitrary contract-call's
|
|
11
|
+
* calldata — see `decodeErc20Recipient` below). `sendingTokenContract` is
|
|
12
|
+
* the contract address of the token actually being sent (`undefined` for a
|
|
13
|
+
* native-coin send, which this guard is a no-op for — there is no "the ETH
|
|
14
|
+
* contract" to accidentally send ETH to).
|
|
15
|
+
*/
|
|
16
|
+
export function assertSafeTokenTransferDestination(chain, recipient, sendingTokenContract) {
|
|
17
|
+
if (!sendingTokenContract)
|
|
18
|
+
return;
|
|
19
|
+
const hit = knownTokensIndex[chain]?.[recipient.toLowerCase()];
|
|
20
|
+
if (!hit)
|
|
21
|
+
return;
|
|
22
|
+
const isSameToken = recipient.toLowerCase() === sendingTokenContract.toLowerCase();
|
|
23
|
+
if (isSameToken) {
|
|
24
|
+
throw new Error(`Refusing to build transaction: sending ${hit.ticker} to the ${hit.ticker} token contract ` +
|
|
25
|
+
`(${recipient}) would permanently burn it — the contract cannot credit a balance to itself. ` +
|
|
26
|
+
'Did you mean to send to a wallet address instead?');
|
|
27
|
+
}
|
|
28
|
+
throw new Error(`Refusing to build transaction: destination ${recipient} is the ${hit.ticker} token contract on ${chain}, ` +
|
|
29
|
+
'not a wallet — tokens sent to a token contract are permanently unrecoverable. ' +
|
|
30
|
+
'Did you mean to send to a wallet address instead?');
|
|
31
|
+
}
|
|
32
|
+
// ── ERC-20 calldata recipient decoding ───────────────────────────────────────
|
|
33
|
+
const ERC20_TRANSFER_SELECTOR = '0xa9059cbb';
|
|
34
|
+
const ERC20_TRANSFER_FROM_SELECTOR = '0x23b872dd';
|
|
35
|
+
// ERC-721 safeTransferFrom — same recipient offset as ERC-20 transferFrom
|
|
36
|
+
// (second 32-byte slot). Two overloads; both hit the same decode path:
|
|
37
|
+
// safeTransferFrom(address,address,uint256) → 0x42842e0e (3-arg)
|
|
38
|
+
// safeTransferFrom(address,address,uint256,bytes) → 0xb88d4fde (4-arg, common in wallet SDKs)
|
|
39
|
+
const ERC721_SAFE_TRANSFER_FROM_SELECTOR = '0x42842e0e';
|
|
40
|
+
const ERC721_SAFE_TRANSFER_FROM_BYTES_SELECTOR = '0xb88d4fde';
|
|
41
|
+
/**
|
|
42
|
+
* True when `data`'s selector is a plain ERC-20 `transfer`/`transferFrom` —
|
|
43
|
+
* the two calldata shapes where the call target IS the token being moved, so
|
|
44
|
+
* a recipient that is itself a known token contract strands the funds and
|
|
45
|
+
* `assertSafeTokenTransferDestination` applies. ERC-721 `safeTransferFrom`
|
|
46
|
+
* deliberately returns false: the 721 standard's on-chain `onERC721Received`
|
|
47
|
+
* check already reverts a transfer to a non-receiver contract, so extending
|
|
48
|
+
* the registry guard there would add false-positive surface without closing
|
|
49
|
+
* a loss path. Every other selector is an arbitrary contract call and stays
|
|
50
|
+
* out of scope.
|
|
51
|
+
*/
|
|
52
|
+
export function isErc20TransferCalldata(data) {
|
|
53
|
+
if (typeof data !== 'string')
|
|
54
|
+
return false;
|
|
55
|
+
const hex = data.startsWith('0x') ? data : `0x${data}`;
|
|
56
|
+
const selector = hex.slice(0, 10).toLowerCase();
|
|
57
|
+
return selector === ERC20_TRANSFER_SELECTOR || selector === ERC20_TRANSFER_FROM_SELECTOR;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* If `data` looks like an ERC-20 `transfer`/`transferFrom` (or the
|
|
61
|
+
* same-shaped ERC-721 `safeTransferFrom`) call, return the decoded recipient
|
|
62
|
+
* address (lower-cased, `0x`-prefixed). Otherwise returns `null`.
|
|
63
|
+
*
|
|
64
|
+
* A contract-call builder that sets `to = <token contract>` + `data =
|
|
65
|
+
* <encoded transfer>` must run this to check the ACTUAL recipient —
|
|
66
|
+
* otherwise a destination guard that only vets the token contract address
|
|
67
|
+
* lets the real recipient slip through unchecked.
|
|
68
|
+
*
|
|
69
|
+
* Calldata layout for `transfer(address,uint256)`:
|
|
70
|
+
* 0x00–0x04 selector (4 bytes)
|
|
71
|
+
* 0x04–0x24 recipient (32-byte padded; address in last 20 bytes)
|
|
72
|
+
* 0x24–0x44 amount
|
|
73
|
+
*
|
|
74
|
+
* For `transferFrom(address,address,uint256)` (ERC-20) and
|
|
75
|
+
* `safeTransferFrom(address,address,uint256[,bytes])` (ERC-721 — same head layout):
|
|
76
|
+
* 0x00–0x04 selector
|
|
77
|
+
* 0x04–0x24 sender
|
|
78
|
+
* 0x24–0x44 recipient
|
|
79
|
+
* 0x44–0x64 amount / tokenId
|
|
80
|
+
*/
|
|
81
|
+
export function decodeErc20Recipient(data) {
|
|
82
|
+
if (typeof data !== 'string')
|
|
83
|
+
return null;
|
|
84
|
+
const hex = data.startsWith('0x') ? data : `0x${data}`;
|
|
85
|
+
if (hex.length < 10)
|
|
86
|
+
return null;
|
|
87
|
+
const selector = hex.slice(0, 10).toLowerCase();
|
|
88
|
+
let recipientSliceStart;
|
|
89
|
+
if (selector === ERC20_TRANSFER_SELECTOR) {
|
|
90
|
+
// recipient is at bytes 4..36 → hex chars 10..74, last 40 chars = addr
|
|
91
|
+
recipientSliceStart = 10;
|
|
92
|
+
}
|
|
93
|
+
else if (selector === ERC20_TRANSFER_FROM_SELECTOR ||
|
|
94
|
+
selector === ERC721_SAFE_TRANSFER_FROM_SELECTOR ||
|
|
95
|
+
selector === ERC721_SAFE_TRANSFER_FROM_BYTES_SELECTOR) {
|
|
96
|
+
// recipient is at bytes 36..68 → hex chars 74..138, last 40 chars = addr
|
|
97
|
+
recipientSliceStart = 74;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const slotEnd = recipientSliceStart + 64;
|
|
103
|
+
if (hex.length < slotEnd)
|
|
104
|
+
return null;
|
|
105
|
+
const slot = hex.slice(recipientSliceStart, slotEnd);
|
|
106
|
+
// Recipient occupies the last 40 hex chars (rightmost 20 bytes) of the slot.
|
|
107
|
+
const addr = `0x${slot.slice(24).toLowerCase()}`;
|
|
108
|
+
if (!EVM_ADDRESS_RE.test(addr))
|
|
109
|
+
return null;
|
|
110
|
+
return addr;
|
|
111
|
+
}
|
|
112
|
+
// ERC-20 approve(address spender, uint256 amount) — 0x095ea7b3. The SPENDER
|
|
113
|
+
// receives spend authority over the owner's tokens; a raw approve built via
|
|
114
|
+
// an arbitrary contract-call path is OPAQUE (no spender decode, no
|
|
115
|
+
// WYSIWYS surface) unless decoded explicitly.
|
|
116
|
+
export const ERC20_APPROVE_SELECTOR = '0x095ea7b3';
|
|
117
|
+
/**
|
|
118
|
+
* If `data` is an ERC-20 `approve(address spender, uint256 amount)` call,
|
|
119
|
+
* decode the SPENDER (lower-cased, `0x`-prefixed) + the raw allowance
|
|
120
|
+
* amount. Otherwise null. Mirrors `decodeErc20Recipient`'s slot math:
|
|
121
|
+
* spender = first 32-byte slot (bytes 4..36), amount = second slot (bytes
|
|
122
|
+
* 36..68).
|
|
123
|
+
*/
|
|
124
|
+
export function decodeErc20Approve(data) {
|
|
125
|
+
if (typeof data !== 'string')
|
|
126
|
+
return null;
|
|
127
|
+
const hex = data.startsWith('0x') ? data : `0x${data}`;
|
|
128
|
+
if (hex.slice(0, 10).toLowerCase() !== ERC20_APPROVE_SELECTOR)
|
|
129
|
+
return null;
|
|
130
|
+
// 4-byte selector + 32-byte spender + 32-byte amount = 138 hex chars incl the `0x`.
|
|
131
|
+
if (hex.length < 138)
|
|
132
|
+
return null;
|
|
133
|
+
const spender = `0x${hex.slice(10, 74).slice(24).toLowerCase()}`;
|
|
134
|
+
if (!EVM_ADDRESS_RE.test(spender))
|
|
135
|
+
return null;
|
|
136
|
+
let amount;
|
|
137
|
+
try {
|
|
138
|
+
amount = BigInt(`0x${hex.slice(74, 138)}`);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
return { spender, amount };
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Extract the ERC-20/721 transfer RECIPIENT from a `function_sig` + `args`
|
|
147
|
+
* shape — the alternative to raw ABI-encoded `data` some builders accept
|
|
148
|
+
* (function signature + positional args, ABI-encoded server/caller-side
|
|
149
|
+
* AFTER any pre-dispatch destination guard already ran). Without this, a
|
|
150
|
+
* transfer expressed as `function_sig: "transfer(address,uint256)"` +
|
|
151
|
+
* `args: [<recipient>, <amount>]` has no `data` for `decodeErc20Recipient`
|
|
152
|
+
* to see and a destination guard silently no-ops.
|
|
153
|
+
*
|
|
154
|
+
* Mirrors `decodeErc20Recipient`'s selector→slot mapping on the parsed
|
|
155
|
+
* signature: `transfer(address,uint256)` → `args[0]`;
|
|
156
|
+
* `transferFrom`/`safeTransferFrom(address from,address to,…)` → `args[1]`
|
|
157
|
+
* (the recipient is the SECOND address, never `from`). A non-transfer
|
|
158
|
+
* signature (or one that doesn't match either shape) → `null`.
|
|
159
|
+
*/
|
|
160
|
+
export function decodeErc20RecipientFromSig(functionSig, args) {
|
|
161
|
+
if (typeof functionSig !== 'string' || !Array.isArray(args))
|
|
162
|
+
return null;
|
|
163
|
+
// Accept "function transfer(address,uint256)" or "transfer(address,uint256)".
|
|
164
|
+
const m = functionSig
|
|
165
|
+
.replace(/^\s*function\s+/i, '')
|
|
166
|
+
.trim()
|
|
167
|
+
.match(/^(\w+)\s*\(([^)]*)\)$/);
|
|
168
|
+
if (!m)
|
|
169
|
+
return null;
|
|
170
|
+
const name = m[1];
|
|
171
|
+
// Strip any inline arg names ("address to" → "address") so we compare pure types.
|
|
172
|
+
const argTypes = m[2].split(',').map(t => t.trim().split(/\s+/)[0]);
|
|
173
|
+
const isUint256 = (type) => type === 'uint' || type === 'uint256';
|
|
174
|
+
let idx;
|
|
175
|
+
if (name === 'transfer' && argTypes.length === 2 && argTypes[0] === 'address' && isUint256(argTypes[1])) {
|
|
176
|
+
idx = 0; // transfer(address to, uint256 amount) — recipient is the FIRST arg
|
|
177
|
+
}
|
|
178
|
+
else if (name === 'transferFrom' &&
|
|
179
|
+
argTypes.length === 3 &&
|
|
180
|
+
argTypes[0] === 'address' &&
|
|
181
|
+
argTypes[1] === 'address' &&
|
|
182
|
+
isUint256(argTypes[2])) {
|
|
183
|
+
idx = 1; // transferFrom(address from, address to, uint256 amount) — recipient is the SECOND arg
|
|
184
|
+
}
|
|
185
|
+
else if (name === 'safeTransferFrom' &&
|
|
186
|
+
(argTypes.length === 3 || (argTypes.length === 4 && argTypes[3] === 'bytes')) &&
|
|
187
|
+
argTypes[0] === 'address' &&
|
|
188
|
+
argTypes[1] === 'address' &&
|
|
189
|
+
isUint256(argTypes[2])) {
|
|
190
|
+
idx = 1; // ERC-721 safeTransferFrom overloads — recipient is the SECOND arg
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
if (args.length !== argTypes.length)
|
|
196
|
+
return null;
|
|
197
|
+
const raw = args[idx];
|
|
198
|
+
if (typeof raw !== 'string')
|
|
199
|
+
return null;
|
|
200
|
+
const addr = raw.trim().toLowerCase();
|
|
201
|
+
return EVM_ADDRESS_RE.test(addr) ? addr : null;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=tokenTransferGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenTransferGuards.js","sourceRoot":"","sources":["../../../../../packages/core/chain/security/tokenTransferGuards.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export declare const
|
|
1
|
+
import { Chain } from '@vultisig/core-chain/Chain';
|
|
2
|
+
import { BlockaidSupportedEvmChain } from '@vultisig/core-chain/security/blockaid/evmChains';
|
|
3
|
+
export declare const swapKitSourceChains: readonly ["Ethereum", "Arbitrum", "Avalanche", "Base", "BSC", "Optimism", "Polygon", "Hyperliquid", import("@vultisig/core-chain/Chain").OtherChain.Solana, import("@vultisig/core-chain/Chain").UtxoChain.Bitcoin, import("@vultisig/core-chain/Chain").UtxoChain.BitcoinCash, import("@vultisig/core-chain/Chain").UtxoChain.Dogecoin, import("@vultisig/core-chain/Chain").UtxoChain.Litecoin, import("@vultisig/core-chain/Chain").OtherChain.Ripple, import("@vultisig/core-chain/Chain").OtherChain.Ton, import("@vultisig/core-chain/Chain").OtherChain.Tron, import("@vultisig/core-chain/Chain").UtxoChain.Zcash, import("@vultisig/core-chain/Chain").OtherChain.Sui, import("@vultisig/core-chain/Chain").OtherChain.Cardano];
|
|
4
|
+
export type SwapKitSourceChain = (typeof swapKitSourceChains)[number] | BlockaidSupportedEvmChain;
|
|
5
|
+
export declare const swapKitEnabledChains: readonly ["Ethereum", "Arbitrum", "Avalanche", "Base", "BSC", "Optimism", "Polygon", "Hyperliquid", import("@vultisig/core-chain/Chain").OtherChain.Solana, import("@vultisig/core-chain/Chain").UtxoChain.Bitcoin, import("@vultisig/core-chain/Chain").UtxoChain.BitcoinCash, import("@vultisig/core-chain/Chain").UtxoChain.Dogecoin, import("@vultisig/core-chain/Chain").UtxoChain.Litecoin, import("@vultisig/core-chain/Chain").OtherChain.Ripple, import("@vultisig/core-chain/Chain").OtherChain.Ton, import("@vultisig/core-chain/Chain").OtherChain.Tron, import("@vultisig/core-chain/Chain").UtxoChain.Zcash, import("@vultisig/core-chain/Chain").OtherChain.Sui, import("@vultisig/core-chain/Chain").OtherChain.Cardano, "Robinhood", "Cosmos", import("@vultisig/core-chain/Chain").UtxoChain.Dash, "MayaChain", "THORChain"];
|
|
4
6
|
export type SwapKitEnabledChain = (typeof swapKitEnabledChains)[number];
|
|
7
|
+
/**
|
|
8
|
+
* Source-side eligibility is deliberately stricter than destination support.
|
|
9
|
+
* Existing non-EVM transaction builders stay explicitly listed, while EVM
|
|
10
|
+
* chains may be discovered from SwapKit's live catalog only when the SDK can
|
|
11
|
+
* screen their returned router through Blockaid. This keeps Robinhood
|
|
12
|
+
* destination-only until Blockaid adds chain 4663 without closing future safe
|
|
13
|
+
* EVM corridors behind another SwapKit allowlist change.
|
|
14
|
+
*/
|
|
15
|
+
export declare const isSwapKitSourceChain: (chain: Chain) => chain is SwapKitSourceChain;
|
|
5
16
|
//# sourceMappingURL=SwapKitEnabledChains.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwapKitEnabledChains.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/swapkit/SwapKitEnabledChains.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SwapKitEnabledChains.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/swapkit/SwapKitEnabledChains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAElD,OAAO,EAAoB,yBAAyB,EAAE,MAAM,kDAAkD,CAAA;AAG9G,eAAO,MAAM,mBAAmB,0sBAgCtB,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,GAAG,yBAAyB,CAAA;AAEjG,eAAO,MAAM,oBAAoB,gzBAOvB,CAAA;AAEV,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,KAAG,KAAK,IAAI,kBACsC,CAAA"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { Chain } from '@vultisig/core-chain/Chain';
|
|
2
|
+
import { isChainOfKind } from '@vultisig/core-chain/ChainKind';
|
|
3
|
+
import { blockaidEvmChain } from '@vultisig/core-chain/security/blockaid/evmChains';
|
|
4
|
+
import { isOneOf } from '@vultisig/lib-utils/array/isOneOf';
|
|
2
5
|
export const swapKitSourceChains = [
|
|
3
6
|
Chain.Ethereum,
|
|
4
7
|
Chain.Arbitrum,
|
|
@@ -7,6 +10,7 @@ export const swapKitSourceChains = [
|
|
|
7
10
|
Chain.BSC,
|
|
8
11
|
Chain.Optimism,
|
|
9
12
|
Chain.Polygon,
|
|
13
|
+
Chain.Hyperliquid,
|
|
10
14
|
Chain.Solana,
|
|
11
15
|
Chain.Bitcoin,
|
|
12
16
|
Chain.BitcoinCash,
|
|
@@ -33,10 +37,19 @@ export const swapKitSourceChains = [
|
|
|
33
37
|
];
|
|
34
38
|
export const swapKitEnabledChains = [
|
|
35
39
|
...swapKitSourceChains,
|
|
40
|
+
Chain.Robinhood,
|
|
36
41
|
Chain.Cosmos,
|
|
37
42
|
Chain.Dash,
|
|
38
|
-
Chain.Kujira,
|
|
39
43
|
Chain.MayaChain,
|
|
40
44
|
Chain.THORChain,
|
|
41
45
|
];
|
|
46
|
+
/**
|
|
47
|
+
* Source-side eligibility is deliberately stricter than destination support.
|
|
48
|
+
* Existing non-EVM transaction builders stay explicitly listed, while EVM
|
|
49
|
+
* chains may be discovered from SwapKit's live catalog only when the SDK can
|
|
50
|
+
* screen their returned router through Blockaid. This keeps Robinhood
|
|
51
|
+
* destination-only until Blockaid adds chain 4663 without closing future safe
|
|
52
|
+
* EVM corridors behind another SwapKit allowlist change.
|
|
53
|
+
*/
|
|
54
|
+
export const isSwapKitSourceChain = (chain) => isOneOf(chain, swapKitSourceChains) || (isChainOfKind(chain, 'evm') && chain in blockaidEvmChain);
|
|
42
55
|
//# sourceMappingURL=SwapKitEnabledChains.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwapKitEnabledChains.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/swapkit/SwapKitEnabledChains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"SwapKitEnabledChains.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/swapkit/SwapKitEnabledChains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAA6B,MAAM,kDAAkD,CAAA;AAC9G,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAE3D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,CAAC,QAAQ;IACd,KAAK,CAAC,QAAQ;IACd,KAAK,CAAC,SAAS;IACf,KAAK,CAAC,IAAI;IACV,KAAK,CAAC,GAAG;IACT,KAAK,CAAC,QAAQ;IACd,KAAK,CAAC,OAAO;IACb,KAAK,CAAC,WAAW;IACjB,KAAK,CAAC,MAAM;IACZ,KAAK,CAAC,OAAO;IACb,KAAK,CAAC,WAAW;IACjB,KAAK,CAAC,QAAQ;IACd,KAAK,CAAC,QAAQ;IACd,KAAK,CAAC,MAAM;IACZ,KAAK,CAAC,GAAG;IACT,KAAK,CAAC,IAAI;IACV,KAAK,CAAC,KAAK;IACX,6EAA6E;IAC7E,0EAA0E;IAC1E,+DAA+D;IAC/D,+BAA+B;IAC/B,EAAE;IACF,4EAA4E;IAC5E,8EAA8E;IAC9E,gDAAgD;IAChD,KAAK,CAAC,GAAG;IACT,0EAA0E;IAC1E,2EAA2E;IAC3E,8CAA8C;IAC9C,6CAA6C;IAC7C,KAAK,CAAC,OAAO;CACL,CAAA;AAIV,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,GAAG,mBAAmB;IACtB,KAAK,CAAC,SAAS;IACf,KAAK,CAAC,MAAM;IACZ,KAAK,CAAC,IAAI;IACV,KAAK,CAAC,SAAS;IACf,KAAK,CAAC,SAAS;CACP,CAAA;AAIV;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAY,EAA+B,EAAE,CAChF,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI,gBAAgB,CAAC,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Chain } from '@vultisig/core-chain/Chain';
|
|
2
|
+
import { SwapKitSourceChain } from '@vultisig/core-chain/swap/general/swapkit/SwapKitEnabledChains';
|
|
2
3
|
/**
|
|
3
4
|
* Providers handled by the dedicated native THORChain/MayaChain path, never via
|
|
4
5
|
* SwapKit aggregation. Filtered out of both route selection and the pair-support
|
|
@@ -6,12 +7,27 @@ import { SwapKitEnabledChain, SwapKitSourceChain } from '@vultisig/core-chain/sw
|
|
|
6
7
|
*/
|
|
7
8
|
export declare const swapKitExcludedProviders: Set<string>;
|
|
8
9
|
export declare const normalizeSwapKitProvider: (provider: string) => string;
|
|
10
|
+
export type SwapKitQuoteProvider = 'CAMELOT_V3' | 'CHAINFLIP' | 'CHAINFLIP_STREAMING' | 'FLASHNET' | 'GARDEN' | 'HARBOR' | 'JUPITER' | 'NEAR' | 'OKX' | 'ONEINCH' | 'OPENOCEAN_V2' | 'PANCAKESWAP' | 'PANGOLIN_V1' | 'SUSHISWAP_V2' | 'TRADERJOE_V2' | 'UNISWAP_V2' | 'UNISWAP_V3';
|
|
11
|
+
export declare const swapKitAllowedProviders: readonly SwapKitQuoteProvider[];
|
|
12
|
+
export type SwapKitChainMetadata = {
|
|
13
|
+
assetPrefix: string;
|
|
14
|
+
providerChainId: string;
|
|
15
|
+
};
|
|
9
16
|
export type SwapKitProviderInfo = {
|
|
10
17
|
provider: string;
|
|
11
18
|
enabledChainIds: string[];
|
|
12
19
|
};
|
|
13
20
|
/** Test-only: clear the in-memory `/providers` snapshot. */
|
|
14
21
|
export declare const resetSwapKitProvidersCache: () => void;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve the two distinct identifiers SwapKit needs for a chain. Shipping
|
|
24
|
+
* legacy chains retain their stable prefix, while newly opened EVM corridors
|
|
25
|
+
* must be present in the current provider catalog and agree on one asset
|
|
26
|
+
* prefix across every quote provider that advertises the canonical EIP-155 id.
|
|
27
|
+
* Missing, partially unavailable, or ambiguous catalog data fails closed for
|
|
28
|
+
* SwapKit only.
|
|
29
|
+
*/
|
|
30
|
+
export declare const resolveSwapKitChainMetadata: (chain: Chain) => Promise<SwapKitChainMetadata | undefined>;
|
|
15
31
|
/**
|
|
16
32
|
* Fetches and caches SwapKit's `/providers` snapshot. The snapshot rarely changes
|
|
17
33
|
* and is only needed on the unhappy path, so a coarse TTL is enough. On any
|
|
@@ -21,7 +37,7 @@ export declare const getSwapKitProviders: () => Promise<SwapKitProviderInfo[]>;
|
|
|
21
37
|
/**
|
|
22
38
|
* SwapKit collapses "amount below provider minimum" and "pair not supported" into
|
|
23
39
|
* the same `noRoutesFound` 404, so the envelope alone can't disambiguate them.
|
|
24
|
-
* Cross-check the cached `/providers` snapshot: if a single
|
|
40
|
+
* Cross-check the cached `/providers` snapshot: if a single quote-allowlisted provider
|
|
25
41
|
* enables BOTH chains, the pair is structurally supported, so a no-route result
|
|
26
42
|
* must be amount-related. Mirrors vultisig-ios #4418.
|
|
27
43
|
*
|
|
@@ -33,6 +49,6 @@ export declare const getSwapKitProviders: () => Promise<SwapKitProviderInfo[]>;
|
|
|
33
49
|
*/
|
|
34
50
|
export declare const isSwapKitPairSupported: ({ from, to, }: {
|
|
35
51
|
from: SwapKitSourceChain;
|
|
36
|
-
to:
|
|
52
|
+
to: Chain;
|
|
37
53
|
}) => Promise<boolean>;
|
|
38
54
|
//# sourceMappingURL=SwapKitProviders.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwapKitProviders.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/swapkit/SwapKitProviders.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SwapKitProviders.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/swapkit/SwapKitProviders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,MAAM,4BAA4B,CAAA;AAI5D,OAAO,EAAuB,kBAAkB,EAAE,MAAM,gEAAgE,CAAA;AAGxH;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,aAKnC,CAAA;AAEF,eAAO,MAAM,wBAAwB,GAAI,UAAU,MAAM,KAAG,MACN,CAAA;AAEtD,MAAM,MAAM,oBAAoB,GAC5B,YAAY,GACZ,WAAW,GACX,qBAAqB,GACrB,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,KAAK,GACL,SAAS,GACT,cAAc,GACd,aAAa,GACb,aAAa,GACb,cAAc,GACd,cAAc,GACd,YAAY,GACZ,YAAY,CAAA;AAEhB,eAAO,MAAM,uBAAuB,EAAE,SAAS,oBAAoB,EAkBlE,CAAA;AA+DD,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B,CAAA;AA8BD,4DAA4D;AAC5D,eAAO,MAAM,0BAA0B,YAGtC,CAAA;AAgGD;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,GAAU,OAAO,KAAK,KAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CA6CxG,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAa,OAAO,CAAC,mBAAmB,EAAE,CAsCzE,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB,GAAU,eAG1C;IACD,IAAI,EAAE,kBAAkB,CAAA;IACxB,EAAE,EAAE,KAAK,CAAA;CACV,KAAG,OAAO,CAAC,OAAO,CAkBlB,CAAA"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Chain } from '@vultisig/core-chain/Chain';
|
|
2
|
+
import { isChainOfKind } from '@vultisig/core-chain/ChainKind';
|
|
3
|
+
import { getEvmNumericChainId } from '@vultisig/core-chain/chains/evm/chainInfo';
|
|
2
4
|
import { getSwapKitConfig } from '@vultisig/core-chain/swap/general/swapkit/config';
|
|
3
5
|
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
4
6
|
/**
|
|
@@ -13,6 +15,26 @@ export const swapKitExcludedProviders = new Set([
|
|
|
13
15
|
'MAYACHAIN_STREAMING',
|
|
14
16
|
]);
|
|
15
17
|
export const normalizeSwapKitProvider = (provider) => provider.trim().toUpperCase().replace(/[-\s]/g, '_');
|
|
18
|
+
export const swapKitAllowedProviders = [
|
|
19
|
+
'CHAINFLIP',
|
|
20
|
+
'CHAINFLIP_STREAMING',
|
|
21
|
+
'NEAR',
|
|
22
|
+
'GARDEN',
|
|
23
|
+
'FLASHNET',
|
|
24
|
+
'HARBOR',
|
|
25
|
+
'ONEINCH',
|
|
26
|
+
'UNISWAP_V2',
|
|
27
|
+
'UNISWAP_V3',
|
|
28
|
+
'JUPITER',
|
|
29
|
+
'OKX',
|
|
30
|
+
'PANCAKESWAP',
|
|
31
|
+
'SUSHISWAP_V2',
|
|
32
|
+
'TRADERJOE_V2',
|
|
33
|
+
'PANGOLIN_V1',
|
|
34
|
+
'CAMELOT_V3',
|
|
35
|
+
'OPENOCEAN_V2',
|
|
36
|
+
];
|
|
37
|
+
const swapKitAllowedProviderNames = new Set(swapKitAllowedProviders);
|
|
16
38
|
/**
|
|
17
39
|
* Chain → SwapKit `enabledChainIds` token as returned by `/providers`. EVM chains
|
|
18
40
|
* use their numeric EVM chain id; non-EVM chains use SwapKit's named id. This is a
|
|
@@ -26,6 +48,8 @@ const swapKitProviderChainId = {
|
|
|
26
48
|
[Chain.BSC]: '56',
|
|
27
49
|
[Chain.Optimism]: '10',
|
|
28
50
|
[Chain.Polygon]: '137',
|
|
51
|
+
[Chain.Hyperliquid]: '999',
|
|
52
|
+
[Chain.Robinhood]: '4663',
|
|
29
53
|
[Chain.Solana]: 'solana',
|
|
30
54
|
[Chain.Bitcoin]: 'bitcoin',
|
|
31
55
|
[Chain.BitcoinCash]: 'bitcoincash',
|
|
@@ -38,20 +62,47 @@ const swapKitProviderChainId = {
|
|
|
38
62
|
[Chain.Cardano]: 'cardano',
|
|
39
63
|
[Chain.Cosmos]: 'cosmos',
|
|
40
64
|
[Chain.Dash]: 'dash',
|
|
41
|
-
[Chain.Kujira]: 'kaiyo-1',
|
|
42
65
|
[Chain.MayaChain]: 'mayachain-mainnet-v1',
|
|
43
66
|
[Chain.Sui]: 'sui',
|
|
44
67
|
[Chain.THORChain]: 'thorchain-1',
|
|
45
68
|
};
|
|
69
|
+
const swapKitAssetPrefix = {
|
|
70
|
+
[Chain.Arbitrum]: 'ARB',
|
|
71
|
+
[Chain.Avalanche]: 'AVAX',
|
|
72
|
+
[Chain.Base]: 'BASE',
|
|
73
|
+
[Chain.Bitcoin]: 'BTC',
|
|
74
|
+
[Chain.BitcoinCash]: 'BCH',
|
|
75
|
+
[Chain.BSC]: 'BSC',
|
|
76
|
+
[Chain.Cardano]: 'ADA',
|
|
77
|
+
[Chain.Cosmos]: 'GAIA',
|
|
78
|
+
[Chain.Dash]: 'DASH',
|
|
79
|
+
[Chain.Dogecoin]: 'DOGE',
|
|
80
|
+
[Chain.Ethereum]: 'ETH',
|
|
81
|
+
[Chain.Hyperliquid]: 'HYPEREVM',
|
|
82
|
+
[Chain.Litecoin]: 'LTC',
|
|
83
|
+
[Chain.MayaChain]: 'MAYA',
|
|
84
|
+
[Chain.Optimism]: 'OP',
|
|
85
|
+
[Chain.Polygon]: 'POL',
|
|
86
|
+
[Chain.Ripple]: 'XRP',
|
|
87
|
+
[Chain.Robinhood]: 'HOOD',
|
|
88
|
+
[Chain.Solana]: 'SOL',
|
|
89
|
+
[Chain.Sui]: 'SUI',
|
|
90
|
+
[Chain.THORChain]: 'THOR',
|
|
91
|
+
[Chain.Ton]: 'TON',
|
|
92
|
+
[Chain.Tron]: 'TRON',
|
|
93
|
+
[Chain.Zcash]: 'ZEC',
|
|
94
|
+
};
|
|
46
95
|
const PROVIDERS_CACHE_TTL_MS = 10 * 60 * 1000;
|
|
47
96
|
// Short timeout so a stalled /providers call fails open fast instead of dragging
|
|
48
97
|
// out the no-route classification path (the outer findSwapQuote per-fetcher
|
|
49
98
|
// timeout would also catch it, but much later).
|
|
50
99
|
const PROVIDERS_FETCH_TIMEOUT_MS = 5_000;
|
|
51
100
|
let providersCache = null;
|
|
101
|
+
const tokensCache = new Map();
|
|
52
102
|
/** Test-only: clear the in-memory `/providers` snapshot. */
|
|
53
103
|
export const resetSwapKitProvidersCache = () => {
|
|
54
104
|
providersCache = null;
|
|
105
|
+
tokensCache.clear();
|
|
55
106
|
};
|
|
56
107
|
const parseProviders = (data) => {
|
|
57
108
|
const list = Array.isArray(data) ? data : [];
|
|
@@ -59,18 +110,117 @@ const parseProviders = (data) => {
|
|
|
59
110
|
if (typeof entry !== 'object' || entry === null) {
|
|
60
111
|
return [];
|
|
61
112
|
}
|
|
62
|
-
const { provider, enabledChainIds } = entry;
|
|
63
|
-
|
|
113
|
+
const { provider, enabledChainIds, supportedChainIds } = entry;
|
|
114
|
+
const chainIds = Array.isArray(enabledChainIds) ? enabledChainIds : supportedChainIds;
|
|
115
|
+
if (typeof provider !== 'string' || !Array.isArray(chainIds)) {
|
|
64
116
|
return [];
|
|
65
117
|
}
|
|
66
118
|
return [
|
|
67
119
|
{
|
|
68
120
|
provider,
|
|
69
|
-
enabledChainIds:
|
|
121
|
+
enabledChainIds: chainIds.flatMap(id => (typeof id === 'string' || typeof id === 'number' ? [String(id)] : [])),
|
|
70
122
|
},
|
|
71
123
|
];
|
|
72
124
|
});
|
|
73
125
|
};
|
|
126
|
+
const parseTokens = (data) => {
|
|
127
|
+
if (typeof data !== 'object' || data === null || !Array.isArray(data.tokens)) {
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
return data.tokens.flatMap(entry => {
|
|
131
|
+
if (typeof entry !== 'object' || entry === null) {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
const { chain, chainId } = entry;
|
|
135
|
+
if (typeof chain !== 'string' || (typeof chainId !== 'string' && typeof chainId !== 'number')) {
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
return [{ chain, chainId: String(chainId) }];
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
const getSwapKitTokens = async (provider) => {
|
|
142
|
+
const { apiKey, baseUrl } = getSwapKitConfig();
|
|
143
|
+
const cacheKey = `${baseUrl}\u0000${provider}`;
|
|
144
|
+
const cached = tokensCache.get(cacheKey);
|
|
145
|
+
if (cached && Date.now() - cached.fetchedAt < PROVIDERS_CACHE_TTL_MS) {
|
|
146
|
+
return cached.tokens;
|
|
147
|
+
}
|
|
148
|
+
const trimmedApiKey = apiKey?.trim();
|
|
149
|
+
const result = await attempt(async () => {
|
|
150
|
+
const controller = new AbortController();
|
|
151
|
+
const timeoutId = setTimeout(() => controller.abort(), PROVIDERS_FETCH_TIMEOUT_MS);
|
|
152
|
+
try {
|
|
153
|
+
const url = `${baseUrl.replace(/\/$/, '')}/tokens?provider=${encodeURIComponent(provider)}`;
|
|
154
|
+
const response = await fetch(url, {
|
|
155
|
+
headers: trimmedApiKey ? { 'x-api-key': trimmedApiKey } : {},
|
|
156
|
+
signal: controller.signal,
|
|
157
|
+
});
|
|
158
|
+
if (!response.ok) {
|
|
159
|
+
throw new Error(`SwapKit tokens request failed (${response.status})`);
|
|
160
|
+
}
|
|
161
|
+
return parseTokens(await response.json());
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
clearTimeout(timeoutId);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
if ('error' in result) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
tokensCache.set(cacheKey, {
|
|
171
|
+
baseUrl,
|
|
172
|
+
provider,
|
|
173
|
+
tokens: result.data,
|
|
174
|
+
fetchedAt: Date.now(),
|
|
175
|
+
});
|
|
176
|
+
return result.data;
|
|
177
|
+
};
|
|
178
|
+
const getSwapKitProviderChainId = (chain) => {
|
|
179
|
+
const configured = swapKitProviderChainId[chain];
|
|
180
|
+
if (configured) {
|
|
181
|
+
return configured;
|
|
182
|
+
}
|
|
183
|
+
return isChainOfKind(chain, 'evm') ? String(getEvmNumericChainId(chain)) : undefined;
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Resolve the two distinct identifiers SwapKit needs for a chain. Shipping
|
|
187
|
+
* legacy chains retain their stable prefix, while newly opened EVM corridors
|
|
188
|
+
* must be present in the current provider catalog and agree on one asset
|
|
189
|
+
* prefix across every quote provider that advertises the canonical EIP-155 id.
|
|
190
|
+
* Missing, partially unavailable, or ambiguous catalog data fails closed for
|
|
191
|
+
* SwapKit only.
|
|
192
|
+
*/
|
|
193
|
+
export const resolveSwapKitChainMetadata = async (chain) => {
|
|
194
|
+
const providerChainId = getSwapKitProviderChainId(chain);
|
|
195
|
+
if (!providerChainId) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
const knownPrefix = swapKitAssetPrefix[chain];
|
|
199
|
+
if (knownPrefix) {
|
|
200
|
+
return { assetPrefix: knownPrefix, providerChainId };
|
|
201
|
+
}
|
|
202
|
+
const providers = (await getSwapKitProviders()).filter(({ provider, enabledChainIds }) => swapKitAllowedProviderNames.has(normalizeSwapKitProvider(provider)) && enabledChainIds.includes(providerChainId));
|
|
203
|
+
if (providers.length === 0) {
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
const tokenLists = await Promise.all(providers.map(({ provider }) => getSwapKitTokens(provider)));
|
|
207
|
+
if (tokenLists.some(tokens => tokens === null)) {
|
|
208
|
+
return undefined;
|
|
209
|
+
}
|
|
210
|
+
const providerPrefixes = tokenLists.map(tokens => new Set((tokens ?? []).filter(token => token.chainId === providerChainId).map(token => token.chain.trim().toUpperCase())));
|
|
211
|
+
if (providerPrefixes.some(prefixes => prefixes.size !== 1)) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
const prefixes = new Set(providerPrefixes.flatMap(prefixes => [...prefixes]));
|
|
215
|
+
if (prefixes.size !== 1) {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
const [assetPrefix] = prefixes;
|
|
219
|
+
if (!assetPrefix || (knownPrefix && assetPrefix !== knownPrefix)) {
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
return { assetPrefix, providerChainId };
|
|
223
|
+
};
|
|
74
224
|
/**
|
|
75
225
|
* Fetches and caches SwapKit's `/providers` snapshot. The snapshot rarely changes
|
|
76
226
|
* and is only needed on the unhappy path, so a coarse TTL is enough. On any
|
|
@@ -110,7 +260,7 @@ export const getSwapKitProviders = async () => {
|
|
|
110
260
|
/**
|
|
111
261
|
* SwapKit collapses "amount below provider minimum" and "pair not supported" into
|
|
112
262
|
* the same `noRoutesFound` 404, so the envelope alone can't disambiguate them.
|
|
113
|
-
* Cross-check the cached `/providers` snapshot: if a single
|
|
263
|
+
* Cross-check the cached `/providers` snapshot: if a single quote-allowlisted provider
|
|
114
264
|
* enables BOTH chains, the pair is structurally supported, so a no-route result
|
|
115
265
|
* must be amount-related. Mirrors vultisig-ios #4418.
|
|
116
266
|
*
|
|
@@ -125,9 +275,12 @@ export const isSwapKitPairSupported = async ({ from, to, }) => {
|
|
|
125
275
|
if (providers.length === 0) {
|
|
126
276
|
return true;
|
|
127
277
|
}
|
|
128
|
-
const fromId =
|
|
129
|
-
const toId =
|
|
130
|
-
|
|
278
|
+
const fromId = getSwapKitProviderChainId(from);
|
|
279
|
+
const toId = getSwapKitProviderChainId(to);
|
|
280
|
+
if (!fromId || !toId) {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
return providers.some(({ provider, enabledChainIds }) => swapKitAllowedProviderNames.has(normalizeSwapKitProvider(provider)) &&
|
|
131
284
|
enabledChainIds.includes(fromId) &&
|
|
132
285
|
enabledChainIds.includes(toId));
|
|
133
286
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwapKitProviders.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/swapkit/SwapKitProviders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"SwapKitProviders.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/swapkit/SwapKitProviders.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { AccountCoin } from '@vultisig/core-chain/coin/AccountCoin';
|
|
2
2
|
import { GeneralSwapQuote } from '@vultisig/core-chain/swap/general/GeneralSwapQuote';
|
|
3
|
-
import { SwapKitEnabledChain, SwapKitSourceChain } from '@vultisig/core-chain/swap/general/swapkit/SwapKitEnabledChains';
|
|
4
3
|
import { TransferDirection } from '@vultisig/lib-utils/TransferDirection';
|
|
5
|
-
type Input = Record<TransferDirection, AccountCoin
|
|
6
|
-
from: AccountCoin<SwapKitSourceChain>;
|
|
4
|
+
type Input = Record<TransferDirection, AccountCoin> & {
|
|
7
5
|
amount: bigint;
|
|
8
6
|
affiliateBps?: number;
|
|
9
7
|
/** Slippage tolerance in percent (e.g. 1 = 1%). Defaults to 3. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSwapKitQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/swapkit/api/getSwapKitQuote.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAGnE,OAAO,EAAE,gBAAgB,EAAiB,MAAM,oDAAoD,CAAA;
|
|
1
|
+
{"version":3,"file":"getSwapKitQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/swapkit/api/getSwapKitQuote.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAGnE,OAAO,EAAE,gBAAgB,EAAiB,MAAM,oDAAoD,CAAA;AA2BpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAGzE,KAAK,KAAK,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,GAAG;IACpD,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAo4BD,eAAO,MAAM,eAAe,GAAU,+CAMnC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CAwElC,CAAA"}
|