@uniswap/universal-router-sdk 1.4.3 → 1.5.0-beta.0
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/dist/entities/NFTTrade.d.ts +5 -3
- package/dist/entities/protocols/element-market.d.ts +44 -0
- package/dist/entities/protocols/seaport.d.ts +11 -7
- package/dist/entities/protocols/uniswap.d.ts +1 -1
- package/dist/entities/protocols/unwrapWETH.d.ts +1 -2
- package/dist/test/orders/element.d.ts +7 -0
- package/dist/test/orders/seaport.d.ts +4 -3
- package/dist/test/orders/seaportV1_4.d.ts +2 -2
- package/dist/test/utils/addresses.d.ts +5 -0
- package/dist/test/utils/permit2.d.ts +1 -1
- package/dist/test/utils/uniswapData.d.ts +0 -1
- package/dist/universal-router-sdk.cjs.development.js +120 -45
- 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 +121 -47
- package/dist/universal-router-sdk.esm.js.map +1 -1
- package/dist/utils/constants.d.ts +5 -0
- package/dist/utils/inputTokens.d.ts +21 -0
- package/dist/utils/routerCommands.d.ts +10 -3
- package/package.json +4 -2
- package/dist/utils/permit2.d.ts +0 -6
|
@@ -9,7 +9,8 @@ import { LooksRareData } from './protocols/looksRare';
|
|
|
9
9
|
import { SudoswapData } from './protocols/sudoswap';
|
|
10
10
|
import { CryptopunkData } from './protocols/cryptopunk';
|
|
11
11
|
import { X2Y2Data } from './protocols/x2y2';
|
|
12
|
-
|
|
12
|
+
import { ElementData } from './protocols/element-market';
|
|
13
|
+
export declare type SupportedProtocolsData = SeaportData | FoundationData | NFTXData | LooksRareData | X2Y2Data | CryptopunkData | NFT20Data | SudoswapData | ElementData;
|
|
13
14
|
export declare abstract class NFTTrade<T> implements Command {
|
|
14
15
|
readonly tradeType: RouterTradeType;
|
|
15
16
|
readonly orders: T[];
|
|
@@ -17,7 +18,7 @@ export declare abstract class NFTTrade<T> implements Command {
|
|
|
17
18
|
constructor(market: Market, orders: T[]);
|
|
18
19
|
abstract encode(planner: RoutePlanner, config: TradeConfig): void;
|
|
19
20
|
abstract getBuyItems(): BuyItem[];
|
|
20
|
-
abstract getTotalPrice(): BigNumber;
|
|
21
|
+
abstract getTotalPrice(token?: string): BigNumber;
|
|
21
22
|
}
|
|
22
23
|
export declare type BuyItem = {
|
|
23
24
|
tokenAddress: string;
|
|
@@ -33,7 +34,8 @@ export declare enum Market {
|
|
|
33
34
|
Seaport = "seaport",
|
|
34
35
|
Sudoswap = "Sudoswap",
|
|
35
36
|
Cryptopunks = "cryptopunks",
|
|
36
|
-
X2Y2 = "x2y2"
|
|
37
|
+
X2Y2 = "x2y2",
|
|
38
|
+
Element = "element"
|
|
37
39
|
}
|
|
38
40
|
export declare enum TokenType {
|
|
39
41
|
ERC721 = "ERC721",
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Interface } from '@ethersproject/abi';
|
|
2
|
+
import { BuyItem, NFTTrade } from '../NFTTrade';
|
|
3
|
+
import { TradeConfig } from '../Command';
|
|
4
|
+
import { RoutePlanner } from '../../utils/routerCommands';
|
|
5
|
+
import { BigNumber } from 'ethers';
|
|
6
|
+
export interface Fee {
|
|
7
|
+
recipient: string;
|
|
8
|
+
amount: string;
|
|
9
|
+
feeData: string;
|
|
10
|
+
}
|
|
11
|
+
declare type ElementPartialData = {
|
|
12
|
+
maker: string;
|
|
13
|
+
taker: string;
|
|
14
|
+
expiry: string;
|
|
15
|
+
nonce: string;
|
|
16
|
+
erc20Token: string;
|
|
17
|
+
erc20TokenAmount: string;
|
|
18
|
+
fees: Fee[];
|
|
19
|
+
};
|
|
20
|
+
export declare type ERC721SellOrder = ElementPartialData & {
|
|
21
|
+
nft: string;
|
|
22
|
+
nftId: string;
|
|
23
|
+
};
|
|
24
|
+
export declare type OrderSignature = {
|
|
25
|
+
signatureType: number;
|
|
26
|
+
v: number;
|
|
27
|
+
r: string;
|
|
28
|
+
s: string;
|
|
29
|
+
};
|
|
30
|
+
export declare type ElementData = {
|
|
31
|
+
order: ERC721SellOrder;
|
|
32
|
+
signature: OrderSignature;
|
|
33
|
+
recipient: string;
|
|
34
|
+
};
|
|
35
|
+
export declare class ElementTrade extends NFTTrade<ElementData> {
|
|
36
|
+
private static ETH_ADDRESS;
|
|
37
|
+
static INTERFACE: Interface;
|
|
38
|
+
constructor(orders: ElementData[]);
|
|
39
|
+
encode(planner: RoutePlanner, config: TradeConfig): void;
|
|
40
|
+
getBuyItems(): BuyItem[];
|
|
41
|
+
getTotalPrice(): BigNumber;
|
|
42
|
+
getOrderPriceIncludingFees(order: ERC721SellOrder): BigNumber;
|
|
43
|
+
}
|
|
44
|
+
export {};
|
|
@@ -3,14 +3,18 @@ import { Interface } from '@ethersproject/abi';
|
|
|
3
3
|
import { BuyItem, NFTTrade } from '../NFTTrade';
|
|
4
4
|
import { TradeConfig } from '../Command';
|
|
5
5
|
import { RoutePlanner } from '../../utils/routerCommands';
|
|
6
|
-
|
|
7
|
-
V1_1 = 0,
|
|
8
|
-
V1_4 = 1
|
|
9
|
-
}
|
|
6
|
+
import { Permit2Permit } from '../../utils/inputTokens';
|
|
10
7
|
export declare type SeaportData = {
|
|
11
8
|
items: Order[];
|
|
12
9
|
recipient: string;
|
|
13
|
-
|
|
10
|
+
protocolAddress: string;
|
|
11
|
+
inputTokenProcessing?: InputTokenProcessing[];
|
|
12
|
+
};
|
|
13
|
+
export declare type InputTokenProcessing = {
|
|
14
|
+
token: string;
|
|
15
|
+
permit2Permit?: Permit2Permit;
|
|
16
|
+
protocolApproval: boolean;
|
|
17
|
+
permit2TransferFrom: boolean;
|
|
14
18
|
};
|
|
15
19
|
export declare type FulfillmentComponent = {
|
|
16
20
|
orderIndex: BigNumberish;
|
|
@@ -54,8 +58,8 @@ export declare class SeaportTrade extends NFTTrade<SeaportData> {
|
|
|
54
58
|
constructor(orders: SeaportData[]);
|
|
55
59
|
encode(planner: RoutePlanner, config: TradeConfig): void;
|
|
56
60
|
getBuyItems(): BuyItem[];
|
|
57
|
-
getTotalOrderPrice(order: SeaportData): BigNumber;
|
|
58
|
-
getTotalPrice(): BigNumber;
|
|
61
|
+
getTotalOrderPrice(order: SeaportData, token?: string): BigNumber;
|
|
62
|
+
getTotalPrice(token?: string): BigNumber;
|
|
59
63
|
private commandMap;
|
|
60
64
|
private getConsiderationFulfillments;
|
|
61
65
|
private getAdvancedOrderParams;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RoutePlanner } from '../../utils/routerCommands';
|
|
2
2
|
import { Trade as RouterTrade, SwapOptions as RouterSwapOptions } from '@uniswap/router-sdk';
|
|
3
|
-
import { Permit2Permit } from '../../utils/
|
|
3
|
+
import { Permit2Permit } from '../../utils/inputTokens';
|
|
4
4
|
import { Currency, TradeType } from '@uniswap/sdk-core';
|
|
5
5
|
import { Command, RouterTradeType, TradeConfig } from '../Command';
|
|
6
6
|
export declare type SwapOptions = Omit<RouterSwapOptions, 'inputTokenPermit'> & {
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { BigNumberish } from 'ethers';
|
|
2
2
|
import { RoutePlanner } from '../../utils/routerCommands';
|
|
3
|
-
import { Permit2Permit } from '../../utils/
|
|
3
|
+
import { Permit2Permit } from '../../utils/inputTokens';
|
|
4
4
|
import { Command, RouterTradeType, TradeConfig } from '../Command';
|
|
5
5
|
export declare class UnwrapWETH implements Command {
|
|
6
6
|
readonly tradeType: RouterTradeType;
|
|
7
7
|
readonly permit2Data: Permit2Permit;
|
|
8
8
|
readonly wethAddress: string;
|
|
9
|
-
readonly routerAddress: string;
|
|
10
9
|
readonly amount: BigNumberish;
|
|
11
10
|
constructor(amount: BigNumberish, chainId: number, permit2?: Permit2Permit);
|
|
12
11
|
encode(planner: RoutePlanner, _: TradeConfig): void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ElementData, OrderSignature, ERC721SellOrder } from '../../src/entities/protocols/element-market';
|
|
2
|
+
export declare const elementOrderETH: ERC721SellOrder;
|
|
3
|
+
export declare const elementSignatureETH: OrderSignature;
|
|
4
|
+
export declare const elementOrderETH_WithFees: ERC721SellOrder;
|
|
5
|
+
export declare const elementOrderETH_WithFees_Signature: OrderSignature;
|
|
6
|
+
export declare const elementDataETH: ElementData;
|
|
7
|
+
export declare const elementDataETH_WithFees: ElementData;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { SeaportData } from '../../src/entities/protocols/seaport';
|
|
1
|
+
import { ConsiderationItem, SeaportData } from '../../src/entities/protocols/seaport';
|
|
2
2
|
import { BigNumber } from 'ethers';
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const
|
|
3
|
+
export declare const seaportDataETH: SeaportData;
|
|
4
|
+
export declare const seaportDataERC20: SeaportData;
|
|
5
|
+
export declare function calculateSeaportValue(considerations: ConsiderationItem[], token: string): BigNumber;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { SeaportData } from '../../src/entities/protocols/seaport';
|
|
2
2
|
import { BigNumber } from 'ethers';
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const
|
|
3
|
+
export declare const seaportV1_4DataETH: SeaportData;
|
|
4
|
+
export declare const seaportV1_4ValueETH: BigNumber;
|
|
@@ -1,2 +1,7 @@
|
|
|
1
|
+
export declare const MAINNET_ROUTER_ADDRESS: string;
|
|
2
|
+
export declare const FORGE_ROUTER_ADDRESS = "0xe808c1cfeebb6cb36b537b82fa7c9eef31415a05";
|
|
3
|
+
export declare const FORGE_PERMIT2_ADDRESS = "0x4a873bdd49f7f9cc0a5458416a12973fab208f8d";
|
|
4
|
+
export declare const FORGE_SENDER_ADDRESS = "0xcf03dd0a894ef79cb5b601a43c4b25e3ae4c67ed";
|
|
5
|
+
export declare const TEST_RECIPIENT_ADDRESS = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
|
1
6
|
export declare const PERMIT2_ADDRESS: string;
|
|
2
7
|
export declare const ROUTER_ADDRESS: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Wallet } from 'ethers';
|
|
2
2
|
import { PermitSingle } from '@uniswap/permit2-sdk';
|
|
3
|
-
import { Permit2Permit } from '../../src/utils/
|
|
3
|
+
import { Permit2Permit } from '../../src/utils/inputTokens';
|
|
4
4
|
export declare function generatePermitSignature(permit: PermitSingle, signer: Wallet, chainId: number, permitAddress?: string): Promise<string>;
|
|
5
5
|
export declare function generateEip2098PermitSignature(permit: PermitSingle, signer: Wallet, chainId: number, permitAddress?: string): Promise<string>;
|
|
6
6
|
export declare function toInputPermit(signature: string, permit: PermitSingle): Permit2Permit;
|
|
@@ -4,7 +4,6 @@ import { Trade as V3Trade, Pool, FeeAmount } from '@uniswap/v3-sdk';
|
|
|
4
4
|
import { SwapOptions } from '../../src';
|
|
5
5
|
import { TradeType, Ether, Token, Currency } from '@uniswap/sdk-core';
|
|
6
6
|
export declare const ETHER: Ether;
|
|
7
|
-
export declare const RECIPIENT = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
|
8
7
|
export declare const WETH: Token;
|
|
9
8
|
export declare const DAI: Token;
|
|
10
9
|
export declare const USDC: Token;
|
|
@@ -82,11 +82,11 @@ var CommandType;
|
|
|
82
82
|
CommandType[CommandType["PAY_PORTION"] = 6] = "PAY_PORTION";
|
|
83
83
|
CommandType[CommandType["V2_SWAP_EXACT_IN"] = 8] = "V2_SWAP_EXACT_IN";
|
|
84
84
|
CommandType[CommandType["V2_SWAP_EXACT_OUT"] = 9] = "V2_SWAP_EXACT_OUT";
|
|
85
|
-
CommandType[CommandType["
|
|
85
|
+
CommandType[CommandType["PERMIT2_PERMIT"] = 10] = "PERMIT2_PERMIT";
|
|
86
86
|
CommandType[CommandType["WRAP_ETH"] = 11] = "WRAP_ETH";
|
|
87
87
|
CommandType[CommandType["UNWRAP_WETH"] = 12] = "UNWRAP_WETH";
|
|
88
88
|
CommandType[CommandType["PERMIT2_TRANSFER_FROM_BATCH"] = 13] = "PERMIT2_TRANSFER_FROM_BATCH";
|
|
89
|
-
CommandType[CommandType["
|
|
89
|
+
CommandType[CommandType["BALANCE_CHECK_ERC20"] = 14] = "BALANCE_CHECK_ERC20";
|
|
90
90
|
// NFT-related command types
|
|
91
91
|
CommandType[CommandType["SEAPORT"] = 16] = "SEAPORT";
|
|
92
92
|
CommandType[CommandType["LOOKS_RARE_721"] = 17] = "LOOKS_RARE_721";
|
|
@@ -95,23 +95,34 @@ var CommandType;
|
|
|
95
95
|
CommandType[CommandType["LOOKS_RARE_1155"] = 20] = "LOOKS_RARE_1155";
|
|
96
96
|
CommandType[CommandType["OWNER_CHECK_721"] = 21] = "OWNER_CHECK_721";
|
|
97
97
|
CommandType[CommandType["OWNER_CHECK_1155"] = 22] = "OWNER_CHECK_1155";
|
|
98
|
+
CommandType[CommandType["SWEEP_ERC721"] = 23] = "SWEEP_ERC721";
|
|
98
99
|
CommandType[CommandType["X2Y2_721"] = 24] = "X2Y2_721";
|
|
99
100
|
CommandType[CommandType["SUDOSWAP"] = 25] = "SUDOSWAP";
|
|
100
101
|
CommandType[CommandType["NFT20"] = 26] = "NFT20";
|
|
101
102
|
CommandType[CommandType["X2Y2_1155"] = 27] = "X2Y2_1155";
|
|
102
103
|
CommandType[CommandType["FOUNDATION"] = 28] = "FOUNDATION";
|
|
104
|
+
CommandType[CommandType["SWEEP_ERC1155"] = 29] = "SWEEP_ERC1155";
|
|
105
|
+
CommandType[CommandType["ELEMENT_MARKET"] = 30] = "ELEMENT_MARKET";
|
|
106
|
+
CommandType[CommandType["EXECUTE_SUB_PLAN"] = 32] = "EXECUTE_SUB_PLAN";
|
|
107
|
+
CommandType[CommandType["SEAPORT_V1_4"] = 33] = "SEAPORT_V1_4";
|
|
108
|
+
CommandType[CommandType["APPROVE_ERC20"] = 34] = "APPROVE_ERC20";
|
|
103
109
|
})(CommandType || (CommandType = {}));
|
|
104
|
-
var PERMIT_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce) details, address spender, uint256 sigDeadline)';
|
|
105
|
-
var PERMIT_BATCH_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details, address spender, uint256 sigDeadline)';
|
|
106
110
|
var ALLOW_REVERT_FLAG = 0x80;
|
|
107
|
-
var REVERTIBLE_COMMANDS = /*#__PURE__*/new Set([CommandType.SEAPORT, CommandType.SEAPORT_V1_4, CommandType.NFTX, CommandType.LOOKS_RARE_721, CommandType.LOOKS_RARE_1155, CommandType.X2Y2_721, CommandType.X2Y2_1155, CommandType.FOUNDATION, CommandType.SUDOSWAP, CommandType.NFT20, CommandType.CRYPTOPUNKS]);
|
|
108
|
-
var
|
|
111
|
+
var REVERTIBLE_COMMANDS = /*#__PURE__*/new Set([CommandType.SEAPORT, CommandType.SEAPORT_V1_4, CommandType.NFTX, CommandType.LOOKS_RARE_721, CommandType.LOOKS_RARE_1155, CommandType.X2Y2_721, CommandType.X2Y2_1155, CommandType.FOUNDATION, CommandType.SUDOSWAP, CommandType.NFT20, CommandType.EXECUTE_SUB_PLAN, CommandType.CRYPTOPUNKS, CommandType.ELEMENT_MARKET]);
|
|
112
|
+
var PERMIT_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce) details,address spender,uint256 sigDeadline)';
|
|
113
|
+
var PERMIT_BATCH_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details,address spender,uint256 sigDeadline)';
|
|
114
|
+
var PERMIT2_TRANSFER_FROM_STRUCT = '(address from,address to,uint160 amount,address token)';
|
|
115
|
+
var PERMIT2_TRANSFER_FROM_BATCH_STRUCT = PERMIT2_TRANSFER_FROM_STRUCT + '[]';
|
|
116
|
+
var ABI_DEFINITION = (_ABI_DEFINITION = {}, _ABI_DEFINITION[CommandType.EXECUTE_SUB_PLAN] = ['bytes', 'bytes[]'], _ABI_DEFINITION[CommandType.PERMIT2_PERMIT] = [PERMIT_STRUCT, 'bytes'], _ABI_DEFINITION[CommandType.PERMIT2_PERMIT_BATCH] = [PERMIT_BATCH_STRUCT, 'bytes'], _ABI_DEFINITION[CommandType.PERMIT2_TRANSFER_FROM] = ['address', 'address', 'uint160'], _ABI_DEFINITION[CommandType.PERMIT2_TRANSFER_FROM_BATCH] = [PERMIT2_TRANSFER_FROM_BATCH_STRUCT], _ABI_DEFINITION[CommandType.V3_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[CommandType.V3_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[CommandType.V2_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[CommandType.V2_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[CommandType.WRAP_ETH] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.UNWRAP_WETH] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.SWEEP] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.SWEEP_ERC721] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.SWEEP_ERC1155] = ['address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.TRANSFER] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.PAY_PORTION] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.BALANCE_CHECK_ERC20] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.OWNER_CHECK_721] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.OWNER_CHECK_1155] = ['address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.APPROVE_ERC20] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.SEAPORT] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.SEAPORT_V1_4] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.NFTX] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.LOOKS_RARE_721] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.LOOKS_RARE_1155] = ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.X2Y2_721] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.X2Y2_1155] = ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.FOUNDATION] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.SUDOSWAP] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.NFT20] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.CRYPTOPUNKS] = ['uint256', 'address', 'uint256'], _ABI_DEFINITION[CommandType.ELEMENT_MARKET] = ['uint256', 'bytes'], _ABI_DEFINITION);
|
|
109
117
|
var RoutePlanner = /*#__PURE__*/function () {
|
|
110
118
|
function RoutePlanner() {
|
|
111
119
|
this.commands = '0x';
|
|
112
120
|
this.inputs = [];
|
|
113
121
|
}
|
|
114
122
|
var _proto = RoutePlanner.prototype;
|
|
123
|
+
_proto.addSubPlan = function addSubPlan(subplan) {
|
|
124
|
+
this.addCommand(CommandType.EXECUTE_SUB_PLAN, [subplan.commands, subplan.inputs], true);
|
|
125
|
+
};
|
|
115
126
|
_proto.addCommand = function addCommand(type, parameters, allowRevert) {
|
|
116
127
|
if (allowRevert === void 0) {
|
|
117
128
|
allowRevert = false;
|
|
@@ -213,6 +224,8 @@ var CONTRACT_BALANCE = /*#__PURE__*/ethers.BigNumber.from(2).pow(255);
|
|
|
213
224
|
var ETH_ADDRESS = '0x0000000000000000000000000000000000000000';
|
|
214
225
|
var SENDER_AS_RECIPIENT = '0x0000000000000000000000000000000000000001';
|
|
215
226
|
var ROUTER_AS_RECIPIENT = '0x0000000000000000000000000000000000000002';
|
|
227
|
+
var OPENSEA_CONDUIT_SPENDER_ID = 0;
|
|
228
|
+
var SUDOSWAP_SPENDER_ID = 1;
|
|
216
229
|
|
|
217
230
|
var REFUND_ETH_PRICE_IMPACT_THRESHOLD = /*#__PURE__*/new sdkCore.Percent( /*#__PURE__*/JSBI.BigInt(50), /*#__PURE__*/JSBI.BigInt(100));
|
|
218
231
|
// Wrapper for uniswap router-sdk trade entity to encode swaps for Universal Router
|
|
@@ -374,15 +387,52 @@ function riskOfPartialFill(trade) {
|
|
|
374
387
|
|
|
375
388
|
var SIGNATURE_LENGTH = 65;
|
|
376
389
|
var EIP_2098_SIGNATURE_LENGTH = 64;
|
|
377
|
-
function encodePermit(planner,
|
|
378
|
-
var signature =
|
|
379
|
-
var length = ethers.ethers.utils.arrayify(
|
|
390
|
+
function encodePermit(planner, permit2) {
|
|
391
|
+
var signature = permit2.signature;
|
|
392
|
+
var length = ethers.ethers.utils.arrayify(permit2.signature).length;
|
|
380
393
|
// signature data provided for EIP-1271 may have length different from ECDSA signature
|
|
381
394
|
if (length === SIGNATURE_LENGTH || length === EIP_2098_SIGNATURE_LENGTH) {
|
|
382
395
|
// sanitizes signature to cover edge cases of malformed EIP-2098 sigs and v used as recovery id
|
|
383
|
-
signature = ethers.ethers.utils.joinSignature(ethers.ethers.utils.splitSignature(
|
|
396
|
+
signature = ethers.ethers.utils.joinSignature(ethers.ethers.utils.splitSignature(permit2.signature));
|
|
397
|
+
}
|
|
398
|
+
planner.addCommand(CommandType.PERMIT2_PERMIT, [permit2, signature]);
|
|
399
|
+
}
|
|
400
|
+
// Handles the encoding of commands needed to gather input tokens for a trade
|
|
401
|
+
// Approval: The router approving another address to take tokens.
|
|
402
|
+
// note: Only seaport and sudoswap support this action. Approvals are left open.
|
|
403
|
+
// Permit: A Permit2 signature-based Permit to allow the router to access a user's tokens
|
|
404
|
+
// Transfer: A Permit2 TransferFrom of tokens from a user to either the router or another address
|
|
405
|
+
function encodeInputTokenOptions(planner, options) {
|
|
406
|
+
// first ensure that all tokens provided for encoding are the same
|
|
407
|
+
if (!!options.approval && !!options.permit2Permit) !(options.approval.token === options.permit2Permit.details.token) ? invariant(false, "inconsistent token") : void 0;
|
|
408
|
+
if (!!options.approval && !!options.permit2TransferFrom) !(options.approval.token === options.permit2TransferFrom.token) ? invariant(false, "inconsistent token") : void 0;
|
|
409
|
+
if (!!options.permit2TransferFrom && !!options.permit2Permit) !(options.permit2TransferFrom.token === options.permit2Permit.details.token) ? invariant(false, "inconsistent token") : void 0;
|
|
410
|
+
// if an options.approval is required, add it
|
|
411
|
+
if (!!options.approval) {
|
|
412
|
+
planner.addCommand(CommandType.APPROVE_ERC20, [options.approval.token, mapApprovalProtocol(options.approval.protocol)]);
|
|
413
|
+
}
|
|
414
|
+
// if this order has a options.permit2Permit, encode it
|
|
415
|
+
if (!!options.permit2Permit) {
|
|
416
|
+
encodePermit(planner, options.permit2Permit);
|
|
417
|
+
}
|
|
418
|
+
if (!!options.permit2TransferFrom) {
|
|
419
|
+
planner.addCommand(CommandType.PERMIT2_TRANSFER_FROM, [options.permit2TransferFrom.token, options.permit2TransferFrom.recipient ? options.permit2TransferFrom.recipient : ROUTER_AS_RECIPIENT, options.permit2TransferFrom.amount]);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
function mapApprovalProtocol(protocolAddress) {
|
|
423
|
+
switch (protocolAddress.toLowerCase()) {
|
|
424
|
+
case '0x00000000006c3852cbef3e08e8df289169ede581':
|
|
425
|
+
// Seaport v1.1
|
|
426
|
+
return OPENSEA_CONDUIT_SPENDER_ID;
|
|
427
|
+
case '0x00000000000001ad428e4906ae43d8f9852d0dd6':
|
|
428
|
+
// Seaport v1.4
|
|
429
|
+
return OPENSEA_CONDUIT_SPENDER_ID;
|
|
430
|
+
case '0x2b2e8cda09bba9660dca5cb6233787738ad68329':
|
|
431
|
+
// Sudoswap
|
|
432
|
+
return SUDOSWAP_SPENDER_ID;
|
|
433
|
+
default:
|
|
434
|
+
throw new Error('unsupported protocol address');
|
|
384
435
|
}
|
|
385
|
-
planner.addCommand(CommandType.PERMIT, [permit, signature]);
|
|
386
436
|
}
|
|
387
437
|
|
|
388
438
|
var SwapRouter = /*#__PURE__*/function () {
|
|
@@ -419,7 +469,7 @@ var SwapRouter = /*#__PURE__*/function () {
|
|
|
419
469
|
currentNativeValueInRouter = currentNativeValueInRouter.sub(tradePrice);
|
|
420
470
|
}
|
|
421
471
|
/**
|
|
422
|
-
* is
|
|
472
|
+
* is UniswapTrade
|
|
423
473
|
*/
|
|
424
474
|
} else if (trade.tradeType == exports.RouterTradeType.UniswapTrade) {
|
|
425
475
|
var uniswapTrade = trade;
|
|
@@ -545,6 +595,7 @@ var NFTTrade = function NFTTrade(market, orders) {
|
|
|
545
595
|
Market["Sudoswap"] = "Sudoswap";
|
|
546
596
|
Market["Cryptopunks"] = "cryptopunks";
|
|
547
597
|
Market["X2Y2"] = "x2y2";
|
|
598
|
+
Market["Element"] = "element";
|
|
548
599
|
})(exports.Market || (exports.Market = {}));
|
|
549
600
|
(function (TokenType) {
|
|
550
601
|
TokenType["ERC721"] = "ERC721";
|
|
@@ -6986,10 +7037,6 @@ var abi$4 = [
|
|
|
6986
7037
|
}
|
|
6987
7038
|
];
|
|
6988
7039
|
|
|
6989
|
-
(function (SeaportVersion) {
|
|
6990
|
-
SeaportVersion[SeaportVersion["V1_1"] = 0] = "V1_1";
|
|
6991
|
-
SeaportVersion[SeaportVersion["V1_4"] = 1] = "V1_4";
|
|
6992
|
-
})(exports.SeaportVersion || (exports.SeaportVersion = {}));
|
|
6993
7040
|
var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
|
|
6994
7041
|
_inheritsLoose(SeaportTrade, _NFTTrade);
|
|
6995
7042
|
function SeaportTrade(orders) {
|
|
@@ -7019,17 +7066,33 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
|
|
|
7019
7066
|
} else {
|
|
7020
7067
|
calldata = SeaportTrade.INTERFACE.encodeFunctionData('fulfillAvailableAdvancedOrders', [advancedOrders, [], orderFulfillments, considerationFulFillments, SeaportTrade.OPENSEA_CONDUIT_KEY, order.recipient, 100]);
|
|
7021
7068
|
}
|
|
7022
|
-
|
|
7069
|
+
if (!!order.inputTokenProcessing) {
|
|
7070
|
+
for (var _iterator3 = _createForOfIteratorHelperLoose(order.inputTokenProcessing), _step3; !(_step3 = _iterator3()).done;) {
|
|
7071
|
+
var inputToken = _step3.value;
|
|
7072
|
+
encodeInputTokenOptions(planner, {
|
|
7073
|
+
approval: inputToken.protocolApproval ? {
|
|
7074
|
+
token: inputToken.token,
|
|
7075
|
+
protocol: order.protocolAddress
|
|
7076
|
+
} : undefined,
|
|
7077
|
+
permit2Permit: inputToken.permit2Permit,
|
|
7078
|
+
permit2TransferFrom: inputToken.permit2TransferFrom ? {
|
|
7079
|
+
token: inputToken.token,
|
|
7080
|
+
amount: this.getTotalOrderPrice(order, inputToken.token).toString()
|
|
7081
|
+
} : undefined
|
|
7082
|
+
});
|
|
7083
|
+
}
|
|
7084
|
+
}
|
|
7085
|
+
planner.addCommand(this.commandMap(order.protocolAddress), [this.getTotalOrderPrice(order, ETH_ADDRESS).toString(), calldata], config.allowRevert);
|
|
7023
7086
|
}
|
|
7024
7087
|
};
|
|
7025
7088
|
_proto.getBuyItems = function getBuyItems() {
|
|
7026
7089
|
var buyItems = [];
|
|
7027
|
-
for (var
|
|
7028
|
-
var order =
|
|
7029
|
-
for (var
|
|
7030
|
-
var item =
|
|
7031
|
-
for (var
|
|
7032
|
-
var offer =
|
|
7090
|
+
for (var _iterator4 = _createForOfIteratorHelperLoose(this.orders), _step4; !(_step4 = _iterator4()).done;) {
|
|
7091
|
+
var order = _step4.value;
|
|
7092
|
+
for (var _iterator5 = _createForOfIteratorHelperLoose(order.items), _step5; !(_step5 = _iterator5()).done;) {
|
|
7093
|
+
var item = _step5.value;
|
|
7094
|
+
for (var _iterator6 = _createForOfIteratorHelperLoose(item.parameters.offer), _step6; !(_step6 = _iterator6()).done;) {
|
|
7095
|
+
var offer = _step6.value;
|
|
7033
7096
|
buyItems.push({
|
|
7034
7097
|
tokenAddress: offer.token,
|
|
7035
7098
|
tokenId: offer.identifierOrCriteria,
|
|
@@ -7040,31 +7103,41 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
|
|
|
7040
7103
|
}
|
|
7041
7104
|
return buyItems;
|
|
7042
7105
|
};
|
|
7043
|
-
_proto.getTotalOrderPrice = function getTotalOrderPrice(order) {
|
|
7106
|
+
_proto.getTotalOrderPrice = function getTotalOrderPrice(order, token) {
|
|
7107
|
+
if (token === void 0) {
|
|
7108
|
+
token = ETH_ADDRESS;
|
|
7109
|
+
}
|
|
7044
7110
|
var totalOrderPrice = ethers.BigNumber.from(0);
|
|
7045
|
-
for (var
|
|
7046
|
-
var item =
|
|
7047
|
-
totalOrderPrice = totalOrderPrice.add(this.calculateValue(item.parameters.consideration));
|
|
7111
|
+
for (var _iterator7 = _createForOfIteratorHelperLoose(order.items), _step7; !(_step7 = _iterator7()).done;) {
|
|
7112
|
+
var item = _step7.value;
|
|
7113
|
+
totalOrderPrice = totalOrderPrice.add(this.calculateValue(item.parameters.consideration, token));
|
|
7048
7114
|
}
|
|
7049
7115
|
return totalOrderPrice;
|
|
7050
7116
|
};
|
|
7051
|
-
_proto.getTotalPrice = function getTotalPrice() {
|
|
7117
|
+
_proto.getTotalPrice = function getTotalPrice(token) {
|
|
7118
|
+
if (token === void 0) {
|
|
7119
|
+
token = ETH_ADDRESS;
|
|
7120
|
+
}
|
|
7052
7121
|
var totalPrice = ethers.BigNumber.from(0);
|
|
7053
|
-
for (var
|
|
7054
|
-
var order =
|
|
7055
|
-
for (var
|
|
7056
|
-
var item =
|
|
7057
|
-
totalPrice = totalPrice.add(this.calculateValue(item.parameters.consideration));
|
|
7122
|
+
for (var _iterator8 = _createForOfIteratorHelperLoose(this.orders), _step8; !(_step8 = _iterator8()).done;) {
|
|
7123
|
+
var order = _step8.value;
|
|
7124
|
+
for (var _iterator9 = _createForOfIteratorHelperLoose(order.items), _step9; !(_step9 = _iterator9()).done;) {
|
|
7125
|
+
var item = _step9.value;
|
|
7126
|
+
totalPrice = totalPrice.add(this.calculateValue(item.parameters.consideration, token));
|
|
7058
7127
|
}
|
|
7059
7128
|
}
|
|
7060
7129
|
return totalPrice;
|
|
7061
7130
|
};
|
|
7062
|
-
_proto.commandMap = function commandMap(
|
|
7063
|
-
switch (
|
|
7064
|
-
case
|
|
7131
|
+
_proto.commandMap = function commandMap(protocolAddress) {
|
|
7132
|
+
switch (protocolAddress.toLowerCase()) {
|
|
7133
|
+
case '0x00000000006c3852cbef3e08e8df289169ede581':
|
|
7134
|
+
// Seaport v1.1
|
|
7065
7135
|
return CommandType.SEAPORT;
|
|
7066
|
-
case
|
|
7136
|
+
case '0x00000000000001ad428e4906ae43d8f9852d0dd6':
|
|
7137
|
+
// Seaport v1.4
|
|
7067
7138
|
return CommandType.SEAPORT_V1_4;
|
|
7139
|
+
default:
|
|
7140
|
+
throw new Error('unsupported Seaport address');
|
|
7068
7141
|
}
|
|
7069
7142
|
};
|
|
7070
7143
|
_proto.getConsiderationFulfillments = function getConsiderationFulfillments(protocolDatas) {
|
|
@@ -7108,15 +7181,13 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
|
|
|
7108
7181
|
signature: data.signature,
|
|
7109
7182
|
extraData: '0x00'
|
|
7110
7183
|
};
|
|
7111
|
-
var value = this.calculateValue(data.parameters.consideration);
|
|
7112
7184
|
return {
|
|
7113
|
-
advancedOrder: advancedOrder
|
|
7114
|
-
value: value
|
|
7185
|
+
advancedOrder: advancedOrder
|
|
7115
7186
|
};
|
|
7116
7187
|
};
|
|
7117
|
-
_proto.calculateValue = function calculateValue(considerations) {
|
|
7188
|
+
_proto.calculateValue = function calculateValue(considerations, token) {
|
|
7118
7189
|
return considerations.reduce(function (amt, consideration) {
|
|
7119
|
-
return amt.add(consideration.startAmount);
|
|
7190
|
+
return consideration.token == token ? amt.add(consideration.startAmount) : amt;
|
|
7120
7191
|
}, ethers.BigNumber.from(0));
|
|
7121
7192
|
};
|
|
7122
7193
|
return SeaportTrade;
|
|
@@ -9442,7 +9513,6 @@ var UnwrapWETH = /*#__PURE__*/function () {
|
|
|
9442
9513
|
function UnwrapWETH(amount, chainId, permit2) {
|
|
9443
9514
|
this.tradeType = exports.RouterTradeType.UnwrapWETH;
|
|
9444
9515
|
this.wethAddress = WETH_ADDRESS(chainId);
|
|
9445
|
-
this.routerAddress = UNIVERSAL_ROUTER_ADDRESS(chainId);
|
|
9446
9516
|
this.amount = amount;
|
|
9447
9517
|
if (!!permit2) {
|
|
9448
9518
|
!(permit2.details.token === this.wethAddress) ? invariant(false, "must be permitting WETH address: " + this.wethAddress) : void 0;
|
|
@@ -9452,8 +9522,13 @@ var UnwrapWETH = /*#__PURE__*/function () {
|
|
|
9452
9522
|
}
|
|
9453
9523
|
var _proto = UnwrapWETH.prototype;
|
|
9454
9524
|
_proto.encode = function encode(planner, _) {
|
|
9455
|
-
|
|
9456
|
-
|
|
9525
|
+
encodeInputTokenOptions(planner, {
|
|
9526
|
+
permit2Permit: this.permit2Data,
|
|
9527
|
+
permit2TransferFrom: {
|
|
9528
|
+
token: this.wethAddress,
|
|
9529
|
+
amount: this.amount.toString()
|
|
9530
|
+
}
|
|
9531
|
+
});
|
|
9457
9532
|
planner.addCommand(CommandType.UNWRAP_WETH, [ROUTER_AS_RECIPIENT, this.amount]);
|
|
9458
9533
|
};
|
|
9459
9534
|
return UnwrapWETH;
|