@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 +410 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +314 -0
- package/dist/index.d.ts +314 -0
- package/dist/index.js +362 -0
- package/dist/index.js.map +1 -0
- package/package.json +37 -0
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"]}
|