@uniswap/universal-router-sdk 1.3.1 → 1.3.2

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
@@ -70,6 +70,28 @@ const uniswapTrade = new UniswapTrade(
70
70
  const { calldata, value } = SwapRouter.swapCallParameters([uniswapTrade, seaportTrades, looksRareTrades])
71
71
  ```
72
72
 
73
+ ### Using WETH for NFT Trades
74
+ The current router purchases all NFTs with ETH, but you can send WETH to the router to be unwrapped for ETH right before the NFT commands. Similar to ERC20 Uniswap Trades for NFTs, supplemental ETH will be sent in the transaction if the WETH amount will not cover the NFT buys. You can also use ERC20s and WETH to cover the transaction by including both commands before the NFT purchase.
75
+
76
+ ```typescript
77
+ import {
78
+ ROUTER_AS_RECIPIENT,
79
+ UniswapTrade,
80
+ LooksRareTrade,
81
+ LooksRareData,
82
+ SeaportTrade,
83
+ SeaportData
84
+ } from "@uniswap/universal-router-sdk";
85
+
86
+ const looksRareTrades = new LooksRareTrade([looksrareData1, looksrareData2])
87
+ const seaportTrades = new SeaportTrade([seaportData1])
88
+ // if no Permit needed, omit the third var of type Permit2Permit
89
+ const unwrapWETH = new UnwrapWETH(amountWETH, chainId, optionalPermit2Params)
90
+
91
+ // Use the raw calldata and value returned to call into Universal Swap Router contracts
92
+ const { calldata, value } = SwapRouter.swapCallParameters([unwrapWETH, seaportTrades, looksRareTrades])
93
+ ```
94
+
73
95
 
74
96
  ## Running this package
75
97
  Make sure you are running `node v16`
@@ -4,7 +4,8 @@ export declare type TradeConfig = {
4
4
  };
5
5
  export declare enum RouterTradeType {
6
6
  UniswapTrade = "UniswapTrade",
7
- NFTTrade = "NFTTrade"
7
+ NFTTrade = "NFTTrade",
8
+ UnwrapWETH = "UnwrapWETH"
8
9
  }
9
10
  export interface Command {
10
11
  tradeType: RouterTradeType;
@@ -0,0 +1,13 @@
1
+ import { BigNumberish } from 'ethers';
2
+ import { RoutePlanner } from '../../utils/routerCommands';
3
+ import { Permit2Permit } from '../../utils/permit2';
4
+ import { Command, RouterTradeType, TradeConfig } from '../Command';
5
+ export declare class UnwrapWETH implements Command {
6
+ readonly tradeType: RouterTradeType;
7
+ readonly permit2Data: Permit2Permit;
8
+ readonly wethAddress: string;
9
+ readonly routerAddress: string;
10
+ readonly amount: BigNumberish;
11
+ constructor(amount: BigNumberish, chainId: number, permit2?: Permit2Permit);
12
+ encode(planner: RoutePlanner, _: TradeConfig): void;
13
+ }
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { SwapRouter } from './swapRouter';
2
2
  export * from './entities';
3
- export { UNIVERSAL_ROUTER_ADDRESS, PERMIT2_ADDRESS, ROUTER_AS_RECIPIENT } from './utils/constants';
3
+ export { UNIVERSAL_ROUTER_ADDRESS, PERMIT2_ADDRESS, ROUTER_AS_RECIPIENT, WETH_ADDRESS } from './utils/constants';
@@ -0,0 +1 @@
1
+ export declare function registerFixture(key: string, data: any): void;
@@ -0,0 +1,12 @@
1
+ import { MakerOrder, TakerOrder } from '../../src/entities/protocols/looksRare';
2
+ import { BigNumber } from 'ethers';
3
+ export declare type APIOrder = Omit<MakerOrder, 'collection' | 'currency'> & {
4
+ collectionAddress: string;
5
+ currencyAddress: string;
6
+ };
7
+ export declare function createLooksRareOrders(apiOrder: APIOrder, taker: string): {
8
+ makerOrder: MakerOrder;
9
+ takerOrder: TakerOrder;
10
+ value: BigNumber;
11
+ };
12
+ export declare const looksRareOrders: APIOrder[];
@@ -0,0 +1,4 @@
1
+ import { SeaportData } from '../../src/entities/protocols/seaport';
2
+ import { BigNumber } from 'ethers';
3
+ export declare const seaportData2Covens: SeaportData;
4
+ export declare const seaportValue: BigNumber;
@@ -0,0 +1,6 @@
1
+ export declare const x2y2Orders: {
2
+ input: string;
3
+ order_id: number;
4
+ token_id: string;
5
+ price: string;
6
+ }[];
@@ -0,0 +1,2 @@
1
+ export declare const PERMIT2_ADDRESS: string;
2
+ export declare const ROUTER_ADDRESS: string;
@@ -0,0 +1,2 @@
1
+ import { BigNumberish } from 'ethers';
2
+ export declare function hexToDecimalString(hex: BigNumberish): string;
@@ -0,0 +1,6 @@
1
+ import { Wallet } from 'ethers';
2
+ import { PermitSingle } from '@uniswap/permit2-sdk';
3
+ import { Permit2Permit } from '../../src/utils/permit2';
4
+ export declare function generatePermitSignature(permit: PermitSingle, signer: Wallet, chainId: number, permitAddress?: string): Promise<string>;
5
+ export declare function toInputPermit(signature: string, permit: PermitSingle): Permit2Permit;
6
+ export declare function makePermit(token: string, amount?: string, nonce?: string, routerAddress?: string): PermitSingle;
@@ -0,0 +1,24 @@
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 RECIPIENT = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
8
+ export declare const WETH: Token;
9
+ export declare const DAI: Token;
10
+ export declare const USDC: Token;
11
+ export declare const FEE_AMOUNT = FeeAmount.MEDIUM;
12
+ declare type UniswapPools = {
13
+ WETH_USDC_V2: Pair;
14
+ USDC_DAI_V2: Pair;
15
+ WETH_USDC_V3: Pool;
16
+ WETH_USDC_V3_LOW_FEE: Pool;
17
+ USDC_DAI_V3: Pool;
18
+ };
19
+ export declare function getUniswapPools(forkBlock?: number): Promise<UniswapPools>;
20
+ export declare function getPair(tokenA: Token, tokenB: Token, blockNumber: number): Promise<Pair>;
21
+ export declare function getPool(tokenA: Token, tokenB: Token, feeAmount: FeeAmount, blockNumber: number): Promise<Pool>;
22
+ export declare function swapOptions(options: Partial<SwapOptions>): SwapOptions;
23
+ export declare function buildTrade(trades: (V2Trade<Currency, Currency, TradeType> | V3Trade<Currency, Currency, TradeType> | MixedRouteTrade<Currency, Currency, TradeType>)[]): RouterTrade<Currency, Currency, TradeType>;
24
+ export {};
@@ -62,6 +62,7 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
62
62
  (function (RouterTradeType) {
63
63
  RouterTradeType["UniswapTrade"] = "UniswapTrade";
64
64
  RouterTradeType["NFTTrade"] = "NFTTrade";
65
+ RouterTradeType["UnwrapWETH"] = "UnwrapWETH";
65
66
  })(exports.RouterTradeType || (exports.RouterTradeType = {}));
66
67
 
67
68
  var _ABI_DEFINITION;
@@ -137,7 +138,7 @@ function createCommand(type, parameters) {
137
138
  var UNIVERSAL_ROUTER_ADDRESS = function UNIVERSAL_ROUTER_ADDRESS(chainId) {
138
139
  switch (chainId) {
139
140
  case 1:
140
- //mainnet
141
+ // mainnet
141
142
  return '0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B';
142
143
  case 5:
143
144
  // goerli
@@ -164,6 +165,33 @@ var UNIVERSAL_ROUTER_ADDRESS = function UNIVERSAL_ROUTER_ADDRESS(chainId) {
164
165
  throw new Error("Universal Router not deployed on chain " + chainId);
165
166
  }
166
167
  };
168
+ var WETH_ADDRESS = function WETH_ADDRESS(chainId) {
169
+ switch (chainId) {
170
+ case 1:
171
+ //mainnet
172
+ return '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2';
173
+ case 5:
174
+ // goerli
175
+ return '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6';
176
+ case 137:
177
+ // polygon
178
+ return '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270';
179
+ case 10:
180
+ // optimism
181
+ return '0x4200000000000000000000000000000000000006';
182
+ case 42161:
183
+ // arbitrum
184
+ return '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1';
185
+ case 420:
186
+ // optimism goerli
187
+ return '0x4200000000000000000000000000000000000006';
188
+ case 421613:
189
+ // arbitrum goerli
190
+ return '0xe39Ab88f8A4777030A534146A9Ca3B52bd5D43A3';
191
+ default:
192
+ throw new Error("WETH9 or UniversalRouter not deployed on chain " + chainId);
193
+ }
194
+ };
167
195
  var PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
168
196
  var CONTRACT_BALANCE = /*#__PURE__*/ethers.BigNumber.from(2).pow(255);
169
197
  var ETH_ADDRESS = '0x0000000000000000000000000000000000000000';
@@ -349,7 +377,9 @@ var SwapRouter = /*#__PURE__*/function () {
349
377
  var transactionValue = ethers.BigNumber.from(0);
350
378
  for (var _iterator = _createForOfIteratorHelperLoose(trades), _step; !(_step = _iterator()).done;) {
351
379
  var trade = _step.value;
352
- // is NFTTrade
380
+ /**
381
+ * is NFTTrade
382
+ */
353
383
  if (trade.tradeType == exports.RouterTradeType.NFTTrade) {
354
384
  var nftTrade = trade;
355
385
  nftTrade.encode(planner, {
@@ -363,7 +393,9 @@ var SwapRouter = /*#__PURE__*/function () {
363
393
  } else {
364
394
  currentNativeValueInRouter = currentNativeValueInRouter.sub(tradePrice);
365
395
  }
366
- // is UniswapTrade
396
+ /**
397
+ * is Uniswap Trade
398
+ */
367
399
  } else if (trade.tradeType == exports.RouterTradeType.UniswapTrade) {
368
400
  var uniswapTrade = trade;
369
401
  var inputIsNative = uniswapTrade.trade.inputAmount.currency.isNative;
@@ -383,6 +415,18 @@ var SwapRouter = /*#__PURE__*/function () {
383
415
  uniswapTrade.encode(planner, {
384
416
  allowRevert: false
385
417
  });
418
+ /**
419
+ * is UnwrapWETH
420
+ */
421
+ } else if (trade.tradeType == exports.RouterTradeType.UnwrapWETH) {
422
+ var UnwrapWETH = trade;
423
+ trade.encode(planner, {
424
+ allowRevert: false
425
+ });
426
+ currentNativeValueInRouter = currentNativeValueInRouter.add(UnwrapWETH.amount);
427
+ /**
428
+ * else
429
+ */
386
430
  } else {
387
431
  throw 'trade must be of instance: UniswapTrade or NFTTrade';
388
432
  }
@@ -9362,5 +9406,6 @@ exports.SudoswapTrade = SudoswapTrade;
9362
9406
  exports.SwapRouter = SwapRouter;
9363
9407
  exports.UNIVERSAL_ROUTER_ADDRESS = UNIVERSAL_ROUTER_ADDRESS;
9364
9408
  exports.UniswapTrade = UniswapTrade;
9409
+ exports.WETH_ADDRESS = WETH_ADDRESS;
9365
9410
  exports.X2Y2Trade = X2Y2Trade;
9366
9411
  //# sourceMappingURL=universal-router-sdk.cjs.development.js.map