@opensea/seaport-js 1.0.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.
Files changed (74) hide show
  1. package/README.md +45 -0
  2. package/lib/abi/ERC1155.d.ts +29 -0
  3. package/lib/abi/ERC1155.js +319 -0
  4. package/lib/abi/ERC1155.js.map +1 -0
  5. package/lib/abi/ERC20.d.ts +29 -0
  6. package/lib/abi/ERC20.js +317 -0
  7. package/lib/abi/ERC20.js.map +1 -0
  8. package/lib/abi/ERC721.d.ts +29 -0
  9. package/lib/abi/ERC721.js +337 -0
  10. package/lib/abi/ERC721.js.map +1 -0
  11. package/lib/abi/Seaport.d.ts +112 -0
  12. package/lib/abi/Seaport.js +2585 -0
  13. package/lib/abi/Seaport.js.map +1 -0
  14. package/lib/constants.d.ts +49 -0
  15. package/lib/constants.js +73 -0
  16. package/lib/constants.js.map +1 -0
  17. package/lib/index.d.ts +2 -0
  18. package/lib/index.js +6 -0
  19. package/lib/index.js.map +1 -0
  20. package/lib/seaport.d.ts +181 -0
  21. package/lib/seaport.js +720 -0
  22. package/lib/seaport.js.map +1 -0
  23. package/lib/typechain/ERC1155.d.ts +189 -0
  24. package/lib/typechain/ERC1155.js +3 -0
  25. package/lib/typechain/ERC1155.js.map +1 -0
  26. package/lib/typechain/ERC20.d.ts +209 -0
  27. package/lib/typechain/ERC20.js +3 -0
  28. package/lib/typechain/ERC20.js.map +1 -0
  29. package/lib/typechain/ERC721.d.ts +220 -0
  30. package/lib/typechain/ERC721.js +3 -0
  31. package/lib/typechain/ERC721.js.map +1 -0
  32. package/lib/typechain/Seaport.d.ts +686 -0
  33. package/lib/typechain/Seaport.js +3 -0
  34. package/lib/typechain/Seaport.js.map +1 -0
  35. package/lib/typechain/common.d.ts +21 -0
  36. package/lib/typechain/common.js +3 -0
  37. package/lib/typechain/common.js.map +1 -0
  38. package/lib/types.d.ts +207 -0
  39. package/lib/types.js +3 -0
  40. package/lib/types.js.map +1 -0
  41. package/lib/utils/approval.d.ts +9 -0
  42. package/lib/utils/approval.js +108 -0
  43. package/lib/utils/approval.js.map +1 -0
  44. package/lib/utils/balance.d.ts +4 -0
  45. package/lib/utils/balance.js +86 -0
  46. package/lib/utils/balance.js.map +1 -0
  47. package/lib/utils/balanceAndApprovalCheck.d.ts +108 -0
  48. package/lib/utils/balanceAndApprovalCheck.js +322 -0
  49. package/lib/utils/balanceAndApprovalCheck.js.map +1 -0
  50. package/lib/utils/criteria.d.ts +14 -0
  51. package/lib/utils/criteria.js +91 -0
  52. package/lib/utils/criteria.js.map +1 -0
  53. package/lib/utils/fulfill.d.ts +84 -0
  54. package/lib/utils/fulfill.js +573 -0
  55. package/lib/utils/fulfill.js.map +1 -0
  56. package/lib/utils/gcd.d.ts +3 -0
  57. package/lib/utils/gcd.js +25 -0
  58. package/lib/utils/gcd.js.map +1 -0
  59. package/lib/utils/item.d.ts +29 -0
  60. package/lib/utils/item.js +136 -0
  61. package/lib/utils/item.js.map +1 -0
  62. package/lib/utils/match.d.ts +54 -0
  63. package/lib/utils/match.js +56 -0
  64. package/lib/utils/match.js.map +1 -0
  65. package/lib/utils/merkletree.d.ts +11 -0
  66. package/lib/utils/merkletree.js +32 -0
  67. package/lib/utils/merkletree.js.map +1 -0
  68. package/lib/utils/order.d.ts +37 -0
  69. package/lib/utils/order.js +224 -0
  70. package/lib/utils/order.js.map +1 -0
  71. package/lib/utils/usecase.d.ts +4 -0
  72. package/lib/utils/usecase.js +158 -0
  73. package/lib/utils/usecase.js.map +1 -0
  74. package/package.json +93 -0
@@ -0,0 +1,573 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (_) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __read = (this && this.__read) || function (o, n) {
50
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
51
+ if (!m) return o;
52
+ var i = m.call(o), r, ar = [], e;
53
+ try {
54
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55
+ }
56
+ catch (error) { e = { error: error }; }
57
+ finally {
58
+ try {
59
+ if (r && !r.done && (m = i["return"])) m.call(i);
60
+ }
61
+ finally { if (e) throw e.error; }
62
+ }
63
+ return ar;
64
+ };
65
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
66
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
67
+ if (ar || !(i in from)) {
68
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
69
+ ar[i] = from[i];
70
+ }
71
+ }
72
+ return to.concat(ar || Array.prototype.slice.call(from));
73
+ };
74
+ var _a, _b, _c, _d;
75
+ Object.defineProperty(exports, "__esModule", { value: true });
76
+ exports.getAdvancedOrderNumeratorDenominator = exports.generateFulfillOrdersFulfillments = exports.fulfillAvailableOrders = exports.validateAndSanitizeFromOrderStatus = exports.fulfillStandardOrder = exports.fulfillBasicOrder = exports.shouldUseBasicFulfill = void 0;
77
+ var ethers_1 = require("ethers");
78
+ var constants_1 = require("../constants");
79
+ var approval_1 = require("./approval");
80
+ var balanceAndApprovalCheck_1 = require("./balanceAndApprovalCheck");
81
+ var criteria_1 = require("./criteria");
82
+ var gcd_1 = require("./gcd");
83
+ var item_1 = require("./item");
84
+ var order_1 = require("./order");
85
+ var usecase_1 = require("./usecase");
86
+ /**
87
+ * We should use basic fulfill order if the order adheres to the following criteria:
88
+ * 1. The order should not be partially filled.
89
+ * 2. The order only contains a single offer item and contains at least one consideration item
90
+ * 3. The order does not offer an item with Ether (or other native tokens) as its item type.
91
+ * 4. The order only contains a single ERC721 or ERC1155 item and that item is not criteria-based
92
+ * 5. All other items have the same Native or ERC20 item type and token
93
+ * 6. All items have the same startAmount and endAmount
94
+ * 7. First consideration item must contain the offerer as the recipient
95
+ * 8. If the order has multiple consideration items and all consideration items other than the
96
+ * first consideration item have the same item type as the offered item, the offered item
97
+ * amount is not less than the sum of all consideration item amounts excluding the
98
+ * first consideration item amount
99
+ * 9. The token on native currency items needs to be set to the null address and the identifier on
100
+ * currencies needs to be zero, and the amounts on the 721 item need to be 1
101
+ */
102
+ var shouldUseBasicFulfill = function (_a, totalFilled) {
103
+ var offer = _a.offer, consideration = _a.consideration, offerer = _a.offerer;
104
+ // 1. The order must not be partially filled
105
+ if (!totalFilled.eq(0)) {
106
+ return false;
107
+ }
108
+ // 2. Must be single offer and at least one consideration
109
+ if (offer.length > 1 || consideration.length === 0) {
110
+ return false;
111
+ }
112
+ var allItems = __spreadArray(__spreadArray([], __read(offer), false), __read(consideration), false);
113
+ var nfts = allItems.filter(function (_a) {
114
+ var itemType = _a.itemType;
115
+ return [constants_1.ItemType.ERC721, constants_1.ItemType.ERC1155].includes(itemType);
116
+ });
117
+ var nftsWithCriteria = allItems.filter(function (_a) {
118
+ var itemType = _a.itemType;
119
+ return (0, item_1.isCriteriaItem)(itemType);
120
+ });
121
+ var offersNativeCurrency = (0, item_1.isNativeCurrencyItem)(offer[0]);
122
+ // 3. The order does not offer an item with Ether (or other native tokens) as its item type.
123
+ if (offersNativeCurrency) {
124
+ return false;
125
+ }
126
+ // 4. The order only contains a single ERC721 or ERC1155 item and that item is not criteria-based
127
+ if (nfts.length !== 1 || nftsWithCriteria.length !== 0) {
128
+ return false;
129
+ }
130
+ // 5. All currencies need to have the same address and item type (Native, ERC20)
131
+ if (!(0, order_1.areAllCurrenciesSame)({ offer: offer, consideration: consideration })) {
132
+ return false;
133
+ }
134
+ // 6. All individual items need to have the same startAmount and endAmount
135
+ var differentStartAndEndAmount = allItems.some(function (_a) {
136
+ var startAmount = _a.startAmount, endAmount = _a.endAmount;
137
+ return startAmount !== endAmount;
138
+ });
139
+ if (differentStartAndEndAmount) {
140
+ return false;
141
+ }
142
+ var _b = __read(consideration), firstConsideration = _b[0], restConsideration = _b.slice(1);
143
+ // 7. First consideration item must contain the offerer as the recipient
144
+ var firstConsiderationRecipientIsNotOfferer = firstConsideration.recipient.toLowerCase() !== offerer.toLowerCase();
145
+ if (firstConsiderationRecipientIsNotOfferer) {
146
+ return false;
147
+ }
148
+ // 8. If the order has multiple consideration items and all consideration items other than the
149
+ // first consideration item have the same item type as the offered item, the offered item
150
+ // amount is not less than the sum of all consideration item amounts excluding the
151
+ // first consideration item amount
152
+ if (consideration.length > 1 &&
153
+ restConsideration.every(function (item) { return item.itemType === offer[0].itemType; }) &&
154
+ (0, order_1.totalItemsAmount)(restConsideration).endAmount.gt(offer[0].endAmount)) {
155
+ return false;
156
+ }
157
+ var currencies = allItems.filter(item_1.isCurrencyItem);
158
+ // 9. The token on native currency items needs to be set to the null address and the identifier on
159
+ // currencies needs to be zero, and the amounts on the 721 item need to be 1
160
+ var nativeCurrencyIsZeroAddress = currencies
161
+ .filter(function (_a) {
162
+ var itemType = _a.itemType;
163
+ return itemType === constants_1.ItemType.NATIVE;
164
+ })
165
+ .every(function (_a) {
166
+ var token = _a.token;
167
+ return token === ethers_1.ethers.constants.AddressZero;
168
+ });
169
+ var currencyIdentifiersAreZero = currencies.every(function (_a) {
170
+ var identifierOrCriteria = _a.identifierOrCriteria;
171
+ return ethers_1.BigNumber.from(identifierOrCriteria).eq(0);
172
+ });
173
+ var erc721sAreSingleAmount = nfts
174
+ .filter(function (_a) {
175
+ var itemType = _a.itemType;
176
+ return itemType === constants_1.ItemType.ERC721;
177
+ })
178
+ .every(function (_a) {
179
+ var endAmount = _a.endAmount;
180
+ return endAmount === "1";
181
+ });
182
+ return (nativeCurrencyIsZeroAddress &&
183
+ currencyIdentifiersAreZero &&
184
+ erc721sAreSingleAmount);
185
+ };
186
+ exports.shouldUseBasicFulfill = shouldUseBasicFulfill;
187
+ var offerAndConsiderationFulfillmentMapping = (_a = {},
188
+ _a[constants_1.ItemType.ERC20] = (_b = {},
189
+ _b[constants_1.ItemType.ERC721] = constants_1.BasicOrderRouteType.ERC721_TO_ERC20,
190
+ _b[constants_1.ItemType.ERC1155] = constants_1.BasicOrderRouteType.ERC1155_TO_ERC20,
191
+ _b),
192
+ _a[constants_1.ItemType.ERC721] = (_c = {},
193
+ _c[constants_1.ItemType.NATIVE] = constants_1.BasicOrderRouteType.ETH_TO_ERC721,
194
+ _c[constants_1.ItemType.ERC20] = constants_1.BasicOrderRouteType.ERC20_TO_ERC721,
195
+ _c),
196
+ _a[constants_1.ItemType.ERC1155] = (_d = {},
197
+ _d[constants_1.ItemType.NATIVE] = constants_1.BasicOrderRouteType.ETH_TO_ERC1155,
198
+ _d[constants_1.ItemType.ERC20] = constants_1.BasicOrderRouteType.ERC20_TO_ERC1155,
199
+ _d),
200
+ _a);
201
+ function fulfillBasicOrder(_a) {
202
+ var _b, _c;
203
+ var order = _a.order, seaportContract = _a.seaportContract, offererBalancesAndApprovals = _a.offererBalancesAndApprovals, fulfillerBalancesAndApprovals = _a.fulfillerBalancesAndApprovals, timeBasedItemParams = _a.timeBasedItemParams, offererOperator = _a.offererOperator, fulfillerOperator = _a.fulfillerOperator, signer = _a.signer, _d = _a.tips, tips = _d === void 0 ? [] : _d, _e = _a.conduitKey, conduitKey = _e === void 0 ? constants_1.NO_CONDUIT : _e;
204
+ return __awaiter(this, void 0, void 0, function () {
205
+ var _f, offer, consideration, considerationIncludingTips, offerItem, _g, forOfferer, forAdditionalRecipients, basicOrderRouteType, additionalRecipients, considerationWithoutOfferItemType, totalNativeAmount, insufficientApprovals, basicOrderParameters, payableOverrides, approvalActions, exchangeAction, actions;
206
+ return __generator(this, function (_h) {
207
+ switch (_h.label) {
208
+ case 0:
209
+ _f = order.parameters, offer = _f.offer, consideration = _f.consideration;
210
+ considerationIncludingTips = __spreadArray(__spreadArray([], __read(consideration), false), __read(tips), false);
211
+ offerItem = offer[0];
212
+ _g = __read(considerationIncludingTips), forOfferer = _g[0], forAdditionalRecipients = _g.slice(1);
213
+ basicOrderRouteType = (_b = offerAndConsiderationFulfillmentMapping[offerItem.itemType]) === null || _b === void 0 ? void 0 : _b[forOfferer.itemType];
214
+ if (basicOrderRouteType === undefined) {
215
+ throw new Error("Order parameters did not result in a valid basic fulfillment");
216
+ }
217
+ additionalRecipients = forAdditionalRecipients.map(function (_a) {
218
+ var startAmount = _a.startAmount, recipient = _a.recipient;
219
+ return ({
220
+ amount: startAmount,
221
+ recipient: recipient,
222
+ });
223
+ });
224
+ considerationWithoutOfferItemType = considerationIncludingTips.filter(function (item) { return item.itemType !== offer[0].itemType; });
225
+ totalNativeAmount = (_c = (0, item_1.getSummedTokenAndIdentifierAmounts)({
226
+ items: considerationWithoutOfferItemType,
227
+ criterias: [],
228
+ timeBasedItemParams: __assign(__assign({}, timeBasedItemParams), { isConsiderationItem: true }),
229
+ })[ethers_1.ethers.constants.AddressZero]) === null || _c === void 0 ? void 0 : _c["0"];
230
+ insufficientApprovals = (0, balanceAndApprovalCheck_1.validateBasicFulfillBalancesAndApprovals)({
231
+ offer: offer,
232
+ consideration: considerationIncludingTips,
233
+ offererBalancesAndApprovals: offererBalancesAndApprovals,
234
+ fulfillerBalancesAndApprovals: fulfillerBalancesAndApprovals,
235
+ timeBasedItemParams: timeBasedItemParams,
236
+ offererOperator: offererOperator,
237
+ fulfillerOperator: fulfillerOperator,
238
+ });
239
+ basicOrderParameters = {
240
+ offerer: order.parameters.offerer,
241
+ offererConduitKey: order.parameters.conduitKey,
242
+ zone: order.parameters.zone,
243
+ // Note the use of a "basicOrderType" enum;
244
+ // this represents both the usual order type as well as the "route"
245
+ // of the basic order (a simple derivation function for the basic order
246
+ // type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)
247
+ basicOrderType: order.parameters.orderType + 4 * basicOrderRouteType,
248
+ offerToken: offerItem.token,
249
+ offerIdentifier: offerItem.identifierOrCriteria,
250
+ offerAmount: offerItem.endAmount,
251
+ considerationToken: forOfferer.token,
252
+ considerationIdentifier: forOfferer.identifierOrCriteria,
253
+ considerationAmount: forOfferer.endAmount,
254
+ startTime: order.parameters.startTime,
255
+ endTime: order.parameters.endTime,
256
+ salt: order.parameters.salt,
257
+ totalOriginalAdditionalRecipients: order.parameters.consideration.length - 1,
258
+ signature: order.signature,
259
+ fulfillerConduitKey: conduitKey,
260
+ additionalRecipients: additionalRecipients,
261
+ zoneHash: order.parameters.zoneHash,
262
+ };
263
+ payableOverrides = { value: totalNativeAmount };
264
+ return [4 /*yield*/, (0, approval_1.getApprovalActions)(insufficientApprovals, signer)];
265
+ case 1:
266
+ approvalActions = _h.sent();
267
+ exchangeAction = {
268
+ type: "exchange",
269
+ transactionMethods: (0, usecase_1.getTransactionMethods)(seaportContract.connect(signer), "fulfillBasicOrder", [basicOrderParameters, payableOverrides]),
270
+ };
271
+ actions = __spreadArray(__spreadArray([], __read(approvalActions), false), [exchangeAction], false);
272
+ return [2 /*return*/, {
273
+ actions: actions,
274
+ executeAllActions: function () {
275
+ return (0, usecase_1.executeAllActions)(actions);
276
+ },
277
+ }];
278
+ }
279
+ });
280
+ });
281
+ }
282
+ exports.fulfillBasicOrder = fulfillBasicOrder;
283
+ function fulfillStandardOrder(_a) {
284
+ var _b;
285
+ var order = _a.order, _c = _a.unitsToFill, unitsToFill = _c === void 0 ? 0 : _c, totalSize = _a.totalSize, totalFilled = _a.totalFilled, offerCriteria = _a.offerCriteria, considerationCriteria = _a.considerationCriteria, _d = _a.tips, tips = _d === void 0 ? [] : _d, extraData = _a.extraData, seaportContract = _a.seaportContract, offererBalancesAndApprovals = _a.offererBalancesAndApprovals, fulfillerBalancesAndApprovals = _a.fulfillerBalancesAndApprovals, offererOperator = _a.offererOperator, fulfillerOperator = _a.fulfillerOperator, timeBasedItemParams = _a.timeBasedItemParams, conduitKey = _a.conduitKey, recipientAddress = _a.recipientAddress, signer = _a.signer;
286
+ return __awaiter(this, void 0, void 0, function () {
287
+ var orderWithAdjustedFills, _e, offer, consideration, considerationIncludingTips, offerCriteriaItems, considerationCriteriaItems, hasCriteriaItems, totalNativeAmount, insufficientApprovals, payableOverrides, approvalActions, isGift, useAdvanced, orderAccountingForTips, _f, numerator, denominator, exchangeAction, actions;
288
+ return __generator(this, function (_g) {
289
+ switch (_g.label) {
290
+ case 0:
291
+ orderWithAdjustedFills = unitsToFill
292
+ ? (0, order_1.mapOrderAmountsFromUnitsToFill)(order, {
293
+ unitsToFill: unitsToFill,
294
+ totalFilled: totalFilled,
295
+ totalSize: totalSize,
296
+ })
297
+ : // Else, we adjust the order by the remaining order left to be fulfilled
298
+ (0, order_1.mapOrderAmountsFromFilledStatus)(order, {
299
+ totalFilled: totalFilled,
300
+ totalSize: totalSize,
301
+ });
302
+ _e = orderWithAdjustedFills.parameters, offer = _e.offer, consideration = _e.consideration;
303
+ considerationIncludingTips = __spreadArray(__spreadArray([], __read(consideration), false), __read(tips), false);
304
+ offerCriteriaItems = offer.filter(function (_a) {
305
+ var itemType = _a.itemType;
306
+ return (0, item_1.isCriteriaItem)(itemType);
307
+ });
308
+ considerationCriteriaItems = considerationIncludingTips.filter(function (_a) {
309
+ var itemType = _a.itemType;
310
+ return (0, item_1.isCriteriaItem)(itemType);
311
+ });
312
+ hasCriteriaItems = offerCriteriaItems.length > 0 || considerationCriteriaItems.length > 0;
313
+ if (offerCriteriaItems.length !== offerCriteria.length ||
314
+ considerationCriteriaItems.length !== considerationCriteria.length) {
315
+ throw new Error("You must supply the appropriate criterias for criteria based items");
316
+ }
317
+ totalNativeAmount = (_b = (0, item_1.getSummedTokenAndIdentifierAmounts)({
318
+ items: considerationIncludingTips,
319
+ criterias: considerationCriteria,
320
+ timeBasedItemParams: __assign(__assign({}, timeBasedItemParams), { isConsiderationItem: true }),
321
+ })[ethers_1.ethers.constants.AddressZero]) === null || _b === void 0 ? void 0 : _b["0"];
322
+ insufficientApprovals = (0, balanceAndApprovalCheck_1.validateStandardFulfillBalancesAndApprovals)({
323
+ offer: offer,
324
+ consideration: considerationIncludingTips,
325
+ offerCriteria: offerCriteria,
326
+ considerationCriteria: considerationCriteria,
327
+ offererBalancesAndApprovals: offererBalancesAndApprovals,
328
+ fulfillerBalancesAndApprovals: fulfillerBalancesAndApprovals,
329
+ timeBasedItemParams: timeBasedItemParams,
330
+ offererOperator: offererOperator,
331
+ fulfillerOperator: fulfillerOperator,
332
+ });
333
+ payableOverrides = { value: totalNativeAmount };
334
+ return [4 /*yield*/, (0, approval_1.getApprovalActions)(insufficientApprovals, signer)];
335
+ case 1:
336
+ approvalActions = _g.sent();
337
+ isGift = recipientAddress !== ethers_1.ethers.constants.AddressZero;
338
+ useAdvanced = Boolean(unitsToFill) || hasCriteriaItems || isGift;
339
+ orderAccountingForTips = __assign(__assign({}, order), { parameters: __assign(__assign({}, order.parameters), { consideration: __spreadArray(__spreadArray([], __read(order.parameters.consideration), false), __read(tips), false), totalOriginalConsiderationItems: consideration.length }) });
340
+ _f = (0, exports.getAdvancedOrderNumeratorDenominator)(order, unitsToFill), numerator = _f.numerator, denominator = _f.denominator;
341
+ exchangeAction = {
342
+ type: "exchange",
343
+ transactionMethods: useAdvanced
344
+ ? (0, usecase_1.getTransactionMethods)(seaportContract.connect(signer), "fulfillAdvancedOrder", [
345
+ __assign(__assign({}, orderAccountingForTips), { numerator: numerator, denominator: denominator, extraData: extraData !== null && extraData !== void 0 ? extraData : "0x" }),
346
+ hasCriteriaItems
347
+ ? (0, criteria_1.generateCriteriaResolvers)({
348
+ orders: [order],
349
+ offerCriterias: [offerCriteria],
350
+ considerationCriterias: [considerationCriteria],
351
+ })
352
+ : [],
353
+ conduitKey,
354
+ recipientAddress,
355
+ payableOverrides,
356
+ ])
357
+ : (0, usecase_1.getTransactionMethods)(seaportContract.connect(signer), "fulfillOrder", [
358
+ orderAccountingForTips,
359
+ conduitKey,
360
+ payableOverrides,
361
+ ]),
362
+ };
363
+ actions = __spreadArray(__spreadArray([], __read(approvalActions), false), [exchangeAction], false);
364
+ return [2 /*return*/, {
365
+ actions: actions,
366
+ executeAllActions: function () {
367
+ return (0, usecase_1.executeAllActions)(actions);
368
+ },
369
+ }];
370
+ }
371
+ });
372
+ });
373
+ }
374
+ exports.fulfillStandardOrder = fulfillStandardOrder;
375
+ function validateAndSanitizeFromOrderStatus(order, orderStatus) {
376
+ var isValidated = orderStatus.isValidated, isCancelled = orderStatus.isCancelled, totalFilled = orderStatus.totalFilled, totalSize = orderStatus.totalSize;
377
+ if (totalSize.gt(0) && totalFilled.div(totalSize).eq(1)) {
378
+ throw new Error("The order you are trying to fulfill is already filled");
379
+ }
380
+ if (isCancelled) {
381
+ throw new Error("The order you are trying to fulfill is cancelled");
382
+ }
383
+ if (isValidated) {
384
+ // If the order is already validated, manually wipe the signature off of the order to save gas
385
+ return { parameters: __assign({}, order.parameters), signature: "0x" };
386
+ }
387
+ return order;
388
+ }
389
+ exports.validateAndSanitizeFromOrderStatus = validateAndSanitizeFromOrderStatus;
390
+ function fulfillAvailableOrders(_a) {
391
+ var ordersMetadata = _a.ordersMetadata, seaportContract = _a.seaportContract, fulfillerBalancesAndApprovals = _a.fulfillerBalancesAndApprovals, fulfillerOperator = _a.fulfillerOperator, currentBlockTimestamp = _a.currentBlockTimestamp, ascendingAmountTimestampBuffer = _a.ascendingAmountTimestampBuffer, conduitKey = _a.conduitKey, signer = _a.signer, recipientAddress = _a.recipientAddress;
392
+ return __awaiter(this, void 0, void 0, function () {
393
+ var sanitizedOrdersMetadata, ordersMetadataWithAdjustedFills, totalNativeAmount, totalInsufficientApprovals, hasCriteriaItems, addApprovalIfNeeded, payableOverrides, approvalActions, advancedOrdersWithTips, _b, offerFulfillments, considerationFulfillments, exchangeAction, actions;
394
+ return __generator(this, function (_c) {
395
+ switch (_c.label) {
396
+ case 0:
397
+ sanitizedOrdersMetadata = ordersMetadata.map(function (orderMetadata) { return (__assign(__assign({}, orderMetadata), { order: validateAndSanitizeFromOrderStatus(orderMetadata.order, orderMetadata.orderStatus) })); });
398
+ ordersMetadataWithAdjustedFills = sanitizedOrdersMetadata.map(function (orderMetadata) { return (__assign(__assign({}, orderMetadata), {
399
+ // If we are supplying units to fill, we adjust the order by the minimum of the amount to fill and
400
+ // the remaining order left to be fulfilled
401
+ order: orderMetadata.unitsToFill
402
+ ? (0, order_1.mapOrderAmountsFromUnitsToFill)(orderMetadata.order, {
403
+ unitsToFill: orderMetadata.unitsToFill,
404
+ totalFilled: orderMetadata.orderStatus.totalFilled,
405
+ totalSize: orderMetadata.orderStatus.totalSize,
406
+ })
407
+ : // Else, we adjust the order by the remaining order left to be fulfilled
408
+ (0, order_1.mapOrderAmountsFromFilledStatus)(orderMetadata.order, {
409
+ totalFilled: orderMetadata.orderStatus.totalFilled,
410
+ totalSize: orderMetadata.orderStatus.totalSize,
411
+ }) })); });
412
+ totalNativeAmount = ethers_1.BigNumber.from(0);
413
+ totalInsufficientApprovals = [];
414
+ hasCriteriaItems = false;
415
+ addApprovalIfNeeded = function (orderInsufficientApprovals) {
416
+ orderInsufficientApprovals.forEach(function (insufficientApproval) {
417
+ if (!totalInsufficientApprovals.find(function (approval) { return approval.token === insufficientApproval.token; })) {
418
+ totalInsufficientApprovals.push(insufficientApproval);
419
+ }
420
+ });
421
+ };
422
+ ordersMetadataWithAdjustedFills.forEach(function (_a) {
423
+ var _b, _c;
424
+ var order = _a.order, tips = _a.tips, offerCriteria = _a.offerCriteria, considerationCriteria = _a.considerationCriteria, offererBalancesAndApprovals = _a.offererBalancesAndApprovals, offererOperator = _a.offererOperator;
425
+ var considerationIncludingTips = __spreadArray(__spreadArray([], __read(order.parameters.consideration), false), __read(tips), false);
426
+ var timeBasedItemParams = {
427
+ startTime: order.parameters.startTime,
428
+ endTime: order.parameters.endTime,
429
+ currentBlockTimestamp: currentBlockTimestamp,
430
+ ascendingAmountTimestampBuffer: ascendingAmountTimestampBuffer,
431
+ isConsiderationItem: true,
432
+ };
433
+ totalNativeAmount = totalNativeAmount.add((_c = (_b = (0, item_1.getSummedTokenAndIdentifierAmounts)({
434
+ items: considerationIncludingTips,
435
+ criterias: considerationCriteria,
436
+ timeBasedItemParams: timeBasedItemParams,
437
+ })[ethers_1.ethers.constants.AddressZero]) === null || _b === void 0 ? void 0 : _b["0"]) !== null && _c !== void 0 ? _c : ethers_1.BigNumber.from(0));
438
+ var insufficientApprovals = (0, balanceAndApprovalCheck_1.validateStandardFulfillBalancesAndApprovals)({
439
+ offer: order.parameters.offer,
440
+ consideration: considerationIncludingTips,
441
+ offerCriteria: offerCriteria,
442
+ considerationCriteria: considerationCriteria,
443
+ offererBalancesAndApprovals: offererBalancesAndApprovals,
444
+ fulfillerBalancesAndApprovals: fulfillerBalancesAndApprovals,
445
+ timeBasedItemParams: timeBasedItemParams,
446
+ offererOperator: offererOperator,
447
+ fulfillerOperator: fulfillerOperator,
448
+ });
449
+ var offerCriteriaItems = order.parameters.offer.filter(function (_a) {
450
+ var itemType = _a.itemType;
451
+ return (0, item_1.isCriteriaItem)(itemType);
452
+ });
453
+ var considerationCriteriaItems = considerationIncludingTips.filter(function (_a) {
454
+ var itemType = _a.itemType;
455
+ return (0, item_1.isCriteriaItem)(itemType);
456
+ });
457
+ if (offerCriteriaItems.length !== offerCriteria.length ||
458
+ considerationCriteriaItems.length !== considerationCriteria.length) {
459
+ throw new Error("You must supply the appropriate criterias for criteria based items");
460
+ }
461
+ addApprovalIfNeeded(insufficientApprovals);
462
+ });
463
+ payableOverrides = { value: totalNativeAmount };
464
+ return [4 /*yield*/, (0, approval_1.getApprovalActions)(totalInsufficientApprovals, signer)];
465
+ case 1:
466
+ approvalActions = _c.sent();
467
+ advancedOrdersWithTips = sanitizedOrdersMetadata.map(function (_a) {
468
+ var order = _a.order, _b = _a.unitsToFill, unitsToFill = _b === void 0 ? 0 : _b, tips = _a.tips, extraData = _a.extraData;
469
+ var _c = (0, exports.getAdvancedOrderNumeratorDenominator)(order, unitsToFill), numerator = _c.numerator, denominator = _c.denominator;
470
+ var considerationIncludingTips = __spreadArray(__spreadArray([], __read(order.parameters.consideration), false), __read(tips), false);
471
+ return __assign(__assign({}, order), { parameters: __assign(__assign({}, order.parameters), { consideration: considerationIncludingTips, totalOriginalConsiderationItems: order.parameters.consideration.length }), numerator: numerator, denominator: denominator, extraData: extraData });
472
+ });
473
+ _b = generateFulfillOrdersFulfillments(ordersMetadata), offerFulfillments = _b.offerFulfillments, considerationFulfillments = _b.considerationFulfillments;
474
+ exchangeAction = {
475
+ type: "exchange",
476
+ transactionMethods: (0, usecase_1.getTransactionMethods)(seaportContract.connect(signer), "fulfillAvailableAdvancedOrders", [
477
+ advancedOrdersWithTips,
478
+ hasCriteriaItems
479
+ ? (0, criteria_1.generateCriteriaResolvers)({
480
+ orders: ordersMetadata.map(function (_a) {
481
+ var order = _a.order;
482
+ return order;
483
+ }),
484
+ offerCriterias: ordersMetadata.map(function (_a) {
485
+ var offerCriteria = _a.offerCriteria;
486
+ return offerCriteria;
487
+ }),
488
+ considerationCriterias: ordersMetadata.map(function (_a) {
489
+ var considerationCriteria = _a.considerationCriteria;
490
+ return considerationCriteria;
491
+ }),
492
+ })
493
+ : [],
494
+ offerFulfillments,
495
+ considerationFulfillments,
496
+ conduitKey,
497
+ recipientAddress,
498
+ advancedOrdersWithTips.length,
499
+ payableOverrides,
500
+ ]),
501
+ };
502
+ actions = __spreadArray(__spreadArray([], __read(approvalActions), false), [exchangeAction], false);
503
+ return [2 /*return*/, {
504
+ actions: actions,
505
+ executeAllActions: function () {
506
+ return (0, usecase_1.executeAllActions)(actions);
507
+ },
508
+ }];
509
+ }
510
+ });
511
+ });
512
+ }
513
+ exports.fulfillAvailableOrders = fulfillAvailableOrders;
514
+ function generateFulfillOrdersFulfillments(ordersMetadata) {
515
+ var hashAggregateKey = function (_a) {
516
+ var sourceOrDestination = _a.sourceOrDestination, _b = _a.operator, operator = _b === void 0 ? "" : _b, token = _a.token, identifier = _a.identifier;
517
+ return "".concat(sourceOrDestination, "-").concat(operator, "-").concat(token, "-").concat(identifier);
518
+ };
519
+ var offerAggregatedFulfillments = {};
520
+ var considerationAggregatedFulfillments = {};
521
+ ordersMetadata.forEach(function (_a, orderIndex) {
522
+ var order = _a.order, offererOperator = _a.offererOperator, offerCriteria = _a.offerCriteria;
523
+ var itemToCriteria = (0, criteria_1.getItemToCriteriaMap)(order.parameters.offer, offerCriteria);
524
+ return order.parameters.offer.forEach(function (item, itemIndex) {
525
+ var _a, _b, _c;
526
+ var aggregateKey = "".concat(hashAggregateKey({
527
+ sourceOrDestination: order.parameters.offerer,
528
+ operator: offererOperator,
529
+ token: item.token,
530
+ identifier: (_b = (_a = itemToCriteria.get(item)) === null || _a === void 0 ? void 0 : _a.identifier) !== null && _b !== void 0 ? _b : item.identifierOrCriteria,
531
+ // We tack on the index to ensure that erc721s can never be aggregated and instead must be in separate arrays
532
+ })).concat((0, item_1.isErc721Item)(item.itemType) ? itemIndex : "");
533
+ offerAggregatedFulfillments[aggregateKey] = __spreadArray(__spreadArray([], __read(((_c = offerAggregatedFulfillments[aggregateKey]) !== null && _c !== void 0 ? _c : [])), false), [
534
+ { orderIndex: orderIndex, itemIndex: itemIndex },
535
+ ], false);
536
+ });
537
+ });
538
+ ordersMetadata.forEach(function (_a, orderIndex) {
539
+ var order = _a.order, considerationCriteria = _a.considerationCriteria, tips = _a.tips;
540
+ var itemToCriteria = (0, criteria_1.getItemToCriteriaMap)(order.parameters.consideration, considerationCriteria);
541
+ return __spreadArray(__spreadArray([], __read(order.parameters.consideration), false), __read(tips), false).forEach(function (item, itemIndex) {
542
+ var _a, _b, _c;
543
+ var aggregateKey = "".concat(hashAggregateKey({
544
+ sourceOrDestination: item.recipient,
545
+ token: item.token,
546
+ identifier: (_b = (_a = itemToCriteria.get(item)) === null || _a === void 0 ? void 0 : _a.identifier) !== null && _b !== void 0 ? _b : item.identifierOrCriteria,
547
+ // We tack on the index to ensure that erc721s can never be aggregated and instead must be in separate arrays
548
+ })).concat((0, item_1.isErc721Item)(item.itemType) ? itemIndex : "");
549
+ considerationAggregatedFulfillments[aggregateKey] = __spreadArray(__spreadArray([], __read(((_c = considerationAggregatedFulfillments[aggregateKey]) !== null && _c !== void 0 ? _c : [])), false), [
550
+ { orderIndex: orderIndex, itemIndex: itemIndex },
551
+ ], false);
552
+ });
553
+ });
554
+ return {
555
+ offerFulfillments: Object.values(offerAggregatedFulfillments),
556
+ considerationFulfillments: Object.values(considerationAggregatedFulfillments),
557
+ };
558
+ }
559
+ exports.generateFulfillOrdersFulfillments = generateFulfillOrdersFulfillments;
560
+ var getAdvancedOrderNumeratorDenominator = function (order, unitsToFill) {
561
+ // Used for advanced order cases
562
+ var maxUnits = (0, item_1.getMaximumSizeForOrder)(order);
563
+ var unitsToFillBn = ethers_1.BigNumber.from(unitsToFill);
564
+ // Reduce the numerator/denominator as optimization
565
+ var unitsGcd = (0, gcd_1.gcd)(unitsToFillBn, maxUnits);
566
+ var numerator = unitsToFill
567
+ ? unitsToFillBn.div(unitsGcd)
568
+ : ethers_1.BigNumber.from(1);
569
+ var denominator = unitsToFill ? maxUnits.div(unitsGcd) : ethers_1.BigNumber.from(1);
570
+ return { numerator: numerator, denominator: denominator };
571
+ };
572
+ exports.getAdvancedOrderNumeratorDenominator = getAdvancedOrderNumeratorDenominator;
573
+ //# sourceMappingURL=fulfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fulfill.js","sourceRoot":"","sources":["../../src/utils/fulfill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { BigNumber, BigNumberish } from "ethers";
2
+ export declare const gcd: (a: BigNumberish, b: BigNumberish) => BigNumber;
3
+ export declare const findGcd: (elements: BigNumberish[]) => BigNumber;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findGcd = exports.gcd = void 0;
4
+ var ethers_1 = require("ethers");
5
+ var gcd = function (a, b) {
6
+ var bnA = ethers_1.BigNumber.from(a);
7
+ var bnB = ethers_1.BigNumber.from(b);
8
+ if (bnA.eq(0)) {
9
+ return bnB;
10
+ }
11
+ return (0, exports.gcd)(bnB.mod(a), bnA);
12
+ };
13
+ exports.gcd = gcd;
14
+ var findGcd = function (elements) {
15
+ var result = ethers_1.BigNumber.from(elements[0]);
16
+ for (var i = 1; i < elements.length; i++) {
17
+ result = (0, exports.gcd)(elements[i], result);
18
+ if (result.eq(1)) {
19
+ return result;
20
+ }
21
+ }
22
+ return result;
23
+ };
24
+ exports.findGcd = findGcd;
25
+ //# sourceMappingURL=gcd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcd.js","sourceRoot":"","sources":["../../src/utils/gcd.ts"],"names":[],"mappings":";;;AAAA,iCAAiD;AAE1C,IAAM,GAAG,GAAG,UAAC,CAAe,EAAE,CAAe;IAClD,IAAM,GAAG,GAAG,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAM,GAAG,GAAG,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE9B,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QACb,OAAO,GAAG,CAAC;KACZ;IAED,OAAO,IAAA,WAAG,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC,CAAC;AATW,QAAA,GAAG,OASd;AAEK,IAAM,OAAO,GAAG,UAAC,QAAwB;IAC9C,IAAI,MAAM,GAAG,kBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,GAAG,IAAA,WAAG,EAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAElC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YAChB,OAAO,MAAM,CAAC;SACf;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAZW,QAAA,OAAO,WAYlB"}