@cowprotocol/sdk-contracts-ts 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs ADDED
@@ -0,0 +1,1162 @@
1
+ // src/ContractsTs.ts
2
+ import { setGlobalAdapter as setGlobalAdapter3 } from "@cowprotocol/sdk-common";
3
+
4
+ // src/order.ts
5
+ import { getGlobalAdapter } from "@cowprotocol/sdk-common";
6
+ var BUY_ETH_ADDRESS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
7
+ var OrderBalance = /* @__PURE__ */ ((OrderBalance3) => {
8
+ OrderBalance3["ERC20"] = "erc20";
9
+ OrderBalance3["EXTERNAL"] = "external";
10
+ OrderBalance3["INTERNAL"] = "internal";
11
+ return OrderBalance3;
12
+ })(OrderBalance || {});
13
+ var ORDER_TYPE_FIELDS = [
14
+ { name: "sellToken", type: "address" },
15
+ { name: "buyToken", type: "address" },
16
+ { name: "receiver", type: "address" },
17
+ { name: "sellAmount", type: "uint256" },
18
+ { name: "buyAmount", type: "uint256" },
19
+ { name: "validTo", type: "uint32" },
20
+ { name: "appData", type: "bytes32" },
21
+ { name: "feeAmount", type: "uint256" },
22
+ { name: "kind", type: "string" },
23
+ { name: "partiallyFillable", type: "bool" },
24
+ { name: "sellTokenBalance", type: "string" },
25
+ { name: "buyTokenBalance", type: "string" }
26
+ ];
27
+ var ORDER_TYPE_HASH = "0xd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e489";
28
+ var CANCELLATIONS_TYPE_FIELDS = [{ name: "orderUids", type: "bytes[]" }];
29
+ function timestamp(t) {
30
+ return typeof t === "number" ? t : ~~(t.getTime() / 1e3);
31
+ }
32
+ function hashify(h) {
33
+ return typeof h === "number" ? `0x${h.toString(16).padStart(64, "0")}` : getGlobalAdapter().utils.hexZeroPad(h, 32);
34
+ }
35
+ function normalizeBuyTokenBalance(balance) {
36
+ switch (balance) {
37
+ case void 0:
38
+ case "erc20" /* ERC20 */:
39
+ case "external" /* EXTERNAL */:
40
+ return "erc20" /* ERC20 */;
41
+ case "internal" /* INTERNAL */:
42
+ return "internal" /* INTERNAL */;
43
+ default:
44
+ throw new Error(`invalid order balance ${balance}`);
45
+ }
46
+ }
47
+ function normalizeOrder(order) {
48
+ const adapter = getGlobalAdapter();
49
+ if (order.receiver === adapter.ZERO_ADDRESS) {
50
+ throw new Error("receiver cannot be address(0)");
51
+ }
52
+ const normalizedOrder = {
53
+ ...order,
54
+ sellTokenBalance: order.sellTokenBalance ?? "erc20" /* ERC20 */,
55
+ receiver: order.receiver ?? adapter.ZERO_ADDRESS,
56
+ validTo: timestamp(order.validTo),
57
+ appData: hashify(order.appData),
58
+ buyTokenBalance: normalizeBuyTokenBalance(order.buyTokenBalance)
59
+ };
60
+ return normalizedOrder;
61
+ }
62
+ function hashTypedData(domain, types, data) {
63
+ return getGlobalAdapter().utils.hashTypedData(domain, types, data);
64
+ }
65
+ function hashOrder(domain, order) {
66
+ return hashTypedData(domain, { Order: ORDER_TYPE_FIELDS }, normalizeOrder(order));
67
+ }
68
+ var ORDER_UID_LENGTH = 56;
69
+ function computeOrderUid(domain, order, owner) {
70
+ return packOrderUidParams({
71
+ orderDigest: hashOrder(domain, order),
72
+ owner,
73
+ validTo: order.validTo
74
+ });
75
+ }
76
+ function packOrderUidParams({ orderDigest, owner, validTo }) {
77
+ return getGlobalAdapter().utils.solidityPack(
78
+ ["bytes32", "address", "uint32"],
79
+ [orderDigest, owner, timestamp(validTo)]
80
+ );
81
+ }
82
+ function extractOrderUidParams(orderUid) {
83
+ const adapter = getGlobalAdapter();
84
+ const bytes = adapter.utils.arrayify(orderUid);
85
+ if (bytes.length != ORDER_UID_LENGTH) {
86
+ throw new Error("invalid order UID length");
87
+ }
88
+ const view = new DataView(bytes.buffer);
89
+ return {
90
+ orderDigest: adapter.utils.hexlify(bytes.subarray(0, 32)),
91
+ owner: adapter.utils.getChecksumAddress(adapter.utils.hexlify(bytes.subarray(32, 52))),
92
+ validTo: view.getUint32(52)
93
+ };
94
+ }
95
+ function hashOrderCancellation(domain, orderUid) {
96
+ return hashOrderCancellations(domain, [orderUid]);
97
+ }
98
+ function hashOrderCancellations(domain, orderUids) {
99
+ return hashTypedData(domain, { OrderCancellations: CANCELLATIONS_TYPE_FIELDS }, { orderUids });
100
+ }
101
+
102
+ // src/deploy.ts
103
+ import { getGlobalAdapter as getGlobalAdapter2 } from "@cowprotocol/sdk-common";
104
+ var SALT = "0x4d61747472657373657320696e204265726c696e210000000000000000000000";
105
+ var DEPLOYER_CONTRACT = "0x4e59b44847b379578588920ca78fbf26c0b4956c";
106
+ var CONTRACT_NAMES = /* @__PURE__ */ ((CONTRACT_NAMES2) => {
107
+ CONTRACT_NAMES2["authenticator"] = "GPv2AllowListAuthentication";
108
+ CONTRACT_NAMES2["settlement"] = "GPv2Settlement";
109
+ CONTRACT_NAMES2["tradeSimulator"] = "GPv2TradeSimulator";
110
+ return CONTRACT_NAMES2;
111
+ })(CONTRACT_NAMES || {});
112
+ function deterministicDeploymentAddress({ bytecode }, deploymentArguments) {
113
+ const adapter = getGlobalAdapter2();
114
+ const bytecodeHash = adapter.utils.keccak256(adapter.utils.hexConcat([bytecode, ...deploymentArguments]));
115
+ return adapter.utils.getCreate2Address(DEPLOYER_CONTRACT, SALT, bytecodeHash);
116
+ }
117
+
118
+ // src/interaction.ts
119
+ function normalizeInteraction(interaction) {
120
+ return {
121
+ value: 0,
122
+ callData: "0x",
123
+ ...interaction
124
+ };
125
+ }
126
+ function normalizeInteractions(interactions) {
127
+ return interactions.map(normalizeInteraction);
128
+ }
129
+
130
+ // src/proxy.ts
131
+ import { getGlobalAdapter as getGlobalAdapter3 } from "@cowprotocol/sdk-common";
132
+ var IMPLEMENTATION_STORAGE_SLOT = "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc";
133
+ var OWNER_STORAGE_SLOT = "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103";
134
+ async function implementationAddress(_provider, proxy) {
135
+ const adapter = getGlobalAdapter3();
136
+ const [implementation] = adapter.utils.decodeAbi(
137
+ ["address"],
138
+ await adapter.getStorageAt(proxy, IMPLEMENTATION_STORAGE_SLOT)
139
+ );
140
+ return implementation;
141
+ }
142
+ async function ownerAddress(provider, proxy) {
143
+ const data = provider?.getStorageAt ? await provider.getStorageAt(proxy, OWNER_STORAGE_SLOT) : provider?.getStorage ? provider.getStorage(proxy, OWNER_STORAGE_SLOT) : null;
144
+ if (data === null)
145
+ throw new Error("getStorage is not implemented");
146
+ const [owner] = getGlobalAdapter3().utils.decodeAbi(["address"], data);
147
+ return owner;
148
+ }
149
+ var EIP173_PROXY_ABI = [
150
+ "event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)",
151
+ "function owner() view external returns(address)",
152
+ "function transferOwnership(address newOwner) external",
153
+ "function supportsInterface(bytes4 interfaceID) external view returns (bool)"
154
+ ];
155
+
156
+ // src/sign.ts
157
+ import { getGlobalAdapter as getGlobalAdapter4 } from "@cowprotocol/sdk-common";
158
+
159
+ // src/types.ts
160
+ var SigningScheme = /* @__PURE__ */ ((SigningScheme2) => {
161
+ SigningScheme2[SigningScheme2["EIP712"] = 0] = "EIP712";
162
+ SigningScheme2[SigningScheme2["ETHSIGN"] = 1] = "ETHSIGN";
163
+ SigningScheme2[SigningScheme2["EIP1271"] = 2] = "EIP1271";
164
+ SigningScheme2[SigningScheme2["PRESIGN"] = 3] = "PRESIGN";
165
+ return SigningScheme2;
166
+ })(SigningScheme || {});
167
+ var OrderKind = /* @__PURE__ */ ((OrderKind2) => {
168
+ OrderKind2["SELL"] = "sell";
169
+ OrderKind2["BUY"] = "buy";
170
+ return OrderKind2;
171
+ })(OrderKind || {});
172
+
173
+ // src/sign.ts
174
+ var EIP1271_MAGICVALUE = "0x1626ba7e";
175
+ var PRE_SIGNED = "0xf59c009283ff87aa78203fc4d9c2df025ee851130fb69cc3e068941f6b5e2d6f";
176
+ async function ecdsaSignTypedData(scheme, domain, types, data, owner) {
177
+ let signature = null;
178
+ const adapter = getGlobalAdapter4();
179
+ const signer = owner ? adapter.createSigner(owner) : adapter.signer;
180
+ switch (scheme) {
181
+ case 0 /* EIP712 */:
182
+ signature = await signer.signTypedData(domain, types, data);
183
+ break;
184
+ case 1 /* ETHSIGN */:
185
+ signature = await signer.signMessage(adapter.utils.arrayify(adapter.utils.hashTypedData(domain, types, data)));
186
+ break;
187
+ default:
188
+ throw new Error("invalid signing scheme");
189
+ }
190
+ return adapter.utils.joinSignature(adapter.utils.splitSignature(signature));
191
+ }
192
+ async function signOrder(domain, order, scheme, owner) {
193
+ return {
194
+ scheme,
195
+ data: await ecdsaSignTypedData(scheme, domain, { Order: ORDER_TYPE_FIELDS }, normalizeOrder(order), owner)
196
+ };
197
+ }
198
+ function encodeEip1271SignatureData({ verifier, signature }) {
199
+ const adapter = getGlobalAdapter4();
200
+ return adapter.utils.solidityPack(["address", "bytes"], [adapter.utils.getChecksumAddress(verifier), signature]);
201
+ }
202
+ function decodeEip1271SignatureData(signature) {
203
+ const adapter = getGlobalAdapter4();
204
+ const arrayifiedSignature = adapter.utils.arrayify(signature);
205
+ const verifier = adapter.utils.getChecksumAddress(adapter.utils.hexlify(arrayifiedSignature.slice(0, 20)));
206
+ return {
207
+ verifier,
208
+ signature: adapter.utils.hexlify(arrayifiedSignature.slice(20))
209
+ };
210
+ }
211
+ async function signOrderCancellation(domain, orderUid, scheme, owner) {
212
+ return signOrderCancellations(domain, [orderUid], scheme, owner);
213
+ }
214
+ async function signOrderCancellations(domain, orderUids, scheme, owner) {
215
+ return {
216
+ scheme,
217
+ data: await ecdsaSignTypedData(
218
+ scheme,
219
+ domain,
220
+ { OrderCancellations: CANCELLATIONS_TYPE_FIELDS },
221
+ { orderUids },
222
+ owner
223
+ )
224
+ };
225
+ }
226
+
227
+ // src/vault.ts
228
+ import { getGlobalAdapter as getGlobalAdapter5 } from "@cowprotocol/sdk-common";
229
+ async function grantRequiredRoles(authorizerAddress, authorizerAbi, vaultAddress, vaultRelayerAddress, contractCall) {
230
+ return getGlobalAdapter5().utils.grantRequiredRoles(
231
+ authorizerAddress,
232
+ authorizerAbi,
233
+ vaultAddress,
234
+ vaultRelayerAddress,
235
+ contractCall
236
+ );
237
+ }
238
+
239
+ // src/settlement.ts
240
+ import {
241
+ getGlobalAdapter as getGlobalAdapter6,
242
+ setGlobalAdapter
243
+ } from "@cowprotocol/sdk-common";
244
+ var InteractionStage = /* @__PURE__ */ ((InteractionStage2) => {
245
+ InteractionStage2[InteractionStage2["PRE"] = 0] = "PRE";
246
+ InteractionStage2[InteractionStage2["INTRA"] = 1] = "INTRA";
247
+ InteractionStage2[InteractionStage2["POST"] = 2] = "POST";
248
+ return InteractionStage2;
249
+ })(InteractionStage || {});
250
+ var FLAG_MASKS = {
251
+ kind: {
252
+ offset: 0,
253
+ options: ["sell" /* SELL */, "buy" /* BUY */]
254
+ },
255
+ partiallyFillable: {
256
+ offset: 1,
257
+ options: [false, true]
258
+ },
259
+ sellTokenBalance: {
260
+ offset: 2,
261
+ options: [
262
+ "erc20" /* ERC20 */,
263
+ void 0,
264
+ // unused
265
+ "external" /* EXTERNAL */,
266
+ "internal" /* INTERNAL */
267
+ ]
268
+ },
269
+ buyTokenBalance: {
270
+ offset: 4,
271
+ options: ["erc20" /* ERC20 */, "internal" /* INTERNAL */]
272
+ },
273
+ signingScheme: {
274
+ offset: 5,
275
+ options: [0 /* EIP712 */, 1 /* ETHSIGN */, 2 /* EIP1271 */, 3 /* PRESIGN */]
276
+ }
277
+ };
278
+ function encodeFlag(key, flag) {
279
+ const index = FLAG_MASKS[key].options.findIndex((search) => search === flag);
280
+ if (index === void 0) {
281
+ throw new Error(`Bad key/value pair to encode: ${key}/${flag}`);
282
+ }
283
+ return index << FLAG_MASKS[key].offset;
284
+ }
285
+ function mask(options) {
286
+ const num = options.length;
287
+ const bitCount = 32 - Math.clz32(num - 1);
288
+ return (1 << bitCount) - 1;
289
+ }
290
+ function decodeFlag(key, flag) {
291
+ const { offset, options } = FLAG_MASKS[key];
292
+ const numberFlags = getGlobalAdapter6().utils.toNumber(flag);
293
+ const index = numberFlags >> offset & mask(options);
294
+ const decoded = options[index];
295
+ if (decoded === void 0 || index < 0) {
296
+ throw new Error(`Invalid input flag for ${key}: 0b${numberFlags.toString(2)}`);
297
+ }
298
+ return decoded;
299
+ }
300
+ function encodeSigningScheme(scheme) {
301
+ return encodeFlag("signingScheme", scheme);
302
+ }
303
+ function decodeSigningScheme(flags) {
304
+ return decodeFlag("signingScheme", flags);
305
+ }
306
+ function encodeOrderFlags(flags) {
307
+ return encodeFlag("kind", flags.kind) | encodeFlag("partiallyFillable", flags.partiallyFillable) | encodeFlag("sellTokenBalance", flags.sellTokenBalance ?? "erc20" /* ERC20 */) | encodeFlag("buyTokenBalance", normalizeBuyTokenBalance(flags.buyTokenBalance));
308
+ }
309
+ function decodeOrderFlags(flags) {
310
+ return {
311
+ kind: decodeFlag("kind", flags),
312
+ partiallyFillable: decodeFlag("partiallyFillable", flags),
313
+ sellTokenBalance: decodeFlag("sellTokenBalance", flags),
314
+ buyTokenBalance: decodeFlag("buyTokenBalance", flags)
315
+ };
316
+ }
317
+ function encodeTradeFlags(flags) {
318
+ return encodeOrderFlags(flags) | encodeSigningScheme(flags.signingScheme);
319
+ }
320
+ function decodeTradeFlags(flags) {
321
+ return {
322
+ ...decodeOrderFlags(flags),
323
+ signingScheme: decodeSigningScheme(flags)
324
+ };
325
+ }
326
+ function encodeSignatureData(sig) {
327
+ const adapter = getGlobalAdapter6();
328
+ switch (sig.scheme) {
329
+ case 0 /* EIP712 */:
330
+ case 1 /* ETHSIGN */:
331
+ return adapter.utils.joinSignature(adapter.utils.splitSignature(sig.data));
332
+ case 2 /* EIP1271 */:
333
+ return encodeEip1271SignatureData(sig.data);
334
+ case 3 /* PRESIGN */:
335
+ return adapter.utils.getChecksumAddress(sig.data);
336
+ default:
337
+ throw new Error("unsupported signing scheme");
338
+ }
339
+ }
340
+ function decodeSignatureOwner(domain, order, scheme, sig) {
341
+ const adapter = getGlobalAdapter6();
342
+ switch (scheme) {
343
+ case 0 /* EIP712 */:
344
+ return adapter.utils.verifyTypedData(domain, { Order: ORDER_TYPE_FIELDS }, normalizeOrder(order), sig);
345
+ case 1 /* ETHSIGN */:
346
+ return adapter.utils.verifyMessage(
347
+ adapter.utils.arrayify(hashTypedData(domain, { Order: ORDER_TYPE_FIELDS }, normalizeOrder(order))),
348
+ sig
349
+ );
350
+ case 2 /* EIP1271 */:
351
+ return decodeEip1271SignatureData(sig).verifier;
352
+ case 3 /* PRESIGN */:
353
+ return adapter.utils.getChecksumAddress(adapter.utils.hexlify(sig));
354
+ default:
355
+ throw new Error("unsupported signing scheme");
356
+ }
357
+ }
358
+ function encodeTrade(tokens, order, signature, { executedAmount }) {
359
+ const tradeFlags = {
360
+ ...order,
361
+ signingScheme: signature.scheme
362
+ };
363
+ const o = normalizeOrder(order);
364
+ return {
365
+ sellTokenIndex: tokens.index(o.sellToken),
366
+ buyTokenIndex: tokens.index(o.buyToken),
367
+ receiver: o.receiver,
368
+ sellAmount: o.sellAmount,
369
+ buyAmount: o.buyAmount,
370
+ validTo: o.validTo,
371
+ appData: o.appData,
372
+ feeAmount: o.feeAmount,
373
+ flags: encodeTradeFlags(tradeFlags),
374
+ executedAmount,
375
+ signature: encodeSignatureData(signature)
376
+ };
377
+ }
378
+ var TokenRegistry = class {
379
+ /**
380
+ * Creates a new TokenRegistry instance
381
+ *
382
+ * @param adapter Provider adapter implementation
383
+ */
384
+ constructor(adapter) {
385
+ if (adapter)
386
+ setGlobalAdapter(adapter);
387
+ }
388
+ _tokens = [];
389
+ _tokenMap = {};
390
+ /**
391
+ * Gets the array of token addresses currently stored in the registry.
392
+ */
393
+ get addresses() {
394
+ return this._tokens.slice();
395
+ }
396
+ /**
397
+ * Retrieves the token index for the specified token address. If the token is
398
+ * not in the registry, it will be added.
399
+ *
400
+ * @param token The token address to add to the registry.
401
+ * @return The token index.
402
+ */
403
+ index(token) {
404
+ const tokenAddress = getGlobalAdapter6().utils.getChecksumAddress(token);
405
+ let tokenIndex = this._tokenMap[tokenAddress];
406
+ if (tokenIndex === void 0) {
407
+ tokenIndex = this._tokens.length;
408
+ this._tokens.push(tokenAddress);
409
+ this._tokenMap[tokenAddress] = tokenIndex;
410
+ }
411
+ return tokenIndex;
412
+ }
413
+ };
414
+ var SettlementEncoder = class _SettlementEncoder {
415
+ /**
416
+ * Creates a new settlement encoder instance.
417
+ * @param domain Domain used for signing orders. See {@link signOrder} for
418
+ * more details.
419
+ */
420
+ constructor(domain, adapter) {
421
+ this.domain = domain;
422
+ if (adapter)
423
+ setGlobalAdapter(adapter);
424
+ }
425
+ _tokens = new TokenRegistry();
426
+ _trades = [];
427
+ _interactions = {
428
+ [0 /* PRE */]: [],
429
+ [1 /* INTRA */]: [],
430
+ [2 /* POST */]: []
431
+ };
432
+ _orderRefunds = {
433
+ filledAmounts: [],
434
+ preSignatures: []
435
+ };
436
+ /**
437
+ * Gets the array of token addresses used by the currently encoded orders.
438
+ */
439
+ get tokens() {
440
+ return this._tokens.addresses;
441
+ }
442
+ /**
443
+ * Gets the encoded trades.
444
+ */
445
+ get trades() {
446
+ return this._trades.slice();
447
+ }
448
+ /**
449
+ * Gets all encoded interactions for all stages.
450
+ *
451
+ * Note that order refund interactions are included as post-interactions.
452
+ */
453
+ get interactions() {
454
+ return [
455
+ this._interactions[0 /* PRE */].slice(),
456
+ this._interactions[1 /* INTRA */].slice(),
457
+ [...this._interactions[2 /* POST */], ...this.encodedOrderRefunds]
458
+ ];
459
+ }
460
+ /**
461
+ * Gets the order refunds encoded as interactions.
462
+ */
463
+ get encodedOrderRefunds() {
464
+ const { filledAmounts, preSignatures } = this._orderRefunds;
465
+ if (filledAmounts.length + preSignatures.length === 0) {
466
+ return [];
467
+ }
468
+ const settlement = this.domain.verifyingContract;
469
+ if (settlement === void 0) {
470
+ throw new Error("domain missing settlement contract address");
471
+ }
472
+ const iface = getGlobalAdapter6().utils.createInterface([
473
+ "function freeFilledAmountStorage(bytes[] orderUids)",
474
+ "function freePreSignatureStorage(bytes[] orderUids)"
475
+ ]);
476
+ const interactions = [];
477
+ for (const [functionName, orderUids] of [
478
+ ["freeFilledAmountStorage", filledAmounts],
479
+ ["freePreSignatureStorage", preSignatures]
480
+ ].filter(([, orderUids2]) => orderUids2.length > 0)) {
481
+ interactions.push(
482
+ normalizeInteraction({
483
+ target: settlement,
484
+ callData: iface.encodeFunctionData(functionName, [orderUids])
485
+ })
486
+ );
487
+ }
488
+ return interactions;
489
+ }
490
+ /**
491
+ * Returns a clearing price vector for the current settlement tokens from the
492
+ * provided price map.
493
+ *
494
+ * @param prices The price map from token address to price.
495
+ * @return The price vector.
496
+ */
497
+ clearingPrices(prices) {
498
+ return this.tokens.map((token) => {
499
+ const price = prices[token];
500
+ if (price === void 0) {
501
+ throw new Error(`missing price for token ${token}`);
502
+ }
503
+ return price;
504
+ });
505
+ }
506
+ /**
507
+ * Encodes a trade from a signed order and executed amount, appending it to
508
+ * the `calldata` bytes that are being built.
509
+ *
510
+ * Additionally, if the order references new tokens that the encoder has not
511
+ * yet seen, they are added to the tokens array.
512
+ *
513
+ * @param order The order of the trade to encode.
514
+ * @param signature The signature for the order data.
515
+ * @param tradeExecution The execution details for the trade.
516
+ */
517
+ encodeTrade(order, signature, { executedAmount } = {}) {
518
+ if (order.partiallyFillable && executedAmount === void 0) {
519
+ throw new Error("missing executed amount for partially fillable trade");
520
+ }
521
+ this._trades.push(
522
+ encodeTrade(this._tokens, order, signature, {
523
+ executedAmount: executedAmount ?? 0
524
+ })
525
+ );
526
+ }
527
+ /**
528
+ * Signs an order and encodes a trade with that order.
529
+ *
530
+ * @param order The order to sign for the trade.
531
+ * @param scheme The signing scheme to use. See {@link SigningScheme} for more
532
+ * details.
533
+ * @param tradeExecution The execution details for the trade.
534
+ * @param owner The externally owned account that should sign the order.
535
+ */
536
+ async signEncodeTrade(order, scheme, tradeExecution, owner) {
537
+ const signature = await signOrder(this.domain, order, scheme, owner);
538
+ this.encodeTrade(order, signature, tradeExecution);
539
+ }
540
+ /**
541
+ * Encodes the input interaction in the packed format accepted by the smart
542
+ * contract and adds it to the interactions encoded so far.
543
+ *
544
+ * @param stage The stage the interaction should be executed.
545
+ * @param interaction The interaction to encode.
546
+ */
547
+ encodeInteraction(interaction, stage = 1 /* INTRA */) {
548
+ this._interactions[stage].push(normalizeInteraction(interaction));
549
+ }
550
+ /**
551
+ * Encodes order UIDs for gas refunds.
552
+ *
553
+ * @param settlement The address of the settlement contract.
554
+ * @param orderRefunds The order refunds to encode.
555
+ */
556
+ encodeOrderRefunds(orderRefunds) {
557
+ if (this.domain.verifyingContract === void 0) {
558
+ throw new Error("domain missing settlement contract address");
559
+ }
560
+ const filledAmounts = orderRefunds.filledAmounts ?? [];
561
+ const preSignatures = orderRefunds.preSignatures ?? [];
562
+ for (const orderUid of [...filledAmounts, ...preSignatures]) {
563
+ const bytes = getGlobalAdapter6().utils.arrayify(orderUid);
564
+ if (bytes.length !== ORDER_UID_LENGTH) {
565
+ throw new Error("one or more invalid order UIDs");
566
+ }
567
+ }
568
+ this._orderRefunds.filledAmounts.push(...filledAmounts);
569
+ this._orderRefunds.preSignatures.push(...preSignatures);
570
+ }
571
+ /**
572
+ * Returns the encoded settlement parameters.
573
+ */
574
+ encodedSettlement(prices) {
575
+ return [this.tokens, this.clearingPrices(prices), this.trades, this.interactions];
576
+ }
577
+ /**
578
+ * Returns an encoded settlement that exclusively performs setup interactions.
579
+ * This method can be used, for example, to set the settlement contract's
580
+ * allowances to other protocols it may interact with.
581
+ *
582
+ * @param interactions The list of setup interactions to encode.
583
+ */
584
+ static encodedSetup(...interactions) {
585
+ const encoder = new _SettlementEncoder({ name: "unused" });
586
+ for (const interaction of interactions) {
587
+ encoder.encodeInteraction(interaction);
588
+ }
589
+ return encoder.encodedSettlement({});
590
+ }
591
+ };
592
+ function decodeOrder(trade, tokens) {
593
+ const adapter = getGlobalAdapter6();
594
+ const sellTokenIndex = adapter.utils.toNumber(adapter.utils.toBigIntish(trade.sellTokenIndex));
595
+ const buyTokenIndex = adapter.utils.toNumber(adapter.utils.toBigIntish(trade.buyTokenIndex));
596
+ if (Math.max(sellTokenIndex, buyTokenIndex) >= tokens.length) {
597
+ throw new Error("Invalid trade");
598
+ }
599
+ return {
600
+ sellToken: tokens[sellTokenIndex],
601
+ buyToken: tokens[buyTokenIndex],
602
+ receiver: trade.receiver,
603
+ sellAmount: trade.sellAmount,
604
+ buyAmount: trade.buyAmount,
605
+ validTo: adapter.utils.toNumber(adapter.utils.toBigIntish(trade.validTo)),
606
+ appData: trade.appData,
607
+ feeAmount: trade.feeAmount,
608
+ ...decodeOrderFlags(trade.flags)
609
+ };
610
+ }
611
+
612
+ // src/swap.ts
613
+ import {
614
+ setGlobalAdapter as setGlobalAdapter2
615
+ } from "@cowprotocol/sdk-common";
616
+ function encodeSwapStep(tokens, swap) {
617
+ return {
618
+ poolId: swap.poolId,
619
+ assetInIndex: tokens.index(swap.assetIn),
620
+ assetOutIndex: tokens.index(swap.assetOut),
621
+ amount: swap.amount,
622
+ userData: swap.userData || "0x"
623
+ };
624
+ }
625
+ var SwapEncoder = class _SwapEncoder {
626
+ /**
627
+ * Creates a new settlement encoder instance.
628
+ *
629
+ * @param domain Domain used for signing orders. See {@link signOrder} for
630
+ * more details.
631
+ */
632
+ constructor(domain, adapter) {
633
+ this.domain = domain;
634
+ if (adapter)
635
+ setGlobalAdapter2(adapter);
636
+ }
637
+ _tokens = new TokenRegistry();
638
+ _swaps = [];
639
+ _trade = void 0;
640
+ /**
641
+ * Gets the array of token addresses used by the currently encoded swaps.
642
+ */
643
+ get tokens() {
644
+ return this._tokens.addresses;
645
+ }
646
+ /**
647
+ * Gets the encoded swaps.
648
+ */
649
+ get swaps() {
650
+ return this._swaps.slice();
651
+ }
652
+ /**
653
+ * Gets the encoded trade.
654
+ */
655
+ get trade() {
656
+ if (this._trade === void 0) {
657
+ throw new Error("trade not encoded");
658
+ }
659
+ return this._trade;
660
+ }
661
+ /**
662
+ * Encodes the swap as a swap request and appends it to the swaps encoded so
663
+ * far.
664
+ *
665
+ * @param swap The Balancer swap to encode.
666
+ */
667
+ encodeSwapStep(...swaps) {
668
+ this._swaps.push(...swaps.map((swap) => encodeSwapStep(this._tokens, swap)));
669
+ }
670
+ /**
671
+ * Encodes a trade from a signed order.
672
+ *
673
+ * Additionally, if the order references new tokens that the encoder has not
674
+ * yet seen, they are added to the tokens array.
675
+ *
676
+ * @param order The order of the trade to encode.
677
+ * @param signature The signature for the order data.
678
+ */
679
+ encodeTrade(order, signature, swapExecution) {
680
+ const { limitAmount } = {
681
+ limitAmount: order.kind == "sell" /* SELL */ ? order.buyAmount : order.sellAmount,
682
+ ...swapExecution
683
+ };
684
+ this._trade = encodeTrade(this._tokens, order, signature, {
685
+ executedAmount: limitAmount
686
+ });
687
+ }
688
+ /**
689
+ * Signs an order and encodes a trade with that order.
690
+ *
691
+ * @param order The order to sign for the trade.
692
+ * @param scheme The signing scheme to use. See {@link SigningScheme} for more
693
+ * details.
694
+ * @param owner The externally owned account that should sign the order.
695
+ */
696
+ async signEncodeTrade(order, scheme, swapExecution, owner) {
697
+ const signature = await signOrder(this.domain, order, scheme, owner);
698
+ this.encodeTrade(order, signature, swapExecution);
699
+ }
700
+ /**
701
+ * Returns the encoded swap parameters for the current state of the encoder.
702
+ *
703
+ * This method with raise an exception if a trade has not been encoded.
704
+ */
705
+ encodedSwap() {
706
+ return [this.swaps, this.tokens, this.trade];
707
+ }
708
+ /**
709
+ * Utility method for encoding a direct swap between an order and Balancer
710
+ * pools.
711
+ *
712
+ * This method functions identically to using a {@link SwapEncoder} and is
713
+ * provided as a short-cut.
714
+ */
715
+ static encodeSwap(...args) {
716
+ if (args.length < 5) {
717
+ const [swaps, order, signature, swapExecution] = args;
718
+ const encoder = new _SwapEncoder({});
719
+ encoder.encodeSwapStep(...swaps);
720
+ encoder.encodeTrade(order, signature, swapExecution);
721
+ return encoder.encodedSwap();
722
+ } else {
723
+ const [domain, swaps, order, owner, scheme, swapExecution] = args;
724
+ const encoder = new _SwapEncoder(domain);
725
+ encoder.encodeSwapStep(...swaps);
726
+ return encoder.signEncodeTrade(order, scheme, swapExecution, owner).then(() => encoder.encodedSwap());
727
+ }
728
+ }
729
+ };
730
+
731
+ // src/ContractsTs.ts
732
+ var ContractsTs = class {
733
+ // Make ORDER_TYPE_FIELDS and ORDER_UID_LENGTH available
734
+ ORDER_TYPE_FIELDS = ORDER_TYPE_FIELDS;
735
+ ORDER_UID_LENGTH = ORDER_UID_LENGTH;
736
+ /**
737
+ * Creates a new ContractsTs instance
738
+ *
739
+ * @param adapter Provider adapter implementation
740
+ */
741
+ constructor(adapter) {
742
+ setGlobalAdapter3(adapter);
743
+ }
744
+ //deploy
745
+ deterministicDeploymentAddress = deterministicDeploymentAddress;
746
+ //interaction
747
+ normalizeInteraction = normalizeInteraction;
748
+ normalizeInteractions = normalizeInteractions;
749
+ //order
750
+ timestamp = timestamp;
751
+ hashify = hashify;
752
+ normalizeBuyTokenBalance = normalizeBuyTokenBalance;
753
+ normalizeOrder = normalizeOrder;
754
+ hashTypedData = hashTypedData;
755
+ hashOrder = hashOrder;
756
+ computeOrderUid = computeOrderUid;
757
+ packOrderUidParams = packOrderUidParams;
758
+ extractOrderUidParams = extractOrderUidParams;
759
+ //proxy
760
+ implementationAddress = implementationAddress;
761
+ ownerAddress = ownerAddress;
762
+ //sign
763
+ signOrder = signOrder;
764
+ encodeEip1271SignatureData = encodeEip1271SignatureData;
765
+ decodeEip1271SignatureData = decodeEip1271SignatureData;
766
+ //vault
767
+ grantRequiredRoles = grantRequiredRoles;
768
+ //settlement
769
+ encodeSigningScheme = encodeSigningScheme;
770
+ decodeSigningScheme = decodeSigningScheme;
771
+ encodeOrderFlags = encodeOrderFlags;
772
+ decodeOrderFlags = decodeOrderFlags;
773
+ encodeTradeFlags = encodeTradeFlags;
774
+ decodeTradeFlags = decodeTradeFlags;
775
+ encodeSignatureData = encodeSignatureData;
776
+ decodeSignatureOwner = decodeSignatureOwner;
777
+ encodeTrade = encodeTrade;
778
+ decodeOrder = decodeOrder;
779
+ TokenRegistry = TokenRegistry;
780
+ SettlementEncoder = SettlementEncoder;
781
+ InteractionStage = InteractionStage;
782
+ FLAG_MASKS = FLAG_MASKS;
783
+ //swap
784
+ encodeSwapStep = encodeSwapStep;
785
+ SwapEncoder = SwapEncoder;
786
+ /**
787
+ * Return the Gnosis Protocol v2 domain used for signing.
788
+ * @param chainId The EIP-155 chain ID.
789
+ * @param verifyingContract The address of the contract that will verify the
790
+ * signature.
791
+ * @return An EIP-712 compatible typed domain data.
792
+ */
793
+ static domain(chainId, verifyingContract) {
794
+ return {
795
+ name: "Gnosis Protocol",
796
+ version: "v2",
797
+ chainId,
798
+ verifyingContract
799
+ };
800
+ }
801
+ };
802
+
803
+ // src/api.ts
804
+ import { getGlobalAdapter as getGlobalAdapter7 } from "@cowprotocol/sdk-common";
805
+ var Environment = /* @__PURE__ */ ((Environment2) => {
806
+ Environment2[Environment2["Dev"] = 0] = "Dev";
807
+ Environment2[Environment2["Prod"] = 1] = "Prod";
808
+ return Environment2;
809
+ })(Environment || {});
810
+ var LIMIT_CONCURRENT_REQUESTS = 5;
811
+ function apiUrl(environment, network) {
812
+ switch (environment) {
813
+ case 0 /* Dev */:
814
+ return `https://barn.api.cow.fi/${network}`;
815
+ case 1 /* Prod */:
816
+ return `https://api.cow.fi/${network}`;
817
+ default:
818
+ throw new Error("Invalid environment");
819
+ }
820
+ }
821
+ var QuotePriceQuality = /* @__PURE__ */ ((QuotePriceQuality2) => {
822
+ QuotePriceQuality2["FAST"] = "fast";
823
+ QuotePriceQuality2["OPTIMAL"] = "optimal";
824
+ return QuotePriceQuality2;
825
+ })(QuotePriceQuality || {});
826
+ var GetQuoteErrorType = /* @__PURE__ */ ((GetQuoteErrorType2) => {
827
+ GetQuoteErrorType2["SellAmountDoesNotCoverFee"] = "SellAmountDoesNotCoverFee";
828
+ GetQuoteErrorType2["NoLiquidity"] = "NoLiquidity";
829
+ return GetQuoteErrorType2;
830
+ })(GetQuoteErrorType || {});
831
+ function apiKind(kind) {
832
+ switch (kind) {
833
+ case "sell" /* SELL */:
834
+ return "sell";
835
+ case "buy" /* BUY */:
836
+ return "buy";
837
+ default:
838
+ throw new Error(`Unsupported kind ${kind}`);
839
+ }
840
+ }
841
+ function apiSigningScheme(scheme) {
842
+ switch (scheme) {
843
+ case 0 /* EIP712 */:
844
+ return "eip712";
845
+ case 1 /* ETHSIGN */:
846
+ return "ethsign";
847
+ case 2 /* EIP1271 */:
848
+ return "eip1271";
849
+ case 3 /* PRESIGN */:
850
+ return "presign";
851
+ default:
852
+ throw new Error(`Unsupported signing scheme ${scheme}`);
853
+ }
854
+ }
855
+ async function call(route, baseUrl, init) {
856
+ const url = `${baseUrl}/api/v1/${route}`;
857
+ const response = await fetch(url, init);
858
+ const body = await response.text();
859
+ if (!response.ok) {
860
+ const error = new Error(
861
+ `Calling "${url} ${JSON.stringify(init)} failed with ${response.status}: ${body}`
862
+ );
863
+ try {
864
+ error.apiError = JSON.parse(body);
865
+ } catch {
866
+ }
867
+ throw error;
868
+ }
869
+ return JSON.parse(body);
870
+ }
871
+ async function estimateTradeAmount({
872
+ sellToken,
873
+ buyToken,
874
+ kind,
875
+ amount,
876
+ baseUrl
877
+ }) {
878
+ const side = kind == "sell" /* SELL */ ? {
879
+ kind: "sell" /* SELL */,
880
+ sellAmountAfterFee: amount
881
+ } : {
882
+ kind: "buy" /* BUY */,
883
+ buyAmountAfterFee: amount
884
+ };
885
+ const { quote } = await getQuote(
886
+ { baseUrl },
887
+ {
888
+ from: "0x0000000000000000000000000000000000000000",
889
+ sellToken,
890
+ buyToken,
891
+ priceQuality: "fast" /* FAST */,
892
+ ...side
893
+ }
894
+ );
895
+ if (quote.buyToken.toLowerCase() !== buyToken.toLowerCase()) {
896
+ throw new Error(
897
+ `Price returned for sell token ${sellToken} uses an incorrect quote token (${quote.buyToken.toLowerCase()} instead of ${buyToken.toLowerCase()})`
898
+ );
899
+ }
900
+ const estimatedAmount = kind == "sell" /* SELL */ ? quote.buyAmount : quote.sellAmount;
901
+ return getGlobalAdapter7().utils.toBigIntish(estimatedAmount);
902
+ }
903
+ async function placeOrder({ order, signature, baseUrl, from }) {
904
+ const normalizedOrder = normalizeOrder(order);
905
+ const adapter = getGlobalAdapter7();
906
+ return await call("orders", baseUrl, {
907
+ method: "post",
908
+ body: JSON.stringify({
909
+ sellToken: normalizedOrder.sellToken,
910
+ buyToken: normalizedOrder.buyToken,
911
+ sellAmount: String(adapter.utils.toBigIntish(normalizedOrder.sellAmount)),
912
+ buyAmount: String(adapter.utils.toBigIntish(normalizedOrder.buyAmount)),
913
+ validTo: normalizedOrder.validTo,
914
+ appData: normalizedOrder.appData,
915
+ feeAmount: String(adapter.utils.toBigIntish(normalizedOrder.feeAmount)),
916
+ kind: apiKind(order.kind),
917
+ partiallyFillable: normalizedOrder.partiallyFillable,
918
+ signature: encodeSignatureData(signature),
919
+ signingScheme: apiSigningScheme(signature.scheme),
920
+ receiver: normalizedOrder.receiver,
921
+ from
922
+ }),
923
+ headers: { "Content-Type": "application/json" }
924
+ });
925
+ }
926
+ async function getExecutedSellAmount({ uid, baseUrl }) {
927
+ const response = await call(`orders/${uid}`, baseUrl);
928
+ return getGlobalAdapter7().utils.toBigIntish(response.executedSellAmount);
929
+ }
930
+ async function getQuote({ baseUrl }, quote) {
931
+ if (quote.sellAmountBeforeFee) {
932
+ ;
933
+ quote.sellAmountBeforeFee = String(quote.sellAmountBeforeFee);
934
+ }
935
+ if (quote.sellAmountAfterFee) {
936
+ ;
937
+ quote.sellAmountAfterFee = String(quote.sellAmountAfterFee);
938
+ }
939
+ if (quote.buyAmountAfterFee) {
940
+ ;
941
+ quote.buyAmountAfterFee = String(quote.buyAmountAfterFee);
942
+ }
943
+ return call("quote", baseUrl, {
944
+ method: "post",
945
+ headers: { "Content-Type": "application/json" },
946
+ body: JSON.stringify(quote)
947
+ });
948
+ }
949
+ var Api = class {
950
+ network;
951
+ baseUrl;
952
+ constructor(network, baseUrlOrEnv) {
953
+ this.network = network;
954
+ let baseUrl;
955
+ if (typeof baseUrlOrEnv === "string") {
956
+ baseUrl = baseUrlOrEnv;
957
+ } else {
958
+ baseUrl = apiUrl(baseUrlOrEnv, network);
959
+ }
960
+ this.baseUrl = baseUrl;
961
+ }
962
+ apiCallParams() {
963
+ return { network: this.network, baseUrl: this.baseUrl };
964
+ }
965
+ async estimateTradeAmount(query) {
966
+ return estimateTradeAmount({ ...this.apiCallParams(), ...query });
967
+ }
968
+ async placeOrder(query) {
969
+ return placeOrder({ ...this.apiCallParams(), ...query });
970
+ }
971
+ async getExecutedSellAmount(query) {
972
+ return getExecutedSellAmount({ ...this.apiCallParams(), ...query });
973
+ }
974
+ async getQuote(query) {
975
+ return getQuote(this.apiCallParams(), query);
976
+ }
977
+ };
978
+
979
+ // src/reader.ts
980
+ import { getGlobalAdapter as getGlobalAdapter8 } from "@cowprotocol/sdk-common";
981
+ async function readStorage(baseAddress, baseAbi, readerAddress, readerAbi, provider, method, parameters) {
982
+ return getGlobalAdapter8().utils.readStorage(
983
+ baseAddress,
984
+ baseAbi,
985
+ readerAddress,
986
+ readerAbi,
987
+ provider,
988
+ method,
989
+ parameters
990
+ );
991
+ }
992
+ var AllowListReader = class {
993
+ constructor(allowListAddress, allowListAbi, readerAddress, readerAbi, provider) {
994
+ this.allowListAddress = allowListAddress;
995
+ this.allowListAbi = allowListAbi;
996
+ this.readerAddress = readerAddress;
997
+ this.readerAbi = readerAbi;
998
+ this.provider = provider;
999
+ }
1000
+ /**
1001
+ * Returns true if all the specified addresses are allowed solvers.
1002
+ */
1003
+ async areSolvers(solvers) {
1004
+ return String(
1005
+ await readStorage(
1006
+ this.allowListAddress,
1007
+ this.allowListAbi,
1008
+ this.readerAddress,
1009
+ this.readerAbi,
1010
+ this.provider,
1011
+ "areSolvers",
1012
+ [solvers]
1013
+ )
1014
+ );
1015
+ }
1016
+ };
1017
+ var SettlementReader = class {
1018
+ constructor(settlementAddress, settlementAbi, readerAddress, readerAbi, provider) {
1019
+ this.settlementAddress = settlementAddress;
1020
+ this.settlementAbi = settlementAbi;
1021
+ this.readerAddress = readerAddress;
1022
+ this.readerAbi = readerAbi;
1023
+ this.provider = provider;
1024
+ }
1025
+ /**
1026
+ * Read and return filled amounts for a list of orders
1027
+ */
1028
+ async filledAmountsForOrders(orderUids) {
1029
+ return await readStorage(
1030
+ this.settlementAddress,
1031
+ this.settlementAbi,
1032
+ this.readerAddress,
1033
+ this.readerAbi,
1034
+ this.provider,
1035
+ "filledAmountsForOrders",
1036
+ [orderUids]
1037
+ );
1038
+ }
1039
+ };
1040
+ var TradeSimulator = class {
1041
+ constructor(settlementAddress, settlementAbi, simulatorAddress, simulatorAbi, provider) {
1042
+ this.settlementAddress = settlementAddress;
1043
+ this.settlementAbi = settlementAbi;
1044
+ this.simulatorAddress = simulatorAddress;
1045
+ this.simulatorAbi = simulatorAbi;
1046
+ this.provider = provider;
1047
+ }
1048
+ /**
1049
+ * Simulates the single order settlement for an executed trade and a set of
1050
+ * interactions.
1051
+ */
1052
+ async simulateTrade(trade, interactions) {
1053
+ const adapter = getGlobalAdapter8();
1054
+ const normalizedTrade = {
1055
+ ...trade,
1056
+ receiver: trade.receiver ?? adapter.ZERO_ADDRESS,
1057
+ sellTokenBalance: adapter.utils.id(trade.sellTokenBalance ?? "erc20" /* ERC20 */),
1058
+ buyTokenBalance: adapter.utils.id(trade.buyTokenBalance ?? "erc20" /* ERC20 */)
1059
+ };
1060
+ const normalizedInteractions = [
1061
+ normalizeInteractions(interactions[0 /* PRE */] ?? []),
1062
+ normalizeInteractions(interactions[1 /* INTRA */] ?? []),
1063
+ normalizeInteractions(interactions[2 /* POST */] ?? [])
1064
+ ];
1065
+ return await readStorage(
1066
+ this.settlementAddress,
1067
+ this.settlementAbi,
1068
+ this.simulatorAddress,
1069
+ this.simulatorAbi,
1070
+ this.provider,
1071
+ "simulateTrade",
1072
+ [normalizedTrade, normalizedInteractions]
1073
+ );
1074
+ }
1075
+ };
1076
+
1077
+ // src/signers.ts
1078
+ import { getGlobalAdapter as getGlobalAdapter9 } from "@cowprotocol/sdk-common";
1079
+ function getTypedDataVersionedSigner(signer, version) {
1080
+ const adapter = getGlobalAdapter9();
1081
+ return new adapter.TypedDataVersionedSigner(signer, version);
1082
+ }
1083
+ function getTypedDataV3Signer(signer) {
1084
+ const adapter = getGlobalAdapter9();
1085
+ return new adapter.TypedDataV3Signer(signer);
1086
+ }
1087
+ function getIntChainIdTypedDataV4Signer(signer) {
1088
+ const adapter = getGlobalAdapter9();
1089
+ return new adapter.IntChainIdTypedDataV4Signer(signer);
1090
+ }
1091
+
1092
+ // src/generated/packageVersion.ts
1093
+ var CONTRACTS_PKG_VERSION = "0.1.0";
1094
+ export {
1095
+ AllowListReader,
1096
+ Api,
1097
+ BUY_ETH_ADDRESS,
1098
+ CANCELLATIONS_TYPE_FIELDS,
1099
+ CONTRACTS_PKG_VERSION,
1100
+ CONTRACT_NAMES,
1101
+ OrderKind as ContractsOrderKind,
1102
+ SigningScheme as ContractsSigningScheme,
1103
+ ContractsTs,
1104
+ DEPLOYER_CONTRACT,
1105
+ EIP1271_MAGICVALUE,
1106
+ EIP173_PROXY_ABI,
1107
+ Environment,
1108
+ FLAG_MASKS,
1109
+ GetQuoteErrorType,
1110
+ InteractionStage,
1111
+ LIMIT_CONCURRENT_REQUESTS,
1112
+ ORDER_TYPE_FIELDS,
1113
+ ORDER_TYPE_HASH,
1114
+ ORDER_UID_LENGTH,
1115
+ OrderBalance,
1116
+ PRE_SIGNED,
1117
+ QuotePriceQuality,
1118
+ SALT,
1119
+ SettlementEncoder,
1120
+ SettlementReader,
1121
+ SwapEncoder,
1122
+ TokenRegistry,
1123
+ TradeSimulator,
1124
+ apiUrl,
1125
+ computeOrderUid,
1126
+ decodeEip1271SignatureData,
1127
+ decodeOrder,
1128
+ decodeOrderFlags,
1129
+ decodeSignatureOwner,
1130
+ decodeSigningScheme,
1131
+ decodeTradeFlags,
1132
+ deterministicDeploymentAddress,
1133
+ ecdsaSignTypedData,
1134
+ encodeEip1271SignatureData,
1135
+ encodeOrderFlags,
1136
+ encodeSignatureData,
1137
+ encodeSigningScheme,
1138
+ encodeSwapStep,
1139
+ encodeTrade,
1140
+ encodeTradeFlags,
1141
+ extractOrderUidParams,
1142
+ getIntChainIdTypedDataV4Signer,
1143
+ getTypedDataV3Signer,
1144
+ getTypedDataVersionedSigner,
1145
+ grantRequiredRoles,
1146
+ hashOrder,
1147
+ hashOrderCancellation,
1148
+ hashOrderCancellations,
1149
+ hashTypedData,
1150
+ hashify,
1151
+ implementationAddress,
1152
+ normalizeBuyTokenBalance,
1153
+ normalizeInteraction,
1154
+ normalizeInteractions,
1155
+ normalizeOrder,
1156
+ ownerAddress,
1157
+ packOrderUidParams,
1158
+ signOrder,
1159
+ signOrderCancellation,
1160
+ signOrderCancellations,
1161
+ timestamp
1162
+ };