@uniswap/universal-router-sdk 2.0.1 → 2.0.4-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -92,66 +92,8 @@ const unwrapWETH = new UnwrapWETH(amountWETH, chainId, optionalPermit2Params)
92
92
  const { calldata, value } = SwapRouter.swapCallParameters([unwrapWETH, seaportTrades, looksRareTrades])
93
93
  ```
94
94
 
95
- ### Trading stETH
96
- To trade stETH as an input token, you can make sure the router automatically wraps stETH to wstETH before trading across a wstETH route. Make sure to specify the router is the payer of the swap (since it's in custody of wSTETH after wrapping)
97
-
98
- If this is an exactOut trade, we'll need to wrap the maximumAmountIn of steth, and therefore should add an unwrap command at the end of the transaction to account for any leftover steth that didn't get traded. `amountMinimum` can be set to 0 in this scenario for the unwrapSteth commmand.
99
- ```typescript
100
- import { TradeType } from '@uniswap/sdk-core'
101
- import { Trade as V2TradeSDK } from '@uniswap/v2-sdk'
102
- import { Trade as V3TradeSDK } from '@uniswap/v3-sdk'
103
- import { MixedRouteTrade, MixedRouteSDK, Trade as RouterTrade } from '@uniswap/router-sdk'
104
- import {
105
- UniswapTrade,
106
- WrapSTETH
107
- } from "@uniswap/universal-router-sdk";
108
-
109
- // EXACT INPUT
110
- // including optional permit2 parameter will transfer STETH amount using permit2
111
- const wrapSTETH = new WrapSTETH(inputSTETH, chainId, WrapSTETHPermitData?, wrapAmountOtherThanContractBalance?)
112
- const uniswapWstethTrade = new UniswapTrade(
113
- new RouterTrade({ v2Routes, v3Routes, mixedRoutes, tradeType: TradeType.EXACT_INPUT }),
114
- { slippageTolerance, payerIsRouter: true }
115
- )
116
- const { calldata, value } = SwapRouter.swapCallParameters([wrapSTETH, uniswapWstethTrade])
117
-
118
- // EXACT OUTPUT
119
- const wrapSTETH = new WrapSTETH(maximumInputSTETH, chainId, WrapSTETHPermitData?, wrapAmountOtherThanContractBalance?)
120
- const uniswapWstethTrade = new UniswapTrade(
121
- new RouterTrade({ v2Routes, v3Routes, mixedRoutes, tradeType: TradeType.EXACT_OUTPUT }),
122
- { slippageTolerance, payerIsRouter: true }
123
- )
124
- const unwrapSTETH = new UnwrapSTETH(recipient, amountMinimum = 0, chainId)
125
-
126
- const { calldata, value } = SwapRouter.swapCallParameters([wrapSTETH, uniswapWstethTrade, unwrapSTETH])
127
-
128
- ```
129
-
130
- To recieve stETH as an output token, you can make sure the router automatically unwraps wstETH to stETH before returning to the swapper
131
- ```typescript
132
- import { TradeType } from '@uniswap/sdk-core'
133
- import { Trade as V2TradeSDK } from '@uniswap/v2-sdk'
134
- import { Trade as V3TradeSDK } from '@uniswap/v3-sdk'
135
- import { MixedRouteTrade, MixedRouteSDK, Trade as RouterTrade } from '@uniswap/router-sdk'
136
- import {
137
- ROUTER_AS_RECIPIENT,
138
- UniswapTrade,
139
- UnwrapSTETH
140
- } from "@uniswap/universal-router-sdk";
141
-
142
- // return trade to the router instead of the recipient using the ROUTER_AS_RECIPIENT constant so that the router may custody tokens to unwrap
143
- const uniswapWstethTrade = new UniswapTrade(
144
- new RouterTrade({ v2Routes, v3Routes, mixedRoutes, tradeType: TradeType.EXACT_INPUT }),
145
- { slippageTolerance, recipient: ROUTER_AS_RECIPIENT}
146
- )
147
- const unwrapSTETH = new UnwrapSTETH(recipient, amountMinimum, chainId)
148
-
149
- const { calldata, value } = SwapRouter.swapCallParameters([uniswapWstethTrade, unwrapSTETH])
150
- ```
151
-
152
-
153
95
  ## Running this package
154
- Make sure you are running `node v16`
96
+ Make sure you are running `node v18`
155
97
  Install dependencies and run typescript unit tests
156
98
  ```bash
157
99
  yarn install
@@ -160,7 +102,6 @@ yarn test:hardhat
160
102
 
161
103
  Run forge integration tests
162
104
  ```bash
163
- yarn symlink # must install git submodules
164
105
  forge install
165
106
  yarn test:forge
166
107
  ```
@@ -5,9 +5,7 @@ export declare type TradeConfig = {
5
5
  export declare enum RouterTradeType {
6
6
  UniswapTrade = "UniswapTrade",
7
7
  NFTTrade = "NFTTrade",
8
- UnwrapWETH = "UnwrapWETH",
9
- WrapSTETH = "WrapSTETH",
10
- UnwrapSTETH = "UnwrapSTETH"
8
+ UnwrapWETH = "UnwrapWETH"
11
9
  }
12
10
  export interface Command {
13
11
  tradeType: RouterTradeType;
@@ -8,5 +8,3 @@ export * from './uniswap';
8
8
  export * from './sudoswap';
9
9
  export * from './x2y2';
10
10
  export * from './unwrapWETH';
11
- export * from './wrapSTETH';
12
- export * from './unwrapSTETH';
@@ -9,14 +9,17 @@ export declare type FlatFeeOptions = {
9
9
  recipient: string;
10
10
  };
11
11
  export declare type SwapOptions = Omit<RouterSwapOptions, 'inputTokenPermit'> & {
12
+ useRouterBalance?: boolean;
12
13
  inputTokenPermit?: Permit2Permit;
13
- payerIsRouter?: boolean;
14
14
  flatFee?: FlatFeeOptions;
15
+ safeMode?: boolean;
15
16
  };
16
17
  export declare class UniswapTrade implements Command {
17
18
  trade: RouterTrade<Currency, Currency, TradeType>;
18
19
  options: SwapOptions;
19
20
  readonly tradeType: RouterTradeType;
21
+ readonly payerIsUser: boolean;
20
22
  constructor(trade: RouterTrade<Currency, Currency, TradeType>, options: SwapOptions);
23
+ get inputRequiresWrap(): boolean;
21
24
  encode(planner: RoutePlanner, _config: TradeConfig): void;
22
25
  }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { SwapRouter } from './swapRouter';
2
2
  export * from './entities';
3
+ export * from './utils/routerTradeAdapter';
3
4
  export { RoutePlanner, CommandType } from './utils/routerCommands';
4
5
  export { UNIVERSAL_ROUTER_ADDRESS, UNIVERSAL_ROUTER_CREATION_BLOCK, PERMIT2_ADDRESS, ROUTER_AS_RECIPIENT, WETH_ADDRESS, } from './utils/constants';
@@ -0,0 +1,23 @@
1
+ import { MixedRouteTrade, Trade as RouterTrade } from '@uniswap/router-sdk';
2
+ import { Trade as V2Trade, Pair } from '@uniswap/v2-sdk';
3
+ import { Trade as V3Trade, Pool, FeeAmount } from '@uniswap/v3-sdk';
4
+ import { SwapOptions } from '../../src';
5
+ import { TradeType, Ether, Token, Currency } from '@uniswap/sdk-core';
6
+ export declare const ETHER: Ether;
7
+ export declare const WETH: Token;
8
+ export declare const DAI: Token;
9
+ export declare const USDC: Token;
10
+ export declare const FEE_AMOUNT = FeeAmount.MEDIUM;
11
+ declare type UniswapPools = {
12
+ WETH_USDC_V2: Pair;
13
+ USDC_DAI_V2: Pair;
14
+ WETH_USDC_V3: Pool;
15
+ WETH_USDC_V3_LOW_FEE: Pool;
16
+ USDC_DAI_V3: Pool;
17
+ };
18
+ export declare function getUniswapPools(forkBlock?: number): Promise<UniswapPools>;
19
+ export declare function getPair(tokenA: Token, tokenB: Token, blockNumber: number): Promise<Pair>;
20
+ export declare function getPool(tokenA: Token, tokenB: Token, feeAmount: FeeAmount, blockNumber: number): Promise<Pool>;
21
+ export declare function swapOptions(options: Partial<SwapOptions>): SwapOptions;
22
+ export declare function buildTrade(trades: (V2Trade<Currency, Currency, TradeType> | V3Trade<Currency, Currency, TradeType> | MixedRouteTrade<Currency, Currency, TradeType>)[]): RouterTrade<Currency, Currency, TradeType>;
23
+ export {};
@@ -16,6 +16,37 @@ var sdkCore = require('@uniswap/sdk-core');
16
16
  require('jsbi');
17
17
  require('bignumber.js');
18
18
 
19
+ function _toPrimitive(t, r) {
20
+ if ("object" != typeof t || !t) return t;
21
+ var e = t[Symbol.toPrimitive];
22
+ if (void 0 !== e) {
23
+ var i = e.call(t, r || "default");
24
+ if ("object" != typeof i) return i;
25
+ throw new TypeError("@@toPrimitive must return a primitive value.");
26
+ }
27
+ return ("string" === r ? String : Number)(t);
28
+ }
29
+ function _toPropertyKey(t) {
30
+ var i = _toPrimitive(t, "string");
31
+ return "symbol" == typeof i ? i : String(i);
32
+ }
33
+ function _defineProperties(target, props) {
34
+ for (var i = 0; i < props.length; i++) {
35
+ var descriptor = props[i];
36
+ descriptor.enumerable = descriptor.enumerable || false;
37
+ descriptor.configurable = true;
38
+ if ("value" in descriptor) descriptor.writable = true;
39
+ Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
40
+ }
41
+ }
42
+ function _createClass(Constructor, protoProps, staticProps) {
43
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
44
+ if (staticProps) _defineProperties(Constructor, staticProps);
45
+ Object.defineProperty(Constructor, "prototype", {
46
+ writable: false
47
+ });
48
+ return Constructor;
49
+ }
19
50
  function _extends() {
20
51
  _extends = Object.assign ? Object.assign.bind() : function (target) {
21
52
  for (var i = 1; i < arguments.length; i++) {
@@ -78,8 +109,6 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
78
109
  RouterTradeType["UniswapTrade"] = "UniswapTrade";
79
110
  RouterTradeType["NFTTrade"] = "NFTTrade";
80
111
  RouterTradeType["UnwrapWETH"] = "UnwrapWETH";
81
- RouterTradeType["WrapSTETH"] = "WrapSTETH";
82
- RouterTradeType["UnwrapSTETH"] = "UnwrapSTETH";
83
112
  })(exports.RouterTradeType || (exports.RouterTradeType = {}));
84
113
 
85
114
  var NFTTrade = function NFTTrade(market, orders) {
@@ -140,8 +169,6 @@ var _ABI_DEFINITION;
140
169
  CommandType[CommandType["SEAPORT_V1_4"] = 32] = "SEAPORT_V1_4";
141
170
  CommandType[CommandType["EXECUTE_SUB_PLAN"] = 33] = "EXECUTE_SUB_PLAN";
142
171
  CommandType[CommandType["APPROVE_ERC20"] = 34] = "APPROVE_ERC20";
143
- CommandType[CommandType["WRAP_STETH"] = 35] = "WRAP_STETH";
144
- CommandType[CommandType["UNWRAP_STETH"] = 36] = "UNWRAP_STETH";
145
172
  })(exports.CommandType || (exports.CommandType = {}));
146
173
  var ALLOW_REVERT_FLAG = 0x80;
147
174
  var REVERTIBLE_COMMANDS = /*#__PURE__*/new Set([exports.CommandType.SEAPORT_V1_5, exports.CommandType.SEAPORT_V1_4, exports.CommandType.NFTX, exports.CommandType.LOOKS_RARE_V2, exports.CommandType.X2Y2_721, exports.CommandType.X2Y2_1155, exports.CommandType.FOUNDATION, exports.CommandType.SUDOSWAP, exports.CommandType.NFT20, exports.CommandType.EXECUTE_SUB_PLAN, exports.CommandType.CRYPTOPUNKS, exports.CommandType.ELEMENT_MARKET]);
@@ -149,7 +176,7 @@ var PERMIT_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 non
149
176
  var PERMIT_BATCH_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details,address spender,uint256 sigDeadline)';
150
177
  var PERMIT2_TRANSFER_FROM_STRUCT = '(address from,address to,uint160 amount,address token)';
151
178
  var PERMIT2_TRANSFER_FROM_BATCH_STRUCT = PERMIT2_TRANSFER_FROM_STRUCT + '[]';
152
- var ABI_DEFINITION = (_ABI_DEFINITION = {}, _ABI_DEFINITION[exports.CommandType.EXECUTE_SUB_PLAN] = ['bytes', 'bytes[]'], _ABI_DEFINITION[exports.CommandType.PERMIT2_PERMIT] = [PERMIT_STRUCT, 'bytes'], _ABI_DEFINITION[exports.CommandType.PERMIT2_PERMIT_BATCH] = [PERMIT_BATCH_STRUCT, 'bytes'], _ABI_DEFINITION[exports.CommandType.PERMIT2_TRANSFER_FROM] = ['address', 'address', 'uint160'], _ABI_DEFINITION[exports.CommandType.PERMIT2_TRANSFER_FROM_BATCH] = [PERMIT2_TRANSFER_FROM_BATCH_STRUCT], _ABI_DEFINITION[exports.CommandType.V3_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[exports.CommandType.V3_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[exports.CommandType.V2_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[exports.CommandType.V2_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[exports.CommandType.WRAP_ETH] = ['address', 'uint256'], _ABI_DEFINITION[exports.CommandType.UNWRAP_WETH] = ['address', 'uint256'], _ABI_DEFINITION[exports.CommandType.SWEEP] = ['address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.SWEEP_ERC721] = ['address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.SWEEP_ERC1155] = ['address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[exports.CommandType.TRANSFER] = ['address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.PAY_PORTION] = ['address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.BALANCE_CHECK_ERC20] = ['address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.OWNER_CHECK_721] = ['address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.OWNER_CHECK_1155] = ['address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[exports.CommandType.APPROVE_ERC20] = ['address', 'uint256'], _ABI_DEFINITION[exports.CommandType.WRAP_STETH] = ['address', 'uint256'], _ABI_DEFINITION[exports.CommandType.UNWRAP_STETH] = ['address', 'uint256'], _ABI_DEFINITION[exports.CommandType.SEAPORT_V1_5] = ['uint256', 'bytes'], _ABI_DEFINITION[exports.CommandType.SEAPORT_V1_4] = ['uint256', 'bytes'], _ABI_DEFINITION[exports.CommandType.NFTX] = ['uint256', 'bytes'], _ABI_DEFINITION[exports.CommandType.LOOKS_RARE_V2] = ['uint256', 'bytes'], _ABI_DEFINITION[exports.CommandType.X2Y2_721] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.X2Y2_1155] = ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[exports.CommandType.FOUNDATION] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.SUDOSWAP] = ['uint256', 'bytes'], _ABI_DEFINITION[exports.CommandType.NFT20] = ['uint256', 'bytes'], _ABI_DEFINITION[exports.CommandType.CRYPTOPUNKS] = ['uint256', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.ELEMENT_MARKET] = ['uint256', 'bytes'], _ABI_DEFINITION);
179
+ var ABI_DEFINITION = (_ABI_DEFINITION = {}, _ABI_DEFINITION[exports.CommandType.EXECUTE_SUB_PLAN] = ['bytes', 'bytes[]'], _ABI_DEFINITION[exports.CommandType.PERMIT2_PERMIT] = [PERMIT_STRUCT, 'bytes'], _ABI_DEFINITION[exports.CommandType.PERMIT2_PERMIT_BATCH] = [PERMIT_BATCH_STRUCT, 'bytes'], _ABI_DEFINITION[exports.CommandType.PERMIT2_TRANSFER_FROM] = ['address', 'address', 'uint160'], _ABI_DEFINITION[exports.CommandType.PERMIT2_TRANSFER_FROM_BATCH] = [PERMIT2_TRANSFER_FROM_BATCH_STRUCT], _ABI_DEFINITION[exports.CommandType.V3_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[exports.CommandType.V3_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[exports.CommandType.V2_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[exports.CommandType.V2_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[exports.CommandType.WRAP_ETH] = ['address', 'uint256'], _ABI_DEFINITION[exports.CommandType.UNWRAP_WETH] = ['address', 'uint256'], _ABI_DEFINITION[exports.CommandType.SWEEP] = ['address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.SWEEP_ERC721] = ['address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.SWEEP_ERC1155] = ['address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[exports.CommandType.TRANSFER] = ['address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.PAY_PORTION] = ['address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.BALANCE_CHECK_ERC20] = ['address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.OWNER_CHECK_721] = ['address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.OWNER_CHECK_1155] = ['address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[exports.CommandType.APPROVE_ERC20] = ['address', 'uint256'], _ABI_DEFINITION[exports.CommandType.SEAPORT_V1_5] = ['uint256', 'bytes'], _ABI_DEFINITION[exports.CommandType.SEAPORT_V1_4] = ['uint256', 'bytes'], _ABI_DEFINITION[exports.CommandType.NFTX] = ['uint256', 'bytes'], _ABI_DEFINITION[exports.CommandType.LOOKS_RARE_V2] = ['uint256', 'bytes'], _ABI_DEFINITION[exports.CommandType.X2Y2_721] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.X2Y2_1155] = ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[exports.CommandType.FOUNDATION] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.SUDOSWAP] = ['uint256', 'bytes'], _ABI_DEFINITION[exports.CommandType.NFT20] = ['uint256', 'bytes'], _ABI_DEFINITION[exports.CommandType.CRYPTOPUNKS] = ['uint256', 'address', 'uint256'], _ABI_DEFINITION[exports.CommandType.ELEMENT_MARKET] = ['uint256', 'bytes'], _ABI_DEFINITION);
153
180
  var RoutePlanner = /*#__PURE__*/function () {
154
181
  function RoutePlanner() {
155
182
  this.commands = '0x';
@@ -184,97 +211,71 @@ function createCommand(type, parameters) {
184
211
  }
185
212
 
186
213
  var _CHAIN_CONFIGS;
187
- var NOT_SUPPORTED_ON_CHAIN = '0x0000000000000000000000000000000000000000';
214
+ var WETH_NOT_SUPPORTED_ON_CHAIN = '0x0000000000000000000000000000000000000000';
188
215
  var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
189
- router: '0x3F6328669a86bef431Dc6F9201A5B90F7975a023',
216
+ router: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
190
217
  weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
191
- steth: '0xae7ab96520de3a18e5e111b5eaab095312d7fe84',
192
- wsteth: '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
193
218
  creationBlock: 17143817
194
219
  }, _CHAIN_CONFIGS[5] = {
195
- router: '0x3F6328669a86bef431Dc6F9201A5B90F7975a023',
220
+ router: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
196
221
  weth: '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6',
197
- steth: '0x1643E812aE58766192Cf7D2Cf9567dF2C37e9B7F',
198
- wsteth: '0x6320cD32aA674d2898A68ec82e869385Fc5f7E2f',
199
222
  creationBlock: 8940568
200
223
  }, _CHAIN_CONFIGS[11155111] = {
201
224
  router: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
202
225
  weth: '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14',
203
- steth: NOT_SUPPORTED_ON_CHAIN,
204
- wsteth: NOT_SUPPORTED_ON_CHAIN,
205
226
  creationBlock: 3543575
206
227
  }, _CHAIN_CONFIGS[137] = {
207
- router: '0x643770E279d5D0733F21d6DC03A8efbABf3255B4',
228
+ router: '0xec7BE89e9d109e7e3Fec59c222CF297125FEFda2',
208
229
  weth: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270',
209
- steth: NOT_SUPPORTED_ON_CHAIN,
210
- wsteth: NOT_SUPPORTED_ON_CHAIN,
211
- creationBlock: 46866777
230
+ creationBlock: 52210153
212
231
  }, _CHAIN_CONFIGS[80001] = {
213
232
  router: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
214
233
  weth: '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889',
215
- steth: NOT_SUPPORTED_ON_CHAIN,
216
- wsteth: NOT_SUPPORTED_ON_CHAIN,
217
234
  creationBlock: 35176052
218
235
  }, _CHAIN_CONFIGS[10] = {
219
- router: '0xeC8B0F7Ffe3ae75d7FfAb09429e3675bb63503e4',
236
+ router: '0xCb1355ff08Ab38bBCE60111F1bb2B784bE25D7e8',
220
237
  weth: '0x4200000000000000000000000000000000000006',
221
- steth: NOT_SUPPORTED_ON_CHAIN,
222
- wsteth: NOT_SUPPORTED_ON_CHAIN,
223
- creationBlock: 108825869
238
+ creationBlock: 114702266
224
239
  }, _CHAIN_CONFIGS[420] = {
225
240
  router: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
226
241
  weth: '0x4200000000000000000000000000000000000006',
227
- steth: NOT_SUPPORTED_ON_CHAIN,
228
- wsteth: NOT_SUPPORTED_ON_CHAIN,
229
242
  creationBlock: 8887728
230
243
  }, _CHAIN_CONFIGS[42161] = {
231
- router: '0xeC8B0F7Ffe3ae75d7FfAb09429e3675bb63503e4',
244
+ router: '0x5E325eDA8064b456f4781070C0738d849c824258',
232
245
  weth: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',
233
- steth: NOT_SUPPORTED_ON_CHAIN,
234
- wsteth: NOT_SUPPORTED_ON_CHAIN,
235
- creationBlock: 125861718
246
+ creationBlock: 169472836
236
247
  }, _CHAIN_CONFIGS[421613] = {
237
248
  router: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
238
249
  weth: '0xe39Ab88f8A4777030A534146A9Ca3B52bd5D43A3',
239
- steth: NOT_SUPPORTED_ON_CHAIN,
240
- wsteth: NOT_SUPPORTED_ON_CHAIN,
241
250
  creationBlock: 18815277
242
251
  }, _CHAIN_CONFIGS[42220] = {
243
- router: '0x88a3ED7F21A3fCF6adb86b6F878C5B7a02D20e9b',
244
- weth: NOT_SUPPORTED_ON_CHAIN,
245
- steth: NOT_SUPPORTED_ON_CHAIN,
246
- wsteth: NOT_SUPPORTED_ON_CHAIN,
247
- creationBlock: 21116361
252
+ router: '0x643770e279d5d0733f21d6dc03a8efbabf3255b4',
253
+ weth: WETH_NOT_SUPPORTED_ON_CHAIN,
254
+ creationBlock: 21407637
248
255
  }, _CHAIN_CONFIGS[44787] = {
249
256
  router: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
250
- weth: NOT_SUPPORTED_ON_CHAIN,
251
- steth: NOT_SUPPORTED_ON_CHAIN,
252
- wsteth: NOT_SUPPORTED_ON_CHAIN,
257
+ weth: WETH_NOT_SUPPORTED_ON_CHAIN,
253
258
  creationBlock: 17566658
254
259
  }, _CHAIN_CONFIGS[56] = {
255
- router: '0xeC8B0F7Ffe3ae75d7FfAb09429e3675bb63503e4',
260
+ router: '0x4Dae2f939ACf50408e13d58534Ff8c2776d45265',
256
261
  weth: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',
257
- steth: NOT_SUPPORTED_ON_CHAIN,
258
- wsteth: NOT_SUPPORTED_ON_CHAIN,
259
- creationBlock: 31254967
262
+ creationBlock: 35160263
260
263
  }, _CHAIN_CONFIGS[43114] = {
261
- router: '0x82635AF6146972cD6601161c4472ffe97237D292',
264
+ router: '0x4Dae2f939ACf50408e13d58534Ff8c2776d45265',
262
265
  weth: '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7',
263
- steth: NOT_SUPPORTED_ON_CHAIN,
264
- wsteth: NOT_SUPPORTED_ON_CHAIN,
265
- creationBlock: 34491144
266
+ creationBlock: 40237257
266
267
  }, _CHAIN_CONFIGS[84531] = {
267
268
  router: '0xd0872d928672ae2ff74bdb2f5130ac12229cafaf',
268
269
  weth: '0x4200000000000000000000000000000000000006',
269
- steth: NOT_SUPPORTED_ON_CHAIN,
270
- wsteth: NOT_SUPPORTED_ON_CHAIN,
271
270
  creationBlock: 6915289
272
271
  }, _CHAIN_CONFIGS[8453] = {
273
- router: '0xeC8B0F7Ffe3ae75d7FfAb09429e3675bb63503e4',
272
+ router: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
274
273
  weth: '0x4200000000000000000000000000000000000006',
275
- steth: NOT_SUPPORTED_ON_CHAIN,
276
- wsteth: NOT_SUPPORTED_ON_CHAIN,
277
- creationBlock: 3229053
274
+ creationBlock: 9107268
275
+ }, _CHAIN_CONFIGS[81457] = {
276
+ router: '0x643770E279d5D0733F21d6DC03A8efbABf3255B4',
277
+ weth: '0x4300000000000000000000000000000000000004',
278
+ creationBlock: 1116444
278
279
  }, _CHAIN_CONFIGS);
279
280
  var UNIVERSAL_ROUTER_ADDRESS = function UNIVERSAL_ROUTER_ADDRESS(chainId) {
280
281
  if (!(chainId in CHAIN_CONFIGS)) throw new Error("Universal Router not deployed on chain " + chainId);
@@ -286,17 +287,13 @@ var UNIVERSAL_ROUTER_CREATION_BLOCK = function UNIVERSAL_ROUTER_CREATION_BLOCK(c
286
287
  };
287
288
  var WETH_ADDRESS = function WETH_ADDRESS(chainId) {
288
289
  if (!(chainId in CHAIN_CONFIGS)) throw new Error("Universal Router not deployed on chain " + chainId);
289
- if (CHAIN_CONFIGS[chainId].weth == NOT_SUPPORTED_ON_CHAIN) throw new Error("Chain " + chainId + " does not have WETH");
290
+ if (CHAIN_CONFIGS[chainId].weth == WETH_NOT_SUPPORTED_ON_CHAIN) throw new Error("Chain " + chainId + " does not have WETH");
290
291
  return CHAIN_CONFIGS[chainId].weth;
291
292
  };
292
- var STETH_ADDRESS = function STETH_ADDRESS(chainId) {
293
- if (!(chainId in CHAIN_CONFIGS)) throw new Error("Universal Router not deployed on chain " + chainId);
294
- if (CHAIN_CONFIGS[chainId].steth == NOT_SUPPORTED_ON_CHAIN) throw new Error("Chain " + chainId + " does not have STETH support");
295
- return CHAIN_CONFIGS[chainId].steth;
296
- };
297
293
  var PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
298
294
  var CONTRACT_BALANCE = /*#__PURE__*/ethers.BigNumber.from(2).pow(255);
299
295
  var ETH_ADDRESS = '0x0000000000000000000000000000000000000000';
296
+ var E_ETH_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
300
297
  var ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
301
298
  var SENDER_AS_RECIPIENT = '0x0000000000000000000000000000000000000001';
302
299
  var ROUTER_AS_RECIPIENT = '0x0000000000000000000000000000000000000002';
@@ -316,17 +313,15 @@ var UniswapTrade = /*#__PURE__*/function () {
316
313
  this.options = options;
317
314
  this.tradeType = exports.RouterTradeType.UniswapTrade;
318
315
  if (!!options.fee && !!options.flatFee) throw new Error('Only one fee option permitted');
316
+ if (this.inputRequiresWrap) this.payerIsUser = false;else if (this.options.useRouterBalance) this.payerIsUser = false;else this.payerIsUser = true;
319
317
  }
320
318
  var _proto = UniswapTrade.prototype;
321
319
  _proto.encode = function encode(planner, _config) {
322
320
  var _this$options$recipie;
323
- var payerIsUser = !this.options.payerIsRouter;
324
321
  // If the input currency is the native currency, we need to wrap it with the router as the recipient
325
- if (this.trade.inputAmount.currency.isNative) {
322
+ if (this.inputRequiresWrap) {
326
323
  // TODO: optimize if only one v2 pool we can directly send this to the pool
327
324
  planner.addCommand(exports.CommandType.WRAP_ETH, [ROUTER_AS_RECIPIENT, this.trade.maximumAmountIn(this.options.slippageTolerance).quotient.toString()]);
328
- // since WETH is now owned by the router, the router pays for inputs
329
- payerIsUser = false;
330
325
  }
331
326
  // The overall recipient at the end of the trade, SENDER_AS_RECIPIENT uses the msg.sender
332
327
  this.options.recipient = (_this$options$recipie = this.options.recipient) != null ? _this$options$recipie : SENDER_AS_RECIPIENT;
@@ -336,19 +331,18 @@ var UniswapTrade = /*#__PURE__*/function () {
336
331
  // in that the reversion probability is lower
337
332
  var performAggregatedSlippageCheck = this.trade.tradeType === sdkCore.TradeType.EXACT_INPUT && this.trade.routes.length > 2;
338
333
  var outputIsNative = this.trade.outputAmount.currency.isNative;
339
- var inputIsNative = this.trade.inputAmount.currency.isNative;
340
334
  var routerMustCustody = performAggregatedSlippageCheck || outputIsNative || hasFeeOption(this.options);
341
335
  for (var _iterator = _createForOfIteratorHelperLoose(this.trade.swaps), _step; !(_step = _iterator()).done;) {
342
336
  var swap = _step.value;
343
337
  switch (swap.route.protocol) {
344
338
  case routerSdk.Protocol.V2:
345
- addV2Swap(planner, swap, this.trade.tradeType, this.options, payerIsUser, routerMustCustody);
339
+ addV2Swap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
346
340
  break;
347
341
  case routerSdk.Protocol.V3:
348
- addV3Swap(planner, swap, this.trade.tradeType, this.options, payerIsUser, routerMustCustody);
342
+ addV3Swap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
349
343
  break;
350
344
  case routerSdk.Protocol.MIXED:
351
- addMixedSwap(planner, swap, this.trade.tradeType, this.options, payerIsUser, routerMustCustody);
345
+ addMixedSwap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
352
346
  break;
353
347
  default:
354
348
  throw new Error('UNSUPPORTED_TRADE_PROTOCOL');
@@ -388,12 +382,19 @@ var UniswapTrade = /*#__PURE__*/function () {
388
382
  planner.addCommand(exports.CommandType.SWEEP, [this.trade.outputAmount.currency.wrapped.address, this.options.recipient, minimumAmountOut]);
389
383
  }
390
384
  }
391
- if (inputIsNative && (this.trade.tradeType === sdkCore.TradeType.EXACT_OUTPUT || riskOfPartialFill(this.trade))) {
385
+ if (this.inputRequiresWrap && (this.trade.tradeType === sdkCore.TradeType.EXACT_OUTPUT || riskOfPartialFill(this.trade))) {
392
386
  // for exactOutput swaps that take native currency as input
393
387
  // we need to send back the change to the user
394
388
  planner.addCommand(exports.CommandType.UNWRAP_WETH, [this.options.recipient, 0]);
395
389
  }
390
+ if (this.options.safeMode) planner.addCommand(exports.CommandType.SWEEP, [ETH_ADDRESS, this.options.recipient, 0]);
396
391
  };
392
+ _createClass(UniswapTrade, [{
393
+ key: "inputRequiresWrap",
394
+ get: function get() {
395
+ return this.trade.inputAmount.currency.isNative;
396
+ }
397
+ }]);
397
398
  return UniswapTrade;
398
399
  }();
399
400
  // encode a uniswap v2 swap
@@ -623,18 +624,11 @@ var SwapRouter = /*#__PURE__*/function () {
623
624
  allowRevert: false
624
625
  });
625
626
  currentNativeValueInRouter = currentNativeValueInRouter.add(UnwrapWETH.amount);
626
- /**
627
- * is (Un)WrapSTETH
628
- */
629
- } else if (trade.tradeType == exports.RouterTradeType.WrapSTETH || trade.tradeType == exports.RouterTradeType.UnwrapSTETH) {
630
- trade.encode(planner, {
631
- allowRevert: false
632
- });
633
627
  /**
634
628
  * else
635
629
  */
636
630
  } else {
637
- throw 'trade must be of instance: UniswapTrade, NFTTrade, UnwrapWETH, WrapSTETH';
631
+ throw 'trade must be of instance: UniswapTrade or NFTTrade';
638
632
  }
639
633
  }
640
634
  // TODO: matches current logic for now, but should eventually only sweep for multiple NFT trades
@@ -8198,7 +8192,7 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8198
8192
  var considerationRecipients = [];
8199
8193
  for (var i in protocolDatas) {
8200
8194
  var protocolData = protocolDatas[i];
8201
- var _loop = function _loop(j) {
8195
+ var _loop = function _loop() {
8202
8196
  var item = protocolData.parameters.consideration[j];
8203
8197
  if (considerationRecipients.findIndex(function (x) {
8204
8198
  return x === item.recipient;
@@ -8221,7 +8215,7 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8221
8215
  }
8222
8216
  };
8223
8217
  for (var j in protocolData.parameters.consideration) {
8224
- _loop(j);
8218
+ _loop();
8225
8219
  }
8226
8220
  }
8227
8221
  return considerationFulfillments;
@@ -10587,45 +10581,122 @@ var UnwrapWETH = /*#__PURE__*/function () {
10587
10581
  return UnwrapWETH;
10588
10582
  }();
10589
10583
 
10590
- var WrapSTETH = /*#__PURE__*/function () {
10591
- function WrapSTETH(amount, chainId, permit2, wrapAmount) {
10592
- this.tradeType = exports.RouterTradeType.WrapSTETH;
10593
- this.stethAddress = STETH_ADDRESS(chainId);
10594
- this.amount = amount;
10595
- this.wrapAmount = wrapAmount != null ? wrapAmount : CONTRACT_BALANCE;
10596
- if (!!permit2) {
10597
- !(permit2.details.token.toLowerCase() === this.stethAddress.toLowerCase()) ? invariant(false, "must be permitting STETH address: " + this.stethAddress) : void 0;
10598
- !(permit2.details.amount >= amount) ? invariant(false, "Did not permit enough STETH for unwrapSTETH transaction") : void 0;
10599
- this.permit2Data = permit2;
10600
- }
10601
- }
10602
- var _proto = WrapSTETH.prototype;
10603
- _proto.encode = function encode(planner, _) {
10604
- encodeInputTokenOptions(planner, {
10605
- permit2Permit: this.permit2Data,
10606
- permit2TransferFrom: {
10607
- token: this.stethAddress,
10608
- amount: this.amount.toString()
10584
+ (function (PoolType) {
10585
+ PoolType["V2Pool"] = "v2-pool";
10586
+ PoolType["V3Pool"] = "v3-pool";
10587
+ })(exports.PoolType || (exports.PoolType = {}));
10588
+ var isNativeCurrency = function isNativeCurrency(address) {
10589
+ return address.toLowerCase() === ETH_ADDRESS.toLowerCase() || address.toLowerCase() === E_ETH_ADDRESS.toLowerCase();
10590
+ };
10591
+ // Helper class to convert routing-specific quote entities to RouterTrade entities
10592
+ // the returned RouterTrade can then be used to build the UniswapTrade entity in this package
10593
+ var RouterTradeAdapter = /*#__PURE__*/function () {
10594
+ function RouterTradeAdapter() {}
10595
+ // Generate a RouterTrade using fields from a classic quote response
10596
+ RouterTradeAdapter.fromClassicQuote = function fromClassicQuote(quote) {
10597
+ var route = quote.route,
10598
+ tokenIn = quote.tokenIn,
10599
+ tokenOut = quote.tokenOut;
10600
+ if (!route) throw new Error('Expected route to be present');
10601
+ if (!route.length) throw new Error('Expected there to be at least one route');
10602
+ if (route.some(function (r) {
10603
+ return !r.length;
10604
+ })) throw new Error('Expected all routes to have at least one pool');
10605
+ var firstRoute = route[0];
10606
+ var tokenInData = firstRoute[0].tokenIn;
10607
+ var tokenOutData = firstRoute[firstRoute.length - 1].tokenOut;
10608
+ if (!tokenInData || !tokenOutData) throw new Error('Expected both tokenIn and tokenOut to be present');
10609
+ if (tokenInData.chainId !== tokenOutData.chainId) throw new Error('Expected tokenIn and tokenOut to be have same chainId');
10610
+ var parsedCurrencyIn = RouterTradeAdapter.toCurrency(isNativeCurrency(tokenIn), tokenInData);
10611
+ var parsedCurrencyOut = RouterTradeAdapter.toCurrency(isNativeCurrency(tokenOut), tokenOutData);
10612
+ var typedRoutes = route.map(function (subRoute) {
10613
+ var rawAmountIn = subRoute[0].amountIn;
10614
+ var rawAmountOut = subRoute[subRoute.length - 1].amountOut;
10615
+ if (!rawAmountIn || !rawAmountOut) {
10616
+ throw new Error('Expected both raw amountIn and raw amountOut to be present');
10609
10617
  }
10618
+ var inputAmount = sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn);
10619
+ var outputAmount = sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut);
10620
+ var isOnlyV2 = RouterTradeAdapter.isVersionedRoute(exports.PoolType.V2Pool, subRoute);
10621
+ var isOnlyV3 = RouterTradeAdapter.isVersionedRoute(exports.PoolType.V3Pool, subRoute);
10622
+ return {
10623
+ routev3: isOnlyV3 ? new v3Sdk.Route(subRoute.map(RouterTradeAdapter.toPool), parsedCurrencyIn, parsedCurrencyOut) : null,
10624
+ routev2: isOnlyV2 ? new v2Sdk.Route(subRoute.map(RouterTradeAdapter.toPair), parsedCurrencyIn, parsedCurrencyOut) : null,
10625
+ mixedRoute: !isOnlyV3 && !isOnlyV2 ? new routerSdk.MixedRouteSDK(subRoute.map(RouterTradeAdapter.toPoolOrPair), parsedCurrencyIn, parsedCurrencyOut) : null,
10626
+ inputAmount: inputAmount,
10627
+ outputAmount: outputAmount
10628
+ };
10629
+ });
10630
+ return new routerSdk.Trade({
10631
+ v2Routes: typedRoutes.filter(function (route) {
10632
+ return route.routev2;
10633
+ }).map(function (route) {
10634
+ return {
10635
+ routev2: route.routev2,
10636
+ inputAmount: route.inputAmount,
10637
+ outputAmount: route.outputAmount
10638
+ };
10639
+ }),
10640
+ v3Routes: typedRoutes.filter(function (route) {
10641
+ return route.routev3;
10642
+ }).map(function (route) {
10643
+ return {
10644
+ routev3: route.routev3,
10645
+ inputAmount: route.inputAmount,
10646
+ outputAmount: route.outputAmount
10647
+ };
10648
+ }),
10649
+ mixedRoutes: typedRoutes.filter(function (route) {
10650
+ return route.mixedRoute;
10651
+ }).map(function (route) {
10652
+ return {
10653
+ mixedRoute: route.mixedRoute,
10654
+ inputAmount: route.inputAmount,
10655
+ outputAmount: route.outputAmount
10656
+ };
10657
+ }),
10658
+ tradeType: quote.tradeType
10610
10659
  });
10611
- planner.addCommand(exports.CommandType.WRAP_STETH, [ROUTER_AS_RECIPIENT, this.wrapAmount]);
10612
10660
  };
10613
- return WrapSTETH;
10614
- }();
10615
-
10616
- var UnwrapSTETH = /*#__PURE__*/function () {
10617
- function UnwrapSTETH(recipient, amountMinimum, chainId) {
10618
- this.tradeType = exports.RouterTradeType.UnwrapSTETH;
10619
- this.recipient = recipient;
10620
- this.amountMinimum = amountMinimum;
10621
- !(STETH_ADDRESS(chainId) != NOT_SUPPORTED_ON_CHAIN) ? invariant(false, "STETH not supported on chain " + chainId) : void 0;
10622
- }
10623
- var _proto = UnwrapSTETH.prototype;
10624
- _proto.encode = function encode(planner, _) {
10625
- planner.addCommand(exports.CommandType.UNWRAP_STETH, [this.recipient, this.amountMinimum]);
10661
+ RouterTradeAdapter.toCurrency = function toCurrency(isNative, token) {
10662
+ if (isNative) {
10663
+ return sdkCore.Ether.onChain(token.chainId);
10664
+ }
10665
+ return this.toToken(token);
10626
10666
  };
10627
- return UnwrapSTETH;
10667
+ RouterTradeAdapter.toToken = function toToken(token) {
10668
+ var chainId = token.chainId,
10669
+ address = token.address,
10670
+ decimals = token.decimals,
10671
+ symbol = token.symbol,
10672
+ buyFeeBps = token.buyFeeBps,
10673
+ sellFeeBps = token.sellFeeBps;
10674
+ return new sdkCore.Token(chainId, address, parseInt(decimals.toString()), symbol, /* name */undefined, false, buyFeeBps ? ethers.BigNumber.from(buyFeeBps) : undefined, sellFeeBps ? ethers.BigNumber.from(sellFeeBps) : undefined);
10675
+ };
10676
+ RouterTradeAdapter.toPool = function toPool(_ref) {
10677
+ var fee = _ref.fee,
10678
+ sqrtRatioX96 = _ref.sqrtRatioX96,
10679
+ liquidity = _ref.liquidity,
10680
+ tickCurrent = _ref.tickCurrent,
10681
+ tokenIn = _ref.tokenIn,
10682
+ tokenOut = _ref.tokenOut;
10683
+ return new v3Sdk.Pool(RouterTradeAdapter.toToken(tokenIn), RouterTradeAdapter.toToken(tokenOut), parseInt(fee), sqrtRatioX96, liquidity, parseInt(tickCurrent));
10684
+ };
10685
+ RouterTradeAdapter.isVersionedRoute = function isVersionedRoute(type, route) {
10686
+ return route.every(function (pool) {
10687
+ return pool.type === type;
10688
+ });
10689
+ };
10690
+ return RouterTradeAdapter;
10628
10691
  }();
10692
+ RouterTradeAdapter.toPoolOrPair = function (pool) {
10693
+ return pool.type === exports.PoolType.V3Pool ? RouterTradeAdapter.toPool(pool) : RouterTradeAdapter.toPair(pool);
10694
+ };
10695
+ RouterTradeAdapter.toPair = function (_ref2) {
10696
+ var reserve0 = _ref2.reserve0,
10697
+ reserve1 = _ref2.reserve1;
10698
+ return new v2Sdk.Pair(sdkCore.CurrencyAmount.fromRawAmount(RouterTradeAdapter.toToken(reserve0.token), reserve0.quotient), sdkCore.CurrencyAmount.fromRawAmount(RouterTradeAdapter.toToken(reserve1.token), reserve1.quotient));
10699
+ };
10629
10700
 
10630
10701
  exports.CryptopunkTrade = CryptopunkTrade;
10631
10702
  exports.FoundationTrade = FoundationTrade;
@@ -10636,15 +10707,15 @@ exports.NFTXTrade = NFTXTrade;
10636
10707
  exports.PERMIT2_ADDRESS = PERMIT2_ADDRESS;
10637
10708
  exports.ROUTER_AS_RECIPIENT = ROUTER_AS_RECIPIENT;
10638
10709
  exports.RoutePlanner = RoutePlanner;
10710
+ exports.RouterTradeAdapter = RouterTradeAdapter;
10639
10711
  exports.SeaportTrade = SeaportTrade;
10640
10712
  exports.SudoswapTrade = SudoswapTrade;
10641
10713
  exports.SwapRouter = SwapRouter;
10642
10714
  exports.UNIVERSAL_ROUTER_ADDRESS = UNIVERSAL_ROUTER_ADDRESS;
10643
10715
  exports.UNIVERSAL_ROUTER_CREATION_BLOCK = UNIVERSAL_ROUTER_CREATION_BLOCK;
10644
10716
  exports.UniswapTrade = UniswapTrade;
10645
- exports.UnwrapSTETH = UnwrapSTETH;
10646
10717
  exports.UnwrapWETH = UnwrapWETH;
10647
10718
  exports.WETH_ADDRESS = WETH_ADDRESS;
10648
- exports.WrapSTETH = WrapSTETH;
10649
10719
  exports.X2Y2Trade = X2Y2Trade;
10720
+ exports.isNativeCurrency = isNativeCurrency;
10650
10721
  //# sourceMappingURL=universal-router-sdk.cjs.development.js.map