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