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