@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 +22 -0
- package/dist/entities/Command.d.ts +2 -1
- package/dist/entities/protocols/UnwrapWETH.d.ts +13 -0
- package/dist/index.d.ts +1 -1
- package/dist/test/forge/writeInterop.d.ts +1 -0
- package/dist/test/orders/looksRare.d.ts +12 -0
- package/dist/test/orders/seaport.d.ts +4 -0
- package/dist/test/orders/x2y2.d.ts +6 -0
- package/dist/test/utils/addresses.d.ts +2 -0
- package/dist/test/utils/hexToDecimalString.d.ts +2 -0
- package/dist/test/utils/permit2.d.ts +6 -0
- package/dist/test/utils/uniswapData.d.ts +24 -0
- package/dist/universal-router-sdk.cjs.development.js +48 -3
- package/dist/universal-router-sdk.cjs.development.js.map +1 -1
- package/dist/universal-router-sdk.cjs.production.min.js +1 -1
- package/dist/universal-router-sdk.cjs.production.min.js.map +1 -1
- package/dist/universal-router-sdk.esm.js +48 -4
- package/dist/universal-router-sdk.esm.js.map +1 -1
- package/dist/utils/constants.d.ts +1 -0
- package/package.json +4 -5
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`
|
|
@@ -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,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
|
-
|
|
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
|
-
|
|
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
|