@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.
- package/README.md +45 -0
- package/lib/abi/ERC1155.d.ts +29 -0
- package/lib/abi/ERC1155.js +319 -0
- package/lib/abi/ERC1155.js.map +1 -0
- package/lib/abi/ERC20.d.ts +29 -0
- package/lib/abi/ERC20.js +317 -0
- package/lib/abi/ERC20.js.map +1 -0
- package/lib/abi/ERC721.d.ts +29 -0
- package/lib/abi/ERC721.js +337 -0
- package/lib/abi/ERC721.js.map +1 -0
- package/lib/abi/Seaport.d.ts +112 -0
- package/lib/abi/Seaport.js +2585 -0
- package/lib/abi/Seaport.js.map +1 -0
- package/lib/constants.d.ts +49 -0
- package/lib/constants.js +73 -0
- package/lib/constants.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -0
- package/lib/seaport.d.ts +181 -0
- package/lib/seaport.js +720 -0
- package/lib/seaport.js.map +1 -0
- package/lib/typechain/ERC1155.d.ts +189 -0
- package/lib/typechain/ERC1155.js +3 -0
- package/lib/typechain/ERC1155.js.map +1 -0
- package/lib/typechain/ERC20.d.ts +209 -0
- package/lib/typechain/ERC20.js +3 -0
- package/lib/typechain/ERC20.js.map +1 -0
- package/lib/typechain/ERC721.d.ts +220 -0
- package/lib/typechain/ERC721.js +3 -0
- package/lib/typechain/ERC721.js.map +1 -0
- package/lib/typechain/Seaport.d.ts +686 -0
- package/lib/typechain/Seaport.js +3 -0
- package/lib/typechain/Seaport.js.map +1 -0
- package/lib/typechain/common.d.ts +21 -0
- package/lib/typechain/common.js +3 -0
- package/lib/typechain/common.js.map +1 -0
- package/lib/types.d.ts +207 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/utils/approval.d.ts +9 -0
- package/lib/utils/approval.js +108 -0
- package/lib/utils/approval.js.map +1 -0
- package/lib/utils/balance.d.ts +4 -0
- package/lib/utils/balance.js +86 -0
- package/lib/utils/balance.js.map +1 -0
- package/lib/utils/balanceAndApprovalCheck.d.ts +108 -0
- package/lib/utils/balanceAndApprovalCheck.js +322 -0
- package/lib/utils/balanceAndApprovalCheck.js.map +1 -0
- package/lib/utils/criteria.d.ts +14 -0
- package/lib/utils/criteria.js +91 -0
- package/lib/utils/criteria.js.map +1 -0
- package/lib/utils/fulfill.d.ts +84 -0
- package/lib/utils/fulfill.js +573 -0
- package/lib/utils/fulfill.js.map +1 -0
- package/lib/utils/gcd.d.ts +3 -0
- package/lib/utils/gcd.js +25 -0
- package/lib/utils/gcd.js.map +1 -0
- package/lib/utils/item.d.ts +29 -0
- package/lib/utils/item.js +136 -0
- package/lib/utils/item.js.map +1 -0
- package/lib/utils/match.d.ts +54 -0
- package/lib/utils/match.js +56 -0
- package/lib/utils/match.js.map +1 -0
- package/lib/utils/merkletree.d.ts +11 -0
- package/lib/utils/merkletree.js +32 -0
- package/lib/utils/merkletree.js.map +1 -0
- package/lib/utils/order.d.ts +37 -0
- package/lib/utils/order.js +224 -0
- package/lib/utils/order.js.map +1 -0
- package/lib/utils/usecase.d.ts +4 -0
- package/lib/utils/usecase.js +158 -0
- package/lib/utils/usecase.js.map +1 -0
- 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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"}
|
package/lib/utils/gcd.js
ADDED
|
@@ -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"}
|