@invisi-labs/payer 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,410 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ EMPTY_PERMIT: () => EMPTY_PERMIT,
34
+ buildPayBlindCalldata: () => buildPayBlindCalldata,
35
+ buildPayOpenCalldata: () => buildPayOpenCalldata,
36
+ buildPaymentFromRequest: () => buildPaymentFromRequest,
37
+ buildReclaimCalldata: () => buildReclaimCalldata,
38
+ buildSettleChangeCalldata: () => buildSettleChangeCalldata,
39
+ buildSignDepositCreditTypedData: () => buildSignDepositCreditTypedData,
40
+ buildSignPayBlindTypedData: () => buildSignPayBlindTypedData,
41
+ buildSignPayOpenTypedData: () => buildSignPayOpenTypedData,
42
+ createCredit: () => createCredit,
43
+ getEIP712Domain: () => getEIP712Domain,
44
+ verifyPaymentCommitment: () => verifyPaymentCommitment
45
+ });
46
+ module.exports = __toCommonJS(index_exports);
47
+
48
+ // src/payer.ts
49
+ var import_viem = require("viem");
50
+ var import_contracts = require("@invisi-labs/contracts");
51
+ var FIELD_MODULUS = 21888242871839275222246405745257275088548364400416034343698204186575808495617n;
52
+ function generateNonce() {
53
+ const buf = new Uint8Array(32);
54
+ crypto.getRandomValues(buf);
55
+ const raw = BigInt("0x" + Array.from(buf).map((b) => b.toString(16).padStart(2, "0")).join(""));
56
+ return raw % FIELD_MODULUS;
57
+ }
58
+ async function buildPayOpenCalldata(params) {
59
+ const { poseidonHash, D_PAY } = await import("@invisi-labs/core");
60
+ const nonce = params.nonce ?? generateNonce();
61
+ const nonceHex = "0x" + nonce.toString(16).padStart(64, "0");
62
+ const paymentCommitment = await poseidonHash([
63
+ D_PAY,
64
+ params.chainId,
65
+ BigInt(params.identityCommitment) % FIELD_MODULUS,
66
+ BigInt(params.tokenAddress) % FIELD_MODULUS,
67
+ params.amount % FIELD_MODULUS,
68
+ nonce % FIELD_MODULUS
69
+ ]);
70
+ const data = (0, import_viem.encodeFunctionData)({
71
+ abi: import_contracts.invisiProtocolAbi,
72
+ functionName: "payOpen",
73
+ args: [
74
+ params.identityCommitment,
75
+ { addr: params.tokenAddress, amount: params.amount },
76
+ nonceHex,
77
+ params.treeId,
78
+ "0x" + (params.refundLink ?? 0n).toString(16).padStart(64, "0")
79
+ ]
80
+ });
81
+ return {
82
+ paymentCommitment,
83
+ nonce: nonceHex,
84
+ data,
85
+ approveAmount: params.amount
86
+ };
87
+ }
88
+ async function buildPayBlindCalldata(params) {
89
+ const data = (0, import_viem.encodeFunctionData)({
90
+ abi: import_contracts.invisiProtocolAbi,
91
+ functionName: "payBlind",
92
+ args: [
93
+ params.proof,
94
+ params.paymentCommitment,
95
+ params.changeCommitment,
96
+ params.inputAmount,
97
+ params.tokenAddress,
98
+ params.treeId,
99
+ "0x" + (params.refundLink ?? 0n).toString(16).padStart(64, "0")
100
+ ]
101
+ });
102
+ return {
103
+ data,
104
+ approveAmount: params.inputAmount
105
+ };
106
+ }
107
+ async function buildSettleChangeCalldata(params) {
108
+ const { computePaymentNullifier } = await import("@invisi-labs/core");
109
+ const nullifier = await computePaymentNullifier(
110
+ params.chainId,
111
+ params.nullifierKey,
112
+ BigInt(params.tokenAddress),
113
+ params.amount,
114
+ params.nonce
115
+ );
116
+ const data = (0, import_viem.encodeFunctionData)({
117
+ abi: import_contracts.invisiProtocolAbi,
118
+ functionName: "withdraw",
119
+ args: [
120
+ params.proof,
121
+ params.merkleRoot,
122
+ [nullifier],
123
+ params.amount,
124
+ params.receivingAddress,
125
+ params.tokenAddress,
126
+ params.treeId
127
+ ]
128
+ });
129
+ return { nullifier, data };
130
+ }
131
+
132
+ // src/credit.ts
133
+ var import_viem2 = require("viem");
134
+ var import_contracts2 = require("@invisi-labs/contracts");
135
+ var FIELD_MODULUS2 = 21888242871839275222246405745257275088548364400416034343698204186575808495617n;
136
+ function generateNonce2() {
137
+ const buf = new Uint8Array(32);
138
+ crypto.getRandomValues(buf);
139
+ const raw = BigInt("0x" + Array.from(buf).map((b) => b.toString(16).padStart(2, "0")).join(""));
140
+ return raw % FIELD_MODULUS2;
141
+ }
142
+ async function createCredit(params) {
143
+ const { deriveNullifierKey, computeIdentityCommitment, computeNullifierKeyHash } = await import("@invisi-labs/core");
144
+ const payerNullifierKey = await deriveNullifierKey(params.payerMasterKey, params.creditId);
145
+ const payerCommitment = await computeIdentityCommitment(payerNullifierKey, params.payerAddress);
146
+ const creditNullifierKey = generateNonce2();
147
+ const nullifierKeyHash = await computeNullifierKeyHash(creditNullifierKey);
148
+ const nonce = generateNonce2();
149
+ const nonceHex = "0x" + nonce.toString(16).padStart(64, "0");
150
+ const data = (0, import_viem2.encodeFunctionData)({
151
+ abi: import_contracts2.invisiProtocolAbi,
152
+ functionName: "depositCredit",
153
+ args: [
154
+ params.identityCommitment,
155
+ payerCommitment,
156
+ { addr: params.tokenAddress, amount: params.amount },
157
+ nonceHex,
158
+ params.expiry,
159
+ nullifierKeyHash,
160
+ params.treeId
161
+ ]
162
+ });
163
+ return {
164
+ authorization: {
165
+ creditId: params.creditId,
166
+ identityCommitment: params.identityCommitment,
167
+ payerCommitment,
168
+ creditNullifierKey,
169
+ nullifierKeyHash,
170
+ tokenAddress: params.tokenAddress,
171
+ amount: params.amount,
172
+ nonce,
173
+ expiry: params.expiry,
174
+ treeId: params.treeId,
175
+ chainId: params.chainId
176
+ },
177
+ data,
178
+ approveAmount: params.amount
179
+ };
180
+ }
181
+ async function buildReclaimCalldata(params) {
182
+ const data = (0, import_viem2.encodeFunctionData)({
183
+ abi: import_contracts2.invisiProtocolAbi,
184
+ functionName: "reclaim",
185
+ args: [
186
+ params.proof,
187
+ params.merkleRoot,
188
+ params.nullifier,
189
+ params.amount,
190
+ params.receivingAddress,
191
+ params.tokenAddress,
192
+ params.treeId,
193
+ params.expiry
194
+ ]
195
+ });
196
+ return { data, nullifier: params.nullifier };
197
+ }
198
+
199
+ // src/metaTx.ts
200
+ var FIELD_MODULUS3 = 21888242871839275222246405745257275088548364400416034343698204186575808495617n;
201
+ function generateNonce3() {
202
+ const buf = new Uint8Array(32);
203
+ crypto.getRandomValues(buf);
204
+ const raw = BigInt("0x" + Array.from(buf).map((b) => b.toString(16).padStart(2, "0")).join(""));
205
+ return raw % FIELD_MODULUS3;
206
+ }
207
+ function getEIP712Domain(params) {
208
+ return {
209
+ name: "InvisibleProtocol",
210
+ version: "1",
211
+ chainId: params.chainId,
212
+ verifyingContract: params.verifyingContract
213
+ };
214
+ }
215
+ var EMPTY_PERMIT = {
216
+ deadline: 0n,
217
+ v: 0,
218
+ r: "0x0000000000000000000000000000000000000000000000000000000000000000",
219
+ s: "0x0000000000000000000000000000000000000000000000000000000000000000"
220
+ };
221
+ var assetType = {
222
+ Asset: [
223
+ { name: "addr", type: "address" },
224
+ { name: "amount", type: "uint256" }
225
+ ]
226
+ };
227
+ var payOpenWithSigTypes = {
228
+ PayOpenWithSig: [
229
+ { name: "identityCommitment", type: "bytes32" },
230
+ { name: "asset", type: "Asset" },
231
+ { name: "nonce", type: "bytes32" },
232
+ { name: "treeId", type: "uint256" },
233
+ { name: "refundLink", type: "bytes32" },
234
+ { name: "sigNonce", type: "uint256" },
235
+ { name: "deadline", type: "uint256" }
236
+ ],
237
+ ...assetType
238
+ };
239
+ var payBlindWithSigTypes = {
240
+ PayBlindWithSig: [
241
+ { name: "proof", type: "bytes" },
242
+ { name: "paymentCommitment", type: "bytes32" },
243
+ { name: "changeCommitment", type: "bytes32" },
244
+ { name: "inputAmount", type: "uint256" },
245
+ { name: "tokenAddress", type: "address" },
246
+ { name: "treeId", type: "uint256" },
247
+ { name: "refundLink", type: "bytes32" },
248
+ { name: "sigNonce", type: "uint256" },
249
+ { name: "deadline", type: "uint256" }
250
+ ]
251
+ };
252
+ var depositCreditWithSigTypes = {
253
+ DepositCreditWithSig: [
254
+ { name: "identityCommitment", type: "bytes32" },
255
+ { name: "payerCommitment", type: "bytes32" },
256
+ { name: "asset", type: "Asset" },
257
+ { name: "nonce", type: "bytes32" },
258
+ { name: "expiry", type: "uint256" },
259
+ { name: "nullifierKeyHash", type: "bytes32" },
260
+ { name: "treeId", type: "uint256" },
261
+ { name: "sigNonce", type: "uint256" },
262
+ { name: "deadline", type: "uint256" }
263
+ ],
264
+ ...assetType
265
+ };
266
+ async function buildSignPayOpenTypedData(params) {
267
+ const { poseidonHash, D_PAY } = await import("@invisi-labs/core");
268
+ const nonce = generateNonce3();
269
+ const nonceHex = "0x" + nonce.toString(16).padStart(64, "0");
270
+ const paymentCommitment = await poseidonHash([
271
+ D_PAY,
272
+ params.chainId,
273
+ BigInt(params.identityCommitment) % FIELD_MODULUS3,
274
+ BigInt(params.tokenAddress) % FIELD_MODULUS3,
275
+ params.amount % FIELD_MODULUS3,
276
+ nonce % FIELD_MODULUS3
277
+ ]);
278
+ const domain = getEIP712Domain({
279
+ chainId: params.chainId,
280
+ verifyingContract: params.verifyingContract
281
+ });
282
+ const refundLink = params.refundLink ?? "0x" + "00".repeat(32);
283
+ return {
284
+ paymentCommitment,
285
+ nonce: nonceHex,
286
+ typedData: {
287
+ domain,
288
+ types: payOpenWithSigTypes,
289
+ primaryType: "PayOpenWithSig",
290
+ message: {
291
+ identityCommitment: params.identityCommitment,
292
+ asset: { addr: params.tokenAddress, amount: params.amount },
293
+ nonce: nonceHex,
294
+ treeId: params.treeId,
295
+ refundLink,
296
+ sigNonce: params.sigNonce,
297
+ deadline: params.deadline
298
+ }
299
+ }
300
+ };
301
+ }
302
+ function buildSignPayBlindTypedData(params) {
303
+ const domain = getEIP712Domain({
304
+ chainId: params.chainId,
305
+ verifyingContract: params.verifyingContract
306
+ });
307
+ const refundLink = params.refundLink ?? "0x" + "00".repeat(32);
308
+ return {
309
+ typedData: {
310
+ domain,
311
+ types: payBlindWithSigTypes,
312
+ primaryType: "PayBlindWithSig",
313
+ message: {
314
+ proof: params.proof,
315
+ paymentCommitment: params.paymentCommitment,
316
+ changeCommitment: params.changeCommitment,
317
+ inputAmount: params.inputAmount,
318
+ tokenAddress: params.tokenAddress,
319
+ treeId: params.treeId,
320
+ refundLink,
321
+ sigNonce: params.sigNonce,
322
+ deadline: params.deadline
323
+ }
324
+ }
325
+ };
326
+ }
327
+ function buildSignDepositCreditTypedData(params) {
328
+ const domain = getEIP712Domain({
329
+ chainId: params.chainId,
330
+ verifyingContract: params.verifyingContract
331
+ });
332
+ return {
333
+ typedData: {
334
+ domain,
335
+ types: depositCreditWithSigTypes,
336
+ primaryType: "DepositCreditWithSig",
337
+ message: {
338
+ identityCommitment: params.identityCommitment,
339
+ payerCommitment: params.payerCommitment,
340
+ asset: { addr: params.tokenAddress, amount: params.amount },
341
+ nonce: params.nonce,
342
+ expiry: params.expiry,
343
+ nullifierKeyHash: params.nullifierKeyHash,
344
+ treeId: params.treeId,
345
+ sigNonce: params.sigNonce,
346
+ deadline: params.deadline
347
+ }
348
+ }
349
+ };
350
+ }
351
+
352
+ // src/verify.ts
353
+ var import_core = require("@invisi-labs/core");
354
+ async function verifyPaymentCommitment(params) {
355
+ const expected = await (0, import_core.computePaymentCommitment)(
356
+ params.chainId,
357
+ params.identityCommitment,
358
+ BigInt(params.tokenAddress),
359
+ params.amount,
360
+ BigInt(params.nonce)
361
+ );
362
+ return expected === params.paymentCommitment;
363
+ }
364
+
365
+ // src/fromRequest.ts
366
+ var import_ipp = require("@invisi-labs/ipp");
367
+ async function buildPaymentFromRequest(params) {
368
+ const chainId = (0, import_ipp.caip2ToChainId)(params.request.network);
369
+ const valid = await verifyPaymentCommitment({
370
+ identityCommitment: params.request.identityCommitment,
371
+ tokenAddress: params.request.tokenAddress,
372
+ amount: params.amount,
373
+ nonce: params.nonce,
374
+ paymentCommitment: params.paymentCommitment,
375
+ chainId
376
+ });
377
+ if (!valid) {
378
+ throw new Error(
379
+ "paymentCommitment verification failed: server returned incorrect parameters"
380
+ );
381
+ }
382
+ const result = await buildPayOpenCalldata({
383
+ chainId,
384
+ identityCommitment: params.request.identityCommitment,
385
+ tokenAddress: params.request.tokenAddress,
386
+ amount: params.amount,
387
+ treeId: BigInt(params.request.treeId),
388
+ nonce: BigInt(params.nonce)
389
+ });
390
+ return {
391
+ calldata: result.data,
392
+ approveAmount: result.approveAmount
393
+ };
394
+ }
395
+ // Annotate the CommonJS export names for ESM import in node:
396
+ 0 && (module.exports = {
397
+ EMPTY_PERMIT,
398
+ buildPayBlindCalldata,
399
+ buildPayOpenCalldata,
400
+ buildPaymentFromRequest,
401
+ buildReclaimCalldata,
402
+ buildSettleChangeCalldata,
403
+ buildSignDepositCreditTypedData,
404
+ buildSignPayBlindTypedData,
405
+ buildSignPayOpenTypedData,
406
+ createCredit,
407
+ getEIP712Domain,
408
+ verifyPaymentCommitment
409
+ });
410
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/payer.ts","../src/credit.ts","../src/metaTx.ts","../src/verify.ts","../src/fromRequest.ts"],"sourcesContent":["export { buildPayOpenCalldata, buildPayBlindCalldata, buildSettleChangeCalldata } from \"./payer\"\nexport type {\n PayOpenParams, PayOpenCalldata,\n PayBlindParams, PayBlindCalldata,\n ChangeRecord, SettleChangeParams, SettleChangeCalldata,\n} from \"./payer\"\n\nexport { createCredit, buildReclaimCalldata } from \"./credit\"\nexport type {\n CreditAuthorization,\n CreateCreditParams, CreateCreditResult,\n BuildReclaimCalldataParams, ReclaimCalldata,\n} from \"./credit\"\n\nexport {\n buildSignPayOpenTypedData,\n buildSignPayBlindTypedData,\n buildSignDepositCreditTypedData,\n getEIP712Domain,\n EMPTY_PERMIT,\n} from \"./metaTx\"\nexport type {\n SignPayOpenParams, SignPayOpenResult,\n SignPayBlindParams, SignPayBlindResult,\n SignDepositCreditParams, SignDepositCreditResult,\n EIP712DomainParams, TokenPermit,\n} from \"./metaTx\"\n\nexport { verifyPaymentCommitment } from \"./verify\"\nexport type { VerifyPaymentCommitmentParams } from \"./verify\"\n\nexport { buildPaymentFromRequest } from \"./fromRequest\"\nexport type { BuildPaymentFromRequestParams, BuildPaymentFromRequestResult } from \"./fromRequest\"\n","import { encodeFunctionData } from \"viem\"\nimport { invisiProtocolAbi } from \"@invisi-labs/contracts\"\n\n// BN254 field modulus\nconst FIELD_MODULUS = 21888242871839275222246405745257275088548364400416034343698204186575808495617n\n\nexport interface PayOpenParams {\n chainId: bigint\n identityCommitment: `0x${string}`\n tokenAddress: `0x${string}`\n amount: bigint\n treeId: bigint\n refundLink?: bigint | undefined\n /** 外部提供的 nonce(如 propose 响应)。不传则内部随机生成 */\n nonce?: bigint | undefined\n}\n\nexport interface PayOpenCalldata {\n paymentCommitment: `0x${string}`\n nonce: `0x${string}`\n data: `0x${string}`\n approveAmount: bigint\n value?: bigint\n}\n\nfunction generateNonce(): bigint {\n const buf = new Uint8Array(32)\n crypto.getRandomValues(buf)\n const raw = BigInt(\"0x\" + Array.from(buf).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\"))\n return raw % FIELD_MODULUS\n}\n\nexport async function buildPayOpenCalldata(\n params: PayOpenParams\n): Promise<PayOpenCalldata> {\n const { poseidonHash, D_PAY } = await import(\"@invisi-labs/core\")\n const nonce = params.nonce ?? generateNonce()\n const nonceHex = (\"0x\" + nonce.toString(16).padStart(64, \"0\")) as `0x${string}`\n\n const paymentCommitment = await poseidonHash([\n D_PAY,\n params.chainId,\n BigInt(params.identityCommitment) % FIELD_MODULUS,\n BigInt(params.tokenAddress) % FIELD_MODULUS,\n params.amount % FIELD_MODULUS,\n nonce % FIELD_MODULUS,\n ])\n\n const data = encodeFunctionData({\n abi: invisiProtocolAbi,\n functionName: \"payOpen\",\n args: [\n params.identityCommitment,\n { addr: params.tokenAddress, amount: params.amount },\n nonceHex,\n params.treeId,\n (\"0x\" + (params.refundLink ?? 0n).toString(16).padStart(64, \"0\")) as `0x${string}`,\n ],\n })\n\n return {\n paymentCommitment: paymentCommitment as `0x${string}`,\n nonce: nonceHex,\n data,\n approveAmount: params.amount,\n }\n}\n\nexport interface PayBlindParams {\n proof: `0x${string}`\n paymentCommitment: `0x${string}`\n changeCommitment: `0x${string}`\n inputAmount: bigint\n tokenAddress: `0x${string}`\n treeId: bigint\n refundLink?: bigint\n}\n\nexport interface PayBlindCalldata {\n data: `0x${string}`\n approveAmount: bigint\n}\n\nexport async function buildPayBlindCalldata(\n params: PayBlindParams\n): Promise<PayBlindCalldata> {\n const data = encodeFunctionData({\n abi: invisiProtocolAbi,\n functionName: \"payBlind\",\n args: [\n params.proof,\n params.paymentCommitment,\n params.changeCommitment,\n params.inputAmount,\n params.tokenAddress,\n params.treeId,\n (\"0x\" + (params.refundLink ?? 0n).toString(16).padStart(64, \"0\")) as `0x${string}`,\n ],\n })\n\n return {\n data,\n approveAmount: params.inputAmount,\n }\n}\n\n/** Payer's local record of change from a shielded payment, for later recovery via withdraw */\nexport interface ChangeRecord {\n treeId: bigint\n leafIndex: number\n nullifierKey: bigint\n receivingAddress: `0x${string}`\n tokenAddress: `0x${string}`\n amount: bigint\n nonce: bigint\n}\n\nexport interface SettleChangeParams {\n chainId: bigint\n nullifierKey: bigint\n receivingAddress: `0x${string}`\n tokenAddress: `0x${string}`\n amount: bigint\n nonce: bigint\n merkleRoot: `0x${string}`\n proof: `0x${string}`\n treeId: bigint\n}\n\nexport interface SettleChangeCalldata {\n nullifier: `0x${string}`\n data: `0x${string}`\n}\n\nexport async function buildSettleChangeCalldata(\n params: SettleChangeParams\n): Promise<SettleChangeCalldata> {\n const { computePaymentNullifier } = await import(\"@invisi-labs/core\")\n const nullifier = await computePaymentNullifier(\n params.chainId,\n params.nullifierKey,\n BigInt(params.tokenAddress),\n params.amount,\n params.nonce\n )\n\n const data = encodeFunctionData({\n abi: invisiProtocolAbi,\n functionName: \"withdraw\",\n args: [\n params.proof,\n params.merkleRoot,\n [nullifier as `0x${string}`],\n params.amount,\n params.receivingAddress,\n params.tokenAddress,\n params.treeId,\n ],\n })\n\n return { nullifier: nullifier as `0x${string}`, data }\n}\n","import { encodeFunctionData } from \"viem\"\nimport { invisiProtocolAbi } from \"@invisi-labs/contracts\"\n\nconst FIELD_MODULUS = 21888242871839275222246405745257275088548364400416034343698204186575808495617n\n\nfunction generateNonce(): bigint {\n const buf = new Uint8Array(32)\n crypto.getRandomValues(buf)\n const raw = BigInt(\"0x\" + Array.from(buf).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\"))\n return raw % FIELD_MODULUS\n}\n\nexport interface CreditAuthorization {\n creditId: bigint\n identityCommitment: `0x${string}`\n payerCommitment: `0x${string}`\n creditNullifierKey: bigint\n nullifierKeyHash: `0x${string}`\n tokenAddress: `0x${string}`\n amount: bigint\n nonce: bigint\n expiry: bigint\n treeId: bigint\n chainId: bigint\n}\n\nexport interface CreateCreditParams {\n payerMasterKey: bigint\n creditId: bigint\n identityCommitment: `0x${string}`\n payerAddress: bigint\n tokenAddress: `0x${string}`\n amount: bigint\n expiry: bigint\n treeId: bigint\n chainId: bigint\n}\n\nexport interface CreateCreditResult {\n authorization: CreditAuthorization\n data: `0x${string}`\n approveAmount: bigint\n}\n\nexport async function createCredit(params: CreateCreditParams): Promise<CreateCreditResult> {\n const { deriveNullifierKey, computeIdentityCommitment, computeNullifierKeyHash } = await import(\"@invisi-labs/core\")\n\n const payerNullifierKey = await deriveNullifierKey(params.payerMasterKey, params.creditId)\n const payerCommitment = await computeIdentityCommitment(payerNullifierKey, params.payerAddress)\n const creditNullifierKey = generateNonce()\n const nullifierKeyHash = await computeNullifierKeyHash(creditNullifierKey)\n const nonce = generateNonce()\n const nonceHex = (\"0x\" + nonce.toString(16).padStart(64, \"0\")) as `0x${string}`\n\n const data = encodeFunctionData({\n abi: invisiProtocolAbi,\n functionName: \"depositCredit\",\n args: [\n params.identityCommitment,\n payerCommitment,\n { addr: params.tokenAddress, amount: params.amount },\n nonceHex,\n params.expiry,\n nullifierKeyHash,\n params.treeId,\n ],\n })\n\n return {\n authorization: {\n creditId: params.creditId,\n identityCommitment: params.identityCommitment,\n payerCommitment,\n creditNullifierKey,\n nullifierKeyHash,\n tokenAddress: params.tokenAddress,\n amount: params.amount,\n nonce,\n expiry: params.expiry,\n treeId: params.treeId,\n chainId: params.chainId,\n },\n data,\n approveAmount: params.amount,\n }\n}\n\nexport interface BuildReclaimCalldataParams {\n nullifier: `0x${string}`\n amount: bigint\n receivingAddress: `0x${string}`\n tokenAddress: `0x${string}`\n merkleRoot: `0x${string}`\n proof: `0x${string}`\n treeId: bigint\n expiry: bigint\n}\n\nexport interface ReclaimCalldata {\n data: `0x${string}`\n nullifier: `0x${string}`\n}\n\nexport async function buildReclaimCalldata(params: BuildReclaimCalldataParams): Promise<ReclaimCalldata> {\n const data = encodeFunctionData({\n abi: invisiProtocolAbi,\n functionName: \"reclaim\",\n args: [\n params.proof,\n params.merkleRoot,\n params.nullifier,\n params.amount,\n params.receivingAddress,\n params.tokenAddress,\n params.treeId,\n params.expiry,\n ],\n })\n\n return { data, nullifier: params.nullifier }\n}\n","import type { Hex, Address } from \"viem\"\n\n// BN254 field modulus (same as payer.ts)\nconst FIELD_MODULUS = 21888242871839275222246405745257275088548364400416034343698204186575808495617n\n\nfunction generateNonce(): bigint {\n const buf = new Uint8Array(32)\n crypto.getRandomValues(buf)\n const raw = BigInt(\"0x\" + Array.from(buf).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\"))\n return raw % FIELD_MODULUS\n}\n\n// ─── EIP-712 Domain ──────────────────────────────────────────────────\n\nexport interface EIP712DomainParams {\n chainId: bigint\n verifyingContract: Address\n}\n\nexport function getEIP712Domain(params: EIP712DomainParams) {\n return {\n name: \"InvisibleProtocol\",\n version: \"1\",\n chainId: params.chainId,\n verifyingContract: params.verifyingContract,\n } as const\n}\n\n// ─── Token Permit ────────────────────────────────────────────────────\n\nexport interface TokenPermit {\n deadline: bigint\n v: number\n r: Hex\n s: Hex\n}\n\nexport const EMPTY_PERMIT: TokenPermit = {\n deadline: 0n,\n v: 0,\n r: \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n s: \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n}\n\n// ─── EIP-712 Types ───────────────────────────────────────────────────\n\nconst assetType = {\n Asset: [\n { name: \"addr\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n} as const\n\nexport const payOpenWithSigTypes = {\n PayOpenWithSig: [\n { name: \"identityCommitment\", type: \"bytes32\" },\n { name: \"asset\", type: \"Asset\" },\n { name: \"nonce\", type: \"bytes32\" },\n { name: \"treeId\", type: \"uint256\" },\n { name: \"refundLink\", type: \"bytes32\" },\n { name: \"sigNonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n ...assetType,\n} as const\n\nexport const payBlindWithSigTypes = {\n PayBlindWithSig: [\n { name: \"proof\", type: \"bytes\" },\n { name: \"paymentCommitment\", type: \"bytes32\" },\n { name: \"changeCommitment\", type: \"bytes32\" },\n { name: \"inputAmount\", type: \"uint256\" },\n { name: \"tokenAddress\", type: \"address\" },\n { name: \"treeId\", type: \"uint256\" },\n { name: \"refundLink\", type: \"bytes32\" },\n { name: \"sigNonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n} as const\n\nexport const depositCreditWithSigTypes = {\n DepositCreditWithSig: [\n { name: \"identityCommitment\", type: \"bytes32\" },\n { name: \"payerCommitment\", type: \"bytes32\" },\n { name: \"asset\", type: \"Asset\" },\n { name: \"nonce\", type: \"bytes32\" },\n { name: \"expiry\", type: \"uint256\" },\n { name: \"nullifierKeyHash\", type: \"bytes32\" },\n { name: \"treeId\", type: \"uint256\" },\n { name: \"sigNonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n ...assetType,\n} as const\n\n// ─── Sign method return types ──────────────────────────────────────────────\n\nexport interface SignPayOpenResult {\n paymentCommitment: Hex\n nonce: Hex\n typedData: {\n domain: ReturnType<typeof getEIP712Domain>\n types: typeof payOpenWithSigTypes\n primaryType: \"PayOpenWithSig\"\n message: Record<string, unknown>\n }\n}\n\nexport interface SignPayBlindResult {\n typedData: {\n domain: ReturnType<typeof getEIP712Domain>\n types: typeof payBlindWithSigTypes\n primaryType: \"PayBlindWithSig\"\n message: Record<string, unknown>\n }\n}\n\nexport interface SignDepositCreditResult {\n typedData: {\n domain: ReturnType<typeof getEIP712Domain>\n types: typeof depositCreditWithSigTypes\n primaryType: \"DepositCreditWithSig\"\n message: Record<string, unknown>\n }\n}\n\n// ─── signPayOpen ───────────────────────────────────────────────────\n\nexport interface SignPayOpenParams {\n chainId: bigint\n verifyingContract: Address\n identityCommitment: Hex\n tokenAddress: Address\n amount: bigint\n treeId: bigint\n refundLink?: Hex\n sigNonce: bigint\n deadline: bigint\n}\n\nexport async function buildSignPayOpenTypedData(\n params: SignPayOpenParams\n): Promise<SignPayOpenResult> {\n const { poseidonHash, D_PAY } = await import(\"@invisi-labs/core\")\n const nonce = generateNonce()\n const nonceHex = (\"0x\" + nonce.toString(16).padStart(64, \"0\")) as Hex\n\n const paymentCommitment = await poseidonHash([\n D_PAY,\n params.chainId,\n BigInt(params.identityCommitment) % FIELD_MODULUS,\n BigInt(params.tokenAddress) % FIELD_MODULUS,\n params.amount % FIELD_MODULUS,\n nonce % FIELD_MODULUS,\n ])\n\n const domain = getEIP712Domain({\n chainId: params.chainId,\n verifyingContract: params.verifyingContract,\n })\n\n const refundLink = params.refundLink ?? (\"0x\" + \"00\".repeat(32)) as Hex\n\n return {\n paymentCommitment: paymentCommitment as Hex,\n nonce: nonceHex,\n typedData: {\n domain,\n types: payOpenWithSigTypes,\n primaryType: \"PayOpenWithSig\",\n message: {\n identityCommitment: params.identityCommitment,\n asset: { addr: params.tokenAddress, amount: params.amount },\n nonce: nonceHex,\n treeId: params.treeId,\n refundLink,\n sigNonce: params.sigNonce,\n deadline: params.deadline,\n },\n },\n }\n}\n\n// ─── signPayBlind ─────────────────────────────────────────────────\n\nexport interface SignPayBlindParams {\n chainId: bigint\n verifyingContract: Address\n proof: Hex\n paymentCommitment: Hex\n changeCommitment: Hex\n inputAmount: bigint\n tokenAddress: Address\n treeId: bigint\n refundLink?: Hex\n sigNonce: bigint\n deadline: bigint\n}\n\nexport function buildSignPayBlindTypedData(\n params: SignPayBlindParams\n): SignPayBlindResult {\n const domain = getEIP712Domain({\n chainId: params.chainId,\n verifyingContract: params.verifyingContract,\n })\n\n const refundLink = params.refundLink ?? (\"0x\" + \"00\".repeat(32)) as Hex\n\n return {\n typedData: {\n domain,\n types: payBlindWithSigTypes,\n primaryType: \"PayBlindWithSig\",\n message: {\n proof: params.proof,\n paymentCommitment: params.paymentCommitment,\n changeCommitment: params.changeCommitment,\n inputAmount: params.inputAmount,\n tokenAddress: params.tokenAddress,\n treeId: params.treeId,\n refundLink,\n sigNonce: params.sigNonce,\n deadline: params.deadline,\n },\n },\n }\n}\n\n// ─── signDepositCredit ───────────────────────────────────────────────\n\nexport interface SignDepositCreditParams {\n chainId: bigint\n verifyingContract: Address\n identityCommitment: Hex\n payerCommitment: Hex\n tokenAddress: Address\n amount: bigint\n nonce: Hex\n expiry: bigint\n nullifierKeyHash: Hex\n treeId: bigint\n sigNonce: bigint\n deadline: bigint\n}\n\nexport function buildSignDepositCreditTypedData(\n params: SignDepositCreditParams\n): SignDepositCreditResult {\n const domain = getEIP712Domain({\n chainId: params.chainId,\n verifyingContract: params.verifyingContract,\n })\n\n return {\n typedData: {\n domain,\n types: depositCreditWithSigTypes,\n primaryType: \"DepositCreditWithSig\",\n message: {\n identityCommitment: params.identityCommitment,\n payerCommitment: params.payerCommitment,\n asset: { addr: params.tokenAddress, amount: params.amount },\n nonce: params.nonce,\n expiry: params.expiry,\n nullifierKeyHash: params.nullifierKeyHash,\n treeId: params.treeId,\n sigNonce: params.sigNonce,\n deadline: params.deadline,\n },\n },\n }\n}\n","import { computePaymentCommitment } from \"@invisi-labs/core\"\n\nexport interface VerifyPaymentCommitmentParams {\n identityCommitment: `0x${string}`\n tokenAddress: `0x${string}`\n amount: bigint\n nonce: `0x${string}`\n paymentCommitment: `0x${string}`\n chainId: bigint\n}\n\nexport async function verifyPaymentCommitment(\n params: VerifyPaymentCommitmentParams,\n): Promise<boolean> {\n const expected = await computePaymentCommitment(\n params.chainId,\n params.identityCommitment,\n BigInt(params.tokenAddress),\n params.amount,\n BigInt(params.nonce),\n )\n return expected === params.paymentCommitment\n}\n","import { caip2ToChainId } from \"@invisi-labs/ipp\"\nimport type { IPPRequest } from \"@invisi-labs/ipp\"\nimport { verifyPaymentCommitment } from \"./verify\"\nimport { buildPayOpenCalldata } from \"./payer\"\n\nexport interface BuildPaymentFromRequestParams {\n request: IPPRequest\n nonce: `0x${string}`\n paymentCommitment: `0x${string}`\n amount: bigint\n}\n\nexport interface BuildPaymentFromRequestResult {\n calldata: `0x${string}`\n approveAmount: bigint\n}\n\nexport async function buildPaymentFromRequest(\n params: BuildPaymentFromRequestParams,\n): Promise<BuildPaymentFromRequestResult> {\n const chainId = caip2ToChainId(params.request.network)\n\n const valid = await verifyPaymentCommitment({\n identityCommitment: params.request.identityCommitment as `0x${string}`,\n tokenAddress: params.request.tokenAddress as `0x${string}`,\n amount: params.amount,\n nonce: params.nonce,\n paymentCommitment: params.paymentCommitment,\n chainId,\n })\n\n if (!valid) {\n throw new Error(\n \"paymentCommitment verification failed: server returned incorrect parameters\",\n )\n }\n\n // 传入外部 nonce,确保 calldata 使用 propose 分配的 nonce\n const result = await buildPayOpenCalldata({\n chainId,\n identityCommitment: params.request.identityCommitment as `0x${string}`,\n tokenAddress: params.request.tokenAddress as `0x${string}`,\n amount: params.amount,\n treeId: BigInt(params.request.treeId),\n nonce: BigInt(params.nonce),\n })\n\n return {\n calldata: result.data,\n approveAmount: result.approveAmount,\n }\n}\n"],"mappings":"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","names":["import_viem","import_contracts","FIELD_MODULUS","generateNonce","FIELD_MODULUS","generateNonce"]}