@opaquecash/psr-chain 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abi.d.ts +6 -0
- package/dist/abi.d.ts.map +1 -0
- package/dist/abi.js +75 -0
- package/dist/abi.js.map +1 -0
- package/dist/addresses.d.ts +14 -0
- package/dist/addresses.d.ts.map +1 -0
- package/dist/addresses.js +11 -0
- package/dist/addresses.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/roots.d.ts +24 -0
- package/dist/roots.d.ts.map +1 -0
- package/dist/roots.js +73 -0
- package/dist/roots.js.map +1 -0
- package/dist/submit.d.ts +39 -0
- package/dist/submit.d.ts.map +1 -0
- package/dist/submit.js +135 -0
- package/dist/submit.js.map +1 -0
- package/package.json +26 -0
package/dist/abi.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAyEhC;;GAEG;AACH,eAAO,MAAM,2BAA2B,EACK,GAAG,CAAC"}
|
package/dist/abi.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
const _opaqueReputationVerifierAbi = [
|
|
2
|
+
{ type: "error", name: "InvalidProof", inputs: [] },
|
|
3
|
+
{ type: "error", name: "NullifierAlreadyUsed", inputs: [] },
|
|
4
|
+
{ type: "error", name: "InvalidMerkleRoot", inputs: [] },
|
|
5
|
+
{ type: "error", name: "RootExpired", inputs: [] },
|
|
6
|
+
{ type: "error", name: "ZeroAddress", inputs: [] },
|
|
7
|
+
{
|
|
8
|
+
type: "function",
|
|
9
|
+
name: "isRootValid",
|
|
10
|
+
inputs: [{ name: "root", type: "bytes32" }],
|
|
11
|
+
outputs: [{ name: "", type: "bool" }],
|
|
12
|
+
stateMutability: "view",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
type: "function",
|
|
16
|
+
name: "verifyReputation",
|
|
17
|
+
inputs: [
|
|
18
|
+
{
|
|
19
|
+
name: "proof",
|
|
20
|
+
type: "tuple",
|
|
21
|
+
components: [
|
|
22
|
+
{ name: "a", type: "uint256[2]" },
|
|
23
|
+
{ name: "b", type: "uint256[2][2]" },
|
|
24
|
+
{ name: "c", type: "uint256[2]" },
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
{ name: "root", type: "bytes32" },
|
|
28
|
+
{ name: "attestationId", type: "uint256" },
|
|
29
|
+
{ name: "externalNullifier", type: "uint256" },
|
|
30
|
+
{ name: "nullifier", type: "uint256" },
|
|
31
|
+
],
|
|
32
|
+
outputs: [{ name: "valid", type: "bool" }],
|
|
33
|
+
stateMutability: "nonpayable",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: "function",
|
|
37
|
+
name: "verifyReputationView",
|
|
38
|
+
inputs: [
|
|
39
|
+
{
|
|
40
|
+
name: "proof",
|
|
41
|
+
type: "tuple",
|
|
42
|
+
components: [
|
|
43
|
+
{ name: "a", type: "uint256[2]" },
|
|
44
|
+
{ name: "b", type: "uint256[2][2]" },
|
|
45
|
+
{ name: "c", type: "uint256[2]" },
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
{ name: "root", type: "bytes32" },
|
|
49
|
+
{ name: "attestationId", type: "uint256" },
|
|
50
|
+
{ name: "externalNullifier", type: "uint256" },
|
|
51
|
+
{ name: "nullifier", type: "uint256" },
|
|
52
|
+
],
|
|
53
|
+
outputs: [{ name: "valid", type: "bool" }],
|
|
54
|
+
stateMutability: "view",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: "function",
|
|
58
|
+
name: "rootHistoryLength",
|
|
59
|
+
inputs: [],
|
|
60
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
61
|
+
stateMutability: "view",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
type: "function",
|
|
65
|
+
name: "rootHistory",
|
|
66
|
+
inputs: [{ name: "", type: "uint256" }],
|
|
67
|
+
outputs: [{ name: "", type: "bytes32" }],
|
|
68
|
+
stateMutability: "view",
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
/**
|
|
72
|
+
* Minimal ABI surface for `OpaqueReputationVerifier` + errors (viem `readContract` / `writeContract`).
|
|
73
|
+
*/
|
|
74
|
+
export const opaqueReputationVerifierAbi = _opaqueReputationVerifierAbi;
|
|
75
|
+
//# sourceMappingURL=abi.js.map
|
package/dist/abi.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abi.js","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
/**
|
|
3
|
+
* Example address book shape: extend per deployment.
|
|
4
|
+
*
|
|
5
|
+
* Keys are `chainId` (e.g. `11155111` for Sepolia).
|
|
6
|
+
*/
|
|
7
|
+
export type ReputationAddressBook = Record<number, {
|
|
8
|
+
OpaqueReputationVerifier: Address;
|
|
9
|
+
}>;
|
|
10
|
+
/**
|
|
11
|
+
* Resolve verifier address or throw.
|
|
12
|
+
*/
|
|
13
|
+
export declare function reputationVerifierAddress(book: ReputationAddressBook, chainId: number): Address;
|
|
14
|
+
//# sourceMappingURL=addresses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../src/addresses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,wBAAwB,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAE1F;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAMT"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve verifier address or throw.
|
|
3
|
+
*/
|
|
4
|
+
export function reputationVerifierAddress(book, chainId) {
|
|
5
|
+
const row = book[chainId];
|
|
6
|
+
if (!row) {
|
|
7
|
+
throw new Error(`No OpaqueReputationVerifier configured for chainId ${chainId}`);
|
|
8
|
+
}
|
|
9
|
+
return row.OpaqueReputationVerifier;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=addresses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addresses.js","sourceRoot":"","sources":["../src/addresses.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,IAA2B,EAC3B,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,sDAAsD,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,GAAG,CAAC,wBAAwB,CAAC;AACtC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@opaquecash/psr-chain` — read Merkle roots, simulate, and submit `verifyReputation` via viem.
|
|
3
|
+
*
|
|
4
|
+
* Pair with `@opaquecash/psr-prover` for proof generation and `@opaquecash/psr-core` for scoping/nullifiers.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
export { opaqueReputationVerifierAbi } from "./abi.js";
|
|
9
|
+
export { fetchLatestValidRoot, isRootValid, fetchRootHistory, } from "./roots.js";
|
|
10
|
+
export type { VerifyReputationArgs } from "./submit.js";
|
|
11
|
+
export { normalizeRootToBytes32, proofDataToSolidityTuple, simulateVerifyReputation, submitVerifyReputation, verifyReputationView, mapVerifierRevert, } from "./submit.js";
|
|
12
|
+
export type { ReputationAddressBook } from "./addresses.js";
|
|
13
|
+
export { reputationVerifierAddress } from "./addresses.js";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@opaquecash/psr-chain` — read Merkle roots, simulate, and submit `verifyReputation` via viem.
|
|
3
|
+
*
|
|
4
|
+
* Pair with `@opaquecash/psr-prover` for proof generation and `@opaquecash/psr-core` for scoping/nullifiers.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
export { opaqueReputationVerifierAbi } from "./abi.js";
|
|
9
|
+
export { fetchLatestValidRoot, isRootValid, fetchRootHistory, } from "./roots.js";
|
|
10
|
+
export { normalizeRootToBytes32, proofDataToSolidityTuple, simulateVerifyReputation, submitVerifyReputation, verifyReputationView, mapVerifierRevert, } from "./submit.js";
|
|
11
|
+
export { reputationVerifierAddress } from "./addresses.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/roots.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { PublicClient, Address, Hex } from "viem";
|
|
2
|
+
/**
|
|
3
|
+
* Return the latest Merkle root from `rootHistory` that {@link isRootValid} still accepts.
|
|
4
|
+
*
|
|
5
|
+
* @param publicClient - Viem public client positioned on the verifier's chain.
|
|
6
|
+
* @param verifierAddress - `OpaqueReputationVerifier` deployment.
|
|
7
|
+
*/
|
|
8
|
+
export declare function fetchLatestValidRoot(publicClient: PublicClient, verifierAddress: Address): Promise<Hex>;
|
|
9
|
+
/**
|
|
10
|
+
* Read whether a root is currently accepted (exists and not past `ROOT_EXPIRY`).
|
|
11
|
+
*/
|
|
12
|
+
export declare function isRootValid(publicClient: PublicClient, verifierAddress: Address, root: Hex): Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* Enumerate roots from `rootHistory` with their on-chain validity bit (newest index last).
|
|
15
|
+
*
|
|
16
|
+
* @param publicClient - Viem public client.
|
|
17
|
+
* @param verifierAddress - Verifier contract.
|
|
18
|
+
*/
|
|
19
|
+
export declare function fetchRootHistory(publicClient: PublicClient, verifierAddress: Address): Promise<Array<{
|
|
20
|
+
index: number;
|
|
21
|
+
root: Hex;
|
|
22
|
+
valid: boolean;
|
|
23
|
+
}>>;
|
|
24
|
+
//# sourceMappingURL=roots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roots.d.ts","sourceRoot":"","sources":["../src/roots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAIvD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,OAAO,GACvB,OAAO,CAAC,GAAG,CAAC,CA+Bd;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,OAAO,EACxB,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,OAAO,GACvB,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAoB9D"}
|
package/dist/roots.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { RootExpiredError } from "@opaquecash/psr-core";
|
|
2
|
+
import { opaqueReputationVerifierAbi } from "./abi.js";
|
|
3
|
+
/**
|
|
4
|
+
* Return the latest Merkle root from `rootHistory` that {@link isRootValid} still accepts.
|
|
5
|
+
*
|
|
6
|
+
* @param publicClient - Viem public client positioned on the verifier's chain.
|
|
7
|
+
* @param verifierAddress - `OpaqueReputationVerifier` deployment.
|
|
8
|
+
*/
|
|
9
|
+
export async function fetchLatestValidRoot(publicClient, verifierAddress) {
|
|
10
|
+
const rootHistoryLength = await publicClient.readContract({
|
|
11
|
+
address: verifierAddress,
|
|
12
|
+
abi: opaqueReputationVerifierAbi,
|
|
13
|
+
functionName: "rootHistoryLength",
|
|
14
|
+
});
|
|
15
|
+
const length = Number(rootHistoryLength);
|
|
16
|
+
if (!Number.isFinite(length) || length <= 0) {
|
|
17
|
+
throw new RootExpiredError("No Merkle roots found on verifier contract.");
|
|
18
|
+
}
|
|
19
|
+
for (let i = length - 1; i >= 0; i--) {
|
|
20
|
+
const root = (await publicClient.readContract({
|
|
21
|
+
address: verifierAddress,
|
|
22
|
+
abi: opaqueReputationVerifierAbi,
|
|
23
|
+
functionName: "rootHistory",
|
|
24
|
+
args: [BigInt(i)],
|
|
25
|
+
}));
|
|
26
|
+
const valid = (await publicClient.readContract({
|
|
27
|
+
address: verifierAddress,
|
|
28
|
+
abi: opaqueReputationVerifierAbi,
|
|
29
|
+
functionName: "isRootValid",
|
|
30
|
+
args: [root],
|
|
31
|
+
}));
|
|
32
|
+
if (valid)
|
|
33
|
+
return root;
|
|
34
|
+
}
|
|
35
|
+
throw new RootExpiredError("No valid (non-expired) Merkle root found on verifier contract.");
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Read whether a root is currently accepted (exists and not past `ROOT_EXPIRY`).
|
|
39
|
+
*/
|
|
40
|
+
export async function isRootValid(publicClient, verifierAddress, root) {
|
|
41
|
+
return (await publicClient.readContract({
|
|
42
|
+
address: verifierAddress,
|
|
43
|
+
abi: opaqueReputationVerifierAbi,
|
|
44
|
+
functionName: "isRootValid",
|
|
45
|
+
args: [root],
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Enumerate roots from `rootHistory` with their on-chain validity bit (newest index last).
|
|
50
|
+
*
|
|
51
|
+
* @param publicClient - Viem public client.
|
|
52
|
+
* @param verifierAddress - Verifier contract.
|
|
53
|
+
*/
|
|
54
|
+
export async function fetchRootHistory(publicClient, verifierAddress) {
|
|
55
|
+
const len = Number(await publicClient.readContract({
|
|
56
|
+
address: verifierAddress,
|
|
57
|
+
abi: opaqueReputationVerifierAbi,
|
|
58
|
+
functionName: "rootHistoryLength",
|
|
59
|
+
}));
|
|
60
|
+
const out = [];
|
|
61
|
+
for (let i = 0; i < len; i++) {
|
|
62
|
+
const root = (await publicClient.readContract({
|
|
63
|
+
address: verifierAddress,
|
|
64
|
+
abi: opaqueReputationVerifierAbi,
|
|
65
|
+
functionName: "rootHistory",
|
|
66
|
+
args: [BigInt(i)],
|
|
67
|
+
}));
|
|
68
|
+
const valid = await isRootValid(publicClient, verifierAddress, root);
|
|
69
|
+
out.push({ index: i, root, valid });
|
|
70
|
+
}
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=roots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roots.js","sourceRoot":"","sources":["../src/roots.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,YAA0B,EAC1B,eAAwB;IAExB,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QACxD,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,2BAA2B;QAChC,YAAY,EAAE,mBAAmB;KAClC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,gBAAgB,CAAC,6CAA6C,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;YAC5C,OAAO,EAAE,eAAe;YACxB,GAAG,EAAE,2BAA2B;YAChC,YAAY,EAAE,aAAa;YAC3B,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAClB,CAAC,CAAQ,CAAC;QACX,MAAM,KAAK,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;YAC7C,OAAO,EAAE,eAAe;YACxB,GAAG,EAAE,2BAA2B;YAChC,YAAY,EAAE,aAAa;YAC3B,IAAI,EAAE,CAAC,IAAI,CAAC;SACb,CAAC,CAAY,CAAC;QACf,IAAI,KAAK;YAAE,OAAO,IAAI,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,gBAAgB,CACxB,gEAAgE,CACjE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,YAA0B,EAC1B,eAAwB,EACxB,IAAS;IAET,OAAO,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,2BAA2B;QAChC,YAAY,EAAE,aAAa;QAC3B,IAAI,EAAE,CAAC,IAAI,CAAC;KACb,CAAC,CAAY,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,YAA0B,EAC1B,eAAwB;IAExB,MAAM,GAAG,GAAG,MAAM,CAChB,MAAM,YAAY,CAAC,YAAY,CAAC;QAC9B,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,2BAA2B;QAChC,YAAY,EAAE,mBAAmB;KAClC,CAAC,CACH,CAAC;IACF,MAAM,GAAG,GAAwD,EAAE,CAAC;IACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;YAC5C,OAAO,EAAE,eAAe;YACxB,GAAG,EAAE,2BAA2B;YAChC,YAAY,EAAE,aAAa;YAC3B,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAClB,CAAC,CAAQ,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QACrE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/submit.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { PublicClient, WalletClient, Address, Hex, Chain, Transport, Account } from "viem";
|
|
2
|
+
import type { ProofData } from "@opaquecash/psr-core";
|
|
3
|
+
/**
|
|
4
|
+
* Normalize decimal / hex string Merkle roots to `bytes32`.
|
|
5
|
+
*
|
|
6
|
+
* @param root - `publicSignals[2]` or decimal string from an indexer.
|
|
7
|
+
*/
|
|
8
|
+
export declare function normalizeRootToBytes32(root: string): Hex;
|
|
9
|
+
/**
|
|
10
|
+
* Convert {@link ProofData} into the Solidity tuple expected by `verifyReputation`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function proofDataToSolidityTuple(proofData: ProofData): {
|
|
13
|
+
a: readonly [bigint, bigint];
|
|
14
|
+
b: readonly [readonly [bigint, bigint], readonly [bigint, bigint]];
|
|
15
|
+
c: readonly [bigint, bigint];
|
|
16
|
+
};
|
|
17
|
+
export interface VerifyReputationArgs {
|
|
18
|
+
proofData: ProofData;
|
|
19
|
+
/** Merkle root (decimal or hex string). */
|
|
20
|
+
merkleRoot: string;
|
|
21
|
+
externalNullifier: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Simulate `verifyReputation` without sending a transaction (preflight / gas estimation).
|
|
25
|
+
*/
|
|
26
|
+
export declare function simulateVerifyReputation<TTransport extends Transport, TChain extends Chain, TAccount extends Account | undefined>(publicClient: PublicClient, wallet: WalletClient<TTransport, TChain, TAccount>, verifierAddress: Address, args: VerifyReputationArgs): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Submit a Groth16 proof to `OpaqueReputationVerifier.verifyReputation`.
|
|
29
|
+
*
|
|
30
|
+
* @returns Transaction hash after broadcast (does not wait for receipt unless you await downstream).
|
|
31
|
+
*/
|
|
32
|
+
export declare function submitVerifyReputation<TTransport extends Transport, TChain extends Chain, TAccount extends Account | undefined>(publicClient: PublicClient, wallet: WalletClient<TTransport, TChain, TAccount>, verifierAddress: Address, args: VerifyReputationArgs): Promise<Hex>;
|
|
33
|
+
/**
|
|
34
|
+
* Read-only verification path (does not mark nullifier used).
|
|
35
|
+
*/
|
|
36
|
+
export declare function verifyReputationView(publicClient: PublicClient, verifierAddress: Address, args: VerifyReputationArgs): Promise<boolean>;
|
|
37
|
+
/** @internal Map contract revert to typed error where possible */
|
|
38
|
+
export declare function mapVerifierRevert(e: unknown): Error;
|
|
39
|
+
//# sourceMappingURL=submit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../src/submit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,GAAG,EACH,KAAK,EACL,SAAS,EACT,OAAO,EACR,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAItD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAMxD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,GAAG;IAC9D,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B,CAQA;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,SAAS,SAAS,EAC5B,MAAM,SAAS,KAAK,EACpB,QAAQ,SAAS,OAAO,GAAG,SAAS,EAEpC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAClD,eAAe,EAAE,OAAO,EACxB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,SAAS,SAAS,EAC5B,MAAM,SAAS,KAAK,EACpB,QAAQ,SAAS,OAAO,GAAG,SAAS,EAEpC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAClD,eAAe,EAAE,OAAO,EACxB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,GAAG,CAAC,CA+Cd;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,OAAO,EACxB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,OAAO,CAAC,CAelB;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAMnD"}
|
package/dist/submit.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { toHex } from "viem";
|
|
2
|
+
import { NullifierUsedError, RootExpiredError } from "@opaquecash/psr-core";
|
|
3
|
+
import { opaqueReputationVerifierAbi } from "./abi.js";
|
|
4
|
+
/**
|
|
5
|
+
* Normalize decimal / hex string Merkle roots to `bytes32`.
|
|
6
|
+
*
|
|
7
|
+
* @param root - `publicSignals[2]` or decimal string from an indexer.
|
|
8
|
+
*/
|
|
9
|
+
export function normalizeRootToBytes32(root) {
|
|
10
|
+
try {
|
|
11
|
+
return toHex(BigInt(root), { size: 32 });
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
throw new Error(`Invalid merkle root format: "${root}"`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Convert {@link ProofData} into the Solidity tuple expected by `verifyReputation`.
|
|
19
|
+
*/
|
|
20
|
+
export function proofDataToSolidityTuple(proofData) {
|
|
21
|
+
const pi_a = proofData.proof.pi_a.map(BigInt);
|
|
22
|
+
const pi_b = proofData.proof.pi_b.map((pair) => [BigInt(pair[1]), BigInt(pair[0])]);
|
|
23
|
+
const pi_c = proofData.proof.pi_c.map(BigInt);
|
|
24
|
+
return { a: pi_a, b: pi_b, c: pi_c };
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Simulate `verifyReputation` without sending a transaction (preflight / gas estimation).
|
|
28
|
+
*/
|
|
29
|
+
export async function simulateVerifyReputation(publicClient, wallet, verifierAddress, args) {
|
|
30
|
+
const account = wallet.account;
|
|
31
|
+
if (!account)
|
|
32
|
+
throw new Error("Wallet client has no account");
|
|
33
|
+
const root = normalizeRootToBytes32(args.merkleRoot);
|
|
34
|
+
const tuple = proofDataToSolidityTuple(args.proofData);
|
|
35
|
+
const validRoot = await publicClient.readContract({
|
|
36
|
+
address: verifierAddress,
|
|
37
|
+
abi: opaqueReputationVerifierAbi,
|
|
38
|
+
functionName: "isRootValid",
|
|
39
|
+
args: [root],
|
|
40
|
+
});
|
|
41
|
+
if (!validRoot) {
|
|
42
|
+
throw new RootExpiredError();
|
|
43
|
+
}
|
|
44
|
+
await publicClient.simulateContract({
|
|
45
|
+
address: verifierAddress,
|
|
46
|
+
abi: opaqueReputationVerifierAbi,
|
|
47
|
+
functionName: "verifyReputation",
|
|
48
|
+
args: [
|
|
49
|
+
{ a: tuple.a, b: tuple.b, c: tuple.c },
|
|
50
|
+
root,
|
|
51
|
+
BigInt(args.proofData.attestationId),
|
|
52
|
+
BigInt(args.externalNullifier),
|
|
53
|
+
BigInt(args.proofData.nullifier),
|
|
54
|
+
],
|
|
55
|
+
account,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Submit a Groth16 proof to `OpaqueReputationVerifier.verifyReputation`.
|
|
60
|
+
*
|
|
61
|
+
* @returns Transaction hash after broadcast (does not wait for receipt unless you await downstream).
|
|
62
|
+
*/
|
|
63
|
+
export async function submitVerifyReputation(publicClient, wallet, verifierAddress, args) {
|
|
64
|
+
const account = wallet.account;
|
|
65
|
+
if (!account)
|
|
66
|
+
throw new Error("Wallet client has no account");
|
|
67
|
+
const root = normalizeRootToBytes32(args.merkleRoot);
|
|
68
|
+
const tuple = proofDataToSolidityTuple(args.proofData);
|
|
69
|
+
const validRoot = await publicClient.readContract({
|
|
70
|
+
address: verifierAddress,
|
|
71
|
+
abi: opaqueReputationVerifierAbi,
|
|
72
|
+
functionName: "isRootValid",
|
|
73
|
+
args: [root],
|
|
74
|
+
});
|
|
75
|
+
if (!validRoot) {
|
|
76
|
+
throw new RootExpiredError();
|
|
77
|
+
}
|
|
78
|
+
await publicClient.simulateContract({
|
|
79
|
+
address: verifierAddress,
|
|
80
|
+
abi: opaqueReputationVerifierAbi,
|
|
81
|
+
functionName: "verifyReputation",
|
|
82
|
+
args: [
|
|
83
|
+
{ a: tuple.a, b: tuple.b, c: tuple.c },
|
|
84
|
+
root,
|
|
85
|
+
BigInt(args.proofData.attestationId),
|
|
86
|
+
BigInt(args.externalNullifier),
|
|
87
|
+
BigInt(args.proofData.nullifier),
|
|
88
|
+
],
|
|
89
|
+
account,
|
|
90
|
+
});
|
|
91
|
+
const hash = await wallet.writeContract({
|
|
92
|
+
address: verifierAddress,
|
|
93
|
+
abi: opaqueReputationVerifierAbi,
|
|
94
|
+
functionName: "verifyReputation",
|
|
95
|
+
args: [
|
|
96
|
+
{ a: tuple.a, b: tuple.b, c: tuple.c },
|
|
97
|
+
root,
|
|
98
|
+
BigInt(args.proofData.attestationId),
|
|
99
|
+
BigInt(args.externalNullifier),
|
|
100
|
+
BigInt(args.proofData.nullifier),
|
|
101
|
+
],
|
|
102
|
+
chain: wallet.chain,
|
|
103
|
+
account,
|
|
104
|
+
});
|
|
105
|
+
return hash;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Read-only verification path (does not mark nullifier used).
|
|
109
|
+
*/
|
|
110
|
+
export async function verifyReputationView(publicClient, verifierAddress, args) {
|
|
111
|
+
const root = normalizeRootToBytes32(args.merkleRoot);
|
|
112
|
+
const tuple = proofDataToSolidityTuple(args.proofData);
|
|
113
|
+
return (await publicClient.readContract({
|
|
114
|
+
address: verifierAddress,
|
|
115
|
+
abi: opaqueReputationVerifierAbi,
|
|
116
|
+
functionName: "verifyReputationView",
|
|
117
|
+
args: [
|
|
118
|
+
{ a: tuple.a, b: tuple.b, c: tuple.c },
|
|
119
|
+
root,
|
|
120
|
+
BigInt(args.proofData.attestationId),
|
|
121
|
+
BigInt(args.externalNullifier),
|
|
122
|
+
BigInt(args.proofData.nullifier),
|
|
123
|
+
],
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
/** @internal Map contract revert to typed error where possible */
|
|
127
|
+
export function mapVerifierRevert(e) {
|
|
128
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
129
|
+
if (msg.includes("NullifierAlreadyUsed"))
|
|
130
|
+
return new NullifierUsedError();
|
|
131
|
+
if (msg.includes("InvalidMerkleRoot") || msg.includes("RootExpired"))
|
|
132
|
+
return new RootExpiredError();
|
|
133
|
+
return e instanceof Error ? e : new Error(msg);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=submit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../src/submit.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@opaquecash/psr-chain",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Viem integration for OpaqueReputationVerifier (roots, verify, submit)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc -p tsconfig.json",
|
|
19
|
+
"clean": "rm -rf dist"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@opaquecash/psr-core": "0.1.0",
|
|
23
|
+
"viem": "^2.21.0"
|
|
24
|
+
},
|
|
25
|
+
"sideEffects": false
|
|
26
|
+
}
|