@switch-win/sdk 1.2.2 → 1.2.4

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/README.md CHANGED
@@ -121,8 +121,12 @@ For a production integration with tax token handling, adapter filtering, and fee
121
121
  ### Robinhood Chain
122
122
 
123
123
  Robinhood uses the same quote endpoint; set `network=robinhood`. The dedicated
124
- module includes canonical chain metadata, deployed Switch contracts, vetted
125
- routing hubs, and a URL builder that always includes the correct network.
124
+ module includes canonical chain metadata, deployed Switch contracts, vetted
125
+ routing hubs, and a URL builder that always includes the correct network.
126
+ The production router exposes nineteen adapters across Uniswap, SwapHood,
127
+ Up33, Sheriff, Aeon, Catnip, PancakeSwap, RobinSwap, SushiSwap, GIGA, Flap,
128
+ Ramses, and Switch limit orders. `ROBINHOOD_ADAPTERS` contains a typed snapshot;
129
+ fetch `/swap/adapters?network=robinhood` when runtime freshness matters.
126
130
 
127
131
  For network configuration, deployed addresses, tax handling, execution, and
128
132
  the complete frontend token list, see [`ROBINHOOD.md`](ROBINHOOD.md).
@@ -139,7 +143,7 @@ const url = buildRobinhoodQuoteUrl({
139
143
  to: ROBINHOOD_TOKENS.USDG.address,
140
144
  amount: 1_000_000_000_000_000n,
141
145
  sender: walletAddress,
142
- slippage: 50,
146
+ slippage: 100, // 1%, matching the Robinhood frontend default
143
147
  });
144
148
 
145
149
  const response = await fetch(url, {
@@ -684,11 +688,11 @@ GET /swap/quote?network=pulsechain&from=0xA1077a294dDE1B09bB078844df40758a5D0f9a
684
688
  | `toToken` | `string` | Output token address |
685
689
  | `receiver` | `string?` | Recipient address for output tokens. Same as `sender` unless a custom `receiver` was specified. |
686
690
  | `totalAmountIn` | `string` | Total input amount in wei |
687
- | `totalAmountOut` | `string` | Raw DEX output in wei reflects price impact only (before taxes, fees, and slippage) |
691
+ | `totalAmountOut` | `string` | Quoted route output in wei before the Switch protocol fee and slippage. Protocol-native quoters such as Flap Portal may already include their token-tax effect. |
688
692
  | `expectedOutputAmount` | `string` | Expected output the user will actually receive, in wei. Accounts for sell tax, protocol fee, and buy tax — but NOT slippage. This is the most accurate value to display as the estimated received amount. When `feeOnOutput` is passed correctly, this is **exact** (matches on-chain execution). |
689
- | `minAmountOut` | `string` | Minimum acceptable output after token taxes, fee, and slippage. When tax tokens are involved: `totalAmountOut × (10000 sellTaxBps) / 10000 × (10000 feeBps) / 10000 × (10000 − buyTaxBps) / 10000 × (10000 − slippageBps) / 10000`. This is the value encoded in the `tx` calldata as `_minTotalAmountOut`. |
693
+ | `minAmountOut` | `string` | Minimum acceptable output after adapter-specific tax accounting, fee, and slippage. Use the API value directly; do not recompute it by multiplying the reported tax rates. This is encoded in `tx.data` as `_minTotalAmountOut`. |
690
694
  | `paths` | `SwapPath[]` | Human-readable path descriptions |
691
- | `routeAllocation` | `RouteAllocationPlan` | Structured route breakdown (matches on-chain structs) |
695
+ | `routeAllocation` | `RouteAllocationPlan` | Human-readable structured route breakdown for display and analytics. It is not a drop-in on-chain ABI value. |
692
696
  | `tx` | `SwapTransaction?` | Ready-to-send transaction (fee on input). Only present when `sender` is provided. |
693
697
  | `txFeeOnOutput` | `SwapTransaction?` | Ready-to-send transaction (fee on output). Only present when `sender` is provided. Choose between `tx` and `txFeeOnOutput` at send time. |
694
698
  | `fromTokenTax` | `TokenTaxResponse?` | Transfer tax info for the input token. See [Tax Tokens Deep Dive](#tax-tokens-deep-dive). |
@@ -769,9 +773,16 @@ Present on every quote response as `fromTokenTax` and `toTokenTax`. Reports whet
769
773
 
770
774
  | Field | Type | Description |
771
775
  |---|---|---|
772
- | `adapter` | `string` | Human-readable DEX adapter name (e.g. `"PulseXV2"`) |
773
- | `amountIn` | `string` | Input amount routed through this adapter |
774
- | `amountOut` | `string` | Expected output from this adapter |
776
+ | `adapter` | `string` | Human-readable DEX adapter name (e.g. `"PulseXV2"`) |
777
+ | `amountIn` | `string` | Input amount routed through this adapter |
778
+ | `amountOut` | `string` | Expected output from this adapter |
779
+ | `fee` | `number?` | V3 fee tier or concentrated-liquidity tick-spacing hint; zero when unused |
780
+
781
+ Use the API-provided `tx.data` for execution. If you intentionally construct
782
+ router or limit-order calldata yourself, each on-chain adapter leg is
783
+ `{ adapter, amountIn, fee, data }`; `data` is required and should be `0x` for
784
+ adapters that need no payload. The display-oriented `routeAllocation` does not
785
+ contain enough information to encode every route family.
775
786
 
776
787
  ---
777
788
 
@@ -917,11 +928,15 @@ await signer.sendTransaction(chosenTx);
917
928
 
918
929
  ## Limit Orders
919
930
 
920
- Switch Limit Orders let users place **gasless, signed orders** that are filled automatically when market conditions are met — no gas to create, no token deposits, EIP-712 signed.
921
-
922
- **→ Full integration guide: [`LIMIT-ORDERS.md`](LIMIT-ORDERS.md)**
923
-
924
- Covers: creating orders, approvals, `feeOnOutput` decision guide (tax tokens & operator flexibility), querying, cancellation, API reference, types, and EIP-712 details.
931
+ Switch Limit Orders let users place **gasless, signed orders** that are filled automatically when market conditions are met — no gas to create, no token deposits, EIP-712 signed.
932
+
933
+ **→ Full integration guide: [`LIMIT-ORDERS.md`](LIMIT-ORDERS.md)**
934
+
935
+ Covers both `pulsechain` and `robinhood`: creating orders, live deployment
936
+ discovery, approvals, `feeOnOutput` decision rules, native PLS/ETH flows,
937
+ querying, cancellation, API types, and EIP-712 details. Use
938
+ `fetchLimitOrderConfig({ network })` at startup and include `network` in every
939
+ orderbook request.
925
940
 
926
941
  ---
927
942
 
package/ROBINHOOD.md CHANGED
@@ -11,8 +11,8 @@ Production integration reference for Switch swaps on Robinhood Chain mainnet.
11
11
  | Explorer | `https://robinhoodchain.blockscout.com` |
12
12
  | Quote API | `https://quote.switch.win/swap/quote` |
13
13
  | Tax API | `https://quote.switch.win/swap/checkTax` |
14
- | Supported liquidity | Uniswap V2, V3, and hookless static-fee V4 |
15
- | Limit orders | Not currently available |
14
+ | Supported liquidity | 19 adapters: Uniswap V2/V3/V4, Switch limit orders, SwapHood, Up33, Sheriff, Aeon, Catnip, PancakeSwap, RobinSwap, SushiSwap, GIGA, Flap, and Ramses |
15
+ | Limit orders | Available: EIP-712 ERC-20 orders plus native ETH flow |
16
16
 
17
17
  ## Contents
18
18
 
@@ -111,6 +111,21 @@ await window.ethereum.request({
111
111
  | SwitchLimitOrder | `0x752c50DDd3B426cAE3D7A995F313Ac74ac6B0230` |
112
112
  | Native ETH flow | `0x029FfC6aF9112eA078f1D6f4a98826DDB2136cf6` |
113
113
  | Switch Limit Order adapter (index 3) | `0x412F625072c10e58C619D1e0b3C95cd3d5689871` |
114
+ | SwapHood V2 adapter (index 4) | `0x6D8746f02e52944c13824fA691c6f4186E463354` |
115
+ | SwapHood V3 adapter (index 5) | `0x9645dE0AcB48F0AAefdBEb423F0558457907DE98` |
116
+ | Up33 CL adapter (index 6) | `0x388179D2FB0ABcE9b03068916aF8a3c4dfD023c8` |
117
+ | Sheriff V2 adapter (index 7) | `0xBDB3EB0355981500f58C9bc77c3E61762844A146` |
118
+ | Sheriff Algebra adapter (index 8) | `0xaC4da986100724983042Ec28c28db243E2f828CB` |
119
+ | Aeon Algebra adapter (index 9) | `0x20615954FB87360139e7DdDB519359498EbD1904` |
120
+ | Catnip V2 adapter (index 10) | `0x5b2Ca358d56490Dc86224D502522314De7707237` |
121
+ | PancakeSwap V2 adapter (index 11) | `0x3B6e71A59553143937Fef74a7B50AFD24528786E` |
122
+ | RobinSwap V3 adapter (index 12) | `0x798f77D63b46b0E019de206E111e5ea5CC16BEc8` |
123
+ | SushiSwap V3 adapter (index 13) | `0xca3EA0Fd6E31f94c81B6586836790adE638313ED` |
124
+ | GIGA V2 adapter (index 14) | `0xa379c7D17F7fEe735773879D4069886B117AB54a` |
125
+ | GIGA V3 adapter (index 15) | `0xcAa612CDe3d3FbE97Be97eB5f79BC91597432d55` |
126
+ | Flap Portal adapter (index 16) | `0x6af2A4475C44d5833575150Bf7C3D3FE6Bf4F344` |
127
+ | Ramses V3 adapter (index 17) | `0xdBf182774C60932c6fe1Bf3FFaB8Ca28CCb0dC17` |
128
+ | Ramses V2 adapter (index 18) | `0x5fe3b873c222e76f7630b40052f07ee06196E6d3` |
114
129
 
115
130
  The V4 adapter was created in
116
131
  [deployment transaction `0x60d5...34a7`](https://robinhoodchain.blockscout.com/tx/0x60d56466a8162a643a15ecde98322ec05ea23d44d03fbd817df4ddbaef4834a7)
@@ -162,6 +177,26 @@ Submit signed orders to `POST /limit-orders?network=robinhood`. For
162
177
  `feeOnOutput=false`, approve `ROBINHOOD_SWITCH_CONTRACTS.limitOrder`; for
163
178
  `feeOnOutput=true`, approve `ROBINHOOD_SWITCH_CONTRACTS.router`.
164
179
 
180
+ Applications should fetch `/limit-orders/config?network=robinhood` at startup
181
+ instead of relying only on static addresses. The SDK exposes this as:
182
+
183
+ ```ts
184
+ const config = await fetchLimitOrderConfig({ network: "robinhood" });
185
+ const signing = getNetworkEIP712SigningParams(
186
+ "robinhood",
187
+ config.limitOrderContract,
188
+ );
189
+ const approvalTarget = getLimitOrderApprovalTarget(
190
+ "robinhood",
191
+ order.feeOnOutput,
192
+ { limitOrderContract: config.limitOrderContract },
193
+ );
194
+ ```
195
+
196
+ Include `limitOrderContract: config.limitOrderContract` with the submitted
197
+ signed order. Every returned order also carries its own deployment address;
198
+ operators must fill and makers must cancel against that per-order address.
199
+
165
200
  Native ETH input orders are created on-chain through
166
201
  `ROBINHOOD_SWITCH_CONTRACTS.nativeEthFlow` and are indexed from its events; do
167
202
  not POST them as signed EOA orders. Native ETH output is represented by WETH in
@@ -221,9 +256,11 @@ The canonical Robinhood V4 infrastructure is available through
221
256
  | Universal Router | `0x8876789976decbfcbbbe364623c63652db8c0904` |
222
257
  | Permit2 | `0x000000000022D473030F116dDEE9F6B43aC78BA3` |
223
258
 
224
- Tax-token safety is unchanged: if either side is detected as a transfer-tax
225
- token, the complete route is restricted to Uniswap V2 adapter index `0`.
226
- Uniswap V3 and V4 are both excluded from that quote.
259
+ If either side is detected as a transfer-tax token, the complete route is
260
+ restricted to tax-safe adapters `0`, `4`, `7`, `10`, `11`, `14`, `16`, and
261
+ `18`. Indices `14` and `18` use direct-pair V2 execution. Flap at index `16`
262
+ must execute through its Portal, whose quote already includes Flap token taxes
263
+ in both directions; clients must not apply those taxes a second time.
227
264
 
228
265
  ## Swap integration flow
229
266
 
@@ -239,8 +276,11 @@ Use the same sequence as a PulseChain integration:
239
276
  6. Show `expectedOutputAmount`, `minAmountOut`, route allocation, and detected
240
277
  taxes to the user.
241
278
 
242
- Any swap involving a tax token is routed entirely through Uniswap V2. This
243
- also applies when both input and output are tax tokens.
279
+ Any swap involving a tax token is routed entirely through the tax-safe adapter
280
+ set (`0`, `4`, `7`, `10`, `11`, `14`, `16`, and `18`). This also applies when
281
+ both input and output are tax tokens. Direct-pair adapters receive the
282
+ post-transfer amount; Flap is quoted separately with its full adapter input
283
+ because Portal quoting already models the taxable transfer.
244
284
 
245
285
  ## Quickstart
246
286
 
@@ -257,7 +297,7 @@ const url = buildRobinhoodQuoteUrl({
257
297
  to: ROBINHOOD_TOKENS.USDG.address,
258
298
  amount: 1_000_000_000_000_000n,
259
299
  sender: walletAddress,
260
- slippage: 50, // 0.50%, expressed in basis points
300
+ slippage: 100, // 1.00%, the Robinhood frontend default
261
301
  feeOnOutput,
262
302
  });
263
303
 
@@ -281,7 +321,7 @@ Equivalent curl request:
281
321
 
282
322
  ```bash
283
323
  curl -H "x-api-key: YOUR_KEY" \
284
- "https://quote.switch.win/swap/quote?network=robinhood&from=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&to=0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168&amount=1000000000000000&sender=0xYOUR_WALLET&slippage=50"
324
+ "https://quote.switch.win/swap/quote?network=robinhood&from=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&to=0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168&amount=1000000000000000&sender=0xYOUR_WALLET&slippage=100"
285
325
  ```
286
326
 
287
327
  Omit `sender` for a display-only quote. Fetch again with the sender immediately
@@ -374,7 +414,7 @@ const quoteUrl = buildRobinhoodQuoteUrl({
374
414
  to: tokenOut,
375
415
  amount: amountIn,
376
416
  sender: walletAddress,
377
- slippage: 50,
417
+ slippage: 100,
378
418
  feeOnOutput,
379
419
  });
380
420
 
@@ -441,17 +481,34 @@ Robinhood currently returns:
441
481
 
442
482
  | Index | Adapter |
443
483
  |---:|---|
444
- | `0` | Uniswap V2 |
445
- | `1` | Uniswap V3 |
446
- | `2` | Uniswap V4 |
484
+ | `0` | Uniswap V2 |
485
+ | `1` | Uniswap V3 |
486
+ | `2` | Uniswap V4 |
487
+ | `3` | Switch Limit Orders |
488
+ | `4` | SwapHood V2 |
489
+ | `5` | SwapHood V3 |
490
+ | `6` | Up33 CL |
491
+ | `7` | Sheriff V2 |
492
+ | `8` | Sheriff Algebra |
493
+ | `9` | Aeon Algebra |
494
+ | `10` | Catnip V2 |
495
+ | `11` | PancakeSwap V2 |
496
+ | `12` | RobinSwap V3 |
497
+ | `13` | SushiSwap V3 |
498
+ | `14` | GIGA V2 |
499
+ | `15` | GIGA V3 |
500
+ | `16` | Flap |
501
+ | `17` | Ramses V3 |
502
+ | `18` | Ramses V2 |
447
503
 
448
504
  Treat the endpoint response, not this document, as the source of truth for
449
505
  which adapters are currently selectable.
450
506
 
451
- Do not permanently hard-code the available adapter list in an integration.
452
- Fetch it when presenting routing-source controls. If a quote involves a tax
453
- token, the backend overrides routing to tax-safe adapter `0`; an explicit
454
- filter that excludes adapter `0` is rejected.
507
+ Do not permanently hard-code the available adapter list in an integration.
508
+ Fetch it when presenting routing-source controls. If a quote involves a tax
509
+ token, the backend restricts routing to tax-safe adapters `0`, `4`, `7`, `10`,
510
+ `11`, `14`, `16`, and `18`; an explicit filter that excludes all of them is
511
+ rejected.
455
512
 
456
513
  ### Check token tax
457
514
 
@@ -487,7 +544,7 @@ GET https://quote.switch.win/swap/quote
487
544
  | `amount` | Yes | Raw input amount. |
488
545
  | `sender` | No | Required when transaction calldata is needed. |
489
546
  | `receiver` | No | Output recipient; defaults to `sender`. |
490
- | `slippage` | No | Basis points; default `50` (`0.5%`). |
547
+ | `slippage` | No | Basis points; API fallback `50` (`0.5%`). The Switch Robinhood frontend explicitly requests `100` (`1%`). |
491
548
  | `fee` | No | Partner/protocol fee in basis points. |
492
549
  | `partnerAddress` | No | Fee-sharing recipient. |
493
550
  | `feeOnOutput` | No | `true` takes the fee from output; `false` takes it from input. |
@@ -505,11 +562,11 @@ Important response fields:
505
562
  |---|---|
506
563
  | `fromToken`, `toToken` | Normalized pair addresses. |
507
564
  | `totalAmountIn` | Gross input amount. |
508
- | `totalAmountOut` | Raw pool output before taxes and Switch fees. |
565
+ | `totalAmountOut` | Quoted route output before the Switch fee and slippage. Adapter-native quotes such as Flap Portal may already include token tax. |
509
566
  | `expectedOutputAmount` | Expected user receipt after tax and fee, before slippage. |
510
- | `minAmountOut` | Minimum output encoded into calldata. |
567
+ | `minAmountOut` | Minimum output after adapter-specific tax accounting, fee, and slippage; use it directly. |
511
568
  | `paths` | Human-readable route descriptions. |
512
- | `routeAllocation` | Structured split, hop, adapter, and pool-specific route allocation. V4 PoolKey data is encoded in the executable transaction and must not be reconstructed client-side. |
569
+ | `routeAllocation` | Human-readable split, hop, and adapter allocation. Adapter payloads such as V4 PoolKey data are encoded in the executable transaction and must not be reconstructed from this display object. |
513
570
  | `fromTokenTax`, `toTokenTax` | Detected tax metadata. |
514
571
  | `effectiveSlippageBps` | Slippage plus applicable tax buffers. |
515
572
  | `tx` | Fee-on-input transaction; present when `sender` is supplied. |
@@ -529,7 +586,7 @@ Common Robinhood errors include:
529
586
  - Missing or unsupported `network`.
530
587
  - Invalid token, sender, receiver, or partner address.
531
588
  - Invalid raw amount, slippage, fee, gas price, or adapter filter.
532
- - A tax-token quote explicitly excluded the Uniswap V2 adapter.
589
+ - A tax-token quote explicitly excluded every tax-safe direct-pair V2 adapter.
533
590
  - No viable route across the currently active adapters, or insufficient liquidity.
534
591
  - RPC timeout or public-RPC rate limiting.
535
592
  - Missing executable transaction because `sender` was omitted.
@@ -576,7 +633,13 @@ into the UI separately from this list.
576
633
  | TENDIES | TENDIES | `0x45242320DBB855EeA8Fd36804C6487E10E97FCF9` | 18 |
577
634
  | GME | GameStop | `0x7e86381A763F0Ecca2bDF27C54eAC403ddD48123` | 18 |
578
635
  | 4663 | 4663 | `0xd4052415613B34Af236024B895574c467f65b6dD` | 18 |
579
- | MARIAN | Lady Marian | `0x01637b14B7378B99dE75A64d50656d98488D9a4d` | 18 |
636
+ | MARIAN | Lady Marian | `0x01637b14B7378B99dE75A64d50656d98488D9a4d` | 18 |
637
+ | Index | The Index | `0x56910D4409F3a0C78C64DD8D0545FF0705389870` | 18 |
638
+ | VEX | ProjectVex | `0x8Ff92566f2e81BDd68EDfAa8cde73942A723796b` | 18 |
639
+ | HOODIE | HOODIE | `0xC72c01AAB5f5678dc1d6f5C6d2B417d91D402Ba3` | 18 |
640
+ | WISHBONE | WISHBONE | `0x77581054581B9c525E7dd7a0155DE43867532d03` | 18 |
641
+ | VLAD | The Green Bull | `0x31BE8f7485e36928C9De86566c62da82d4B6BF81` | 18 |
642
+ | AEON | Aeon | `0xd4c93eD1843606f92CccA078941f3d52A585982f` | 18 |
580
643
 
581
644
  The ordered list is exported as `ROBINHOOD_FRONTEND_TOKEN_LIST`.
582
645
 
@@ -586,22 +649,45 @@ Always identify tokens by address and obtain a fresh quote and tax check.
586
649
 
587
650
  ### Routing configuration
588
651
 
589
- Switch currently evaluates:
590
-
591
- - Uniswap V2 adapter index `0`.
592
- - Uniswap V3 adapter index `1`.
593
- - V3 fee tiers `100`, `500`, `3000`, and `10000`.
594
- - Trusted routing hubs WETH, USDG, VIRTUAL, and CASHCAT.
595
-
596
- The prepared V4 integration reserves adapter index `2`. Once activated, it
597
- discovers hookless static-fee V4 pools by complete `PoolKey` rather than
598
- applying the V3 fee-tier list. Native-ETH V4 currencies are normalized through the WETH/native
599
- alias described above. Until `/swap/adapters` returns index `2`, V4 is not part
600
- of live production quotes.
601
-
602
- If either side is detected as a transfer-tax token, the backend restricts the
603
- entire route (including every split and intermediate hop) to Uniswap V2. V3 is
604
- not considered for that quote, and V4 will remain excluded after activation.
652
+ The production router currently exposes nineteen ordered adapters:
653
+
654
+ | Index | Venue | Routing family |
655
+ |---:|---|---|
656
+ | `0` | Uniswap V2 | Direct-pair V2 |
657
+ | `1` | Uniswap V3 | V3 tiers `100`, `500`, `3000`, `10000` |
658
+ | `2` | Uniswap V4 | Complete hookless static-fee `PoolKey` |
659
+ | `3` | Switch limit orders | Signed/on-chain order liquidity |
660
+ | `4` | SwapHood V2 | Pair-owned variable-fee V2 |
661
+ | `5` | SwapHood V3 | Pancake V3 tiers `100`, `500`, `2500`, `10000` |
662
+ | `6` | Up33 | Slipstream CL tick spacings `1`, `10`, `50`, `60`, `100`, `200`, `2000` |
663
+ | `7` | Sheriff V2 | Pair-owned variable-fee V2 |
664
+ | `8` | Sheriff | Algebra Integral |
665
+ | `9` | Aeon | Algebra Integral with plugin-aware fees |
666
+ | `10` | Catnip | Direct-pair V2, fixed 30 bps |
667
+ | `11` | PancakeSwap | Direct-pair V2, fixed 25 bps |
668
+ | `12` | RobinSwap | V3 tiers `100`, `500`, `2500`, `3000`, `10000` |
669
+ | `13` | SushiSwap | V3 tiers `500`, `3000`, `10000` |
670
+ | `14` | GIGA V2 | Direct-pair V2 using the pair's live quote and pair-owned fee |
671
+ | `15` | GIGA V3 | V3 tiers `100`, `500`, `1000`, `2000`, `3000`, `10000` |
672
+ | `16` | Flap | Portal-executed bonding curve; Portal quote includes token tax |
673
+ | `17` | Ramses V3 | Tick spacings `1`, `5`, `10`, `50`, `100`, `200`, stored in the route `fee` field |
674
+ | `18` | Ramses V2 | Direct-pair, pair-owned variable-fee V2 |
675
+
676
+ V4 pools are discovered by complete `PoolKey`, not by applying a V3 fee-tier
677
+ list. Native-ETH V4 currencies are normalized through the WETH/native alias
678
+ described above. V3-style and Up33 route legs preserve the exact fee tier or
679
+ tick spacing that won the quote for every direct and multi-hop allocation.
680
+
681
+ Trusted routing hubs are WETH, USDG, VIRTUAL, CASHCAT, HOODRAT, TENDIES,
682
+ JUGGERNAUT, MARIAN, and WALLET. The expanded set was selected from the
683
+ 2026-07-16 pair-connectivity audit and zero-tax checks. VEX is excluded because
684
+ it is taxed; INDEX remains an endpoint token but is excluded because its
685
+ dominant liquidity depends on V4 hooks that are not yet supported. If either side is
686
+ detected as a transfer-tax token, the backend restricts the entire route to
687
+ tax-safe adapters `0`, `4`, `7`, `10`, `11`, `14`, `16`, and `18`;
688
+ concentrated-liquidity and limit-order adapters are excluded. Flap is the one
689
+ non-direct-pair member: only its Portal can execute the curve swap, and the
690
+ Portal quote already includes the Flap token tax.
605
691
 
606
692
  The API may split a quote across routes and adapters. Integrators should render
607
693
  the returned `paths` or `routeAllocation` instead of assuming a single path.
@@ -616,17 +702,16 @@ For server integrations, contact Switch to coordinate the expected request
616
702
  rate and IP allowlisting. Do not distribute one production key across
617
703
  untrusted clients.
618
704
 
619
- ## Current limitations
620
-
621
- - Robinhood limit orders are not deployed.
622
- - Rialto DEX is not integrated.
623
- - The production router supports Uniswap V2, V3, and supported hookless
624
- static-fee V4 liquidity. V4 participates in quotes whenever adapter index
625
- `2` is advertised by `/swap/adapters`.
626
- - The first V4 phase intentionally excludes hooked and dynamic-fee pools.
627
- - A V4 allocation currently selects its best single PoolKey; intra-V4
628
- multi-pool splitting is not yet enabled. V4 can still split against V2/V3.
629
- - Contract and token addresses must be treated as chain-specific.
705
+ ## Current limitations
706
+
707
+ - Rialto liquidity is not integrated.
708
+ - Robinhood market routing is limited to the nineteen production adapters
709
+ listed above. Always use `/swap/adapters` as the runtime source of truth.
710
+ - The first V4 phase intentionally excludes hooked and dynamic-fee pools.
711
+ - A V4 allocation currently selects its best single PoolKey; intra-V4
712
+ multi-pool splitting is not yet enabled. V4 can still split against other
713
+ eligible adapters.
714
+ - Contract and token addresses must be treated as chain-specific.
630
715
 
631
716
  See the main [SDK reference](README.md) for authentication, partner fees,
632
717
  response types, error handling, and the complete swap API schema.
@@ -1 +1 @@
1
- [{"type":"constructor","inputs":[{"name":"_switchRouter","type":"address","internalType":"address"},{"name":"_wnative","type":"address","internalType":"address"},{"name":"_fee","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"FEE_DENOMINATOR","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"LIMIT_ORDER_TYPEHASH","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAINTAINER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"OPERATOR_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"PARTNER_FEE_SHARE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"SWITCH_ROUTER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"WNATIVE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"addMaintainer","inputs":[{"name":"addedMaintainer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addOperator","inputs":[{"name":"_operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"adminInvalidateNonce","inputs":[{"name":"_maker","type":"address","internalType":"address"},{"name":"_nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"adminInvalidateNonces","inputs":[{"name":"_maker","type":"address","internalType":"address"},{"name":"_nonces","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"canFillOrder","inputs":[{"name":"order","type":"tuple","internalType":"struct SwitchLimitOrder.LimitOrder","components":[{"name":"maker","type":"address","internalType":"address"},{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"minAmountOut","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"feeOnOutput","type":"bool","internalType":"bool"},{"name":"recipient","type":"address","internalType":"address"},{"name":"unwrapOutput","type":"bool","internalType":"bool"},{"name":"partnerAddress","type":"address","internalType":"address"}]},{"name":"signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"directFillOrder","inputs":[{"name":"order","type":"tuple","internalType":"struct SwitchLimitOrder.LimitOrder","components":[{"name":"maker","type":"address","internalType":"address"},{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"minAmountOut","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"feeOnOutput","type":"bool","internalType":"bool"},{"name":"recipient","type":"address","internalType":"address"},{"name":"unwrapOutput","type":"bool","internalType":"bool"},{"name":"partnerAddress","type":"address","internalType":"address"}]},{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"outputAmount","type":"uint256","internalType":"uint256"},{"name":"directToMaker","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"domainSeparator","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"fillOrder","inputs":[{"name":"order","type":"tuple","internalType":"struct SwitchLimitOrder.LimitOrder","components":[{"name":"maker","type":"address","internalType":"address"},{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"minAmountOut","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"feeOnOutput","type":"bool","internalType":"bool"},{"name":"recipient","type":"address","internalType":"address"},{"name":"unwrapOutput","type":"bool","internalType":"bool"},{"name":"partnerAddress","type":"address","internalType":"address"}]},{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"routes","type":"tuple[]","internalType":"struct RouteAllocation[]","components":[{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"hops","type":"tuple[]","internalType":"struct HopAllocation[]","components":[{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"legs","type":"tuple[]","internalType":"struct HopAdapterAllocation[]","components":[{"name":"adapter","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"fee","type":"uint24","internalType":"uint24"}]}]}]},{"name":"excessOnInput","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"invalidateNonce","inputs":[{"name":"_nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"invalidateNonces","inputs":[{"name":"_nonces","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isNonceUsed","inputs":[{"name":"maker","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"noncesUsed","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"operatorGateEnabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"placeOrder","inputs":[{"name":"order","type":"tuple","internalType":"struct SwitchLimitOrder.LimitOrder","components":[{"name":"maker","type":"address","internalType":"address"},{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"minAmountOut","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"feeOnOutput","type":"bool","internalType":"bool"},{"name":"recipient","type":"address","internalType":"address"},{"name":"unwrapOutput","type":"bool","internalType":"bool"},{"name":"partnerAddress","type":"address","internalType":"address"}]},{"name":"signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"plsFlowContract","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"recoverNative","inputs":[{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"recoverTokens","inputs":[{"name":"_token","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeMaintainer","inputs":[{"name":"removedMaintainer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeOperator","inputs":[{"name":"_operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFee","inputs":[{"name":"_fee","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOperatorGate","inputs":[{"name":"_enabled","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPLSFlowContract","inputs":[{"name":"_plsFlow","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"FeeUpdated","inputs":[{"name":"newFee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NonceCancelled","inputs":[{"name":"maker","type":"address","indexed":true,"internalType":"address"},{"name":"nonce","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OperatorGateToggled","inputs":[{"name":"enabled","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"OrderFilled","inputs":[{"name":"maker","type":"address","indexed":true,"internalType":"address"},{"name":"filler","type":"address","indexed":true,"internalType":"address"},{"name":"nonce","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"tokenIn","type":"address","indexed":false,"internalType":"address"},{"name":"tokenOut","type":"address","indexed":false,"internalType":"address"},{"name":"amountIn","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"makerAmountOut","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"fillerProfit","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"excessOnInput","type":"bool","indexed":false,"internalType":"bool"},{"name":"partnerAddress","type":"address","indexed":false,"internalType":"address"},{"name":"directFill","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"OrderPlaced","inputs":[{"name":"maker","type":"address","indexed":true,"internalType":"address"},{"name":"nonce","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"tokenIn","type":"address","indexed":false,"internalType":"address"},{"name":"tokenOut","type":"address","indexed":false,"internalType":"address"},{"name":"amountIn","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"minAmountOut","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"deadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"feeOnOutput","type":"bool","indexed":false,"internalType":"bool"},{"name":"recipient","type":"address","indexed":false,"internalType":"address"},{"name":"unwrapOutput","type":"bool","indexed":false,"internalType":"bool"},{"name":"partnerAddress","type":"address","indexed":false,"internalType":"address"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"PLSFlowContractUpdated","inputs":[{"name":"newPLSFlowContract","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"ExcessiveFee","inputs":[]},{"type":"error","name":"InsufficientOutput","inputs":[]},{"type":"error","name":"InvalidAmount","inputs":[]},{"type":"error","name":"InvalidShortString","inputs":[]},{"type":"error","name":"InvalidSignature","inputs":[]},{"type":"error","name":"InvalidTokens","inputs":[]},{"type":"error","name":"NonceAlreadyUsed","inputs":[]},{"type":"error","name":"OperatorOnly","inputs":[]},{"type":"error","name":"OrderExpired","inputs":[]},{"type":"error","name":"RouteInputExceedsMax","inputs":[]},{"type":"error","name":"StringTooLong","inputs":[{"name":"str","type":"string","internalType":"string"}]},{"type":"error","name":"TransferFailed","inputs":[]}]
1
+ [{"type":"constructor","inputs":[{"name":"_switchRouter","type":"address","internalType":"address"},{"name":"_wnative","type":"address","internalType":"address"},{"name":"_fee","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"FEE_DENOMINATOR","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"LIMIT_ORDER_TYPEHASH","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAINTAINER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"OPERATOR_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"PARTNER_FEE_SHARE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"SWITCH_ROUTER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"WNATIVE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"addMaintainer","inputs":[{"name":"addedMaintainer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addOperator","inputs":[{"name":"_operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"adminInvalidateNonce","inputs":[{"name":"_maker","type":"address","internalType":"address"},{"name":"_nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"adminInvalidateNonces","inputs":[{"name":"_maker","type":"address","internalType":"address"},{"name":"_nonces","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"canFillOrder","inputs":[{"name":"order","type":"tuple","internalType":"struct SwitchLimitOrder.LimitOrder","components":[{"name":"maker","type":"address","internalType":"address"},{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"minAmountOut","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"feeOnOutput","type":"bool","internalType":"bool"},{"name":"recipient","type":"address","internalType":"address"},{"name":"unwrapOutput","type":"bool","internalType":"bool"},{"name":"partnerAddress","type":"address","internalType":"address"}]},{"name":"signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"directFillOrder","inputs":[{"name":"order","type":"tuple","internalType":"struct SwitchLimitOrder.LimitOrder","components":[{"name":"maker","type":"address","internalType":"address"},{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"minAmountOut","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"feeOnOutput","type":"bool","internalType":"bool"},{"name":"recipient","type":"address","internalType":"address"},{"name":"unwrapOutput","type":"bool","internalType":"bool"},{"name":"partnerAddress","type":"address","internalType":"address"}]},{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"outputAmount","type":"uint256","internalType":"uint256"},{"name":"directToMaker","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"domainSeparator","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"fillOrder","inputs":[{"name":"order","type":"tuple","internalType":"struct SwitchLimitOrder.LimitOrder","components":[{"name":"maker","type":"address","internalType":"address"},{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"minAmountOut","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"feeOnOutput","type":"bool","internalType":"bool"},{"name":"recipient","type":"address","internalType":"address"},{"name":"unwrapOutput","type":"bool","internalType":"bool"},{"name":"partnerAddress","type":"address","internalType":"address"}]},{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"routes","type":"tuple[]","internalType":"struct RouteAllocation[]","components":[{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"hops","type":"tuple[]","internalType":"struct HopAllocation[]","components":[{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"legs","type":"tuple[]","internalType":"struct HopAdapterAllocation[]","components":[{"name":"adapter","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"data","type":"bytes","internalType":"bytes"}]}]}]},{"name":"excessOnInput","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"invalidateNonce","inputs":[{"name":"_nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"invalidateNonces","inputs":[{"name":"_nonces","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isNonceUsed","inputs":[{"name":"maker","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"noncesUsed","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"operatorGateEnabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"placeOrder","inputs":[{"name":"order","type":"tuple","internalType":"struct SwitchLimitOrder.LimitOrder","components":[{"name":"maker","type":"address","internalType":"address"},{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"minAmountOut","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"feeOnOutput","type":"bool","internalType":"bool"},{"name":"recipient","type":"address","internalType":"address"},{"name":"unwrapOutput","type":"bool","internalType":"bool"},{"name":"partnerAddress","type":"address","internalType":"address"}]},{"name":"signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"plsFlowContract","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"recoverNative","inputs":[{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"recoverTokens","inputs":[{"name":"_token","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeMaintainer","inputs":[{"name":"removedMaintainer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeOperator","inputs":[{"name":"_operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFee","inputs":[{"name":"_fee","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOperatorGate","inputs":[{"name":"_enabled","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPLSFlowContract","inputs":[{"name":"_plsFlow","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"FeeUpdated","inputs":[{"name":"newFee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NonceCancelled","inputs":[{"name":"maker","type":"address","indexed":true,"internalType":"address"},{"name":"nonce","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OperatorGateToggled","inputs":[{"name":"enabled","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"OrderFilled","inputs":[{"name":"maker","type":"address","indexed":true,"internalType":"address"},{"name":"filler","type":"address","indexed":true,"internalType":"address"},{"name":"nonce","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"tokenIn","type":"address","indexed":false,"internalType":"address"},{"name":"tokenOut","type":"address","indexed":false,"internalType":"address"},{"name":"amountIn","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"makerAmountOut","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"fillerProfit","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"excessOnInput","type":"bool","indexed":false,"internalType":"bool"},{"name":"partnerAddress","type":"address","indexed":false,"internalType":"address"},{"name":"directFill","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"OrderPlaced","inputs":[{"name":"maker","type":"address","indexed":true,"internalType":"address"},{"name":"nonce","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"tokenIn","type":"address","indexed":false,"internalType":"address"},{"name":"tokenOut","type":"address","indexed":false,"internalType":"address"},{"name":"amountIn","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"minAmountOut","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"deadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"feeOnOutput","type":"bool","indexed":false,"internalType":"bool"},{"name":"recipient","type":"address","indexed":false,"internalType":"address"},{"name":"unwrapOutput","type":"bool","indexed":false,"internalType":"bool"},{"name":"partnerAddress","type":"address","indexed":false,"internalType":"address"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"PLSFlowContractUpdated","inputs":[{"name":"newPLSFlowContract","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"ExcessiveFee","inputs":[]},{"type":"error","name":"InsufficientOutput","inputs":[]},{"type":"error","name":"InvalidAmount","inputs":[]},{"type":"error","name":"InvalidShortString","inputs":[]},{"type":"error","name":"InvalidSignature","inputs":[]},{"type":"error","name":"InvalidTokens","inputs":[]},{"type":"error","name":"NonceAlreadyUsed","inputs":[]},{"type":"error","name":"OperatorOnly","inputs":[]},{"type":"error","name":"OrderExpired","inputs":[]},{"type":"error","name":"RouteInputExceedsMax","inputs":[]},{"type":"error","name":"StringTooLong","inputs":[{"name":"str","type":"string","internalType":"string"}]},{"type":"error","name":"TransferFailed","inputs":[]}]
@@ -1 +1 @@
1
- [{"type":"constructor","inputs":[{"name":"_adapters","type":"address[]","internalType":"address[]"},{"name":"_feeClaimer","type":"address","internalType":"address"},{"name":"_wrapped_native","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"ADAPTERS","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"APPROVED_ADAPTERS","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"FEE_CLAIMER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"FEE_DENOMINATOR","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"FEE_EXEMPT","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIMIT_ORDER_CONTRACT","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"MAINTAINER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"MIN_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"MIN_FEE_EXEMPT","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"NATIVE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"PARTNER_FEE_SHARE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"WNATIVE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"adaptersCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addMaintainer","inputs":[{"name":"addedMaintainer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"goSwitch","inputs":[{"name":"_routes","type":"tuple[]","internalType":"struct RouteAllocation[]","components":[{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"hops","type":"tuple[]","internalType":"struct HopAllocation[]","components":[{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"legs","type":"tuple[]","internalType":"struct HopAdapterAllocation[]","components":[{"name":"adapter","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"fee","type":"uint24","internalType":"uint24"}]}]}]},{"name":"_to","type":"address","internalType":"address"},{"name":"_minTotalAmountOut","type":"uint256","internalType":"uint256"},{"name":"_fee","type":"uint256","internalType":"uint256"},{"name":"_feeOnOutput","type":"bool","internalType":"bool"},{"name":"_unwrapOutput","type":"bool","internalType":"bool"},{"name":"_partnerAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"goSwitchFrom","inputs":[{"name":"_payer","type":"address","internalType":"address"},{"name":"_routes","type":"tuple[]","internalType":"struct RouteAllocation[]","components":[{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"hops","type":"tuple[]","internalType":"struct HopAllocation[]","components":[{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"legs","type":"tuple[]","internalType":"struct HopAdapterAllocation[]","components":[{"name":"adapter","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"fee","type":"uint24","internalType":"uint24"}]}]}]},{"name":"_to","type":"address","internalType":"address"},{"name":"_minTotalAmountOut","type":"uint256","internalType":"uint256"},{"name":"_unwrapOutput","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"pullTokens","inputs":[{"name":"_token","type":"address","internalType":"address"},{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"recoverERC20","inputs":[{"name":"_tokenAddress","type":"address","internalType":"address"},{"name":"_tokenAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"recoverNative","inputs":[{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeMaintainer","inputs":[{"name":"removedMaintainer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAdapters","inputs":[{"name":"_adapters","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFeeClaimer","inputs":[{"name":"_claimer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFeeExempt","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"exempt","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setLimitOrderContract","inputs":[{"name":"_limitOrder","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMinFee","inputs":[{"name":"_fee","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMinFeeExempt","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"exempt","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Switched","inputs":[{"name":"_tokenIn","type":"address","indexed":true,"internalType":"address"},{"name":"_tokenOut","type":"address","indexed":true,"internalType":"address"},{"name":"_amountIn","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_amountOut","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_partnerAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AdapterNotApproved","inputs":[{"name":"adapter","type":"address","internalType":"address"}]},{"type":"error","name":"EmptyHop","inputs":[]},{"type":"error","name":"EmptySplit","inputs":[]},{"type":"error","name":"ExcessiveFee","inputs":[]},{"type":"error","name":"FeeNotSupported","inputs":[]},{"type":"error","name":"FinalAmountOutTooLow","inputs":[]},{"type":"error","name":"InsufficientFee","inputs":[]},{"type":"error","name":"MsgValueMismatch","inputs":[]},{"type":"error","name":"PathNeedsBeginWithWPLS","inputs":[]},{"type":"error","name":"PathNeedsEndWithWPLS","inputs":[]},{"type":"error","name":"SplitMixedTokenIn","inputs":[]},{"type":"error","name":"SplitMixedTokenOut","inputs":[]},{"type":"error","name":"ZeroInput","inputs":[]}]
1
+ [{"type":"constructor","inputs":[{"name":"_adapters","type":"address[]","internalType":"address[]"},{"name":"_feeClaimer","type":"address","internalType":"address"},{"name":"_wrapped_native","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"ADAPTERS","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"APPROVED_ADAPTERS","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"FEE_CLAIMER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"FEE_DENOMINATOR","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"FEE_EXEMPT","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIMIT_ORDER_CONTRACT","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"MAINTAINER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"MIN_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"MIN_FEE_EXEMPT","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"NATIVE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"PARTNER_FEE_SHARE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"WNATIVE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"adaptersCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addMaintainer","inputs":[{"name":"addedMaintainer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"goSwitch","inputs":[{"name":"_routes","type":"tuple[]","internalType":"struct RouteAllocation[]","components":[{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"hops","type":"tuple[]","internalType":"struct HopAllocation[]","components":[{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"legs","type":"tuple[]","internalType":"struct HopAdapterAllocation[]","components":[{"name":"adapter","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"data","type":"bytes","internalType":"bytes"}]}]}]},{"name":"_to","type":"address","internalType":"address"},{"name":"_minTotalAmountOut","type":"uint256","internalType":"uint256"},{"name":"_fee","type":"uint256","internalType":"uint256"},{"name":"_feeOnOutput","type":"bool","internalType":"bool"},{"name":"_unwrapOutput","type":"bool","internalType":"bool"},{"name":"_partnerAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"goSwitchFrom","inputs":[{"name":"_payer","type":"address","internalType":"address"},{"name":"_routes","type":"tuple[]","internalType":"struct RouteAllocation[]","components":[{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"hops","type":"tuple[]","internalType":"struct HopAllocation[]","components":[{"name":"tokenIn","type":"address","internalType":"address"},{"name":"tokenOut","type":"address","internalType":"address"},{"name":"legs","type":"tuple[]","internalType":"struct HopAdapterAllocation[]","components":[{"name":"adapter","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"fee","type":"uint24","internalType":"uint24"}]}]}]},{"name":"_to","type":"address","internalType":"address"},{"name":"_minTotalAmountOut","type":"uint256","internalType":"uint256"},{"name":"_unwrapOutput","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"pullTokens","inputs":[{"name":"_token","type":"address","internalType":"address"},{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"recoverERC20","inputs":[{"name":"_tokenAddress","type":"address","internalType":"address"},{"name":"_tokenAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"recoverNative","inputs":[{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeMaintainer","inputs":[{"name":"removedMaintainer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAdapters","inputs":[{"name":"_adapters","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFeeClaimer","inputs":[{"name":"_claimer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFeeExempt","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"exempt","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setLimitOrderContract","inputs":[{"name":"_limitOrder","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMinFee","inputs":[{"name":"_fee","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMinFeeExempt","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"exempt","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Switched","inputs":[{"name":"_tokenIn","type":"address","indexed":true,"internalType":"address"},{"name":"_tokenOut","type":"address","indexed":true,"internalType":"address"},{"name":"_amountIn","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_amountOut","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_partnerAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AdapterNotApproved","inputs":[{"name":"adapter","type":"address","internalType":"address"}]},{"type":"error","name":"EmptyHop","inputs":[]},{"type":"error","name":"EmptySplit","inputs":[]},{"type":"error","name":"ExcessiveFee","inputs":[]},{"type":"error","name":"FeeNotSupported","inputs":[]},{"type":"error","name":"FinalAmountOutTooLow","inputs":[]},{"type":"error","name":"InsufficientFee","inputs":[]},{"type":"error","name":"MsgValueMismatch","inputs":[]},{"type":"error","name":"PathNeedsBeginWithWPLS","inputs":[]},{"type":"error","name":"PathNeedsEndWithWPLS","inputs":[]},{"type":"error","name":"SplitMixedTokenIn","inputs":[]},{"type":"error","name":"SplitMixedTokenOut","inputs":[]},{"type":"error","name":"ZeroInput","inputs":[]}]