eth-twc-sdk-js 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.
Files changed (54) hide show
  1. package/README.md +29 -0
  2. package/dist/abi.cjs +286 -0
  3. package/dist/abi.d.cts +419 -0
  4. package/dist/abi.d.ts +419 -0
  5. package/dist/abi.js +259 -0
  6. package/dist/config.cjs +41 -0
  7. package/dist/config.d.cts +14 -0
  8. package/dist/config.d.ts +14 -0
  9. package/dist/config.js +11 -0
  10. package/dist/selfTransfer/batch/index.cjs +373 -0
  11. package/dist/selfTransfer/batch/index.d.cts +24 -0
  12. package/dist/selfTransfer/batch/index.d.ts +24 -0
  13. package/dist/selfTransfer/batch/index.js +345 -0
  14. package/dist/selfTransfer/single/index.cjs +360 -0
  15. package/dist/selfTransfer/single/index.d.cts +20 -0
  16. package/dist/selfTransfer/single/index.d.ts +20 -0
  17. package/dist/selfTransfer/single/index.js +332 -0
  18. package/dist/selfTransfer/unified/index.cjs +372 -0
  19. package/dist/selfTransfer/unified/index.d.cts +24 -0
  20. package/dist/selfTransfer/unified/index.d.ts +24 -0
  21. package/dist/selfTransfer/unified/index.js +344 -0
  22. package/dist/signatureTransfer/batch/index.cjs +545 -0
  23. package/dist/signatureTransfer/batch/index.d.cts +100 -0
  24. package/dist/signatureTransfer/batch/index.d.ts +100 -0
  25. package/dist/signatureTransfer/batch/index.js +514 -0
  26. package/dist/signatureTransfer/cancelAuthorization/index.cjs +491 -0
  27. package/dist/signatureTransfer/cancelAuthorization/index.d.cts +49 -0
  28. package/dist/signatureTransfer/cancelAuthorization/index.d.ts +49 -0
  29. package/dist/signatureTransfer/cancelAuthorization/index.js +460 -0
  30. package/dist/signatureTransfer/single/index.cjs +528 -0
  31. package/dist/signatureTransfer/single/index.d.cts +84 -0
  32. package/dist/signatureTransfer/single/index.d.ts +84 -0
  33. package/dist/signatureTransfer/single/index.js +497 -0
  34. package/dist/signatureTransfer/unified/index.cjs +541 -0
  35. package/dist/signatureTransfer/unified/index.d.cts +95 -0
  36. package/dist/signatureTransfer/unified/index.d.ts +95 -0
  37. package/dist/signatureTransfer/unified/index.js +510 -0
  38. package/dist/types/transferDetail.cjs +62 -0
  39. package/dist/types/transferDetail.d.cts +15 -0
  40. package/dist/types/transferDetail.d.ts +15 -0
  41. package/dist/types/transferDetail.js +36 -0
  42. package/dist/types/utils.cjs +52 -0
  43. package/dist/types/utils.d.cts +12 -0
  44. package/dist/types/utils.d.ts +12 -0
  45. package/dist/types/utils.js +23 -0
  46. package/dist/utils.cjs +123 -0
  47. package/dist/utils.d.cts +21 -0
  48. package/dist/utils.d.ts +21 -0
  49. package/dist/utils.js +90 -0
  50. package/dist/verify.cjs +366 -0
  51. package/dist/verify.d.cts +433 -0
  52. package/dist/verify.d.ts +433 -0
  53. package/dist/verify.js +339 -0
  54. package/package.json +100 -0
@@ -0,0 +1,345 @@
1
+ // twcConstants.ts
2
+ var transferWithCommitmentAddress = "0x5C260DD537A9c23Bbd42493e59F3CeA7da2DbC71";
3
+
4
+ // ../contracts/abi/generated.ts
5
+ var transferWithCommitmentAbi = [
6
+ {
7
+ type: "constructor",
8
+ inputs: [
9
+ { name: "name", internalType: "string", type: "string" },
10
+ { name: "version", internalType: "string", type: "string" }
11
+ ],
12
+ stateMutability: "nonpayable"
13
+ },
14
+ {
15
+ type: "function",
16
+ inputs: [],
17
+ name: "BATCH_TRANSFER_WITH_COMMIT_TYPEHASH",
18
+ outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }],
19
+ stateMutability: "view"
20
+ },
21
+ {
22
+ type: "function",
23
+ inputs: [],
24
+ name: "CANCEL_AUTHORIZATION_TYPEHASH",
25
+ outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }],
26
+ stateMutability: "view"
27
+ },
28
+ {
29
+ type: "function",
30
+ inputs: [],
31
+ name: "TRANSFER_WITH_COMMIT_TYPEHASH",
32
+ outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }],
33
+ stateMutability: "view"
34
+ },
35
+ {
36
+ type: "function",
37
+ inputs: [],
38
+ name: "UNI_COMMIT_TRANSFER_TYPEHASH",
39
+ outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }],
40
+ stateMutability: "view"
41
+ },
42
+ {
43
+ type: "function",
44
+ inputs: [
45
+ { name: "authorizer", internalType: "address", type: "address" },
46
+ { name: "commitment", internalType: "bytes32", type: "bytes32" },
47
+ { name: "signature", internalType: "bytes", type: "bytes" }
48
+ ],
49
+ name: "cancelAuthorization",
50
+ outputs: [],
51
+ stateMutability: "nonpayable"
52
+ },
53
+ {
54
+ type: "function",
55
+ inputs: [
56
+ { name: "payer", internalType: "address", type: "address" },
57
+ { name: "commitment", internalType: "bytes32", type: "bytes32" }
58
+ ],
59
+ name: "commitmentState",
60
+ outputs: [{ name: "", internalType: "bool", type: "bool" }],
61
+ stateMutability: "view"
62
+ },
63
+ {
64
+ type: "function",
65
+ inputs: [],
66
+ name: "eip712Domain",
67
+ outputs: [
68
+ { name: "fields", internalType: "bytes1", type: "bytes1" },
69
+ { name: "name", internalType: "string", type: "string" },
70
+ { name: "version", internalType: "string", type: "string" },
71
+ { name: "chainId", internalType: "uint256", type: "uint256" },
72
+ { name: "verifyingContract", internalType: "address", type: "address" },
73
+ { name: "salt", internalType: "bytes32", type: "bytes32" },
74
+ { name: "extensions", internalType: "uint256[]", type: "uint256[]" }
75
+ ],
76
+ stateMutability: "view"
77
+ },
78
+ {
79
+ type: "function",
80
+ inputs: [
81
+ { name: "token", internalType: "address", type: "address" },
82
+ { name: "to", internalType: "address", type: "address" },
83
+ { name: "value", internalType: "uint256", type: "uint256" },
84
+ { name: "commitment", internalType: "bytes32", type: "bytes32" }
85
+ ],
86
+ name: "transfer",
87
+ outputs: [],
88
+ stateMutability: "nonpayable"
89
+ },
90
+ {
91
+ type: "function",
92
+ inputs: [
93
+ {
94
+ name: "details",
95
+ internalType: "struct TransferDetail[]",
96
+ type: "tuple[]",
97
+ components: [
98
+ { name: "to", internalType: "address", type: "address" },
99
+ { name: "token", internalType: "address", type: "address" },
100
+ { name: "value", internalType: "uint256", type: "uint256" }
101
+ ]
102
+ },
103
+ { name: "commitment", internalType: "bytes32", type: "bytes32" }
104
+ ],
105
+ name: "transfer",
106
+ outputs: [],
107
+ stateMutability: "nonpayable"
108
+ },
109
+ {
110
+ type: "function",
111
+ inputs: [
112
+ {
113
+ name: "details",
114
+ internalType: "struct CommittedTransferDetail[]",
115
+ type: "tuple[]",
116
+ components: [
117
+ { name: "to", internalType: "address", type: "address" },
118
+ { name: "token", internalType: "address", type: "address" },
119
+ { name: "value", internalType: "uint256", type: "uint256" },
120
+ { name: "commitment", internalType: "bytes32", type: "bytes32" }
121
+ ]
122
+ }
123
+ ],
124
+ name: "transfer",
125
+ outputs: [],
126
+ stateMutability: "nonpayable"
127
+ },
128
+ {
129
+ type: "function",
130
+ inputs: [
131
+ { name: "from", internalType: "address", type: "address" },
132
+ {
133
+ name: "details",
134
+ internalType: "struct TransferDetail[]",
135
+ type: "tuple[]",
136
+ components: [
137
+ { name: "to", internalType: "address", type: "address" },
138
+ { name: "token", internalType: "address", type: "address" },
139
+ { name: "value", internalType: "uint256", type: "uint256" }
140
+ ]
141
+ },
142
+ { name: "validAfter", internalType: "uint256", type: "uint256" },
143
+ { name: "validBefore", internalType: "uint256", type: "uint256" },
144
+ { name: "commitment", internalType: "bytes32", type: "bytes32" },
145
+ { name: "signature", internalType: "bytes", type: "bytes" }
146
+ ],
147
+ name: "transferWithAuthorization",
148
+ outputs: [],
149
+ stateMutability: "nonpayable"
150
+ },
151
+ {
152
+ type: "function",
153
+ inputs: [
154
+ { name: "from", internalType: "address", type: "address" },
155
+ {
156
+ name: "details",
157
+ internalType: "struct CommittedTransferDetail[]",
158
+ type: "tuple[]",
159
+ components: [
160
+ { name: "to", internalType: "address", type: "address" },
161
+ { name: "token", internalType: "address", type: "address" },
162
+ { name: "value", internalType: "uint256", type: "uint256" },
163
+ { name: "commitment", internalType: "bytes32", type: "bytes32" }
164
+ ]
165
+ },
166
+ { name: "validAfter", internalType: "uint256", type: "uint256" },
167
+ { name: "validBefore", internalType: "uint256", type: "uint256" },
168
+ { name: "batchCommitment", internalType: "bytes32", type: "bytes32" },
169
+ { name: "signature", internalType: "bytes", type: "bytes" }
170
+ ],
171
+ name: "transferWithAuthorization",
172
+ outputs: [],
173
+ stateMutability: "nonpayable"
174
+ },
175
+ {
176
+ type: "function",
177
+ inputs: [
178
+ { name: "from", internalType: "address", type: "address" },
179
+ { name: "to", internalType: "address", type: "address" },
180
+ { name: "token", internalType: "address", type: "address" },
181
+ { name: "value", internalType: "uint256", type: "uint256" },
182
+ { name: "validAfter", internalType: "uint256", type: "uint256" },
183
+ { name: "validBefore", internalType: "uint256", type: "uint256" },
184
+ { name: "commitment", internalType: "bytes32", type: "bytes32" },
185
+ { name: "signature", internalType: "bytes", type: "bytes" }
186
+ ],
187
+ name: "transferWithAuthorization",
188
+ outputs: [],
189
+ stateMutability: "nonpayable"
190
+ },
191
+ {
192
+ type: "event",
193
+ anonymous: false,
194
+ inputs: [
195
+ {
196
+ name: "payer",
197
+ internalType: "address",
198
+ type: "address",
199
+ indexed: true
200
+ },
201
+ {
202
+ name: "commitment",
203
+ internalType: "bytes32",
204
+ type: "bytes32",
205
+ indexed: true
206
+ }
207
+ ],
208
+ name: "CommitmentUsed"
209
+ },
210
+ { type: "event", anonymous: false, inputs: [], name: "EIP712DomainChanged" },
211
+ {
212
+ type: "event",
213
+ anonymous: false,
214
+ inputs: [
215
+ { name: "from", internalType: "address", type: "address", indexed: true },
216
+ { name: "to", internalType: "address", type: "address", indexed: true },
217
+ {
218
+ name: "token",
219
+ internalType: "address",
220
+ type: "address",
221
+ indexed: true
222
+ },
223
+ {
224
+ name: "value",
225
+ internalType: "uint256",
226
+ type: "uint256",
227
+ indexed: false
228
+ },
229
+ {
230
+ name: "commitment",
231
+ internalType: "bytes32",
232
+ type: "bytes32",
233
+ indexed: false
234
+ }
235
+ ],
236
+ name: "TransferWithCommitmentSent"
237
+ },
238
+ {
239
+ type: "error",
240
+ inputs: [
241
+ { name: "token", internalType: "address", type: "address" },
242
+ { name: "from", internalType: "address", type: "address" },
243
+ { name: "value", internalType: "uint256", type: "uint256" }
244
+ ],
245
+ name: "AllowanceNotEnough"
246
+ },
247
+ { type: "error", inputs: [], name: "InvalidShortString" },
248
+ { type: "error", inputs: [], name: "ReentrancyGuardReentrantCall" },
249
+ {
250
+ type: "error",
251
+ inputs: [{ name: "token", internalType: "address", type: "address" }],
252
+ name: "SafeERC20FailedOperation"
253
+ },
254
+ {
255
+ type: "error",
256
+ inputs: [{ name: "str", internalType: "string", type: "string" }],
257
+ name: "StringTooLong"
258
+ }
259
+ ];
260
+
261
+ // utils.ts
262
+ var assertPublicWalletSameChain = (publicClient, wallet) => {
263
+ const publicId = publicClient.chain?.id;
264
+ const walletId = wallet.chain?.id;
265
+ if (publicId === void 0 || walletId === void 0) {
266
+ throw new Error(
267
+ "Chain is not set on public client and/or wallet client"
268
+ );
269
+ }
270
+ if (publicId !== walletId) {
271
+ throw new Error(
272
+ `PublicClient and WalletClient chain mismatch: ${publicId} vs ${walletId}`
273
+ );
274
+ }
275
+ };
276
+ async function assertTransferContractDeployed(publicClient, contractAddress = transferWithCommitmentAddress) {
277
+ const code = await publicClient.getCode({ address: contractAddress });
278
+ if (code === void 0 || code === "0x") {
279
+ throw new Error(
280
+ `TransferWithCommitment is not deployed at ${contractAddress} on this chain (no contract code). Deploy with CREATE2 (see contracts/TWC_CREATE2.md) or switch network.`
281
+ );
282
+ }
283
+ }
284
+
285
+ // selfTransfer/batch/types.ts
286
+ import { type as type3 } from "arktype";
287
+
288
+ // types/transferDetail.ts
289
+ import { type as type2 } from "arktype";
290
+
291
+ // types/utils.ts
292
+ import { type } from "arktype";
293
+ var UINT256_MAX = (1n << 256n) - 1n;
294
+ var uint256 = type("bigint").filter(
295
+ (v, ctx) => v <= UINT256_MAX && v >= 0n ? true : ctx.reject(`must be: 0n <= value <= ${UINT256_MAX}`)
296
+ );
297
+ var reBytes32 = /^0x[0-9a-fA-F]{64}$/;
298
+ var reBytes = /^0x[0-9a-fA-F]+$/;
299
+ var reAddress = /^0x[0-9a-fA-F]{40}$/;
300
+ var bytes32 = type("string").narrow(
301
+ (s) => reBytes32.test(s)
302
+ );
303
+ var bytes = type("string").narrow((s) => reBytes.test(s));
304
+ var address = type("string").narrow(
305
+ (s) => reAddress.test(s)
306
+ );
307
+
308
+ // types/transferDetail.ts
309
+ var transferDetail = type2({
310
+ to: address,
311
+ token: address,
312
+ value: uint256
313
+ });
314
+ var committedTransferDetail = type2({
315
+ to: address,
316
+ token: address,
317
+ value: uint256,
318
+ commitment: bytes32
319
+ });
320
+
321
+ // selfTransfer/batch/types.ts
322
+ var batchTransferWithCommit = type3({
323
+ details: committedTransferDetail.array()
324
+ });
325
+ var argsSchema = batchTransferWithCommit;
326
+
327
+ // selfTransfer/batch/sendTx.ts
328
+ var sendTx = async (publicClient, wallet, account, args) => {
329
+ assertPublicWalletSameChain(publicClient, wallet);
330
+ await assertTransferContractDeployed(publicClient);
331
+ argsSchema.assert(args);
332
+ const { request } = await publicClient.simulateContract({
333
+ address: transferWithCommitmentAddress,
334
+ abi: transferWithCommitmentAbi,
335
+ functionName: "transfer",
336
+ args: [args.details],
337
+ account
338
+ });
339
+ const hash = await wallet.writeContract(request);
340
+ return hash;
341
+ };
342
+ export {
343
+ argsSchema,
344
+ sendTx
345
+ };
@@ -0,0 +1,360 @@
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
+ // selfTransfer/single/index.ts
21
+ var single_exports = {};
22
+ __export(single_exports, {
23
+ argsSchema: () => argsSchema,
24
+ sendTx: () => sendTx
25
+ });
26
+ module.exports = __toCommonJS(single_exports);
27
+
28
+ // twcConstants.ts
29
+ var transferWithCommitmentAddress = "0x5C260DD537A9c23Bbd42493e59F3CeA7da2DbC71";
30
+
31
+ // ../contracts/abi/generated.ts
32
+ var transferWithCommitmentAbi = [
33
+ {
34
+ type: "constructor",
35
+ inputs: [
36
+ { name: "name", internalType: "string", type: "string" },
37
+ { name: "version", internalType: "string", type: "string" }
38
+ ],
39
+ stateMutability: "nonpayable"
40
+ },
41
+ {
42
+ type: "function",
43
+ inputs: [],
44
+ name: "BATCH_TRANSFER_WITH_COMMIT_TYPEHASH",
45
+ outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }],
46
+ stateMutability: "view"
47
+ },
48
+ {
49
+ type: "function",
50
+ inputs: [],
51
+ name: "CANCEL_AUTHORIZATION_TYPEHASH",
52
+ outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }],
53
+ stateMutability: "view"
54
+ },
55
+ {
56
+ type: "function",
57
+ inputs: [],
58
+ name: "TRANSFER_WITH_COMMIT_TYPEHASH",
59
+ outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }],
60
+ stateMutability: "view"
61
+ },
62
+ {
63
+ type: "function",
64
+ inputs: [],
65
+ name: "UNI_COMMIT_TRANSFER_TYPEHASH",
66
+ outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }],
67
+ stateMutability: "view"
68
+ },
69
+ {
70
+ type: "function",
71
+ inputs: [
72
+ { name: "authorizer", internalType: "address", type: "address" },
73
+ { name: "commitment", internalType: "bytes32", type: "bytes32" },
74
+ { name: "signature", internalType: "bytes", type: "bytes" }
75
+ ],
76
+ name: "cancelAuthorization",
77
+ outputs: [],
78
+ stateMutability: "nonpayable"
79
+ },
80
+ {
81
+ type: "function",
82
+ inputs: [
83
+ { name: "payer", internalType: "address", type: "address" },
84
+ { name: "commitment", internalType: "bytes32", type: "bytes32" }
85
+ ],
86
+ name: "commitmentState",
87
+ outputs: [{ name: "", internalType: "bool", type: "bool" }],
88
+ stateMutability: "view"
89
+ },
90
+ {
91
+ type: "function",
92
+ inputs: [],
93
+ name: "eip712Domain",
94
+ outputs: [
95
+ { name: "fields", internalType: "bytes1", type: "bytes1" },
96
+ { name: "name", internalType: "string", type: "string" },
97
+ { name: "version", internalType: "string", type: "string" },
98
+ { name: "chainId", internalType: "uint256", type: "uint256" },
99
+ { name: "verifyingContract", internalType: "address", type: "address" },
100
+ { name: "salt", internalType: "bytes32", type: "bytes32" },
101
+ { name: "extensions", internalType: "uint256[]", type: "uint256[]" }
102
+ ],
103
+ stateMutability: "view"
104
+ },
105
+ {
106
+ type: "function",
107
+ inputs: [
108
+ { name: "token", internalType: "address", type: "address" },
109
+ { name: "to", internalType: "address", type: "address" },
110
+ { name: "value", internalType: "uint256", type: "uint256" },
111
+ { name: "commitment", internalType: "bytes32", type: "bytes32" }
112
+ ],
113
+ name: "transfer",
114
+ outputs: [],
115
+ stateMutability: "nonpayable"
116
+ },
117
+ {
118
+ type: "function",
119
+ inputs: [
120
+ {
121
+ name: "details",
122
+ internalType: "struct TransferDetail[]",
123
+ type: "tuple[]",
124
+ components: [
125
+ { name: "to", internalType: "address", type: "address" },
126
+ { name: "token", internalType: "address", type: "address" },
127
+ { name: "value", internalType: "uint256", type: "uint256" }
128
+ ]
129
+ },
130
+ { name: "commitment", internalType: "bytes32", type: "bytes32" }
131
+ ],
132
+ name: "transfer",
133
+ outputs: [],
134
+ stateMutability: "nonpayable"
135
+ },
136
+ {
137
+ type: "function",
138
+ inputs: [
139
+ {
140
+ name: "details",
141
+ internalType: "struct CommittedTransferDetail[]",
142
+ type: "tuple[]",
143
+ components: [
144
+ { name: "to", internalType: "address", type: "address" },
145
+ { name: "token", internalType: "address", type: "address" },
146
+ { name: "value", internalType: "uint256", type: "uint256" },
147
+ { name: "commitment", internalType: "bytes32", type: "bytes32" }
148
+ ]
149
+ }
150
+ ],
151
+ name: "transfer",
152
+ outputs: [],
153
+ stateMutability: "nonpayable"
154
+ },
155
+ {
156
+ type: "function",
157
+ inputs: [
158
+ { name: "from", internalType: "address", type: "address" },
159
+ {
160
+ name: "details",
161
+ internalType: "struct TransferDetail[]",
162
+ type: "tuple[]",
163
+ components: [
164
+ { name: "to", internalType: "address", type: "address" },
165
+ { name: "token", internalType: "address", type: "address" },
166
+ { name: "value", internalType: "uint256", type: "uint256" }
167
+ ]
168
+ },
169
+ { name: "validAfter", internalType: "uint256", type: "uint256" },
170
+ { name: "validBefore", internalType: "uint256", type: "uint256" },
171
+ { name: "commitment", internalType: "bytes32", type: "bytes32" },
172
+ { name: "signature", internalType: "bytes", type: "bytes" }
173
+ ],
174
+ name: "transferWithAuthorization",
175
+ outputs: [],
176
+ stateMutability: "nonpayable"
177
+ },
178
+ {
179
+ type: "function",
180
+ inputs: [
181
+ { name: "from", internalType: "address", type: "address" },
182
+ {
183
+ name: "details",
184
+ internalType: "struct CommittedTransferDetail[]",
185
+ type: "tuple[]",
186
+ components: [
187
+ { name: "to", internalType: "address", type: "address" },
188
+ { name: "token", internalType: "address", type: "address" },
189
+ { name: "value", internalType: "uint256", type: "uint256" },
190
+ { name: "commitment", internalType: "bytes32", type: "bytes32" }
191
+ ]
192
+ },
193
+ { name: "validAfter", internalType: "uint256", type: "uint256" },
194
+ { name: "validBefore", internalType: "uint256", type: "uint256" },
195
+ { name: "batchCommitment", internalType: "bytes32", type: "bytes32" },
196
+ { name: "signature", internalType: "bytes", type: "bytes" }
197
+ ],
198
+ name: "transferWithAuthorization",
199
+ outputs: [],
200
+ stateMutability: "nonpayable"
201
+ },
202
+ {
203
+ type: "function",
204
+ inputs: [
205
+ { name: "from", internalType: "address", type: "address" },
206
+ { name: "to", internalType: "address", type: "address" },
207
+ { name: "token", internalType: "address", type: "address" },
208
+ { name: "value", internalType: "uint256", type: "uint256" },
209
+ { name: "validAfter", internalType: "uint256", type: "uint256" },
210
+ { name: "validBefore", internalType: "uint256", type: "uint256" },
211
+ { name: "commitment", internalType: "bytes32", type: "bytes32" },
212
+ { name: "signature", internalType: "bytes", type: "bytes" }
213
+ ],
214
+ name: "transferWithAuthorization",
215
+ outputs: [],
216
+ stateMutability: "nonpayable"
217
+ },
218
+ {
219
+ type: "event",
220
+ anonymous: false,
221
+ inputs: [
222
+ {
223
+ name: "payer",
224
+ internalType: "address",
225
+ type: "address",
226
+ indexed: true
227
+ },
228
+ {
229
+ name: "commitment",
230
+ internalType: "bytes32",
231
+ type: "bytes32",
232
+ indexed: true
233
+ }
234
+ ],
235
+ name: "CommitmentUsed"
236
+ },
237
+ { type: "event", anonymous: false, inputs: [], name: "EIP712DomainChanged" },
238
+ {
239
+ type: "event",
240
+ anonymous: false,
241
+ inputs: [
242
+ { name: "from", internalType: "address", type: "address", indexed: true },
243
+ { name: "to", internalType: "address", type: "address", indexed: true },
244
+ {
245
+ name: "token",
246
+ internalType: "address",
247
+ type: "address",
248
+ indexed: true
249
+ },
250
+ {
251
+ name: "value",
252
+ internalType: "uint256",
253
+ type: "uint256",
254
+ indexed: false
255
+ },
256
+ {
257
+ name: "commitment",
258
+ internalType: "bytes32",
259
+ type: "bytes32",
260
+ indexed: false
261
+ }
262
+ ],
263
+ name: "TransferWithCommitmentSent"
264
+ },
265
+ {
266
+ type: "error",
267
+ inputs: [
268
+ { name: "token", internalType: "address", type: "address" },
269
+ { name: "from", internalType: "address", type: "address" },
270
+ { name: "value", internalType: "uint256", type: "uint256" }
271
+ ],
272
+ name: "AllowanceNotEnough"
273
+ },
274
+ { type: "error", inputs: [], name: "InvalidShortString" },
275
+ { type: "error", inputs: [], name: "ReentrancyGuardReentrantCall" },
276
+ {
277
+ type: "error",
278
+ inputs: [{ name: "token", internalType: "address", type: "address" }],
279
+ name: "SafeERC20FailedOperation"
280
+ },
281
+ {
282
+ type: "error",
283
+ inputs: [{ name: "str", internalType: "string", type: "string" }],
284
+ name: "StringTooLong"
285
+ }
286
+ ];
287
+
288
+ // utils.ts
289
+ var assertPublicWalletSameChain = (publicClient, wallet) => {
290
+ const publicId = publicClient.chain?.id;
291
+ const walletId = wallet.chain?.id;
292
+ if (publicId === void 0 || walletId === void 0) {
293
+ throw new Error(
294
+ "Chain is not set on public client and/or wallet client"
295
+ );
296
+ }
297
+ if (publicId !== walletId) {
298
+ throw new Error(
299
+ `PublicClient and WalletClient chain mismatch: ${publicId} vs ${walletId}`
300
+ );
301
+ }
302
+ };
303
+ async function assertTransferContractDeployed(publicClient, contractAddress = transferWithCommitmentAddress) {
304
+ const code = await publicClient.getCode({ address: contractAddress });
305
+ if (code === void 0 || code === "0x") {
306
+ throw new Error(
307
+ `TransferWithCommitment is not deployed at ${contractAddress} on this chain (no contract code). Deploy with CREATE2 (see contracts/TWC_CREATE2.md) or switch network.`
308
+ );
309
+ }
310
+ }
311
+
312
+ // selfTransfer/single/types.ts
313
+ var import_arktype2 = require("arktype");
314
+
315
+ // types/utils.ts
316
+ var import_arktype = require("arktype");
317
+ var UINT256_MAX = (1n << 256n) - 1n;
318
+ var uint256 = (0, import_arktype.type)("bigint").filter(
319
+ (v, ctx) => v <= UINT256_MAX && v >= 0n ? true : ctx.reject(`must be: 0n <= value <= ${UINT256_MAX}`)
320
+ );
321
+ var reBytes32 = /^0x[0-9a-fA-F]{64}$/;
322
+ var reBytes = /^0x[0-9a-fA-F]+$/;
323
+ var reAddress = /^0x[0-9a-fA-F]{40}$/;
324
+ var bytes32 = (0, import_arktype.type)("string").narrow(
325
+ (s) => reBytes32.test(s)
326
+ );
327
+ var bytes = (0, import_arktype.type)("string").narrow((s) => reBytes.test(s));
328
+ var address = (0, import_arktype.type)("string").narrow(
329
+ (s) => reAddress.test(s)
330
+ );
331
+
332
+ // selfTransfer/single/types.ts
333
+ var singleTransfer = (0, import_arktype2.type)({
334
+ token: address,
335
+ to: address,
336
+ value: uint256,
337
+ commitment: bytes32
338
+ });
339
+ var argsSchema = singleTransfer;
340
+
341
+ // selfTransfer/single/sendTx.ts
342
+ var sendTx = async (publicClient, wallet, account, args) => {
343
+ assertPublicWalletSameChain(publicClient, wallet);
344
+ await assertTransferContractDeployed(publicClient);
345
+ argsSchema.assert(args);
346
+ const { request } = await publicClient.simulateContract({
347
+ address: transferWithCommitmentAddress,
348
+ abi: transferWithCommitmentAbi,
349
+ functionName: "transfer",
350
+ args: [args.token, args.to, args.value, args.commitment],
351
+ account
352
+ });
353
+ const hash = await wallet.writeContract(request);
354
+ return hash;
355
+ };
356
+ // Annotate the CommonJS export names for ESM import in node:
357
+ 0 && (module.exports = {
358
+ argsSchema,
359
+ sendTx
360
+ });