@permissionless-technologies/upp-sdk 0.3.6 → 0.4.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/{asp-ZA3RGN7G.js → asp-72WUGTQE.js} +3 -3
- package/dist/asp-72WUGTQE.js.map +1 -0
- package/dist/{asp-TXSAFFD3.cjs → asp-CUE3NMBN.cjs} +14 -14
- package/dist/asp-CUE3NMBN.cjs.map +1 -0
- package/dist/{chunk-KXPZUBPI.cjs → chunk-23B5XSS4.cjs} +12 -12
- package/dist/{chunk-KXPZUBPI.cjs.map → chunk-23B5XSS4.cjs.map} +1 -1
- package/dist/{chunk-SQKBT2SH.cjs → chunk-2G22R7AJ.cjs} +18 -7
- package/dist/chunk-2G22R7AJ.cjs.map +1 -0
- package/dist/chunk-5QSSX3KR.js +64 -0
- package/dist/chunk-5QSSX3KR.js.map +1 -0
- package/dist/{chunk-P37MRZ73.js → chunk-6IEYWJVS.js} +8 -8
- package/dist/chunk-6IEYWJVS.js.map +1 -0
- package/dist/{chunk-5V5HSN6Y.js → chunk-6TFDBBAQ.js} +3 -3
- package/dist/{chunk-5V5HSN6Y.js.map → chunk-6TFDBBAQ.js.map} +1 -1
- package/dist/{chunk-ZKZV6OI3.cjs → chunk-7BNJV2ZS.cjs} +21 -21
- package/dist/{chunk-ZKZV6OI3.cjs.map → chunk-7BNJV2ZS.cjs.map} +1 -1
- package/dist/{chunk-XBNYAAMU.js → chunk-7T4CUE6E.js} +3 -3
- package/dist/{chunk-XBNYAAMU.js.map → chunk-7T4CUE6E.js.map} +1 -1
- package/dist/{chunk-OD2SDC4L.js → chunk-CEJN5ZE5.js} +3 -3
- package/dist/{chunk-OD2SDC4L.js.map → chunk-CEJN5ZE5.js.map} +1 -1
- package/dist/{chunk-2JQISXBD.js → chunk-DTEAFJG7.js} +8 -8
- package/dist/{chunk-2JQISXBD.js.map → chunk-DTEAFJG7.js.map} +1 -1
- package/dist/chunk-EHGH6TAW.js +100 -0
- package/dist/chunk-EHGH6TAW.js.map +1 -0
- package/dist/{chunk-ZU6J7KMY.js → chunk-GPF72JFR.js} +3 -3
- package/dist/{chunk-ZU6J7KMY.js.map → chunk-GPF72JFR.js.map} +1 -1
- package/dist/chunk-HEHXSV47.cjs +77 -0
- package/dist/chunk-HEHXSV47.cjs.map +1 -0
- package/dist/chunk-I5EKGD4P.cjs +113 -0
- package/dist/chunk-I5EKGD4P.cjs.map +1 -0
- package/dist/{chunk-EUP7MBAH.cjs → chunk-IIUKM5VE.cjs} +7 -7
- package/dist/{chunk-EUP7MBAH.cjs.map → chunk-IIUKM5VE.cjs.map} +1 -1
- package/dist/{chunk-CWSUBAV3.js → chunk-OBBSIPEK.js} +30 -35
- package/dist/chunk-OBBSIPEK.js.map +1 -0
- package/dist/{chunk-FVT2XRRL.cjs → chunk-Q2E432UK.cjs} +41 -46
- package/dist/chunk-Q2E432UK.cjs.map +1 -0
- package/dist/{chunk-QKI4QWLT.js → chunk-RNUG3EFC.js} +6 -6
- package/dist/{chunk-QKI4QWLT.js.map → chunk-RNUG3EFC.js.map} +1 -1
- package/dist/{chunk-3YZSIYJC.cjs → chunk-SWTNJPK5.cjs} +11 -11
- package/dist/{chunk-3YZSIYJC.cjs.map → chunk-SWTNJPK5.cjs.map} +1 -1
- package/dist/{chunk-BH24DZ5S.cjs → chunk-U3YFYMWF.cjs} +5 -5
- package/dist/{chunk-BH24DZ5S.cjs.map → chunk-U3YFYMWF.cjs.map} +1 -1
- package/dist/{chunk-3HQ7A6ZM.cjs → chunk-UFEDJJSH.cjs} +5 -5
- package/dist/{chunk-3HQ7A6ZM.cjs.map → chunk-UFEDJJSH.cjs.map} +1 -1
- package/dist/{chunk-W77GRBO4.js → chunk-UQIM2KT3.js} +3 -3
- package/dist/{chunk-W77GRBO4.js.map → chunk-UQIM2KT3.js.map} +1 -1
- package/dist/{chunk-SJDPDHSD.cjs → chunk-UTAJSERA.cjs} +4 -4
- package/dist/{chunk-SJDPDHSD.cjs.map → chunk-UTAJSERA.cjs.map} +1 -1
- package/dist/{chunk-NI62M3W3.cjs → chunk-UYE2JASE.cjs} +2 -2
- package/dist/{chunk-NI62M3W3.cjs.map → chunk-UYE2JASE.cjs.map} +1 -1
- package/dist/{chunk-S4B7GYLN.js → chunk-W3HLIKC2.js} +18 -8
- package/dist/chunk-W3HLIKC2.js.map +1 -0
- package/dist/{chunk-NDM5EJEV.cjs → chunk-XVIICZKW.cjs} +7 -7
- package/dist/chunk-XVIICZKW.cjs.map +1 -0
- package/dist/{chunk-7Q4RSSHM.js → chunk-ZTVXII74.js} +2 -2
- package/dist/{chunk-7Q4RSSHM.js.map → chunk-ZTVXII74.js.map} +1 -1
- package/dist/core/index.cjs +85 -85
- package/dist/core/index.d.cts +2 -2
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +10 -10
- package/dist/{index-B45-okum.d.cts → index-BgPdYxFS.d.cts} +18 -18
- package/dist/{index-o-Ds3YAq.d.cts → index-CL4vb3ej.d.cts} +1 -1
- package/dist/{index-BIcvNMPt.d.ts → index-CtcXgof_.d.ts} +18 -18
- package/dist/{index-DwAJBoU7.d.ts → index-D6nvfm59.d.ts} +1 -1
- package/dist/index.cjs +265 -266
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +29 -30
- package/dist/index.js.map +1 -1
- package/dist/indexer/index.cjs +6 -6
- package/dist/indexer/index.d.cts +5 -5
- package/dist/indexer/index.d.ts +5 -5
- package/dist/indexer/index.js +1 -1
- package/dist/keys/index.cjs +18 -18
- package/dist/keys/index.js +4 -4
- package/dist/merkle-DZHEOPH3.cjs +30 -0
- package/dist/{merkle-HGDC6OB4.cjs.map → merkle-DZHEOPH3.cjs.map} +1 -1
- package/dist/merkle-IF2RMWCF.js +5 -0
- package/dist/{merkle-7KS2EHRF.js.map → merkle-IF2RMWCF.js.map} +1 -1
- package/dist/poseidon-ACM7E2OH.js +7 -0
- package/dist/{poseidon-UHTJLWQM.js.map → poseidon-ACM7E2OH.js.map} +1 -1
- package/dist/poseidon-PUSGUIVZ.cjs +61 -0
- package/dist/{poseidon-WHJSZSNP.cjs.map → poseidon-PUSGUIVZ.cjs.map} +1 -1
- package/dist/proof-JME3IZTX.js +4 -0
- package/dist/{proof-C4YBP6RY.js.map → proof-JME3IZTX.js.map} +1 -1
- package/dist/proof-XR6XE5PJ.cjs +49 -0
- package/dist/{proof-5OECB3RQ.cjs.map → proof-XR6XE5PJ.cjs.map} +1 -1
- package/dist/react/index.cjs +47 -51
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +2 -2
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +20 -24
- package/dist/react/index.js.map +1 -1
- package/dist/{transfer-BzyernBd.d.cts → transfer-D111ihqN.d.cts} +108 -56
- package/dist/{transfer-sqS6mJko.d.ts → transfer-DvIXqHCr.d.ts} +108 -56
- package/dist/transfer-MQMGSXTH.js +8 -0
- package/dist/{transfer-F6YOQTUL.js.map → transfer-MQMGSXTH.js.map} +1 -1
- package/dist/transfer-PB6D5VCW.cjs +37 -0
- package/dist/{transfer-42C4DXYA.cjs.map → transfer-PB6D5VCW.cjs.map} +1 -1
- package/dist/utils/index.cjs +60 -61
- package/dist/utils/index.d.cts +37 -14
- package/dist/utils/index.d.ts +37 -14
- package/dist/utils/index.js +6 -7
- package/package.json +4 -2
- package/src/contracts/interfaces/IUniversalPrivatePool.sol +10 -8
- package/src/contracts/interfaces/IVerifiers.sol +16 -52
- package/src/deployments/11155111.json +15 -12
- package/dist/asp-TXSAFFD3.cjs.map +0 -1
- package/dist/asp-ZA3RGN7G.js.map +0 -1
- package/dist/babyjubjub-2MGQVCKB.js +0 -5
- package/dist/babyjubjub-2MGQVCKB.js.map +0 -1
- package/dist/babyjubjub-MWZLJOVZ.cjs +0 -66
- package/dist/babyjubjub-MWZLJOVZ.cjs.map +0 -1
- package/dist/chunk-CWSUBAV3.js.map +0 -1
- package/dist/chunk-FVT2XRRL.cjs.map +0 -1
- package/dist/chunk-JWNXBALH.cjs +0 -57
- package/dist/chunk-JWNXBALH.cjs.map +0 -1
- package/dist/chunk-NDM5EJEV.cjs.map +0 -1
- package/dist/chunk-P37MRZ73.js.map +0 -1
- package/dist/chunk-PTDVGWHU.cjs +0 -10
- package/dist/chunk-PTDVGWHU.cjs.map +0 -1
- package/dist/chunk-S4B7GYLN.js.map +0 -1
- package/dist/chunk-SQKBT2SH.cjs.map +0 -1
- package/dist/chunk-TSF6HEVS.cjs +0 -201
- package/dist/chunk-TSF6HEVS.cjs.map +0 -1
- package/dist/chunk-UAVWYXDN.js +0 -8
- package/dist/chunk-UAVWYXDN.js.map +0 -1
- package/dist/chunk-V23OSL25.js +0 -48
- package/dist/chunk-V23OSL25.js.map +0 -1
- package/dist/chunk-YOWDERVC.js +0 -186
- package/dist/chunk-YOWDERVC.js.map +0 -1
- package/dist/merkle-7KS2EHRF.js +0 -5
- package/dist/merkle-HGDC6OB4.cjs +0 -30
- package/dist/poseidon-UHTJLWQM.js +0 -7
- package/dist/poseidon-WHJSZSNP.cjs +0 -45
- package/dist/proof-5OECB3RQ.cjs +0 -45
- package/dist/proof-C4YBP6RY.js +0 -4
- package/dist/transfer-42C4DXYA.cjs +0 -37
- package/dist/transfer-F6YOQTUL.js +0 -8
|
@@ -56,18 +56,16 @@ async function generateUPPProof(circuitType, inputs, baseUrl = "/circuits/") {
|
|
|
56
56
|
const artifacts = getUPPCircuitArtifacts(circuitType, baseUrl);
|
|
57
57
|
if (circuitType === "transfer") {
|
|
58
58
|
const i = inputs;
|
|
59
|
-
console.log("[generateUPPProof] === CIRCUIT INPUTS ===");
|
|
59
|
+
console.log("[generateUPPProof] === PLONK CIRCUIT INPUTS ===");
|
|
60
60
|
console.log(` circuitType: ${circuitType}`);
|
|
61
61
|
console.log(` stateRoot: ${i.stateRoot}`);
|
|
62
62
|
console.log(` aspRoot: ${i.aspRoot}`);
|
|
63
63
|
console.log(` inputOrigin: ${i.inputOrigin}`);
|
|
64
|
-
console.log(` aspRoot === inputOrigin: ${i.aspRoot === i.inputOrigin}`);
|
|
65
64
|
console.log(` aspPathElements[0..2]: ${i.aspPathElements?.slice(0, 3).join(", ")}`);
|
|
66
|
-
console.log(` aspPathIndices[0..2]: ${i.aspPathIndices?.slice(0, 3).join(", ")}`);
|
|
67
65
|
console.log(` artifacts.wasm: ${artifacts.wasm}`);
|
|
68
66
|
console.log(` artifacts.zkey: ${artifacts.zkey}`);
|
|
69
67
|
}
|
|
70
|
-
const result = await snarkjs2.
|
|
68
|
+
const result = await snarkjs2.plonk.fullProve(inputs, artifacts.wasm, artifacts.zkey);
|
|
71
69
|
return {
|
|
72
70
|
proof: {
|
|
73
71
|
proof: result.proof,
|
|
@@ -94,19 +92,31 @@ async function generateStealthProof(circuit, inputs, baseUrl = "/circuits/") {
|
|
|
94
92
|
async function verifyProof(_circuitType, _proof) {
|
|
95
93
|
throw new Error("Not implemented");
|
|
96
94
|
}
|
|
95
|
+
async function formatPlonkProofForContract(proof) {
|
|
96
|
+
const snarkjs2 = await loadSnarkjs();
|
|
97
|
+
const calldata = await snarkjs2.plonk.exportSolidityCallData(
|
|
98
|
+
proof.proof,
|
|
99
|
+
proof.publicSignals
|
|
100
|
+
);
|
|
101
|
+
const [proofHex, signalsStr] = calldata.split(',["');
|
|
102
|
+
const signals = signalsStr ? signalsStr.replace('"]', "").split('","').map((s) => BigInt(s)) : proof.publicSignals.map((s) => BigInt(s));
|
|
103
|
+
return {
|
|
104
|
+
proofBytes: proofHex,
|
|
105
|
+
publicSignals: signals
|
|
106
|
+
};
|
|
107
|
+
}
|
|
97
108
|
function formatProofForContract(proof) {
|
|
98
109
|
const { pi_a, pi_b, pi_c } = proof.proof;
|
|
99
110
|
return {
|
|
100
111
|
a: [BigInt(pi_a[0]), BigInt(pi_a[1])],
|
|
101
112
|
b: [
|
|
102
113
|
[BigInt(pi_b[0][1]), BigInt(pi_b[0][0])],
|
|
103
|
-
// Note: reversed for Solidity
|
|
104
114
|
[BigInt(pi_b[1][1]), BigInt(pi_b[1][0])]
|
|
105
115
|
],
|
|
106
116
|
c: [BigInt(pi_c[0]), BigInt(pi_c[1])]
|
|
107
117
|
};
|
|
108
118
|
}
|
|
109
119
|
|
|
110
|
-
export { ASP_TREE_DEPTH, STATE_TREE_DEPTH, formatProofForContract, generateProof, generateStealthProof, generateUPPProof, getStealthCircuitArtifacts, getUPPCircuitArtifacts, verifyProof };
|
|
111
|
-
//# sourceMappingURL=chunk-
|
|
112
|
-
//# sourceMappingURL=chunk-
|
|
120
|
+
export { ASP_TREE_DEPTH, STATE_TREE_DEPTH, formatPlonkProofForContract, formatProofForContract, generateProof, generateStealthProof, generateUPPProof, getStealthCircuitArtifacts, getUPPCircuitArtifacts, verifyProof };
|
|
121
|
+
//# sourceMappingURL=chunk-W3HLIKC2.js.map
|
|
122
|
+
//# sourceMappingURL=chunk-W3HLIKC2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/proof.ts"],"names":["snarkjs"],"mappings":";AAUA,IAAI,OAAA,GAAe,IAAA;AAKnB,eAAe,WAAA,GAA4B;AACzC,EAAA,IAAI,SAAS,OAAO,OAAA;AACpB,EAAA,OAAA,GAAU,MAAM,OAAO,SAAS,CAAA;AAChC,EAAA,OAAO,OAAA;AACT;AAOO,IAAM,gBAAA,GAAmB;AAGzB,IAAM,cAAA,GAAiB;AA+SvB,SAAS,sBAAA,CACd,OAAA,EACA,OAAA,GAAkB,YAAA,EACA;AAClB,EAAA,MAAM,OAAO,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,GAAI,OAAA,GAAU,GAAG,OAAO,CAAA,CAAA,CAAA;AAEzD,EAAA,MAAM,UAAA,GAAuD;AAAA,IAC3D,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,GAAG,IAAI,CAAA,aAAA,CAAA;AAAA,MACb,IAAA,EAAM,GAAG,IAAI,CAAA,aAAA;AAAA,KACf;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,GAAG,IAAI,CAAA,UAAA,CAAA;AAAA,MACb,IAAA,EAAM,GAAG,IAAI,CAAA,UAAA;AAAA,KACf;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,GAAG,IAAI,CAAA,aAAA,CAAA;AAAA,MACb,IAAA,EAAM,GAAG,IAAI,CAAA,aAAA;AAAA,KACf;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,GAAG,IAAI,CAAA,cAAA,CAAA;AAAA,MACb,IAAA,EAAM,GAAG,IAAI,CAAA,cAAA;AAAA,KACf;AAAA,IACA,kBAAA,EAAoB;AAAA,MAClB,IAAA,EAAM,GAAG,IAAI,CAAA,uBAAA,CAAA;AAAA,MACb,IAAA,EAAM,GAAG,IAAI,CAAA,uBAAA;AAAA,KACf;AAAA,IACA,kBAAA,EAAoB;AAAA,MAClB,IAAA,EAAM,GAAG,IAAI,CAAA,uBAAA,CAAA;AAAA,MACb,IAAA,EAAM,GAAG,IAAI,CAAA,uBAAA;AAAA;AACf,GACF;AAEA,EAAA,OAAO,WAAW,OAAO,CAAA;AAC3B;AAKO,SAAS,0BAAA,CACd,OAAA,EACA,OAAA,GAAkB,YAAA,EACA;AAClB,EAAA,MAAM,OAAO,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,GAAI,OAAA,GAAU,GAAG,OAAO,CAAA,CAAA,CAAA;AAEzD,EAAA,MAAM,UAAA,GAA2D;AAAA,IAC/D,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,GAAG,IAAI,CAAA,qBAAA,CAAA;AAAA,MACb,IAAA,EAAM,GAAG,IAAI,CAAA,2BAAA;AAAA,KACf;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,GAAG,IAAI,CAAA,gBAAA,CAAA;AAAA,MACb,IAAA,EAAM,GAAG,IAAI,CAAA,sBAAA;AAAA;AACf,GACF;AAEA,EAAA,OAAO,WAAW,OAAO,CAAA;AAC3B;AA4BA,eAAsB,gBAAA,CACpB,WAAA,EACA,MAAA,EACA,OAAA,GAAkB,YAAA,EACI;AACtB,EAAA,MAAMA,QAAAA,GAAU,MAAM,WAAA,EAAY;AAClC,EAAA,MAAM,SAAA,GAAY,sBAAA,CAAuB,WAAA,EAAa,OAAO,CAAA;AAG7D,EAAA,IAAI,gBAAgB,UAAA,EAAY;AAC9B,IAAA,MAAM,CAAA,GAAI,MAAA;AACV,IAAA,OAAA,CAAQ,IAAI,iDAAiD,CAAA;AAC7D,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,WAAW,CAAA,CAAE,CAAA;AAC3C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,CAAA,CAAE,SAAS,CAAA,CAAE,CAAA;AACzC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AACrC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,CAAA,CAAE,WAAW,CAAA,CAAE,CAAA;AAC7C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yBAAA,EAA4B,CAAA,CAAE,eAAA,EAAiB,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACnF,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,SAAA,CAAU,IAAI,CAAA,CAAE,CAAA;AACjD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,SAAA,CAAU,IAAI,CAAA,CAAE,CAAA;AAAA,EACnD;AAGA,EAAA,MAAM,MAAA,GAAS,MAAMA,QAAAA,CAAQ,KAAA,CAAM,UAAU,MAAA,EAAQ,SAAA,CAAU,IAAA,EAAM,SAAA,CAAU,IAAI,CAAA;AAEnF,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,eAAe,MAAA,CAAO;AAAA,KACxB;AAAA,IACA,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAKA,eAAsB,aAAA,CACpB,cACA,OAAA,EACgB;AAChB,EAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAC5D;AAaA,eAAsB,oBAAA,CACpB,OAAA,EACA,MAAA,EACA,OAAA,GAAkB,YAAA,EACI;AACtB,EAAA,MAAMA,QAAAA,GAAU,MAAM,WAAA,EAAY;AAClC,EAAA,MAAM,SAAA,GAAY,0BAAA,CAA2B,OAAA,EAAS,OAAO,CAAA;AAE7D,EAAA,MAAM,MAAA,GAAS,MAAMA,QAAAA,CAAQ,OAAA,CAAQ,UAAU,MAAA,EAAQ,SAAA,CAAU,IAAA,EAAM,SAAA,CAAU,IAAI,CAAA;AAErF,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,eAAe,MAAA,CAAO;AAAA,KACxB;AAAA,IACA,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAKA,eAAsB,WAAA,CACpB,cACA,MAAA,EACkB;AAClB,EAAA,MAAM,IAAI,MAAM,iBAAiB,CAAA;AACnC;AAWA,eAAsB,4BAA4B,KAAA,EAG/C;AACD,EAAA,MAAMA,QAAAA,GAAU,MAAM,WAAA,EAAY;AAClC,EAAA,MAAM,QAAA,GAAW,MAAMA,QAAAA,CAAQ,KAAA,CAAM,sBAAA;AAAA,IACnC,KAAA,CAAM,KAAA;AAAA,IACN,KAAA,CAAM;AAAA,GACR;AAGA,EAAA,MAAM,CAAC,QAAA,EAAU,UAAU,CAAA,GAAI,QAAA,CAAS,MAAM,KAAK,CAAA;AACnD,EAAA,MAAM,OAAA,GAAU,UAAA,GACZ,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,CAAE,KAAA,CAAM,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,MAAc,MAAA,CAAO,CAAC,CAAC,CAAA,GACtE,KAAA,CAAM,aAAA,CAAc,IAAI,CAAC,CAAA,KAAc,MAAA,CAAO,CAAC,CAAC,CAAA;AAEpD,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,QAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AACF;AAOO,SAAS,uBAAuB,KAAA,EAIrC;AACA,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,KAAS,KAAA,CAAM,KAAA;AAEnC,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AAAA,IACpC,CAAA,EAAG;AAAA,MACD,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,EAAE,CAAC,CAAC,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAAA,MACvC,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,EAAE,CAAC,CAAC,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC;AAAA,KACzC;AAAA,IACA,CAAA,EAAG,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAC;AAAA,GACtC;AACF","file":"chunk-W3HLIKC2.js","sourcesContent":["/**\n * ZK Proof Generation and Verification (BLS12-381 PLONK)\n *\n * Uses snarkjs for PLONK proof generation over the BLS12-381 curve.\n * PLONK provides a universal trusted setup (no per-circuit ceremony).\n */\n\nimport type { Proof } from './types.js'\n\n// Lazy-loaded snarkjs reference\nlet snarkjs: any = null\n\n/**\n * Load snarkjs dynamically\n */\nasync function loadSnarkjs(): Promise<any> {\n if (snarkjs) return snarkjs\n snarkjs = await import('snarkjs')\n return snarkjs\n}\n\n// ============================================================================\n// UPP Circuit Constants\n// ============================================================================\n\n/** State tree depth (32 levels = ~4B notes) */\nexport const STATE_TREE_DEPTH = 32\n\n/** ASP tree depth (20 levels = ~1M addresses) */\nexport const ASP_TREE_DEPTH = 20\n\n// ============================================================================\n// UPP Circuit Types\n// ============================================================================\n\n/**\n * Circuit types available in UPP (full protocol)\n */\nexport type UPPCircuitType = 'transfer' | 'merge' | 'withdraw' | 'joinsplit' | 'merge_transfer_2x2' | 'merge_transfer_4x2'\n\n/**\n * @deprecated Use UPPCircuitType instead\n */\nexport type CircuitType = 'shield' | 'transfer' | 'merge' | 'withdraw'\n\n/**\n * @deprecated Stealth circuits are being replaced by UPP circuits\n */\nexport type StealthCircuitType = '1x2' | '2x2'\n\n/**\n * Input signals for UPP transfer circuit (1-in-2-out, BLS12-381 PLONK)\n *\n * Matches transfer.circom: Transfer(32, 20)\n * Public: stateRoot, aspRoot, nullifier, outputCommitment1, outputCommitment2, token\n *\n * Note: Uses hash-based ownership (ownerHash) instead of BabyJubJub pubkeys.\n */\nexport interface UPPTransferCircuitInputs {\n // Public inputs\n stateRoot: string\n aspRoot: string\n nullifier: string\n outputCommitment1: string\n outputCommitment2: string\n token: string\n\n // Private inputs - Input Note\n inputAmount: string\n inputOneTimeSecret: string\n inputBlinding: string\n inputOrigin: string\n inputLeafIndex: string\n inputPathElements: string[] // 32 elements\n inputPathIndices: string[] // 32 elements\n\n // Private inputs - ASP Membership Proof\n aspPathElements: string[] // 20 elements\n aspPathIndices: string[] // 20 elements\n\n // Private inputs - Output Notes (hash-based ownership)\n outputAmount1: string\n outputOwnerHash1: string\n outputBlinding1: string\n\n outputAmount2: string\n outputOwnerHash2: string\n outputBlinding2: string\n}\n\n/**\n * Input signals for UPP withdraw circuit (BLS12-381 PLONK)\n *\n * Matches withdraw.circom with optional ASP check (ragequit support)\n */\nexport interface UPPWithdrawCircuitInputs {\n // Public inputs\n stateRoot: string\n aspRoot: string\n nullifier: string\n amount: string\n recipient: string\n token: string\n isRagequit: string // '0' or '1'\n\n // Private inputs - Input Note\n inputAmount: string\n inputOneTimeSecret: string\n inputBlinding: string\n inputOrigin: string\n inputLeafIndex: string\n inputPathElements: string[] // 32 elements\n inputPathIndices: string[] // 32 elements\n\n // Private inputs - ASP Membership Proof (can be zeros if ragequit)\n aspPathElements: string[] // 20 elements\n aspPathIndices: string[] // 20 elements\n}\n\n/**\n * Input signals for UPP merge circuit (2-in-1-out, BLS12-381 PLONK)\n */\nexport interface UPPMergeCircuitInputs {\n // Public inputs\n stateRoot: string\n nullifier1: string\n nullifier2: string\n outputCommitment: string\n merger: string\n token: string\n\n // Private inputs - Input Note 1\n inputAmount1: string\n inputOneTimeSecret1: string\n inputBlinding1: string\n inputOrigin1: string\n inputLeafIndex1: string\n inputPathElements1: string[]\n inputPathIndices1: string[]\n\n // Private inputs - Input Note 2\n inputAmount2: string\n inputOneTimeSecret2: string\n inputBlinding2: string\n inputOrigin2: string\n inputLeafIndex2: string\n inputPathElements2: string[]\n inputPathIndices2: string[]\n\n // Private inputs - Output Note\n outputAmount: string\n outputOwnerHash: string\n outputBlinding: string\n}\n\n/**\n * Input signals for UPP joinsplit circuit (4-in-2-out, BLS12-381 PLONK)\n */\nexport interface UPPJoinSplitCircuitInputs {\n // Public inputs\n stateRoot: string\n aspRoot: string\n nullifier1: string\n nullifier2: string\n nullifier3: string\n nullifier4: string\n outputCommitment1: string\n outputCommitment2: string\n token: string\n\n // Private inputs - 4 Input Notes\n inputAmount1: string; inputOneTimeSecret1: string; inputBlinding1: string\n inputOrigin1: string; inputLeafIndex1: string\n inputPathElements1: string[]; inputPathIndices1: string[]\n\n inputAmount2: string; inputOneTimeSecret2: string; inputBlinding2: string\n inputOrigin2: string; inputLeafIndex2: string\n inputPathElements2: string[]; inputPathIndices2: string[]\n\n inputAmount3: string; inputOneTimeSecret3: string; inputBlinding3: string\n inputOrigin3: string; inputLeafIndex3: string\n inputPathElements3: string[]; inputPathIndices3: string[]\n\n inputAmount4: string; inputOneTimeSecret4: string; inputBlinding4: string\n inputOrigin4: string; inputLeafIndex4: string\n inputPathElements4: string[]; inputPathIndices4: string[]\n\n // Private inputs - ASP Membership Proof\n aspPathElements: string[]\n aspPathIndices: string[]\n\n // Private inputs - Output Notes\n outputAmount1: string; outputOwnerHash1: string; outputBlinding1: string\n outputAmount2: string; outputOwnerHash2: string; outputBlinding2: string\n}\n\n/**\n * @deprecated Use UPPTransferCircuitInputs instead\n */\nexport interface TransferCircuitInputs {\n stateRoot: bigint\n aspRoot: bigint\n nullifier: bigint\n outputCommitment1: bigint\n outputCommitment2: bigint\n token: bigint\n amount: bigint\n blinding: bigint\n origin: bigint\n statePathElements: bigint[]\n statePathIndices: bigint\n aspPathElements: bigint[]\n outAmount1: bigint\n outBlinding1: bigint\n outOrigin1: bigint\n outAmount2: bigint\n outBlinding2: bigint\n outOrigin2: bigint\n}\n\n/**\n * Input signals for shield circuit\n */\nexport interface ShieldCircuitInputs {\n commitment: bigint\n token: bigint\n amount: bigint\n blinding: bigint\n origin: bigint\n}\n\n/**\n * Input signals for merge circuit\n */\nexport interface MergeCircuitInputs {\n stateRoot: bigint\n nullifier1: bigint\n nullifier2: bigint\n outputCommitment: bigint\n newOrigin: bigint\n token: bigint\n amount1: bigint\n blinding1: bigint\n origin1: bigint\n token1: bigint\n pathElements1: bigint[]\n pathIndices1: bigint\n amount2: bigint\n blinding2: bigint\n origin2: bigint\n token2: bigint\n pathElements2: bigint[]\n pathIndices2: bigint\n outputAmount: bigint\n outputBlinding: bigint\n}\n\n/**\n * Input signals for withdraw circuit\n */\nexport interface WithdrawCircuitInputs {\n stateRoot: bigint\n aspRoot: bigint\n nullifier: bigint\n withdrawAmount: bigint\n recipient: bigint\n token: bigint\n isRagequit: bigint\n amount: bigint\n blinding: bigint\n origin: bigint\n statePathElements: bigint[]\n statePathIndices: bigint\n aspPathElements: bigint[]\n}\n\n/**\n * Circuit inputs union type\n */\nexport type CircuitInputs =\n | ShieldCircuitInputs\n | TransferCircuitInputs\n | MergeCircuitInputs\n | WithdrawCircuitInputs\n\n// ============================================================================\n// Stealth Circuit Types (deprecated)\n// ============================================================================\n\n/**\n * @deprecated\n */\nexport interface Stealth1x2CircuitInputs {\n root: string; nullifierHash: string; publicAmount: string\n recipient: string; extDataHash: string\n inputAmount: string; inputOneTimeSecret: string; inputBlinding: string\n inputLeafIndex: string; inputPathElements: string[]; inputPathIndices: string[]\n outputAmount1: string; outputPubkeyX1: string; outputPubkeyY1: string; outputBlinding1: string\n outputAmount2: string; outputPubkeyX2: string; outputPubkeyY2: string; outputBlinding2: string\n}\n\n/**\n * @deprecated\n */\nexport interface Stealth2x2CircuitInputs {\n root: string; nullifierHash1: string; nullifierHash2: string\n publicAmount: string; recipient: string; extDataHash: string\n inputAmount1: string; inputOneTimeSecret1: string; inputBlinding1: string\n inputLeafIndex1: string; inputPathElements1: string[]; inputPathIndices1: string[]\n inputAmount2: string; inputOneTimeSecret2: string; inputBlinding2: string\n inputLeafIndex2: string; inputPathElements2: string[]; inputPathIndices2: string[]\n outputAmount1: string; outputPubkeyX1: string; outputPubkeyY1: string; outputBlinding1: string\n outputAmount2: string; outputPubkeyX2: string; outputPubkeyY2: string; outputBlinding2: string\n}\n\n/** @deprecated */\nexport type StealthCircuitInputs = Stealth1x2CircuitInputs | Stealth2x2CircuitInputs\n\n/**\n * Circuit artifact paths\n */\nexport interface CircuitArtifacts {\n wasm: string\n zkey: string\n}\n\n/**\n * Get circuit artifacts for a UPP circuit\n *\n * @param circuit - UPP circuit type\n * @param baseUrl - Base URL for circuit files (default: '/circuits/')\n */\nexport function getUPPCircuitArtifacts(\n circuit: UPPCircuitType,\n baseUrl: string = '/circuits/'\n): CircuitArtifacts {\n const base = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`\n\n const circuitMap: Record<UPPCircuitType, CircuitArtifacts> = {\n transfer: {\n wasm: `${base}transfer.wasm`,\n zkey: `${base}transfer.zkey`,\n },\n merge: {\n wasm: `${base}merge.wasm`,\n zkey: `${base}merge.zkey`,\n },\n withdraw: {\n wasm: `${base}withdraw.wasm`,\n zkey: `${base}withdraw.zkey`,\n },\n joinsplit: {\n wasm: `${base}joinsplit.wasm`,\n zkey: `${base}joinsplit.zkey`,\n },\n merge_transfer_2x2: {\n wasm: `${base}merge_transfer_2x2.wasm`,\n zkey: `${base}merge_transfer_2x2.zkey`,\n },\n merge_transfer_4x2: {\n wasm: `${base}merge_transfer_4x2.wasm`,\n zkey: `${base}merge_transfer_4x2.zkey`,\n },\n }\n\n return circuitMap[circuit]\n}\n\n/**\n * @deprecated Use getUPPCircuitArtifacts instead\n */\nexport function getStealthCircuitArtifacts(\n circuit: StealthCircuitType,\n baseUrl: string = '/circuits/'\n): CircuitArtifacts {\n const base = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`\n\n const circuitMap: Record<StealthCircuitType, CircuitArtifacts> = {\n '1x2': {\n wasm: `${base}shielded_stealth.wasm`,\n zkey: `${base}shielded_stealth_final.zkey`,\n },\n '2x2': {\n wasm: `${base}stealth_2x2.wasm`,\n zkey: `${base}stealth_2x2_final.zkey`,\n },\n }\n\n return circuitMap[circuit]\n}\n\n/**\n * UPP circuit inputs union type\n */\nexport type UPPCircuitInputs =\n | UPPTransferCircuitInputs\n | UPPWithdrawCircuitInputs\n | UPPMergeCircuitInputs\n | UPPJoinSplitCircuitInputs\n\n/**\n * Generate a ZK proof for a UPP circuit (BLS12-381 PLONK)\n *\n * @param circuitType - Which UPP circuit to use\n * @param inputs - Circuit input signals\n * @param baseUrl - Base URL for circuit artifacts (default: '/circuits/')\n * @returns Generated proof and public signals\n *\n * @example\n * ```ts\n * const { proof, publicSignals } = await generateUPPProof('transfer', {\n * stateRoot: String(currentRoot),\n * aspRoot: String(aspRoot),\n * // ... other inputs\n * })\n * ```\n */\nexport async function generateUPPProof(\n circuitType: UPPCircuitType,\n inputs: UPPCircuitInputs,\n baseUrl: string = '/circuits/'\n): Promise<ProofResult> {\n const snarkjs = await loadSnarkjs()\n const artifacts = getUPPCircuitArtifacts(circuitType, baseUrl)\n\n // Debug: log key circuit inputs\n if (circuitType === 'transfer') {\n const i = inputs as UPPTransferCircuitInputs\n console.log('[generateUPPProof] === PLONK CIRCUIT INPUTS ===')\n console.log(` circuitType: ${circuitType}`)\n console.log(` stateRoot: ${i.stateRoot}`)\n console.log(` aspRoot: ${i.aspRoot}`)\n console.log(` inputOrigin: ${i.inputOrigin}`)\n console.log(` aspPathElements[0..2]: ${i.aspPathElements?.slice(0, 3).join(', ')}`)\n console.log(` artifacts.wasm: ${artifacts.wasm}`)\n console.log(` artifacts.zkey: ${artifacts.zkey}`)\n }\n\n // Use PLONK prover (not Groth16)\n const result = await snarkjs.plonk.fullProve(inputs, artifacts.wasm, artifacts.zkey)\n\n return {\n proof: {\n proof: result.proof,\n publicSignals: result.publicSignals,\n },\n publicSignals: result.publicSignals,\n }\n}\n\n/**\n * @deprecated Use generateUPPProof instead\n */\nexport async function generateProof(\n _circuitType: CircuitType,\n _inputs: CircuitInputs\n): Promise<Proof> {\n throw new Error('Deprecated: Use generateUPPProof instead')\n}\n\n/**\n * Result from proof generation\n */\nexport interface ProofResult {\n proof: Proof\n publicSignals: string[]\n}\n\n/**\n * @deprecated Stealth circuits use old Groth16 format\n */\nexport async function generateStealthProof(\n circuit: StealthCircuitType,\n inputs: StealthCircuitInputs,\n baseUrl: string = '/circuits/'\n): Promise<ProofResult> {\n const snarkjs = await loadSnarkjs()\n const artifacts = getStealthCircuitArtifacts(circuit, baseUrl)\n\n const result = await snarkjs.groth16.fullProve(inputs, artifacts.wasm, artifacts.zkey)\n\n return {\n proof: {\n proof: result.proof,\n publicSignals: result.publicSignals,\n },\n publicSignals: result.publicSignals,\n }\n}\n\n/**\n * Verify a ZK proof\n */\nexport async function verifyProof(\n _circuitType: CircuitType,\n _proof: Proof\n): Promise<boolean> {\n throw new Error('Not implemented')\n}\n\n/**\n * Format PLONK proof for on-chain verification\n *\n * PLONK proofs use a different format than Groth16:\n * - Groth16: uint256[8] (pi_a, pi_b, pi_c)\n * - PLONK: bytes (encoded proof with commitments and evaluations)\n *\n * Use snarkjs.plonk.exportSolidityCallData() for the exact encoding.\n */\nexport async function formatPlonkProofForContract(proof: Proof): Promise<{\n proofBytes: `0x${string}`\n publicSignals: bigint[]\n}> {\n const snarkjs = await loadSnarkjs()\n const calldata = await snarkjs.plonk.exportSolidityCallData(\n proof.proof,\n proof.publicSignals\n )\n\n // snarkjs returns a comma-separated string: \"0xproof,[sig1,sig2,...]\"\n const [proofHex, signalsStr] = calldata.split(',[\"')\n const signals = signalsStr\n ? signalsStr.replace('\"]', '').split('\",\"').map((s: string) => BigInt(s))\n : proof.publicSignals.map((s: string) => BigInt(s))\n\n return {\n proofBytes: proofHex as `0x${string}`,\n publicSignals: signals,\n }\n}\n\n/**\n * @deprecated Use formatPlonkProofForContract for PLONK proofs.\n *\n * Format Groth16 proof for on-chain verification (old format).\n */\nexport function formatProofForContract(proof: Proof): {\n a: [bigint, bigint]\n b: [[bigint, bigint], [bigint, bigint]]\n c: [bigint, bigint]\n} {\n const { pi_a, pi_b, pi_c } = proof.proof\n\n return {\n a: [BigInt(pi_a[0]), BigInt(pi_a[1])],\n b: [\n [BigInt(pi_b[0][1]), BigInt(pi_b[0][0])],\n [BigInt(pi_b[1][1]), BigInt(pi_b[1][0])],\n ],\n c: [BigInt(pi_c[0]), BigInt(pi_c[1])],\n }\n}\n"]}
|
|
@@ -4,7 +4,7 @@ var chunkG7VZBCD6_cjs = require('./chunk-G7VZBCD6.cjs');
|
|
|
4
4
|
var upcSdk = require('@permissionless-technologies/upc-sdk');
|
|
5
5
|
|
|
6
6
|
var ASP_TREE_DEPTH = upcSdk.DEFAULT_TREE_DEPTH;
|
|
7
|
-
var
|
|
7
|
+
var bls12381 = new upcSdk.PoseidonBLS12381();
|
|
8
8
|
async function computeSingleOriginASPRoot(origin) {
|
|
9
9
|
return origin;
|
|
10
10
|
}
|
|
@@ -21,7 +21,7 @@ async function verifyASPProof(origin, proof) {
|
|
|
21
21
|
return upcSdk.verifyMembershipProof(
|
|
22
22
|
origin,
|
|
23
23
|
{ root: proof.aspRoot, pathElements: proof.aspPathElements, pathIndices: proof.aspPathIndices },
|
|
24
|
-
|
|
24
|
+
bls12381
|
|
25
25
|
);
|
|
26
26
|
}
|
|
27
27
|
var DEMO_ASP_ID = 1n;
|
|
@@ -31,16 +31,16 @@ async function createDemoASPRoot(origin) {
|
|
|
31
31
|
}
|
|
32
32
|
function buildASPTree(origins) {
|
|
33
33
|
const { buildMerkleTree } = chunkG7VZBCD6_cjs.__require("@permissionless-technologies/upc-sdk");
|
|
34
|
-
return buildMerkleTree(origins, ASP_TREE_DEPTH,
|
|
34
|
+
return buildMerkleTree(origins, ASP_TREE_DEPTH, bls12381);
|
|
35
35
|
}
|
|
36
36
|
async function computeMultiOriginASPRoot(origins) {
|
|
37
|
-
return upcSdk.computeMerkleRoot(origins, ASP_TREE_DEPTH,
|
|
37
|
+
return upcSdk.computeMerkleRoot(origins, ASP_TREE_DEPTH, bls12381);
|
|
38
38
|
}
|
|
39
39
|
async function generateMultiOriginASPProof(aspId, origin, allOrigins) {
|
|
40
40
|
if (allOrigins.length <= 1) {
|
|
41
41
|
return generateSingleOriginASPProof(aspId, origin);
|
|
42
42
|
}
|
|
43
|
-
const proof = await upcSdk.generateMembershipProof(origin, allOrigins, ASP_TREE_DEPTH,
|
|
43
|
+
const proof = await upcSdk.generateMembershipProof(origin, allOrigins, ASP_TREE_DEPTH, bls12381);
|
|
44
44
|
return {
|
|
45
45
|
aspId,
|
|
46
46
|
aspRoot: proof.root,
|
|
@@ -66,5 +66,5 @@ exports.generateASPProof = generateASPProof;
|
|
|
66
66
|
exports.generateMultiOriginASPProof = generateMultiOriginASPProof;
|
|
67
67
|
exports.generateSingleOriginASPProof = generateSingleOriginASPProof;
|
|
68
68
|
exports.verifyASPProof = verifyASPProof;
|
|
69
|
-
//# sourceMappingURL=chunk-
|
|
70
|
-
//# sourceMappingURL=chunk-
|
|
69
|
+
//# sourceMappingURL=chunk-XVIICZKW.cjs.map
|
|
70
|
+
//# sourceMappingURL=chunk-XVIICZKW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/asp.ts"],"names":["DEFAULT_TREE_DEPTH","PoseidonBLS12381","generateSingleMemberProof","verifyMembershipProof","__require","computeMerkleRoot","generateMembershipProof"],"mappings":";;;;;AAuBO,IAAM,cAAA,GAAiBA;AAG9B,IAAM,QAAA,GAAW,IAAIC,uBAAA,EAAiB;AAmBtC,eAAsB,2BAA2B,MAAA,EAAiC;AAChF,EAAA,OAAO,MAAA;AACT;AAKA,eAAsB,4BAAA,CACpB,OACA,MAAA,EACmB;AACnB,EAAA,MAAM,KAAA,GAAQC,gCAAA,CAA0B,MAAA,EAAQ,cAAc,CAAA;AAC9D,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,SAAS,KAAA,CAAM,IAAA;AAAA,IACf,iBAAiB,KAAA,CAAM,YAAA;AAAA,IACvB,gBAAgB,KAAA,CAAM;AAAA,GACxB;AACF;AAKA,eAAsB,cAAA,CAAe,QAAgB,KAAA,EAAmC;AACtF,EAAA,OAAOC,4BAAA;AAAA,IACL,MAAA;AAAA,IACA,EAAE,MAAM,KAAA,CAAM,OAAA,EAAS,cAAc,KAAA,CAAM,eAAA,EAAiB,WAAA,EAAa,KAAA,CAAM,cAAA,EAAe;AAAA,IAC9F;AAAA,GACF;AACF;AAKO,IAAM,WAAA,GAAc;AACpB,IAAM,aAAA,GAAgB;AAK7B,eAAsB,kBAAkB,MAAA,EAAiC;AACvE,EAAA,OAAO,2BAA2B,MAAM,CAAA;AAC1C;AAKO,SAAS,aAAa,OAAA,EAAmB;AAC9C,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAIC,2BAAA,CAAQ,sCAAsC,CAAA;AAC1E,EAAA,OAAO,eAAA,CAAgB,OAAA,EAAS,cAAA,EAAgB,QAAQ,CAAA;AAC1D;AAKA,eAAsB,0BAA0B,OAAA,EAAoC;AAClF,EAAA,OAAOC,wBAAA,CAAkB,OAAA,EAAS,cAAA,EAAgB,QAAQ,CAAA;AAC5D;AAKA,eAAsB,2BAAA,CACpB,KAAA,EACA,MAAA,EACA,UAAA,EACmB;AACnB,EAAA,IAAI,UAAA,CAAW,UAAU,CAAA,EAAG;AAC1B,IAAA,OAAO,4BAAA,CAA6B,OAAO,MAAM,CAAA;AAAA,EACnD;AAEA,EAAA,MAAM,QAAQ,MAAMC,8BAAA,CAAwB,MAAA,EAAQ,UAAA,EAAY,gBAAgB,QAAQ,CAAA;AAExF,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,SAAS,KAAA,CAAM,IAAA;AAAA,IACf,iBAAiB,KAAA,CAAM,YAAA;AAAA,IACvB,gBAAgB,KAAA,CAAM;AAAA,GACxB;AACF;AAKA,eAAsB,gBAAA,CACpB,KAAA,EACA,MAAA,EACA,eAAA,EACmB;AACnB,EAAA,IAAI,eAAA,IAAmB,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AACjD,IAAA,OAAO,2BAAA,CAA4B,KAAA,EAAO,MAAA,EAAQ,eAAe,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,4BAAA,CAA6B,OAAO,MAAM,CAAA;AACnD","file":"chunk-XVIICZKW.cjs","sourcesContent":["/**\n * ASP (Association Set Provider) Utilities\n *\n * Thin wrapper around @permissionless-technologies/upc-sdk.\n * Provides pool-specific types (ASPProof with aspId) while delegating\n * Merkle tree operations to the compliance SDK.\n *\n * In UPP, every transfer must prove the origin is in an approved ASP's allowlist.\n *\n * Uses BLS12-381 Poseidon (128-bit security) for Merkle tree operations,\n * matching the circuit hash function.\n */\n\nimport {\n generateMembershipProof,\n generateSingleMemberProof,\n computeMerkleRoot,\n verifyMembershipProof,\n DEFAULT_TREE_DEPTH,\n PoseidonBLS12381,\n} from '@permissionless-technologies/upc-sdk'\n\n// Re-export tree depth from UPC\nexport const ASP_TREE_DEPTH = DEFAULT_TREE_DEPTH\n\n// Use BLS12-381 Poseidon (128-bit security) — matches circuit hash function\nconst bls12381 = new PoseidonBLS12381()\n\n/**\n * ASP Merkle proof structure (pool-specific: includes aspId)\n */\nexport interface ASPProof {\n /** ASP ID */\n aspId: bigint\n /** ASP's published root */\n aspRoot: bigint\n /** Path elements (siblings) - 20 levels */\n aspPathElements: bigint[]\n /** Path indices - 20 levels */\n aspPathIndices: number[]\n}\n\n/**\n * Compute the ASP root for a single-leaf tree\n */\nexport async function computeSingleOriginASPRoot(origin: bigint): Promise<bigint> {\n return origin // LeanIMT single-leaf optimization: root = leaf\n}\n\n/**\n * Generate ASP proof for a single-origin tree\n */\nexport async function generateSingleOriginASPProof(\n aspId: bigint,\n origin: bigint\n): Promise<ASPProof> {\n const proof = generateSingleMemberProof(origin, ASP_TREE_DEPTH)\n return {\n aspId,\n aspRoot: proof.root,\n aspPathElements: proof.pathElements,\n aspPathIndices: proof.pathIndices,\n }\n}\n\n/**\n * Verify an ASP proof locally (for debugging)\n */\nexport async function verifyASPProof(origin: bigint, proof: ASPProof): Promise<boolean> {\n return verifyMembershipProof(\n origin,\n { root: proof.aspRoot, pathElements: proof.aspPathElements, pathIndices: proof.aspPathIndices },\n bls12381\n )\n}\n\n/**\n * Demo ASP configuration\n */\nexport const DEMO_ASP_ID = 1n\nexport const DEMO_ASP_NAME = 'Demo ASP (Single-Origin)'\n\n/**\n * Create a \"universal approval\" ASP root\n */\nexport async function createDemoASPRoot(origin: bigint): Promise<bigint> {\n return computeSingleOriginASPRoot(origin)\n}\n\n/**\n * Build an ASP Merkle tree from multiple origin addresses\n */\nexport function buildASPTree(origins: bigint[]) {\n const { buildMerkleTree } = require('@permissionless-technologies/upc-sdk') as typeof import('@permissionless-technologies/upc-sdk')\n return buildMerkleTree(origins, ASP_TREE_DEPTH, bls12381)\n}\n\n/**\n * Compute the Merkle root for a set of approved origins\n */\nexport async function computeMultiOriginASPRoot(origins: bigint[]): Promise<bigint> {\n return computeMerkleRoot(origins, ASP_TREE_DEPTH, bls12381)\n}\n\n/**\n * Generate an ASP membership proof for one origin within a multi-origin tree\n */\nexport async function generateMultiOriginASPProof(\n aspId: bigint,\n origin: bigint,\n allOrigins: bigint[]\n): Promise<ASPProof> {\n if (allOrigins.length <= 1) {\n return generateSingleOriginASPProof(aspId, origin)\n }\n\n const proof = await generateMembershipProof(origin, allOrigins, ASP_TREE_DEPTH, bls12381)\n\n return {\n aspId,\n aspRoot: proof.root,\n aspPathElements: proof.pathElements,\n aspPathIndices: proof.pathIndices,\n }\n}\n\n/**\n * Generate an ASP proof, automatically choosing single-origin or multi-origin\n */\nexport async function generateASPProof(\n aspId: bigint,\n origin: bigint,\n approvedOrigins?: bigint[]\n): Promise<ASPProof> {\n if (approvedOrigins && approvedOrigins.length > 0) {\n return generateMultiOriginASPProof(aspId, origin, approvedOrigins)\n }\n return generateSingleOriginASPProof(aspId, origin)\n}\n"]}
|
|
@@ -998,5 +998,5 @@ function sleep(ms) {
|
|
|
998
998
|
}
|
|
999
999
|
|
|
1000
1000
|
export { computeSearchTag, makeRpcIndexer, matchesSearchTag, tryDecryptNote, unpackNoteData };
|
|
1001
|
-
//# sourceMappingURL=chunk-
|
|
1002
|
-
//# sourceMappingURL=chunk-
|
|
1001
|
+
//# sourceMappingURL=chunk-ZTVXII74.js.map
|
|
1002
|
+
//# sourceMappingURL=chunk-ZTVXII74.js.map
|