@switch-win/sdk 1.2.3 → 1.2.5
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/LIMIT-ORDERS.md +1 -1
- package/README.md +56 -34
- package/ROBINHOOD.md +38 -17
- package/abi/SwitchLimitOrderABI.json +1 -1
- package/abi/SwitchRouterABI.json +1 -1
- package/package.json +1 -1
- package/src/constants.ts +19 -5
- package/src/index.ts +15 -7
- package/src/networks/index.ts +7 -3
- package/src/networks/robinhood.ts +161 -6
- package/src/types.ts +20 -18
package/LIMIT-ORDERS.md
CHANGED
|
@@ -390,7 +390,7 @@ When `feeOnOutput=true`, the Router pulls tokens directly from the maker. If an
|
|
|
390
390
|
| **Neither token is taxed** | `false` (default) | Maximum operator flexibility → best chance of fill |
|
|
391
391
|
| **Input token is taxed** | `true` | Router sends tokens directly from maker → pool in one transfer (one tax). Default mode would do maker → LO → pool (two transfers, two taxes). |
|
|
392
392
|
| **Output token is taxed** | `false` (default) | Output goes directly to recipient in one transfer. |
|
|
393
|
-
| **Both tokens taxed** | `false` | Supported through tax-safe
|
|
393
|
+
| **Both tokens taxed** | `false` | Supported through tax-safe routes; fee on input avoids another output-token transfer. |
|
|
394
394
|
|
|
395
395
|
> **Recommendation:** Use `feeOnOutput: false` (the default) unless the input token has a transfer tax. This gives operators the most flexibility and the best chance of filling your order.
|
|
396
396
|
|
package/README.md
CHANGED
|
@@ -123,9 +123,10 @@ For a production integration with tax token handling, adapter filtering, and fee
|
|
|
123
123
|
Robinhood uses the same quote endpoint; set `network=robinhood`. The dedicated
|
|
124
124
|
module includes canonical chain metadata, deployed Switch contracts, vetted
|
|
125
125
|
routing hubs, and a URL builder that always includes the correct network.
|
|
126
|
-
The production router exposes
|
|
127
|
-
Up33, Sheriff, Aeon, Catnip, PancakeSwap, RobinSwap, SushiSwap,
|
|
128
|
-
orders.
|
|
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.
|
|
129
130
|
|
|
130
131
|
For network configuration, deployed addresses, tax handling, execution, and
|
|
131
132
|
the complete frontend token list, see [`ROBINHOOD.md`](ROBINHOOD.md).
|
|
@@ -216,7 +217,7 @@ For the most accurate swap quotes — especially with tax tokens — follow this
|
|
|
216
217
|
│ → Detect transfer taxes on both tokens │
|
|
217
218
|
│ → Determine feeOnOutput based on tax results + your fee strategy │
|
|
218
219
|
├────────────────────────────────────────────────────────────────────────────┤
|
|
219
|
-
│ Step 3: GET /swap/quote?...&feeOnOutput=true/false&adapters=0,3,
|
|
220
|
+
│ Step 3: GET /swap/quote?...&feeOnOutput=true/false&adapters=0,3,7 │
|
|
220
221
|
│ → Pass feeOnOutput + adapter filter for an exact expectedOutputAmount │
|
|
221
222
|
│ → Display quote and execute swap │
|
|
222
223
|
└────────────────────────────────────────────────────────────────────────────┘
|
|
@@ -406,24 +407,35 @@ curl -H "x-api-key: YOUR_KEY" "https://quote.switch.win/swap/adapters?network=pu
|
|
|
406
407
|
|
|
407
408
|
```json
|
|
408
409
|
{
|
|
409
|
-
"adapters": [
|
|
410
|
-
{ "index": 0, "name": "UniswapV2",
|
|
411
|
-
{ "index": 1, "name": "SushiV2",
|
|
412
|
-
{ "index": 2, "name": "PulseXV1",
|
|
413
|
-
{ "index": 3, "name": "PulseXV2",
|
|
414
|
-
{ "index": 4, "name": "9inchV2",
|
|
415
|
-
{ "index": 5, "name": "DextopV2",
|
|
416
|
-
{ "index": 6, "name": "
|
|
417
|
-
{ "index": 7, "name": "
|
|
418
|
-
{ "index": 8, "name": "
|
|
419
|
-
{ "index": 9, "name": "
|
|
420
|
-
{ "index": 10, "name": "
|
|
421
|
-
{ "index": 11, "name": "
|
|
422
|
-
{ "index": 12, "name": "
|
|
423
|
-
{ "index": 13, "name": "
|
|
424
|
-
|
|
425
|
-
}
|
|
426
|
-
|
|
410
|
+
"adapters": [
|
|
411
|
+
{ "index": 0, "name": "UniswapV2", "address": "0x971eeb4a5080834f7df2b9d7a11dfbeaa7bc187e" },
|
|
412
|
+
{ "index": 1, "name": "SushiV2", "address": "0x5ef53d5eb4f011d9bed35e7112945f0dc96b3822" },
|
|
413
|
+
{ "index": 2, "name": "PulseXV1", "address": "0x6f5ccfca1f1d3fff70202463df05573cc1668cb6" },
|
|
414
|
+
{ "index": 3, "name": "PulseXV2", "address": "0x393e382520b93b8f662dc76295000930c06d689f" },
|
|
415
|
+
{ "index": 4, "name": "9inchV2", "address": "0x4810beadf72a1f297f4e5ff71424d98b2bf4441e" },
|
|
416
|
+
{ "index": 5, "name": "DextopV2", "address": "0xd096faccdd475f2c86f3c668958fcd435e32bdc2" },
|
|
417
|
+
{ "index": 6, "name": "9mmV2", "address": "0x67a25e62309e39e7b46f3b6f868bcf336c4ce8e2" },
|
|
418
|
+
{ "index": 7, "name": "UniswapV3", "address": "0xc39cb531f71059fd427a63bf8a2f4b822d6b9b02" },
|
|
419
|
+
{ "index": 8, "name": "9mmV3", "address": "0x32a63187814d6b81badc6c13dc9d46a8050fad12" },
|
|
420
|
+
{ "index": 9, "name": "9inchV3", "address": "0xe46ef88400997a84336e1a3c14d2528da90572b6" },
|
|
421
|
+
{ "index": 10, "name": "pDexV3", "address": "0xb718836aca6ddb8745a0cecc687467dda648bdf2" },
|
|
422
|
+
{ "index": 11, "name": "DextopV3", "address": "0x8b8024ca2a4fdb34697620b80320e76c41a67124" },
|
|
423
|
+
{ "index": 12, "name": "Phux", "address": "0x98ae0249da42f789b9745b248d346a727f37e937" },
|
|
424
|
+
{ "index": 13, "name": "Tide", "address": "0xf72c3a301b533eff7e3efa32549f9c934a4f4b29" },
|
|
425
|
+
{ "index": 14, "name": "PulseXStable", "address": "0xf3b9742c859d089b6a2e3b3228dabb2c842b57d2" },
|
|
426
|
+
{ "index": 15, "name": "AgoraX", "address": "0x79ea0ec76b510d08bf4ca9a4a53a1f9f80ea1697" },
|
|
427
|
+
{ "index": 16, "name": "JoltOTC", "address": "0x033372eb8df4baad260e20d716742a825f1f113f" },
|
|
428
|
+
{ "index": 17, "name": "SwitchLimitOrder", "address": "0xa799f49dcdec9056293187faa5f6f3727942a4ca" },
|
|
429
|
+
{ "index": 18, "name": "SwitchX", "address": "0xf8744452598883792f235b92452127f4a8587db3" },
|
|
430
|
+
{ "index": 19, "name": "LibertySwapV3", "address": "0xba24bb413ab32f02073385850907ebcf0a357e70" },
|
|
431
|
+
{ "index": 20, "name": "FinvestaV3", "address": "0x012c44d0c465819ef3ceac208e0c1b272087a8b4" }
|
|
432
|
+
]
|
|
433
|
+
}
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
Finvesta is a Liberty-style V3 venue with fee tiers `100`, `500`, `2500`, and
|
|
437
|
+
`10000`. It can be selected for normal routes, but it is not transfer-tax safe.
|
|
438
|
+
Always treat the live `/swap/adapters` response as the runtime source of truth.
|
|
427
439
|
|
|
428
440
|
#### Using adapter indices to filter routing
|
|
429
441
|
|
|
@@ -433,8 +445,8 @@ Pass adapter indices as a comma-separated `adapters` param to `/swap/quote`:
|
|
|
433
445
|
# Route only through PulseXV2 (index 3):
|
|
434
446
|
GET /swap/quote?...&adapters=3
|
|
435
447
|
|
|
436
|
-
# Route through PulseXV2 + UniswapV3:
|
|
437
|
-
GET /swap/quote?...&adapters=3,
|
|
448
|
+
# Route through PulseXV2 + UniswapV3:
|
|
449
|
+
GET /swap/quote?...&adapters=3,7
|
|
438
450
|
|
|
439
451
|
# Exclude nothing (default — omit the param):
|
|
440
452
|
GET /swap/quote?...
|
|
@@ -583,7 +595,7 @@ Returns the optimal split-route for a swap and (optionally) a ready-to-send tran
|
|
|
583
595
|
| `fee` | No | integer | `30` | Protocol fee in basis points (0.30 %). Range: `30`–`100`. Defaults to `30` if omitted. |
|
|
584
596
|
| `partnerAddress` | No | address | `0x0…0` | Your partner wallet to receive 50 % of collected fees. Omit or pass `0x0` for no partner. |
|
|
585
597
|
| `feeOnOutput` | No | string | `"false"` | Controls fee mode. `"true"` = fee deducted from output. `"false"` = fee deducted from input (default). Affects `expectedOutputAmount` accuracy — see [Swap Integration Flow](#swap-integration-flow). |
|
|
586
|
-
| `adapters` | No | string | — | Comma-separated adapter indices to restrict routing (e.g. `"3"` for PulseXV2 only, `"3,
|
|
598
|
+
| `adapters` | No | string | — | Comma-separated adapter indices to restrict routing (e.g. `"3"` for PulseXV2 only, `"3,7"` for PulseXV2 + UniswapV3). Get available indices from [List Adapters](#list-adapters). |
|
|
587
599
|
|
|
588
600
|
> \* If `sender` is omitted, the response will still contain routing data, `minAmountOut`, and tax info, but the `tx` object will be absent. This is useful for **showing estimated swap output before the user connects their wallet** — you can display prices, routes, and tax warnings without requiring a wallet connection. Once the user connects, re-fetch the quote with `sender` to get the ready-to-send `tx` object.
|
|
589
601
|
|
|
@@ -687,11 +699,11 @@ GET /swap/quote?network=pulsechain&from=0xA1077a294dDE1B09bB078844df40758a5D0f9a
|
|
|
687
699
|
| `toToken` | `string` | Output token address |
|
|
688
700
|
| `receiver` | `string?` | Recipient address for output tokens. Same as `sender` unless a custom `receiver` was specified. |
|
|
689
701
|
| `totalAmountIn` | `string` | Total input amount in wei |
|
|
690
|
-
| `totalAmountOut` | `string` |
|
|
702
|
+
| `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. |
|
|
691
703
|
| `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). |
|
|
692
|
-
| `minAmountOut` | `string` | Minimum acceptable output after
|
|
704
|
+
| `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`. |
|
|
693
705
|
| `paths` | `SwapPath[]` | Human-readable path descriptions |
|
|
694
|
-
| `routeAllocation` | `RouteAllocationPlan` |
|
|
706
|
+
| `routeAllocation` | `RouteAllocationPlan` | Human-readable structured route breakdown for display and analytics. It is not a drop-in on-chain ABI value. |
|
|
695
707
|
| `tx` | `SwapTransaction?` | Ready-to-send transaction (fee on input). Only present when `sender` is provided. |
|
|
696
708
|
| `txFeeOnOutput` | `SwapTransaction?` | Ready-to-send transaction (fee on output). Only present when `sender` is provided. Choose between `tx` and `txFeeOnOutput` at send time. |
|
|
697
709
|
| `fromTokenTax` | `TokenTaxResponse?` | Transfer tax info for the input token. See [Tax Tokens Deep Dive](#tax-tokens-deep-dive). |
|
|
@@ -772,9 +784,16 @@ Present on every quote response as `fromTokenTax` and `toTokenTax`. Reports whet
|
|
|
772
784
|
|
|
773
785
|
| Field | Type | Description |
|
|
774
786
|
|---|---|---|
|
|
775
|
-
| `adapter` | `string` | Human-readable DEX adapter name (e.g. `"PulseXV2"`) |
|
|
776
|
-
| `amountIn` | `string` | Input amount routed through this adapter |
|
|
777
|
-
| `amountOut` | `string` | Expected output from this adapter |
|
|
787
|
+
| `adapter` | `string` | Human-readable DEX adapter name (e.g. `"PulseXV2"`) |
|
|
788
|
+
| `amountIn` | `string` | Input amount routed through this adapter |
|
|
789
|
+
| `amountOut` | `string` | Expected output from this adapter |
|
|
790
|
+
| `fee` | `number?` | V3 fee tier or concentrated-liquidity tick-spacing hint; zero when unused |
|
|
791
|
+
|
|
792
|
+
Use the API-provided `tx.data` for execution. If you intentionally construct
|
|
793
|
+
router or limit-order calldata yourself, each on-chain adapter leg is
|
|
794
|
+
`{ adapter, amountIn, fee, data }`; `data` is required and should be `0x` for
|
|
795
|
+
adapters that need no payload. The display-oriented `routeAllocation` does not
|
|
796
|
+
contain enough information to encode every route family.
|
|
778
797
|
|
|
779
798
|
---
|
|
780
799
|
|
|
@@ -949,9 +968,12 @@ Robinhood constants are available from
|
|
|
949
968
|
| **SwitchLimitOrder** (V1 — legacy) | `0x0e884072a891b406C0D814907A1E2310fE5F5Deb` |
|
|
950
969
|
| **SwitchPLSFlow** (V2 — current) | `0xCf5606bdC750d8626Cec32CA2E1BB207968db1D5` |
|
|
951
970
|
| **SwitchPLSFlow** (V1 — legacy) | `0x88c9e2C83b6B7c707602e548481e58E920694E64` |
|
|
952
|
-
| **Native PLS sentinel** | `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE` |
|
|
953
|
-
| **WPLS** | `0xA1077a294dDE1B09bB078844df40758a5D0f9a27` |
|
|
954
|
-
| **
|
|
971
|
+
| **Native PLS sentinel** | `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE` |
|
|
972
|
+
| **WPLS** | `0xA1077a294dDE1B09bB078844df40758a5D0f9a27` |
|
|
973
|
+
| **Finvesta V3 adapter** | Index `20`; `0x012c44d0C465819eF3CeAC208e0c1B272087a8b4` (not transfer-tax safe) |
|
|
974
|
+
| **Finvesta V3 factory** | `0x7f5c7C5144b4B4c6e954A5b2D75C318C5467EFDc` |
|
|
975
|
+
| **Finvesta fee tiers** | `100`, `500`, `2500`, `10000` |
|
|
976
|
+
| **Fee denominator** | `10000` (basis points) |
|
|
955
977
|
| **Max slippage** | `5000` bps (50 %) |
|
|
956
978
|
| **Max fee** | `100` bps (1 %) |
|
|
957
979
|
| **Min fee** | `30` bps (0.30 %) — enforced on-chain by `MIN_FEE` |
|
package/ROBINHOOD.md
CHANGED
|
@@ -11,7 +11,7 @@ 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 |
|
|
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
15
|
| Limit orders | Available: EIP-712 ERC-20 orders plus native ETH flow |
|
|
16
16
|
|
|
17
17
|
## Contents
|
|
@@ -115,12 +115,17 @@ await window.ethereum.request({
|
|
|
115
115
|
| SwapHood V3 adapter (index 5) | `0x9645dE0AcB48F0AAefdBEb423F0558457907DE98` |
|
|
116
116
|
| Up33 CL adapter (index 6) | `0x388179D2FB0ABcE9b03068916aF8a3c4dfD023c8` |
|
|
117
117
|
| Sheriff V2 adapter (index 7) | `0xBDB3EB0355981500f58C9bc77c3E61762844A146` |
|
|
118
|
-
| Sheriff Algebra adapter (index 8) | `
|
|
118
|
+
| Sheriff Algebra adapter (index 8) | `0xaC4da986100724983042Ec28c28db243E2f828CB` |
|
|
119
119
|
| Aeon Algebra adapter (index 9) | `0x20615954FB87360139e7DdDB519359498EbD1904` |
|
|
120
120
|
| Catnip V2 adapter (index 10) | `0x5b2Ca358d56490Dc86224D502522314De7707237` |
|
|
121
121
|
| PancakeSwap V2 adapter (index 11) | `0x3B6e71A59553143937Fef74a7B50AFD24528786E` |
|
|
122
122
|
| RobinSwap V3 adapter (index 12) | `0x798f77D63b46b0E019de206E111e5ea5CC16BEc8` |
|
|
123
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` |
|
|
124
129
|
|
|
125
130
|
The V4 adapter was created in
|
|
126
131
|
[deployment transaction `0x60d5...34a7`](https://robinhoodchain.blockscout.com/tx/0x60d56466a8162a643a15ecde98322ec05ea23d44d03fbd817df4ddbaef4834a7)
|
|
@@ -251,10 +256,11 @@ The canonical Robinhood V4 infrastructure is available through
|
|
|
251
256
|
| Universal Router | `0x8876789976decbfcbbbe364623c63652db8c0904` |
|
|
252
257
|
| Permit2 | `0x000000000022D473030F116dDEE9F6B43aC78BA3` |
|
|
253
258
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
`
|
|
257
|
-
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.
|
|
258
264
|
|
|
259
265
|
## Swap integration flow
|
|
260
266
|
|
|
@@ -270,9 +276,11 @@ Use the same sequence as a PulseChain integration:
|
|
|
270
276
|
6. Show `expectedOutputAmount`, `minAmountOut`, route allocation, and detected
|
|
271
277
|
taxes to the user.
|
|
272
278
|
|
|
273
|
-
Any swap involving a tax token is routed entirely through the tax-safe
|
|
274
|
-
|
|
275
|
-
|
|
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.
|
|
276
284
|
|
|
277
285
|
## Quickstart
|
|
278
286
|
|
|
@@ -487,6 +495,11 @@ Robinhood currently returns:
|
|
|
487
495
|
| `11` | PancakeSwap V2 |
|
|
488
496
|
| `12` | RobinSwap V3 |
|
|
489
497
|
| `13` | SushiSwap V3 |
|
|
498
|
+
| `14` | GIGA V2 |
|
|
499
|
+
| `15` | GIGA V3 |
|
|
500
|
+
| `16` | Flap |
|
|
501
|
+
| `17` | Ramses V3 |
|
|
502
|
+
| `18` | Ramses V2 |
|
|
490
503
|
|
|
491
504
|
Treat the endpoint response, not this document, as the source of truth for
|
|
492
505
|
which adapters are currently selectable.
|
|
@@ -494,7 +507,8 @@ which adapters are currently selectable.
|
|
|
494
507
|
Do not permanently hard-code the available adapter list in an integration.
|
|
495
508
|
Fetch it when presenting routing-source controls. If a quote involves a tax
|
|
496
509
|
token, the backend restricts routing to tax-safe adapters `0`, `4`, `7`, `10`,
|
|
497
|
-
and `
|
|
510
|
+
`11`, `14`, `16`, and `18`; an explicit filter that excludes all of them is
|
|
511
|
+
rejected.
|
|
498
512
|
|
|
499
513
|
### Check token tax
|
|
500
514
|
|
|
@@ -548,11 +562,11 @@ Important response fields:
|
|
|
548
562
|
|---|---|
|
|
549
563
|
| `fromToken`, `toToken` | Normalized pair addresses. |
|
|
550
564
|
| `totalAmountIn` | Gross input amount. |
|
|
551
|
-
| `totalAmountOut` |
|
|
565
|
+
| `totalAmountOut` | Quoted route output before the Switch fee and slippage. Adapter-native quotes such as Flap Portal may already include token tax. |
|
|
552
566
|
| `expectedOutputAmount` | Expected user receipt after tax and fee, before slippage. |
|
|
553
|
-
| `minAmountOut` | Minimum output
|
|
567
|
+
| `minAmountOut` | Minimum output after adapter-specific tax accounting, fee, and slippage; use it directly. |
|
|
554
568
|
| `paths` | Human-readable route descriptions. |
|
|
555
|
-
| `routeAllocation` |
|
|
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. |
|
|
556
570
|
| `fromTokenTax`, `toTokenTax` | Detected tax metadata. |
|
|
557
571
|
| `effectiveSlippageBps` | Slippage plus applicable tax buffers. |
|
|
558
572
|
| `tx` | Fee-on-input transaction; present when `sender` is supplied. |
|
|
@@ -635,7 +649,7 @@ Always identify tokens by address and obtain a fresh quote and tax check.
|
|
|
635
649
|
|
|
636
650
|
### Routing configuration
|
|
637
651
|
|
|
638
|
-
The production router currently exposes
|
|
652
|
+
The production router currently exposes nineteen ordered adapters:
|
|
639
653
|
|
|
640
654
|
| Index | Venue | Routing family |
|
|
641
655
|
|---:|---|---|
|
|
@@ -653,6 +667,11 @@ The production router currently exposes fourteen ordered adapters:
|
|
|
653
667
|
| `11` | PancakeSwap | Direct-pair V2, fixed 25 bps |
|
|
654
668
|
| `12` | RobinSwap | V3 tiers `100`, `500`, `2500`, `3000`, `10000` |
|
|
655
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 |
|
|
656
675
|
|
|
657
676
|
V4 pools are discovered by complete `PoolKey`, not by applying a V3 fee-tier
|
|
658
677
|
list. Native-ETH V4 currencies are normalized through the WETH/native alias
|
|
@@ -665,8 +684,10 @@ JUGGERNAUT, MARIAN, and WALLET. The expanded set was selected from the
|
|
|
665
684
|
it is taxed; INDEX remains an endpoint token but is excluded because its
|
|
666
685
|
dominant liquidity depends on V4 hooks that are not yet supported. If either side is
|
|
667
686
|
detected as a transfer-tax token, the backend restricts the entire route to
|
|
668
|
-
|
|
669
|
-
and limit-order adapters are excluded.
|
|
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.
|
|
670
691
|
|
|
671
692
|
The API may split a quote across routes and adapters. Integrators should render
|
|
672
693
|
the returned `paths` or `routeAllocation` instead of assuming a single path.
|
|
@@ -684,7 +705,7 @@ untrusted clients.
|
|
|
684
705
|
## Current limitations
|
|
685
706
|
|
|
686
707
|
- Rialto liquidity is not integrated.
|
|
687
|
-
- Robinhood market routing is limited to the
|
|
708
|
+
- Robinhood market routing is limited to the nineteen production adapters
|
|
688
709
|
listed above. Always use `/swap/adapters` as the runtime source of truth.
|
|
689
710
|
- The first V4 phase intentionally excludes hooked and dynamic-fee pools.
|
|
690
711
|
- A V4 allocation currently selects its best single PoolKey; intra-V4
|
|
@@ -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":[]}]
|
package/abi/SwitchRouterABI.json
CHANGED
|
@@ -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":[]}]
|
package/package.json
CHANGED
package/src/constants.ts
CHANGED
|
@@ -48,8 +48,22 @@ export const SWITCH_ROUTER = "0x0305fcb5dA680EA6fd1B01A96C1949175B99d406";
|
|
|
48
48
|
*/
|
|
49
49
|
export const NATIVE_PLS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
|
|
50
50
|
|
|
51
|
-
/** Wrapped PLS (WPLS) ERC-20 token address */
|
|
52
|
-
export const WPLS = "0xA1077a294dDE1B09bB078844df40758a5D0f9a27";
|
|
51
|
+
/** Wrapped PLS (WPLS) ERC-20 token address */
|
|
52
|
+
export const WPLS = "0xA1077a294dDE1B09bB078844df40758a5D0f9a27";
|
|
53
|
+
|
|
54
|
+
/** Finvesta's production Liberty-style V3 adapter index in SwitchRouter. */
|
|
55
|
+
export const FINVESTA_V3_ADAPTER_INDEX = 20;
|
|
56
|
+
|
|
57
|
+
/** Verified Finvesta V3 adapter. Not safe for transfer-tax-sensitive hops. */
|
|
58
|
+
export const FINVESTA_V3_ADAPTER =
|
|
59
|
+
"0x012c44d0C465819eF3CeAC208e0c1B272087a8b4";
|
|
60
|
+
|
|
61
|
+
/** Finvesta V3 factory queried by the adapter. */
|
|
62
|
+
export const FINVESTA_V3_FACTORY =
|
|
63
|
+
"0x7f5c7C5144b4B4c6e954A5b2D75C318C5467EFDc";
|
|
64
|
+
|
|
65
|
+
/** Factory-enabled Finvesta fee tiers, in hundredths of one basis point. */
|
|
66
|
+
export const FINVESTA_V3_FEE_TIERS = [100, 500, 2500, 10000] as const;
|
|
53
67
|
|
|
54
68
|
// ── Limit Order contract ────────────────────────────────────────────────
|
|
55
69
|
|
|
@@ -167,9 +181,9 @@ export const ERC20_ABI = [
|
|
|
167
181
|
* Normally you don't need this — the API returns pre-encoded calldata in `tx.data`.
|
|
168
182
|
* Useful only if you want to decode or manually construct calldata.
|
|
169
183
|
*/
|
|
170
|
-
export const GO_SWITCH_ABI = [
|
|
171
|
-
"function goSwitch(tuple(uint256 amountIn, tuple(address tokenIn, address tokenOut, tuple(address adapter, uint256 amountIn, uint24 fee)[] legs)[] hops)[] _routes, address _to, uint256 _minTotalAmountOut, uint256 _fee, bool _feeOnOutput, bool _unwrapOutput, address _partnerAddress) payable",
|
|
172
|
-
] as const;
|
|
184
|
+
export const GO_SWITCH_ABI = [
|
|
185
|
+
"function goSwitch(tuple(uint256 amountIn, tuple(address tokenIn, address tokenOut, tuple(address adapter, uint256 amountIn, uint24 fee, bytes data)[] legs)[] hops)[] _routes, address _to, uint256 _minTotalAmountOut, uint256 _fee, bool _feeOnOutput, bool _unwrapOutput, address _partnerAddress) payable",
|
|
186
|
+
] as const;
|
|
173
187
|
|
|
174
188
|
/**
|
|
175
189
|
* SwitchRouter custom error signatures for decoding reverts.
|
package/src/index.ts
CHANGED
|
@@ -59,10 +59,14 @@ export {
|
|
|
59
59
|
ADAPTERS_ENDPOINT,
|
|
60
60
|
CHECK_TAX_ENDPOINT,
|
|
61
61
|
CHAIN_ID,
|
|
62
|
-
SWITCH_ROUTER,
|
|
63
|
-
NATIVE_PLS,
|
|
64
|
-
WPLS,
|
|
65
|
-
|
|
62
|
+
SWITCH_ROUTER,
|
|
63
|
+
NATIVE_PLS,
|
|
64
|
+
WPLS,
|
|
65
|
+
FINVESTA_V3_ADAPTER_INDEX,
|
|
66
|
+
FINVESTA_V3_ADAPTER,
|
|
67
|
+
FINVESTA_V3_FACTORY,
|
|
68
|
+
FINVESTA_V3_FEE_TIERS,
|
|
69
|
+
FEE_DENOMINATOR,
|
|
66
70
|
MAX_FEE_BPS,
|
|
67
71
|
MAX_SLIPPAGE_BPS,
|
|
68
72
|
DEFAULT_SLIPPAGE_BPS,
|
|
@@ -132,7 +136,10 @@ export {
|
|
|
132
136
|
ROBINHOOD_NATIVE_ETH,
|
|
133
137
|
ROBINHOOD_LIMIT_ORDER_EIP712_DOMAIN,
|
|
134
138
|
ROBINHOOD_SWITCH_CONTRACTS,
|
|
135
|
-
|
|
139
|
+
ROBINHOOD_ADAPTERS,
|
|
140
|
+
ROBINHOOD_TAX_SAFE_ADAPTER_INDICES,
|
|
141
|
+
ROBINHOOD_TAX_SAFE_ADAPTERS,
|
|
142
|
+
ROBINHOOD_UNISWAP_CONTRACTS,
|
|
136
143
|
ROBINHOOD_TOKENS,
|
|
137
144
|
ROBINHOOD_FRONTEND_TOKEN_LIST,
|
|
138
145
|
ROBINHOOD_FRONTEND_DEFAULT_TOKENS,
|
|
@@ -142,8 +149,9 @@ export {
|
|
|
142
149
|
buildRobinhoodQuoteUrl,
|
|
143
150
|
} from "./networks/robinhood.js";
|
|
144
151
|
|
|
145
|
-
export type {
|
|
146
|
-
|
|
152
|
+
export type {
|
|
153
|
+
RobinhoodAdapter,
|
|
154
|
+
RobinhoodToken,
|
|
147
155
|
RobinhoodQuoteParams,
|
|
148
156
|
RobinhoodTaxInfo,
|
|
149
157
|
} from "./networks/robinhood.js";
|
package/src/networks/index.ts
CHANGED
|
@@ -4,7 +4,10 @@ export {
|
|
|
4
4
|
ROBINHOOD_NATIVE_ETH,
|
|
5
5
|
ROBINHOOD_LIMIT_ORDER_EIP712_DOMAIN,
|
|
6
6
|
ROBINHOOD_SWITCH_CONTRACTS,
|
|
7
|
-
|
|
7
|
+
ROBINHOOD_ADAPTERS,
|
|
8
|
+
ROBINHOOD_TAX_SAFE_ADAPTER_INDICES,
|
|
9
|
+
ROBINHOOD_TAX_SAFE_ADAPTERS,
|
|
10
|
+
ROBINHOOD_UNISWAP_CONTRACTS,
|
|
8
11
|
ROBINHOOD_TOKENS,
|
|
9
12
|
ROBINHOOD_FRONTEND_TOKEN_LIST,
|
|
10
13
|
ROBINHOOD_FRONTEND_DEFAULT_TOKENS,
|
|
@@ -14,8 +17,9 @@ export {
|
|
|
14
17
|
buildRobinhoodQuoteUrl,
|
|
15
18
|
} from "./robinhood.js";
|
|
16
19
|
|
|
17
|
-
export type {
|
|
18
|
-
|
|
20
|
+
export type {
|
|
21
|
+
RobinhoodAdapter,
|
|
22
|
+
RobinhoodToken,
|
|
19
23
|
RobinhoodQuoteParams,
|
|
20
24
|
RobinhoodTaxInfo,
|
|
21
25
|
} from "./robinhood.js";
|
|
@@ -22,18 +22,173 @@ export const ROBINHOOD_NATIVE_ETH =
|
|
|
22
22
|
|
|
23
23
|
/** Switch contracts deployed on Robinhood Chain. */
|
|
24
24
|
export const ROBINHOOD_SWITCH_CONTRACTS = {
|
|
25
|
-
/** ERC-20 approval target. Use quote.tx.to when submitting a swap. */
|
|
26
|
-
router: "0x8730C3e2cF2c8CDa8E6166837A1Ed26f46aa9E59",
|
|
27
|
-
routerView: "0xFF6b56d3F444eB5b7FA1db047F57140C84810376",
|
|
28
|
-
uniswapV2Adapter: "0x7a14d7A8509a66209D4332843b983b29bF5604A4",
|
|
29
|
-
uniswapV3Adapter: "0xbcA08f296d9Ba0dc19Aa0E05D355365cE29A3205",
|
|
30
|
-
uniswapV4Adapter: "0x754dDCD05aFbAd1cc7Bc42B9268EB586F579E7F6",
|
|
25
|
+
/** ERC-20 approval target. Use quote.tx.to when submitting a swap. */
|
|
26
|
+
router: "0x8730C3e2cF2c8CDa8E6166837A1Ed26f46aa9E59",
|
|
27
|
+
routerView: "0xFF6b56d3F444eB5b7FA1db047F57140C84810376",
|
|
31
28
|
limitOrder: "0x752c50DDd3B426cAE3D7A995F313Ac74ac6B0230",
|
|
32
29
|
nativeEthFlow: "0x029FfC6aF9112eA078f1D6f4a98826DDB2136cf6",
|
|
30
|
+
uniswapV2Adapter: "0x7a14d7A8509a66209D4332843b983b29bF5604A4",
|
|
31
|
+
uniswapV3Adapter: "0xbcA08f296d9Ba0dc19Aa0E05D355365cE29A3205",
|
|
32
|
+
uniswapV4Adapter: "0x754dDCD05aFbAd1cc7Bc42B9268EB586F579E7F6",
|
|
33
33
|
limitOrderAdapter: "0x412F625072c10e58C619D1e0b3C95cd3d5689871",
|
|
34
|
+
swapHoodV2Adapter: "0x6D8746f02e52944c13824fA691c6f4186E463354",
|
|
35
|
+
swapHoodV3Adapter: "0x9645dE0AcB48F0AAefdBEb423F0558457907DE98",
|
|
36
|
+
up33Adapter: "0x388179D2FB0ABcE9b03068916aF8a3c4dfD023c8",
|
|
37
|
+
sheriffV2Adapter: "0xBDB3EB0355981500f58C9bc77c3E61762844A146",
|
|
38
|
+
sheriffAlgebraAdapter: "0xaC4da986100724983042Ec28c28db243E2f828CB",
|
|
39
|
+
aeonAlgebraAdapter: "0x20615954FB87360139e7DdDB519359498EbD1904",
|
|
40
|
+
catnipV2Adapter: "0x5b2Ca358d56490Dc86224D502522314De7707237",
|
|
41
|
+
pancakeSwapV2Adapter: "0x3B6e71A59553143937Fef74a7B50AFD24528786E",
|
|
42
|
+
robinSwapV3Adapter: "0x798f77D63b46b0E019de206E111e5ea5CC16BEc8",
|
|
43
|
+
sushiSwapV3Adapter: "0xca3EA0Fd6E31f94c81B6586836790adE638313ED",
|
|
44
|
+
gigaV2Adapter: "0xa379c7D17F7fEe735773879D4069886B117AB54a",
|
|
45
|
+
gigaV3Adapter: "0xcAa612CDe3d3FbE97Be97eB5f79BC91597432d55",
|
|
46
|
+
flapAdapter: "0x6af2A4475C44d5833575150Bf7C3D3FE6Bf4F344",
|
|
47
|
+
ramsesV3Adapter: "0xdBf182774C60932c6fe1Bf3FFaB8Ca28CCb0dC17",
|
|
48
|
+
ramsesV2Adapter: "0x5fe3b873c222e76f7630b40052f07ee06196E6d3",
|
|
34
49
|
limitOrderAdapterIndex: 3,
|
|
35
50
|
} as const;
|
|
36
51
|
|
|
52
|
+
export interface RobinhoodAdapter {
|
|
53
|
+
readonly index: number;
|
|
54
|
+
readonly name: string;
|
|
55
|
+
readonly address: string;
|
|
56
|
+
/** Whether the backend may use this adapter for transfer-tax routes. */
|
|
57
|
+
readonly taxSafe: boolean;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Snapshot of the ordered production adapter registry verified on 2026-08-02.
|
|
62
|
+
*
|
|
63
|
+
* Adapter registration can change. Fetch
|
|
64
|
+
* `GET /swap/adapters?network=robinhood` when runtime freshness matters.
|
|
65
|
+
*/
|
|
66
|
+
export const ROBINHOOD_ADAPTERS = [
|
|
67
|
+
{
|
|
68
|
+
index: 0,
|
|
69
|
+
name: "UniswapV2",
|
|
70
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.uniswapV2Adapter,
|
|
71
|
+
taxSafe: true,
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
index: 1,
|
|
75
|
+
name: "UniswapV3",
|
|
76
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.uniswapV3Adapter,
|
|
77
|
+
taxSafe: false,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
index: 2,
|
|
81
|
+
name: "UniswapV4",
|
|
82
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.uniswapV4Adapter,
|
|
83
|
+
taxSafe: false,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
index: 3,
|
|
87
|
+
name: "SwitchLimitOrders",
|
|
88
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.limitOrderAdapter,
|
|
89
|
+
taxSafe: false,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
index: 4,
|
|
93
|
+
name: "SwapHoodV2",
|
|
94
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.swapHoodV2Adapter,
|
|
95
|
+
taxSafe: true,
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
index: 5,
|
|
99
|
+
name: "SwapHoodV3",
|
|
100
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.swapHoodV3Adapter,
|
|
101
|
+
taxSafe: false,
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
index: 6,
|
|
105
|
+
name: "Up33",
|
|
106
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.up33Adapter,
|
|
107
|
+
taxSafe: false,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
index: 7,
|
|
111
|
+
name: "SheriffV2",
|
|
112
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.sheriffV2Adapter,
|
|
113
|
+
taxSafe: true,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
index: 8,
|
|
117
|
+
name: "SheriffAlgebra",
|
|
118
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.sheriffAlgebraAdapter,
|
|
119
|
+
taxSafe: false,
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
index: 9,
|
|
123
|
+
name: "AeonAlgebra",
|
|
124
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.aeonAlgebraAdapter,
|
|
125
|
+
taxSafe: false,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
index: 10,
|
|
129
|
+
name: "CatnipV2",
|
|
130
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.catnipV2Adapter,
|
|
131
|
+
taxSafe: true,
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
index: 11,
|
|
135
|
+
name: "PancakeSwapV2",
|
|
136
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.pancakeSwapV2Adapter,
|
|
137
|
+
taxSafe: true,
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
index: 12,
|
|
141
|
+
name: "RobinSwapV3",
|
|
142
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.robinSwapV3Adapter,
|
|
143
|
+
taxSafe: false,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
index: 13,
|
|
147
|
+
name: "SushiSwapV3",
|
|
148
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.sushiSwapV3Adapter,
|
|
149
|
+
taxSafe: false,
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
index: 14,
|
|
153
|
+
name: "GigaV2",
|
|
154
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.gigaV2Adapter,
|
|
155
|
+
taxSafe: true,
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
index: 15,
|
|
159
|
+
name: "GigaV3",
|
|
160
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.gigaV3Adapter,
|
|
161
|
+
taxSafe: false,
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
index: 16,
|
|
165
|
+
name: "Flap",
|
|
166
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.flapAdapter,
|
|
167
|
+
taxSafe: true,
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
index: 17,
|
|
171
|
+
name: "RamsesV3",
|
|
172
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.ramsesV3Adapter,
|
|
173
|
+
taxSafe: false,
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
index: 18,
|
|
177
|
+
name: "RamsesV2",
|
|
178
|
+
address: ROBINHOOD_SWITCH_CONTRACTS.ramsesV2Adapter,
|
|
179
|
+
taxSafe: true,
|
|
180
|
+
},
|
|
181
|
+
] as const satisfies readonly RobinhoodAdapter[];
|
|
182
|
+
|
|
183
|
+
/** Adapter indices currently eligible for Robinhood transfer-tax routes. */
|
|
184
|
+
export const ROBINHOOD_TAX_SAFE_ADAPTER_INDICES = [
|
|
185
|
+
0, 4, 7, 10, 11, 14, 16, 18,
|
|
186
|
+
] as const;
|
|
187
|
+
|
|
188
|
+
/** Current Robinhood transfer-tax-safe adapter metadata. */
|
|
189
|
+
export const ROBINHOOD_TAX_SAFE_ADAPTERS: readonly RobinhoodAdapter[] =
|
|
190
|
+
ROBINHOOD_ADAPTERS.filter((adapter) => adapter.taxSafe);
|
|
191
|
+
|
|
37
192
|
/** EIP-712 domain used for Robinhood ERC-20 limit-order signatures. */
|
|
38
193
|
export const ROBINHOOD_LIMIT_ORDER_EIP712_DOMAIN = {
|
|
39
194
|
name: "SwitchLimitOrder",
|
package/src/types.ts
CHANGED
|
@@ -25,9 +25,10 @@ export interface BestPathResponse {
|
|
|
25
25
|
receiver?: string;
|
|
26
26
|
/** Total input amount in wei */
|
|
27
27
|
totalAmountIn: string;
|
|
28
|
-
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
28
|
+
/**
|
|
29
|
+
* Quoted route output in wei before the Switch protocol fee and slippage.
|
|
30
|
+
* Adapter-native quotes may already include token-tax effects (for example,
|
|
31
|
+
* the Flap Portal quote).
|
|
31
32
|
*/
|
|
32
33
|
totalAmountOut: string;
|
|
33
34
|
/**
|
|
@@ -39,18 +40,17 @@ export interface BestPathResponse {
|
|
|
39
40
|
* multipliers to `totalAmountOut`.
|
|
40
41
|
*/
|
|
41
42
|
expectedOutputAmount: string;
|
|
42
|
-
/**
|
|
43
|
-
* Minimum acceptable output after taxes, fee, and slippage.
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* This is the value encoded in the `tx` calldata as `_minTotalAmountOut`.
|
|
43
|
+
/**
|
|
44
|
+
* Minimum acceptable output after taxes, fee, and slippage.
|
|
45
|
+
*
|
|
46
|
+
* Tax accounting is adapter-specific. Use this API value directly rather
|
|
47
|
+
* than recomputing it from the reported tax rates. This is encoded in the
|
|
48
|
+
* `tx` calldata as `_minTotalAmountOut`.
|
|
49
49
|
*/
|
|
50
50
|
minAmountOut: string;
|
|
51
51
|
/** Human-readable path descriptions */
|
|
52
52
|
paths: SwapPath[];
|
|
53
|
-
/**
|
|
53
|
+
/** Human-readable structured route breakdown for display and analytics. */
|
|
54
54
|
routeAllocation?: RouteAllocationPlan;
|
|
55
55
|
/** Ready-to-send transaction with fee on **input** (default). Only present when `sender` query param is provided. */
|
|
56
56
|
tx?: SwapTransaction;
|
|
@@ -159,7 +159,7 @@ export interface SwapPathLeg {
|
|
|
159
159
|
percentage?: number;
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
// --
|
|
162
|
+
// -- Human-readable route allocation --
|
|
163
163
|
|
|
164
164
|
/** Top-level route allocation plan */
|
|
165
165
|
export interface RouteAllocationPlan {
|
|
@@ -192,14 +192,16 @@ export interface HopAllocationPlan {
|
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
/** A single adapter leg within a hop */
|
|
195
|
-
export interface HopAdapterAllocationPlan {
|
|
196
|
-
/** DEX adapter
|
|
197
|
-
adapter: string;
|
|
195
|
+
export interface HopAdapterAllocationPlan {
|
|
196
|
+
/** Human-readable DEX adapter name */
|
|
197
|
+
adapter: string;
|
|
198
198
|
/** Input amount routed through this adapter (wei) */
|
|
199
199
|
amountIn: string;
|
|
200
|
-
/** Expected output from this adapter (wei) */
|
|
201
|
-
amountOut: string;
|
|
202
|
-
|
|
200
|
+
/** Expected output from this adapter (wei) */
|
|
201
|
+
amountOut: string;
|
|
202
|
+
/** V3 fee tier or concentrated-liquidity tick-spacing hint. Zero for adapters that do not use it. */
|
|
203
|
+
fee?: number;
|
|
204
|
+
}
|
|
203
205
|
|
|
204
206
|
// -- Error response --
|
|
205
207
|
|