@vultisig/core-chain 2.23.3 → 2.24.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.
Files changed (82) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/chains/cosmos/cosmosDecimal.d.ts +15 -0
  3. package/dist/chains/cosmos/cosmosDecimal.d.ts.map +1 -0
  4. package/dist/chains/cosmos/cosmosDecimal.js +15 -0
  5. package/dist/chains/cosmos/cosmosDecimal.js.map +1 -0
  6. package/dist/chains/cosmos/gas.d.ts +2 -6
  7. package/dist/chains/cosmos/gas.d.ts.map +1 -1
  8. package/dist/chains/cosmos/gas.js +20 -13
  9. package/dist/chains/cosmos/gas.js.map +1 -1
  10. package/dist/chains/cosmos/osmosisDynamicFee.d.ts +13 -0
  11. package/dist/chains/cosmos/osmosisDynamicFee.d.ts.map +1 -0
  12. package/dist/chains/cosmos/osmosisDynamicFee.js +108 -0
  13. package/dist/chains/cosmos/osmosisDynamicFee.js.map +1 -0
  14. package/dist/chains/cosmos/resolveCosmosGasFee.d.ts +22 -1
  15. package/dist/chains/cosmos/resolveCosmosGasFee.d.ts.map +1 -1
  16. package/dist/chains/cosmos/resolveCosmosGasFee.js +32 -3
  17. package/dist/chains/cosmos/resolveCosmosGasFee.js.map +1 -1
  18. package/dist/chains/ripple/issuedCurrency.d.ts +56 -0
  19. package/dist/chains/ripple/issuedCurrency.d.ts.map +1 -0
  20. package/dist/chains/ripple/issuedCurrency.js +104 -0
  21. package/dist/chains/ripple/issuedCurrency.js.map +1 -0
  22. package/dist/chains/utxo/minUtxo.d.ts.map +1 -1
  23. package/dist/chains/utxo/minUtxo.js +7 -1
  24. package/dist/chains/utxo/minUtxo.js.map +1 -1
  25. package/dist/coin/utils/findByTicker.d.ts.map +1 -1
  26. package/dist/coin/utils/findByTicker.js +15 -1
  27. package/dist/coin/utils/findByTicker.js.map +1 -1
  28. package/dist/swap/general/cowswap/api/getCowSwapQuote.d.ts.map +1 -1
  29. package/dist/swap/general/cowswap/api/getCowSwapQuote.js +68 -3
  30. package/dist/swap/general/cowswap/api/getCowSwapQuote.js.map +1 -1
  31. package/dist/swap/general/jupiter/api/getJupiterSwapQuote.d.ts.map +1 -1
  32. package/dist/swap/general/jupiter/api/getJupiterSwapQuote.js +7 -0
  33. package/dist/swap/general/jupiter/api/getJupiterSwapQuote.js.map +1 -1
  34. package/dist/swap/general/knownAggregatorRouters.d.ts +14 -0
  35. package/dist/swap/general/knownAggregatorRouters.d.ts.map +1 -0
  36. package/dist/swap/general/knownAggregatorRouters.js +83 -0
  37. package/dist/swap/general/knownAggregatorRouters.js.map +1 -0
  38. package/dist/swap/general/kyber/api/tx.d.ts.map +1 -1
  39. package/dist/swap/general/kyber/api/tx.js +19 -2
  40. package/dist/swap/general/kyber/api/tx.js.map +1 -1
  41. package/dist/swap/general/lifi/api/getLifiSwapQuote.d.ts.map +1 -1
  42. package/dist/swap/general/lifi/api/getLifiSwapQuote.js +8 -1
  43. package/dist/swap/general/lifi/api/getLifiSwapQuote.js.map +1 -1
  44. package/dist/swap/general/oneInch/api/getOneInchSwapQuote.d.ts +6 -1
  45. package/dist/swap/general/oneInch/api/getOneInchSwapQuote.d.ts.map +1 -1
  46. package/dist/swap/general/oneInch/api/getOneInchSwapQuote.js +24 -1
  47. package/dist/swap/general/oneInch/api/getOneInchSwapQuote.js.map +1 -1
  48. package/dist/swap/general/priceImpactGuard.d.ts +73 -0
  49. package/dist/swap/general/priceImpactGuard.d.ts.map +1 -0
  50. package/dist/swap/general/priceImpactGuard.js +89 -0
  51. package/dist/swap/general/priceImpactGuard.js.map +1 -0
  52. package/dist/swap/general/swapkit/api/getSwapKitQuote.d.ts.map +1 -1
  53. package/dist/swap/general/swapkit/api/getSwapKitQuote.js +5 -0
  54. package/dist/swap/general/swapkit/api/getSwapKitQuote.js.map +1 -1
  55. package/dist/swap/native/limitSwapMemo.d.ts.map +1 -1
  56. package/dist/swap/native/limitSwapMemo.js +12 -1
  57. package/dist/swap/native/limitSwapMemo.js.map +1 -1
  58. package/dist/swap/native/thorchainDepositMemo.d.ts +19 -0
  59. package/dist/swap/native/thorchainDepositMemo.d.ts.map +1 -0
  60. package/dist/swap/native/thorchainDepositMemo.js +75 -0
  61. package/dist/swap/native/thorchainDepositMemo.js.map +1 -0
  62. package/dist/swap/quote/findSwapQuote.d.ts.map +1 -1
  63. package/dist/swap/quote/findSwapQuote.js +20 -3
  64. package/dist/swap/quote/findSwapQuote.js.map +1 -1
  65. package/dist/tx/broadcast/resolvers/cardano.d.ts.map +1 -1
  66. package/dist/tx/broadcast/resolvers/cardano.js +4 -4
  67. package/dist/tx/broadcast/resolvers/cardano.js.map +1 -1
  68. package/dist/tx/broadcast/resolvers/utxo.d.ts.map +1 -1
  69. package/dist/tx/broadcast/resolvers/utxo.js +4 -4
  70. package/dist/tx/broadcast/resolvers/utxo.js.map +1 -1
  71. package/dist/tx/fee/evm/clampEvmPriorityFee.d.ts +8 -0
  72. package/dist/tx/fee/evm/clampEvmPriorityFee.d.ts.map +1 -0
  73. package/dist/tx/fee/evm/clampEvmPriorityFee.js +50 -0
  74. package/dist/tx/fee/evm/clampEvmPriorityFee.js.map +1 -0
  75. package/dist/tx/status/resolvers/utxo.d.ts.map +1 -1
  76. package/dist/tx/status/resolvers/utxo.js +12 -2
  77. package/dist/tx/status/resolvers/utxo.js.map +1 -1
  78. package/dist/utils/isValidTokenId.d.ts +2 -1
  79. package/dist/utils/isValidTokenId.d.ts.map +1 -1
  80. package/dist/utils/isValidTokenId.js +12 -1
  81. package/dist/utils/isValidTokenId.js.map +1 -1
  82. package/package.json +36 -1
@@ -1,2 +1,16 @@
1
- export const findByTicker = ({ coins, ticker }) => coins.find(c => c.ticker === ticker) ?? null;
1
+ // SDK2-02 (audit r2): a bare ticker like "USDC" exists on many chains (Ethereum/Polygon/Arbitrum/Base/…).
2
+ // The old `coins.find(c => c.ticker === ticker)` returned the ARRAY-ORDER first match — if this ever got
3
+ // wired into a fund path, "USDC" would silently resolve to whichever chain happened to be first, sending to
4
+ // the wrong network. Refuse to guess: return the unique match (or null when absent), and THROW when the
5
+ // ticker is ambiguous across more than one chain so the caller must disambiguate by chain.
6
+ export const findByTicker = ({ coins, ticker }) => {
7
+ const matches = coins.filter(c => c.ticker === ticker);
8
+ if (matches.length === 0)
9
+ return null;
10
+ const chains = new Set(matches.map(c => c.chain));
11
+ if (chains.size > 1) {
12
+ throw new Error(`findByTicker: ticker "${ticker}" is ambiguous across ${chains.size} chains (${[...chains].join(', ')}); pass a chain-scoped lookup instead of a bare ticker`);
13
+ }
14
+ return matches[0] ?? null;
15
+ };
2
16
  //# sourceMappingURL=findByTicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"findByTicker.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/utils/findByTicker.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAiB,EAAE,KAAK,EAAE,MAAM,EAAwB,EAAY,EAAE,CAChG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,CAAA"}
1
+ {"version":3,"file":"findByTicker.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/utils/findByTicker.ts"],"names":[],"mappings":"AAOA,0GAA0G;AAC1G,yGAAyG;AACzG,4GAA4G;AAC5G,wGAAwG;AACxG,2FAA2F;AAC3F,MAAM,CAAC,MAAM,YAAY,GAAG,CAAiB,EAAE,KAAK,EAAE,MAAM,EAAwB,EAAY,EAAE;IAChG,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;IACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IACjD,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,yBAAyB,MAAM,yBAAyB,MAAM,CAAC,IAAI,YAAY,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,wDAAwD,CAC9J,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;AAC3B,CAAC,CAAA"}
@@ -1 +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,CA+DlD"}
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,EAIL,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;AASD,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,CAsIlD"}
@@ -1,6 +1,12 @@
1
1
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
2
- import { COWSWAP_DEFAULT_AFFILIATE_BPS, COWSWAP_FEE_RECIPIENT, KNOWN_PERMIT_TOKENS, } from '../config.js';
2
+ import { COWSWAP_DEFAULT_AFFILIATE_BPS, COWSWAP_FEE_RECIPIENT, COWSWAP_VALID_TO_SECONDS, KNOWN_PERMIT_TOKENS, } from '../config.js';
3
3
  import { buildCowSwapAppData, keccak256Hex } from '../sign/buildCowSwapOrder.js';
4
+ // This SDK only ever requests a sell order that must fill completely — named here (rather than
5
+ // inlined at both the request body below AND the AGG-01 response-echo checks) so the two stay
6
+ // in lockstep if that ever changes; comparing against a variable is more robust than duplicating
7
+ // the literal in two places (codex review, PR #1082).
8
+ const REQUESTED_KIND = 'sell';
9
+ const REQUESTED_PARTIALLY_FILLABLE = false;
4
10
  export async function getCowSwapQuote({ sellToken, buyToken, sellAmount, from, receiver, chainConfig, affiliateBps, }) {
5
11
  const bps = affiliateBps ?? COWSWAP_DEFAULT_AFFILIATE_BPS;
6
12
  const appData = buildCowSwapAppData(bps, COWSWAP_FEE_RECIPIENT);
@@ -11,9 +17,9 @@ export async function getCowSwapQuote({ sellToken, buyToken, sellAmount, from, r
11
17
  sellAmountBeforeFee: sellAmount.toString(),
12
18
  from: from.toLowerCase(),
13
19
  receiver: receiver.toLowerCase(),
14
- kind: 'sell',
20
+ kind: REQUESTED_KIND,
15
21
  signingScheme: 'eip712',
16
- partiallyFillable: false,
22
+ partiallyFillable: REQUESTED_PARTIALLY_FILLABLE,
17
23
  appData,
18
24
  appDataHash,
19
25
  };
@@ -22,6 +28,52 @@ export async function getCowSwapQuote({ sellToken, buyToken, sellAmount, from, r
22
28
  body,
23
29
  });
24
30
  const { quote } = response;
31
+ // AGG-01 fund-safety fix (round-2 spec-level audit): sellToken/buyToken/kind/
32
+ // partiallyFillable were previously taken straight from this untrusted /quote response and
33
+ // signed as-is via the EIP-712 GPv2 Order struct (buildCowSwapOrderTypedData.ts). `receiver`
34
+ // just below already uses the caller-supplied local, not quote.receiver — the "don't trust
35
+ // the API for security-critical fields" pattern already existed here, just not applied to
36
+ // these 4 fields. A compromised/buggy apiBase response substituting a token address, or
37
+ // flipping `kind` from 'sell' to 'buy', would get signed: a `kind` flip specifically inverts
38
+ // GPv2's semantics (sell: sellAmount is authoritative post-fee; buy: buyAmount is the fixed
39
+ // target, sellAmount becomes a ceiling) while grossSellAmount below is computed assuming
40
+ // sell-order semantics — the SDK would sign a fundamentally different economic contract than
41
+ // the one it believes it built. This SDK only ever requests kind:'sell' + partiallyFillable:
42
+ // false (the request body above), so any other value in the response is definitionally wrong.
43
+ if (quote.sellToken.toLowerCase() !== sellToken.toLowerCase()) {
44
+ throw new Error(`CowSwap quote returned a mismatched sellToken (requested ${sellToken}, got ${quote.sellToken}) — refusing to sign.`);
45
+ }
46
+ if (quote.buyToken.toLowerCase() !== buyToken.toLowerCase()) {
47
+ throw new Error(`CowSwap quote returned a mismatched buyToken (requested ${buyToken}, got ${quote.buyToken}) — refusing to sign.`);
48
+ }
49
+ if (quote.kind !== REQUESTED_KIND) {
50
+ throw new Error(`CowSwap quote returned kind '${quote.kind}' (requested '${REQUESTED_KIND}') — refusing to sign.`);
51
+ }
52
+ if (quote.partiallyFillable !== REQUESTED_PARTIALLY_FILLABLE) {
53
+ throw new Error(`CowSwap quote returned partiallyFillable=${quote.partiallyFillable} (requested ${REQUESTED_PARTIALLY_FILLABLE}) — refusing to sign.`);
54
+ }
55
+ // AGG-01 follow-up (codex review, PR #1082): validTo is entirely server-determined (the
56
+ // request sends no validTo of its own, so there is no request-side value to equality-check
57
+ // against — unlike the fields above). Still part of the signed Order struct, so bound it to a
58
+ // generous ceiling (buildCowSwapOrder.ts's sibling implementation computes its OWN local
59
+ // validTo instead of trusting the response at all — this is the softer version of that same
60
+ // instinct): reject a response whose validTo is unreasonably far in the future (a malicious/
61
+ // malfunctioning response making the order executable far beyond user intent) or already in
62
+ // the past (an expired/garbage quote).
63
+ //
64
+ // The ceiling is 4x COWSWAP_VALID_TO_SECONDS, not 2x — live-verified (2026-07-08, real
65
+ // api.cow.fi/mainnet request) that CoW's actual returned validTo is `now + 1800s` (30 min),
66
+ // NOT ~15 min as COWSWAP_VALID_TO_SECONDS alone would suggest (that constant is
67
+ // buildCowSwapOrder.ts's OWN locally-computed TTL, a different value from what the live API
68
+ // returns). A 2x/30-min cap would have sat RIGHT AT the observed real value with zero headroom
69
+ // for clock skew or normal timing variance — exactly the false-block risk the zkSync router
70
+ // case flagged (team-lead review). 4x/60-min gives real headroom over the observed 30-min
71
+ // reality while still catching genuinely-absurd values (hours/days out — the actual threat).
72
+ const nowSeconds = Math.floor(Date.now() / 1000);
73
+ const maxReasonableValidTo = nowSeconds + 4 * COWSWAP_VALID_TO_SECONDS;
74
+ if (quote.validTo <= nowSeconds || quote.validTo > maxReasonableValidTo) {
75
+ throw new Error(`CowSwap quote returned an unreasonable validTo (${quote.validTo}, now=${nowSeconds}, max=${maxReasonableValidTo}) — refusing to sign.`);
76
+ }
25
77
  const permitRequired = KNOWN_PERMIT_TOKENS[chainConfig.chainId]?.some(addr => addr.toLowerCase() === sellToken.toLowerCase());
26
78
  // The CoW orderbook requires submitted orders to carry `feeAmount = 0` — the
27
79
  // network/solver fee is folded into the price (taken from order surplus), not
@@ -32,6 +84,19 @@ export async function getCowSwapQuote({ sellToken, buyToken, sellAmount, from, r
32
84
  // quoted for the net amount. This value is signed AND submitted, so both stay
33
85
  // consistent.
34
86
  const grossSellAmount = (BigInt(quote.sellAmount) + BigInt(quote.feeAmount)).toString();
87
+ // AGG-01 follow-up (codex review, PR #1082): grossSellAmount becomes the signed Order's
88
+ // sellAmount — the SDK's authorized spend — and was, like the 4 fields above, taken entirely
89
+ // from the untrusted response with no check against what was actually requested. CoW's
90
+ // `sellAmountBeforeFee` request param is specifically designed so the API solves for
91
+ // `quote.sellAmount + quote.feeAmount === sellAmountBeforeFee` exactly — live-verified against
92
+ // the real api.cow.fi/mainnet quote endpoint on two different pairs/amounts on 2026-07-08,
93
+ // both matched byte-for-byte, not just approximately. A compromised/buggy response inflating
94
+ // sellAmount or feeAmount would sign authorization to sell MORE than the user requested —
95
+ // the most direct fund-safety consequence of any field in this struct. Same "refuse to sign
96
+ // on mismatch" treatment as the fields above.
97
+ if (grossSellAmount !== sellAmount.toString()) {
98
+ throw new Error(`CowSwap quote's sellAmount+feeAmount (${grossSellAmount}) does not match the requested sellAmountBeforeFee (${sellAmount}) — refusing to sign.`);
99
+ }
35
100
  return {
36
101
  dstAmount: quote.buyAmount,
37
102
  provider: 'cowswap',
@@ -1 +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,6EAA6E;IAC7E,8EAA8E;IAC9E,+DAA+D;IAC/D,4EAA4E;IAC5E,+EAA+E;IAC/E,4EAA4E;IAC5E,8EAA8E;IAC9E,cAAc;IACd,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAEvF,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,eAAe;gBAC3B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO;gBACP,WAAW;gBACX,SAAS,EAAE,GAAG;gBACd,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"}
1
+ {"version":3,"file":"getCowSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/getCowSwapQuote.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getJupiterSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/getJupiterSwapQuote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AACrF,OAAO,EAEL,KAAK,sBAAsB,EAG5B,MAAM,kDAAkD,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oEAAoE,CAAA;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAUzE,KAAK,KAAK,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC,GAAG;IAC7E,MAAM,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,sBAAsB,CAAA;IACtC,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AA2CD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAAU,iEAOvC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CAuFlC,CAAA"}
1
+ {"version":3,"file":"getJupiterSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/getJupiterSwapQuote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AACrF,OAAO,EAEL,KAAK,sBAAsB,EAG5B,MAAM,kDAAkD,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oEAAoE,CAAA;AAE5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAUzE,KAAK,KAAK,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC,GAAG;IAC7E,MAAM,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,sBAAsB,CAAA;IACtC,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AA2CD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAAU,iEAOvC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CA8FlC,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { Chain } from '@vultisig/core-chain/Chain';
2
2
  import { solanaConfig } from '@vultisig/core-chain/chains/solana/solanaConfig';
3
3
  import { getJupiterConfig, jupiterFeeOwnerAddress, normalizeJupiterBaseUrl, } from '@vultisig/core-chain/swap/general/jupiter/config';
4
+ import { assertJupiterPriceImpactWithinCeiling } from '@vultisig/core-chain/swap/general/priceImpactGuard';
4
5
  import { deriveJupiterFeeAccount, prependJupiterFeeAta } from './jupiterFeeAta.js';
5
6
  /** Canonical wrapped-SOL mint, used as the mint address for native SOL legs. */
6
7
  const solanaNativeMint = 'So11111111111111111111111111111111111111112';
@@ -53,6 +54,12 @@ export const getJupiterSwapQuote = async ({ from, to, amount, affiliateBps = 0,
53
54
  const quoteResponse = await requestJson(`${baseUrl}/swap/v1/quote?${quoteParams.toString()}`, {
54
55
  headers: { Accept: 'application/json' },
55
56
  });
57
+ // Price-impact ceiling (fund-safety, audit finding SOL-02). Jupiter's
58
+ // priceImpactPct is a FRACTION ("0.05" = 5%); refuse to build a signable
59
+ // swap transaction above the ceiling — a thin-pool / sandwich-bait quote
60
+ // that would lose most of the user's funds. Fail-safe: a missing /
61
+ // unparsable impact passes (see evaluatePriceImpactPercent).
62
+ assertJupiterPriceImpactWithinCeiling(quoteResponse.priceImpactPct);
56
63
  // Gate the fee-account flow on the actually quoted fee, not just the requested
57
64
  // bps: Jupiter can floor `platformFee.amount` to 0 (tiny amounts, route with no
58
65
  // fee-eligible mint) even when we asked for a fee. Deriving a fee account and
@@ -1 +1 @@
1
- {"version":3,"file":"getJupiterSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/getJupiterSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAA;AAG9E,OAAO,EACL,gBAAgB,EAEhB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,kDAAkD,CAAA;AAIzD,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAE/E,gFAAgF;AAChF,MAAM,gBAAgB,GAAG,6CAA6C,CAAA;AAEtE,wEAAwE;AACxE,MAAM,4BAA4B,GAAG,EAAE,CAAA;AAkCvC,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,EAAe,EAAU,EAAE,CAAC,EAAE,IAAI,gBAAgB,CAAA;AAEvE,MAAM,WAAW,GAAG,KAAK,EAAK,GAAW,EAAE,IAAkB,EAAc,EAAE;IAC3E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACvC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;IAErD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACvD,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC,CAAA;IAC/F,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACxC,IAAI,EACJ,EAAE,EACF,MAAM,EACN,YAAY,GAAG,CAAC,EAChB,aAAa,EACb,WAAW,GAAG,4BAA4B,GACpC,EAA6B,EAAE;IACrC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,gBAAgB,EAAE,CAAA;IACzD,MAAM,OAAO,GAAG,uBAAuB,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,iBAAiB,CAAA;IACpF,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,sBAAsB,CAAA;IAE1E,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC,CAAA;IAE9B,MAAM,mBAAmB,GAAG,YAAY,GAAG,CAAC,CAAA;IAE5C,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;QACtC,QAAQ,EAAE,SAAS;QACnB,SAAS;QACT,UAAU;QACV,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;QACzB,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE;KACpC,CAAC,CAAA;IACF,IAAI,mBAAmB,EAAE,CAAC;QACxB,WAAW,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,WAAW,CAAuB,GAAG,OAAO,kBAAkB,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE;QAClH,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;KACxC,CAAC,CAAA;IAEF,+EAA+E;IAC/E,gFAAgF;IAChF,8EAA8E;IAC9E,8EAA8E;IAC9E,+EAA+E;IAC/E,0CAA0C;IAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,IAAI,GAAG,CAAC,CAAA;IACtE,MAAM,UAAU,GAAG,mBAAmB,IAAI,aAAa,GAAG,EAAE,CAAA;IAE5D,4EAA4E;IAC5E,uEAAuE;IACvE,gCAAgC;IAChC,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,uBAAuB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEvG,MAAM,YAAY,GAAG,MAAM,WAAW,CAAsB,GAAG,OAAO,eAAe,EAAE;QACrF,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE;QAC3E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,aAAa;YACb,aAAa,EAAE,IAAI,CAAC,OAAO;YAC3B,gBAAgB,EAAE,IAAI;YACtB,uBAAuB,EAAE,IAAI;YAC7B,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC;KACH,CAAC,CAAA;IAEF,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;IACpF,CAAC;IAED,MAAM,IAAI,GAAG,cAAc;QACzB,CAAC,CAAC,MAAM,oBAAoB,CAAC;YACzB,MAAM,EAAE,YAAY,CAAC,eAAe;YACpC,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,WAAW,EAAE,cAAc,CAAC,WAAW;YACvC,cAAc,EAAE,cAAc,CAAC,cAAc;SAC9C,CAAC;QACJ,CAAC,CAAC,YAAY,CAAC,eAAe,CAAA;IAEhC,+EAA+E;IAC/E,6EAA6E;IAC7E,+EAA+E;IAC/E,kEAAkE;IAClE,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAE1G,OAAO;QACL,SAAS,EAAE,aAAa,CAAC,SAAS;QAClC,QAAQ,EAAE,SAAS;QACnB,EAAE,EAAE;YACF,MAAM,EAAE;gBACN,IAAI;gBACJ,UAAU;gBACV,OAAO,EAAE;oBACP,MAAM,EAAE,aAAa;oBACrB,QAAQ,EAAE,EAAE,CAAC,QAAQ;oBACrB,KAAK,EAAE,KAAK,CAAC,MAAM;oBACnB,EAAE,EAAE,EAAE,CAAC,EAAE;iBACV;aACF;SACF;KACF,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"getJupiterSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/getJupiterSwapQuote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Chain } from '../../Chain.js';
2
+ export type EnforcedRouterProvider = '1inch' | 'kyber';
3
+ /**
4
+ * Throws if `address` isn't the known router for `provider` on `chain`. Call this at quote
5
+ * construction, before a GeneralSwapQuote carrying `address` as `tx.evm.to` can exist.
6
+ */
7
+ export declare function assertKnownAggregatorRouter(provider: EnforcedRouterProvider, address: string, chain: Chain): void;
8
+ /**
9
+ * Log-only (never throws) — for LiFi/SwapKit, whose legitimate routes span many different
10
+ * contracts. Structured so the data is queryable (provider + address) and a future allowlist
11
+ * is easy to build if a stable pattern emerges from real usage.
12
+ */
13
+ export declare function logUnenforcedAggregatorDestination(provider: 'li.fi' | 'swapkit', address: string): void;
14
+ //# sourceMappingURL=knownAggregatorRouters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knownAggregatorRouters.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/knownAggregatorRouters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AA8DnC,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,OAAO,CAAA;AAEtD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAcjH;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAKvG"}
@@ -0,0 +1,83 @@
1
+ import { Chain } from '../../Chain.js';
2
+ /**
3
+ * Fund-safety allowlist for the general-purpose EVM swap aggregators (AGG-02, round-2
4
+ * spec-level fund-safety audit, 2026-07-08).
5
+ *
6
+ * Each aggregator's quote-construction function (getOneInchSwapQuote.ts, kyber/api/tx.ts,
7
+ * getLifiSwapQuote.ts, getSwapKitQuote.ts) is the TRUST BOUNDARY where an untrusted HTTP
8
+ * response gets parsed into an internal GeneralSwapQuote. That quote's `tx.evm.to` goes on
9
+ * to become BOTH the ERC-20 approval spender (getSwapDestinationAddress ->
10
+ * mpc/keysign/swap/build.ts's allowance check) AND, independently, the actual on-chain swap
11
+ * transaction's destination (build.ts's own txMsg construction -> signingInputs/resolvers/
12
+ * evm/index.ts's WalletCore SigningInput). Two SEPARATE downstream reads of the same field —
13
+ * so validating at either downstream site alone would leave the other unguarded. Validating
14
+ * HERE, at construction, means every consumer (present and future) inherits an
15
+ * already-verified address by construction, instead of needing its own check.
16
+ *
17
+ * 1inch and Kyber can be enforced (fail closed / throw) because their router is a small,
18
+ * stable, deterministically-deployed constant on almost every chain — verified against each
19
+ * provider's OWN live quote API (not just docs/explorers), chain by chain, on 2026-07-08.
20
+ *
21
+ * CHAIN-SCOPING MATTERS (codex review, PR #1079): 1inch's V6 router is NOT the same address
22
+ * on zkSync Era — confirmed live (a real 200 response from a real quote request returned a
23
+ * DIFFERENT contract there). This is exactly the caveat chains/evm/contract/knownContracts.ts
24
+ * already documents for 1inch V5 ("not zkSync Era — different V5 router"); it turns out to
25
+ * also hold for V6. A flat, chain-agnostic allowlist would have hard-blocked every legitimate
26
+ * zkSync 1inch swap. Kyber showed no such variance on every chain that returned a live
27
+ * response (see the per-chain notes below) — its allowlist stays flat.
28
+ *
29
+ * LiFi and SwapKit CANNOT be enforced the same way — they route through many different
30
+ * bridge/DEX contracts by design (diamond routing, multi-hop, chain-specific deployments),
31
+ * so a hard allowlist would false-block legitimate routes. Those two are logged (never
32
+ * thrown) via logUnenforcedAggregatorDestination so an anomaly is queryable, and so a future
33
+ * allowlist has real usage data to build from if a pattern emerges.
34
+ */
35
+ // 1inch Aggregation Router V5 (legacy). Same address as
36
+ // chains/evm/contract/knownContracts.ts's display-only registry; kept separate here since
37
+ // THIS one gates signing, not just UI labeling. NOTE: the implementation below only accepts
38
+ // this on non-zkSync chains (same exclusive branch as V6) — getOneInchSwapQuote.ts only
39
+ // calls the v6.0 API today, so a V5 address is never actually seen through this path
40
+ // regardless; harmless defense-in-depth either way.
41
+ const ONE_INCH_V5_ROUTER = '0x1111111254eeb25477b68fb85ed929f73a960582';
42
+ // V6's standard address — live-confirmed 2026-07-08 on Ethereum, Arbitrum, BSC, Base,
43
+ // Optimism, Avalanche, Polygon (7 of 8 oneInchSwapEnabledChains chains).
44
+ const ONE_INCH_V6_STANDARD_ROUTER = '0x111111125421ca6dc452d289314280a0f8842a65';
45
+ // V6 on zkSync Era ONLY — live-confirmed 2026-07-08 via a real api.vultisig.com/1inch
46
+ // v6.0 quote request returning this address (NOT the standard one above).
47
+ const ONE_INCH_V6_ZKSYNC_ROUTER = '0x6fd4383cb451173d5f9304f041c7bcbf27d561ff';
48
+ // KyberSwap MetaAggregationRouterV2 — same address confirmed live 2026-07-08 on every chain
49
+ // that returned a response through aggregator-api.kyberswap.com's /routes (Ethereum, BSC,
50
+ // Arbitrum, Optimism, Avalanche, Base, Polygon — 7 of 9 kyberSwapEnabledChains chains).
51
+ // zkSync/Blast 404'd on this exact API path during verification — that looks like those two
52
+ // chains aren't actually live through this aggregator endpoint today (a pre-existing,
53
+ // separate question from this fix — kyberSwapEnabledChains may be ahead of what the live API
54
+ // serves), not evidence of a differing router address. No chain-scoping needed unless that
55
+ // changes.
56
+ const KYBER_STANDARD_ROUTER = '0x6131b5fae19ea4f9d964eac0408e4408b66337b5';
57
+ /**
58
+ * Throws if `address` isn't the known router for `provider` on `chain`. Call this at quote
59
+ * construction, before a GeneralSwapQuote carrying `address` as `tx.evm.to` can exist.
60
+ */
61
+ export function assertKnownAggregatorRouter(provider, address, chain) {
62
+ const normalized = address.toLowerCase();
63
+ const isKnown = provider === 'kyber'
64
+ ? normalized === KYBER_STANDARD_ROUTER
65
+ : chain === Chain.Zksync
66
+ ? normalized === ONE_INCH_V6_ZKSYNC_ROUTER
67
+ : normalized === ONE_INCH_V5_ROUTER || normalized === ONE_INCH_V6_STANDARD_ROUTER;
68
+ if (!isKnown) {
69
+ throw new Error(`${provider} swap quote returned an unrecognized router address (${address}) on ${chain} — refusing to build a signable transaction against it.`);
70
+ }
71
+ }
72
+ /**
73
+ * Log-only (never throws) — for LiFi/SwapKit, whose legitimate routes span many different
74
+ * contracts. Structured so the data is queryable (provider + address) and a future allowlist
75
+ * is easy to build if a stable pattern emerges from real usage.
76
+ */
77
+ export function logUnenforcedAggregatorDestination(provider, address) {
78
+ console.info('[swap-router-telemetry] general-swap destination (not enforced, logged for future analysis):', {
79
+ provider,
80
+ address,
81
+ });
82
+ }
83
+ //# sourceMappingURL=knownAggregatorRouters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knownAggregatorRouters.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/knownAggregatorRouters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,wDAAwD;AACxD,0FAA0F;AAC1F,4FAA4F;AAC5F,wFAAwF;AACxF,qFAAqF;AACrF,oDAAoD;AACpD,MAAM,kBAAkB,GAAG,4CAA4C,CAAA;AAEvE,sFAAsF;AACtF,yEAAyE;AACzE,MAAM,2BAA2B,GAAG,4CAA4C,CAAA;AAEhF,sFAAsF;AACtF,0EAA0E;AAC1E,MAAM,yBAAyB,GAAG,4CAA4C,CAAA;AAE9E,4FAA4F;AAC5F,0FAA0F;AAC1F,wFAAwF;AACxF,4FAA4F;AAC5F,sFAAsF;AACtF,6FAA6F;AAC7F,2FAA2F;AAC3F,WAAW;AACX,MAAM,qBAAqB,GAAG,4CAA4C,CAAA;AAI1E;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAAgC,EAAE,OAAe,EAAE,KAAY;IACzG,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IACxC,MAAM,OAAO,GACX,QAAQ,KAAK,OAAO;QAClB,CAAC,CAAC,UAAU,KAAK,qBAAqB;QACtC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM;YACtB,CAAC,CAAC,UAAU,KAAK,yBAAyB;YAC1C,CAAC,CAAC,UAAU,KAAK,kBAAkB,IAAI,UAAU,KAAK,2BAA2B,CAAA;IAEvF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,GAAG,QAAQ,wDAAwD,OAAO,QAAQ,KAAK,yDAAyD,CACjJ,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kCAAkC,CAAC,QAA6B,EAAE,OAAe;IAC/F,OAAO,CAAC,IAAI,CAAC,8FAA8F,EAAE;QAC3G,QAAQ;QACR,OAAO;KACR,CAAC,CAAA;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/kyber/api/tx.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAEzE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAIL,4BAA4B,EAG7B,MAAM,WAAW,CAAA;AAGlB,KAAK,mBAAmB,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,qBAAqB,CAAC,CAAC,GAAG;IACzF,YAAY,EAAE,GAAG,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,mBAAmB,EAAE,OAAO,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,4BAA4B,CAAA;IAC1C,oGAAoG;IACpG,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAsCD,eAAO,MAAM,cAAc,GAAU,uHAUlC,mBAAmB,KAAG,OAAO,CAAC,gBAAgB,CA4DhD,CAAA"}
1
+ {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/kyber/api/tx.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAEzE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAIL,4BAA4B,EAG7B,MAAM,WAAW,CAAA;AAGlB,KAAK,mBAAmB,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,qBAAqB,CAAC,CAAC,GAAG;IACzF,YAAY,EAAE,GAAG,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,mBAAmB,EAAE,OAAO,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,4BAA4B,CAAA;IAC1C,oGAAoG;IACpG,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAsCD,eAAO,MAAM,cAAc,GAAU,uHAUlC,mBAAmB,KAAG,OAAO,CAAC,gBAAgB,CAgFhD,CAAA"}
@@ -3,6 +3,7 @@ import { isInError } from '@vultisig/lib-utils/error/isInError';
3
3
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
4
4
  import { convertDuration } from '@vultisig/lib-utils/time/convertDuration';
5
5
  import { isFeeCoin } from '../../../../coin/utils/isFeeCoin.js';
6
+ import { assertKnownAggregatorRouter } from '../../knownAggregatorRouters.js';
6
7
  import { getKyberSwapAffiliateParams, hasAffiliateBps, kyberSwapAffiliateConfig, kyberSwapSlippageTolerance, kyberSwapTxLifespan, } from '../config.js';
7
8
  import { getKyberSwapBaseUrl } from './baseUrl.js';
8
9
  const getKyberSwapAffiliateFee = ({ amountOut, to, affiliateBps, }) => {
@@ -52,14 +53,30 @@ export const getKyberSwapTx = async ({ from, to, routeSummary, routerAddress, am
52
53
  }
53
54
  throw new Error('Failed to build transaction');
54
55
  }
55
- const { amountOut, data, gas } = buildResponse.data;
56
+ const { amountOut, data, gas, routerAddress: buildRouterAddress } = buildResponse.data;
57
+ // AGG-02 fund-safety fix: verify BOTH the /routes response's routerAddress (route.ts,
58
+ // threaded in as the `routerAddress` param) AND /route/build's OWN routerAddress field
59
+ // are Kyber's actual router before this untrusted data can become a signable
60
+ // GeneralSwapQuote. The two calls are separate HTTP round-trips; if they ever disagree
61
+ // (API drift/version mismatch), `data` (the calldata /route/build just generated) may
62
+ // have been built against a DIFFERENT router than the one this quote's tx.to claims —
63
+ // codex review finding, PR #1079. See knownAggregatorRouters.ts.
64
+ assertKnownAggregatorRouter('kyber', routerAddress, from.chain);
65
+ assertKnownAggregatorRouter('kyber', buildRouterAddress, from.chain);
66
+ if (buildRouterAddress.toLowerCase() !== routerAddress.toLowerCase()) {
67
+ throw new Error(`Kyber /route and /route/build disagree on the router address (${routerAddress} vs ${buildRouterAddress}) — refusing to build a signable transaction against mismatched calldata.`);
68
+ }
56
69
  return {
57
70
  dstAmount: amountOut,
58
71
  provider: 'kyber',
59
72
  tx: {
60
73
  evm: {
61
74
  from: from.address,
62
- to: routerAddress,
75
+ // AGG-04: bind tx.to to /route/build's OWN routerAddress — the router paired with
76
+ // `data` (the calldata this call just generated) — not the stale /routes param.
77
+ // The equality guard above already proves they match today (AGG-02 / #1079); this
78
+ // keeps tx.to authoritative-by-construction as defense-in-depth if that guard ever moves.
79
+ to: buildRouterAddress,
63
80
  data,
64
81
  value: isFeeCoin(from) ? amount.toString() : '0',
65
82
  gasLimit: gas ? BigInt(gas) : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"tx.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/kyber/api/tx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tx.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/kyber/api/tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAA;AAI1E,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAG5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AAE1E,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,wBAAwB,EAExB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAwB/C,MAAM,wBAAwB,GAAG,CAAC,EAChC,SAAS,EACT,EAAE,EACF,YAAY,GAKb,EAAuB,EAAE;IACxB,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;IACpC,MAAM,cAAc,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAA;IAEnE,OAAO;QACL,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,EAAE,EAAE,EAAE,CAAC,EAAE;QACT,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,MAAM,EAAE,cAAc,GAAG,YAAY;KACtC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,EACnC,IAAI,EACJ,EAAE,EACF,YAAY,EACZ,aAAa,EACb,MAAM,EACN,mBAAmB,EACnB,YAAY,EACZ,WAAW,GAAG,wBAAwB,EACtC,iBAAiB,GAAG,0BAA0B,GAC1B,EAA6B,EAAE;IACnD,MAAM,YAAY,GAAG;QACnB,YAAY;QACZ,MAAM,EAAE,IAAI,CAAC,OAAO;QACpB,SAAS,EAAE,IAAI,CAAC,OAAO;QACvB,iBAAiB;QACjB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC,mBAAmB,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAChH,mBAAmB;QACnB,GAAG,2BAA2B,CAAC,YAAY,EAAE,WAAW,CAAC;QACzD,oBAAoB,EAAE,KAAK;KAC5B,CAAA;IAED,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAyB,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;QAC7G,OAAO,EAAE;YACP,aAAa,EAAE,WAAW,CAAC,MAAM;SAClC;QACD,IAAI,EAAE,YAAY;KACnB,CAAC,CAAA;IAEF,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;YAC/B,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAA;YAEjC,IAAI,SAAS,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAA;YACxD,CAAC;YAED,IAAI,SAAS,CAAC,OAAO,EAAE,wBAAwB,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAA;YACvD,CAAC;YAED,IAAI,SAAS,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAA;YACnD,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;QAC3C,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,kBAAkB,EAAE,GAAG,aAAa,CAAC,IAAI,CAAA;IAEtF,sFAAsF;IACtF,uFAAuF;IACvF,6EAA6E;IAC7E,uFAAuF;IACvF,sFAAsF;IACtF,sFAAsF;IACtF,iEAAiE;IACjE,2BAA2B,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/D,2BAA2B,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACpE,IAAI,kBAAkB,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CACb,iEAAiE,aAAa,OAAO,kBAAkB,2EAA2E,CACnL,CAAA;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,OAAO;QACjB,EAAE,EAAE;YACF,GAAG,EAAE;gBACH,IAAI,EAAE,IAAI,CAAC,OAAO;gBAClB,kFAAkF;gBAClF,gFAAgF;gBAChF,kFAAkF;gBAClF,0FAA0F;gBAC1F,EAAE,EAAE,kBAAkB;gBACtB,IAAI;gBACJ,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG;gBAChD,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;gBACvC,YAAY,EAAE,wBAAwB,CAAC;oBACrC,SAAS;oBACT,EAAE;oBACF,YAAY;iBACb,CAAC;aACH;SACF;KACF,CAAA;AACH,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getLifiSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/lifi/api/getLifiSwapQuote.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,mBAAmB,EAGpB,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAmB,oBAAoB,EAAE,MAAM,8DAA8D,CAAA;AAKpH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAGzD,KAAK,KAAK,GAAG,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC,oBAAoB,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG;IACnG,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;4EACwE;IACxE,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC;qDACiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAKD,6CAA6C;AAC7C,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAa7C,CAAA;AAKF,6CAA6C;AAC7C,eAAO,MAAM,YAAY,GAAI,MAAM;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OACxB,CAAA;AAkG1D,eAAO,MAAM,gBAAgB,GAAU,wFAMpC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CAiLlC,CAAA"}
1
+ {"version":3,"file":"getLifiSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/lifi/api/getLifiSwapQuote.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,mBAAmB,EAGpB,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAmB,oBAAoB,EAAE,MAAM,8DAA8D,CAAA;AAKpH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAIzD,KAAK,KAAK,GAAG,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC,oBAAoB,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG;IACnG,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;4EACwE;IACxE,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC;qDACiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAKD,6CAA6C;AAC7C,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAa7C,CAAA;AAKF,6CAA6C;AAC7C,eAAO,MAAM,YAAY,GAAI,MAAM;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OACxB,CAAA;AAkG1D,eAAO,MAAM,gBAAgB,GAAU,wFAMpC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CAuLlC,CAAA"}
@@ -8,6 +8,7 @@ import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
8
8
  import { match } from '@vultisig/lib-utils/match';
9
9
  import { memoize } from '@vultisig/lib-utils/memoize';
10
10
  import { mirrorRecord } from '@vultisig/lib-utils/record/mirrorRecord';
11
+ import { logUnenforcedAggregatorDestination } from '../../knownAggregatorRouters.js';
11
12
  import { injectSolanaAtaIfMissing } from './injectSolanaAtaIfMissing.js';
12
13
  // Stable-pair detection: tickers that commonly trade within a tight peg.
13
14
  // DAI is included because on most DEXs DAI/USDC depth is comparable to
@@ -253,10 +254,16 @@ export const getLifiSwapQuote = async ({ amount, affiliateBps, lifiAffiliateConf
253
254
  const swapFeeAssetId = swapFee &&
254
255
  ([fromToken, toToken].find(token => token.toLowerCase() === swapFeeAddress) ||
255
256
  chainFeeCoin[transfer.from.chain].id);
257
+ const evmTo = shouldBePresent(to);
258
+ // AGG-02: LiFi routes through many different bridge/DEX contracts by design
259
+ // (diamond routing, multi-hop, chain-specific deployments) — a hard allowlist
260
+ // would false-block legitimate routes, so log (never throw). See
261
+ // knownAggregatorRouters.ts.
262
+ logUnenforcedAggregatorDestination('li.fi', evmTo);
256
263
  return {
257
264
  evm: {
258
265
  from: shouldBePresent(from),
259
- to: shouldBePresent(to),
266
+ to: evmTo,
260
267
  data: shouldBePresent(data),
261
268
  value: BigInt(shouldBePresent(value)).toString(),
262
269
  gasLimit: gasLimit ? BigInt(gasLimit) : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"getLifiSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/lifi/api/getLifiSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAmB,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EACL,aAAa,EAEb,UAAU,EACV,SAAS,GACV,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAE,eAAe,EAAwB,MAAM,8DAA8D,CAAA;AACpH,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAA;AAKtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAarE,yEAAyE;AACzE,uEAAuE;AACvE,yEAAyE;AACzE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IACzD,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;CACR,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CAAC,MAA0B,EAAW,EAAE,CAC7D,MAAM,KAAK,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;AAElE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAyB,EAAE,EAAuB,EAAW,EAAE,CAC1F,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;AAE1D;;;;oDAIoD;AACpD,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE;IACxC,SAAS,EAAE,CAAA;AACb,CAAC,CAAC,CAAA;AAEF,+DAA+D;AAC/D,oEAAoE;AACpE,gEAAgE;AAChE,oEAAoE;AACpE,kEAAkE;AAClE,iEAAiE;AACjE,6DAA6D;AAC7D,kEAAkE;AAClE,8DAA8D;AAC9D,yDAAyD;AACzD,iEAAiE;AACjE,gEAAgE;AAChE,kEAAkE;AAClE,8DAA8D;AAC9D,+DAA+D;AAC/D,oDAAoD;AACpD,EAAE;AACF,iEAAiE;AACjE,iEAAiE;AACjE,kEAAkE;AAClE,oEAAoE;AACpE,sEAAsE;AACtE,mEAAmE;AACnE,8DAA8D;AAC9D,oDAAoD;AACpD,EAAE;AACF,2DAA2D;AAC3D,kEAAkE;AAClE,sEAAsE;AACtE,mEAAmE;AACnE,qEAAqE;AACrE,mEAAmE;AACnE,iEAAiE;AACjE,gEAAgE;AAChE,mEAAmE;AACnE,gEAAgE;AAChE,mEAAmE;AACnE,EAAE;AACF,6DAA6D;AAC7D,iEAAiE;AACjE,oEAAoE;AACpE,iEAAiE;AACjE,8DAA8D;AAC9D,EAAE;AACF,gCAAgC;AAChC,gEAAgE;AAChE,iEAAiE;AACjE,yCAAyC;AACzC,oEAAoE;AACpE,kEAAkE;AAClE,MAAM,+BAA+B,GAAG,IAAI,CAAA;AAC5C,MAAM,mCAAmC,GAAG,KAAK,CAAA;AAEjD,mEAAmE;AACnE,mEAAmE;AACnE,mEAAmE;AACnE,mEAAmE;AACnE,0BAA0B;AAC1B,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAEjC,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,4EAA4E;AAC5E,yEAAyE;AACzE,4DAA4D;AAC5D,EAAE;AACF,2EAA2E;AAC3E,qEAAqE;AACrE,8DAA8D;AAC9D,uEAAuE;AACvE,wEAAwE;AACxE,+DAA+D;AAC/D,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,QAA8B,EAAwB,EAAE;IACrG,MAAM,QAAQ,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAA;IACvD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,wCAAwC,OAAO,4CAA4C,QAAQ,EAAE,CAAC,CAAA;QACnH,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,EACrC,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EAAE,gBAAgB,EAC1B,GAAG,QAAQ,EACL,EAA6B,EAAE;IACrC,oBAAoB,EAAE,CAAA;IAEtB,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;IAEpG,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;IAClH,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAA;IAE3F,MAAM,QAAQ,GACZ,gBAAgB;QAChB,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAA;IAEpH,qEAAqE;IACrE,oEAAoE;IACpE,kEAAkE;IAClE,oEAAoE;IACpE,0DAA0D;IAC1D,MAAM,eAAe,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAA;IAC9D,IAAI,eAAe,GAAG,qBAAqB,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CACV,iEAAiE,qBAAqB,QAAQ,eAAe,KAAK,CACnH,CAAA;IACH,CAAC;IAED,8DAA8D;IAC9D,oEAAoE;IACpE,qEAAqE;IACrE,kEAAkE;IAClE,wEAAwE;IACxE,MAAM,UAAU,GAAG,mBAAmB,EAAE,cAAc,IAAI,UAAU,CAAC,cAAc,CAAA;IAEnF,yEAAyE;IACzE,4EAA4E;IAC5E,0CAA0C;IAC1C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,EAAE;QAC5C,SAAS;QACT,OAAO;QACP,SAAS;QACT,OAAO;QACP,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE;QAC7B,WAAW;QACX,SAAS;QACT,4EAA4E;QAC5E,6EAA6E;QAC7E,0EAA0E;QAC1E,8EAA8E;QAC9E,yEAAyE;QACzE,gDAAgD;QAChD,GAAG,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS;QAClE,QAAQ;QACR,UAAU;KACX,CAAC,CAAA;IAEF,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAE9C,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAEnD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAA;IAE/E,2EAA2E;IAC3E,8EAA8E;IAC9E,2EAA2E;IAC3E,8DAA8D;IAC9D,IAAI,SAAS,KAAK,QAAQ,IAAI,OAAO,KAAK,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACjF,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QACrC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAA;QACvC,MAAM,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;QAC9C,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3F,MAAM,cAAc,GAClB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;QAE7G,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;QACnH,8EAA8E;QAC9E,6EAA6E;QAC7E,4EAA4E;QAC5E,+EAA+E;QAC/E,8EAA8E;QAC9E,gFAAgF;QAEhF,wFAAwF;QACxF,kFAAkF;QAClF,iFAAiF;QACjF,gHAAgH;QAChH,mFAAmF;QACnF,kFAAkF;QAClF,2EAA2E;QAC3E,uDAAuD;QACvD,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAE7E,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,QAAQ;YAC5B,QAAQ,EAAE,OAAO;YACjB,EAAE,EAAE;gBACF,MAAM,EAAE;oBACN,IAAI,EAAE,WAAW;oBACjB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,aAAa;oBACrD,OAAO,EAAE;wBACP,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;wBAC9B,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;wBAChC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;wBACtE,EAAE,EAAE,cAAc;qBACnB;iBACF;aACF;SACF,CAAA;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,QAAQ;QAC5B,QAAQ,EAAE,OAAO;QACjB,EAAE,EAAE,KAAK,CAAgE,SAAS,EAAE;YAClF,MAAM,EAAE,GAAG,EAAE;gBACX,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAA;gBACvC,MAAM,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;gBAE9C,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;gBAEtC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;gBAE3F,MAAM,cAAc,GAClB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;gBAE7G,OAAO;oBACL,MAAM,EAAE;wBACN,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;wBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;wBACrC,OAAO,EAAE;4BACP,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;4BAC9B,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;4BAChC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;4BACtE,EAAE,EAAE,cAAc;yBACnB;qBACF;iBACF,CAAA;YACH,CAAC;YACD,GAAG,EAAE,GAAG,EAAE;gBACR,0DAA0D;gBAC1D,mEAAmE;gBACnE,kEAAkE;gBAClE,mEAAmE;gBACnE,8DAA8D;gBAC9D,+DAA+D;gBAC/D,yDAAyD;gBACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAA;gBACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;gBAC1E,+DAA+D;gBAC/D,+DAA+D;gBAC/D,6DAA6D;gBAC7D,+CAA+C;gBAC/C,MAAM,cAAc,GAAG,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;gBAC3D,MAAM,cAAc,GAClB,OAAO;oBACP,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC;wBACzE,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;gBACzC,OAAO;oBACL,GAAG,EAAE;wBACH,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;wBAC3B,EAAE,EAAE,eAAe,CAAC,EAAE,CAAC;wBACvB,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;wBAC3B,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;wBAChD,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;wBACjD,GAAG,CAAC,OAAO;4BACT,CAAC,CAAC;gCACE,YAAY,EAAE;oCACZ,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;oCAC9B,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;oCAChC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;oCACtE,EAAE,EAAE,cAAc;iCACnB;6BACF;4BACH,CAAC,CAAC,EAAE,CAAC;qBACR;iBACF,CAAA;YACH,CAAC;SACF,CAAC;KACH,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"getLifiSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/lifi/api/getLifiSwapQuote.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
+ import { EvmChain } from '@vultisig/core-chain/Chain';
1
2
  import { ChainAccount } from '@vultisig/core-chain/ChainAccount';
3
+ import { AccountCoin } from '@vultisig/core-chain/coin/AccountCoin';
2
4
  import { GeneralSwapQuote } from '@vultisig/core-chain/swap/general/GeneralSwapQuote';
3
5
  import { oneInchAffiliateConfig } from '@vultisig/core-chain/swap/general/oneInch/oneInchAffiliateConfig';
4
6
  export type OneInchAffiliateConfig = typeof oneInchAffiliateConfig;
@@ -6,12 +8,15 @@ type Input = {
6
8
  account: ChainAccount;
7
9
  fromCoinId: string;
8
10
  toCoinId: string;
11
+ /** Destination coin metadata. When set alongside affiliateBps, populates a display-only
12
+ * affiliateFee (AGG-05) matching the Kyber/LiFi convention. */
13
+ to?: AccountCoin<EvmChain>;
9
14
  amount: bigint;
10
15
  affiliateBps?: number;
11
16
  oneInchConfig?: OneInchAffiliateConfig;
12
17
  /** Slippage tolerance in percent (e.g. 0.5 = 0.5%). Defaults to 0.5. */
13
18
  slippage?: number;
14
19
  };
15
- export declare const getOneInchSwapQuote: ({ account, fromCoinId, toCoinId, amount, affiliateBps, oneInchConfig, slippage, }: Input) => Promise<GeneralSwapQuote>;
20
+ export declare const getOneInchSwapQuote: ({ account, fromCoinId, toCoinId, to, amount, affiliateBps, oneInchConfig, slippage, }: Input) => Promise<GeneralSwapQuote>;
16
21
  export {};
17
22
  //# sourceMappingURL=getOneInchSwapQuote.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getOneInchSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/oneInch/api/getOneInchSwapQuote.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAGhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AAErF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAA;AAQzG,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAA;AAElE,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,sBAAsB,CAAA;IACtC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAID,eAAO,MAAM,mBAAmB,GAAU,mFAQvC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CAkClC,CAAA"}
1
+ {"version":3,"file":"getOneInchSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/oneInch/api/getOneInchSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AAGrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAA;AASzG,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAA;AAElE,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB;mEAC+D;IAC/D,EAAE,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,sBAAsB,CAAA;IACtC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAgCD,eAAO,MAAM,mBAAmB,GAAU,uFASvC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CAwClC,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { getEvmChainId } from '@vultisig/core-chain/chains/evm/chainInfo';
2
2
  import { isFeeCoin } from '@vultisig/core-chain/coin/utils/isFeeCoin';
3
+ import { assertKnownAggregatorRouter } from '@vultisig/core-chain/swap/general/knownAggregatorRouters';
3
4
  import { oneInchAffiliateConfig } from '@vultisig/core-chain/swap/general/oneInch/oneInchAffiliateConfig';
4
5
  import { rootApiUrl } from '@vultisig/core-config';
5
6
  import { hexToNumber } from '@vultisig/lib-utils/hex/hexToNumber';
@@ -7,7 +8,24 @@ import { addQueryParams } from '@vultisig/lib-utils/query/addQueryParams';
7
8
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
8
9
  import { evmNativeCoinAddress } from '../../../../chains/evm/config.js';
9
10
  const getBaseUrl = (chainId) => `${rootApiUrl}/1inch/swap/v6.0/${chainId}/swap`;
10
- export const getOneInchSwapQuote = async ({ account, fromCoinId, toCoinId, amount, affiliateBps, oneInchConfig = oneInchAffiliateConfig, slippage = 0.5, }) => {
11
+ // 1inch's `fee` param deducts the affiliate cut from dstAmount before returning it same
12
+ // convention as Kyber's /route/build. Gross the net amount back up to derive the fee for
13
+ // display, mirroring getKyberSwapAffiliateFee (kyber/api/tx.ts).
14
+ const getOneInchAffiliateFee = ({ dstAmount, to, affiliateBps, }) => {
15
+ if (!affiliateBps || !to) {
16
+ return undefined;
17
+ }
18
+ const netAmountOut = BigInt(dstAmount);
19
+ const feeRate = BigInt(affiliateBps);
20
+ const grossAmountOut = (netAmountOut * 10000n) / (10000n - feeRate);
21
+ return {
22
+ chain: to.chain,
23
+ id: to.id,
24
+ decimals: to.decimals,
25
+ amount: grossAmountOut - netAmountOut,
26
+ };
27
+ };
28
+ export const getOneInchSwapQuote = async ({ account, fromCoinId, toCoinId, to, amount, affiliateBps, oneInchConfig = oneInchAffiliateConfig, slippage = 0.5, }) => {
11
29
  const chain = account.chain;
12
30
  const chainId = hexToNumber(getEvmChainId(chain));
13
31
  const params = {
@@ -27,6 +45,10 @@ export const getOneInchSwapQuote = async ({ account, fromCoinId, toCoinId, amoun
27
45
  };
28
46
  const url = addQueryParams(getBaseUrl(chainId), params);
29
47
  const { dstAmount, tx } = await queryUrl(url);
48
+ // AGG-02 fund-safety fix: verify tx.to is 1inch's actual router before this untrusted
49
+ // response can become a signable GeneralSwapQuote. Chain-scoped: 1inch's router differs
50
+ // on zkSync Era. See knownAggregatorRouters.ts.
51
+ assertKnownAggregatorRouter('1inch', tx.to, chain);
30
52
  return {
31
53
  dstAmount,
32
54
  provider: '1inch',
@@ -34,6 +56,7 @@ export const getOneInchSwapQuote = async ({ account, fromCoinId, toCoinId, amoun
34
56
  evm: {
35
57
  ...tx,
36
58
  gasLimit: tx.gas ? BigInt(tx.gas) : undefined,
59
+ affiliateFee: getOneInchAffiliateFee({ dstAmount, to, affiliateBps }),
37
60
  },
38
61
  },
39
62
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getOneInchSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/oneInch/api/getOneInchSwapQuote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAA;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAA;AAGrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAA;AACzG,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAepE,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,GAAG,UAAU,oBAAoB,OAAO,OAAO,CAAA;AAEvF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACxC,OAAO,EACP,UAAU,EACV,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,aAAa,GAAG,sBAAsB,EACtC,QAAQ,GAAG,GAAG,GACR,EAA6B,EAAE;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAiB,CAAA;IACvC,MAAM,OAAO,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;IAEjD,MAAM,MAAM,GAAG;QACb,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,UAAU;QAC5F,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ;QACxF,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;QACzB,IAAI,EAAE,OAAO,CAAC,OAAO;QACrB,QAAQ;QACR,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,IAAI;QAChB,GAAG,CAAC,YAAY;YACd,CAAC,CAAC;gBACE,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,GAAG,EAAE,YAAY,GAAG,GAAG;aACxB;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAA;IAED,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;IAEvD,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,GAA6B,MAAM,QAAQ,CAA2B,GAAG,CAAC,CAAA;IAEjG,OAAO;QACL,SAAS;QACT,QAAQ,EAAE,OAAO;QACjB,EAAE,EAAE;YACF,GAAG,EAAE;gBACH,GAAG,EAAE;gBACL,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;aAC9C;SACF;KACF,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"getOneInchSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/oneInch/api/getOneInchSwapQuote.ts"],"names":[],"mappings":"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"}