@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.
@@ -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
- export declare type SupportedProtocolsData = SeaportData | FoundationData | NFTXData | LooksRareData | X2Y2Data | CryptopunkData | NFT20Data | SudoswapData;
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
- export declare enum SeaportVersion {
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
- version: SeaportVersion;
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/permit2';
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/permit2';
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 seaportData2Covens: SeaportData;
4
- export declare const seaportValue: BigNumber;
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 seaportV1_4Data: SeaportData;
4
- export declare const seaportV1_4Value: BigNumber;
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/permit2';
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["PERMIT"] = 10] = "PERMIT";
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["SEAPORT_V1_4"] = 14] = "SEAPORT_V1_4";
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 ABI_DEFINITION = (_ABI_DEFINITION = {}, _ABI_DEFINITION[CommandType.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] = ['bytes'], _ABI_DEFINITION[CommandType.TRANSFER] = ['address', 'address', 'uint256'], _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.SEAPORT] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.SEAPORT_V1_4] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.WRAP_ETH] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.UNWRAP_WETH] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.SWEEP] = ['address', 'address', 'uint256'], _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.PAY_PORTION] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.SUDOSWAP] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.OWNER_CHECK_721] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.OWNER_CHECK_1155] = ['address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.NFT20] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.CRYPTOPUNKS] = ['uint256', 'address', 'uint256'], _ABI_DEFINITION);
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, permit) {
378
- var signature = permit.signature;
379
- var length = ethers.ethers.utils.arrayify(permit.signature).length;
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(permit.signature));
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 Uniswap Trade
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
- planner.addCommand(this.commandMap(order.version), [this.getTotalOrderPrice(order).toString(), calldata], config.allowRevert);
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 _iterator3 = _createForOfIteratorHelperLoose(this.orders), _step3; !(_step3 = _iterator3()).done;) {
7028
- var order = _step3.value;
7029
- for (var _iterator4 = _createForOfIteratorHelperLoose(order.items), _step4; !(_step4 = _iterator4()).done;) {
7030
- var item = _step4.value;
7031
- for (var _iterator5 = _createForOfIteratorHelperLoose(item.parameters.offer), _step5; !(_step5 = _iterator5()).done;) {
7032
- var offer = _step5.value;
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 _iterator6 = _createForOfIteratorHelperLoose(order.items), _step6; !(_step6 = _iterator6()).done;) {
7046
- var item = _step6.value;
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 _iterator7 = _createForOfIteratorHelperLoose(this.orders), _step7; !(_step7 = _iterator7()).done;) {
7054
- var order = _step7.value;
7055
- for (var _iterator8 = _createForOfIteratorHelperLoose(order.items), _step8; !(_step8 = _iterator8()).done;) {
7056
- var item = _step8.value;
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(version) {
7063
- switch (version) {
7064
- case exports.SeaportVersion.V1_1:
7131
+ _proto.commandMap = function commandMap(protocolAddress) {
7132
+ switch (protocolAddress.toLowerCase()) {
7133
+ case '0x00000000006c3852cbef3e08e8df289169ede581':
7134
+ // Seaport v1.1
7065
7135
  return CommandType.SEAPORT;
7066
- case exports.SeaportVersion.V1_4:
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
- if (!!this.permit2Data) encodePermit(planner, this.permit2Data);
9456
- planner.addCommand(CommandType.PERMIT2_TRANSFER_FROM, [this.wethAddress, this.routerAddress, this.amount]);
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;