@zkproofport-ai/sdk 0.2.13 → 0.2.14
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/README.md +2 -0
- package/dist/attestation.d.ts +0 -7
- package/dist/attestation.d.ts.map +1 -1
- package/dist/attestation.js +65 -4
- package/dist/attestation.js.map +1 -1
- package/dist/constants.d.ts +47 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +56 -0
- package/dist/constants.js.map +1 -1
- package/dist/inputs.d.ts +17 -0
- package/dist/inputs.d.ts.map +1 -1
- package/dist/inputs.js +53 -6
- package/dist/inputs.js.map +1 -1
- package/dist/merkle.d.ts +2 -2
- package/dist/merkle.d.ts.map +1 -1
- package/dist/merkle.js +10 -5
- package/dist/merkle.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -101,6 +101,8 @@ Corrected Arc stepwise support and shared action hashing require SDK/MCP **0.2.1
|
|
|
101
101
|
|
|
102
102
|
**For the circuits that can bind an action** (`arc_eligibility`, `giwa_attestation`): the attestation above for whichever one you ask for. What differs is what the wallet signs, and the action is **optional** — see below.
|
|
103
103
|
|
|
104
|
+
**One wallet has a different nullifier per circuit, and for the circuits above it does not depend on what you signed.** `arc_eligibility` and `giwa_attestation` derive it from your address, the circuit's own identifier and the scope, so the same wallet in the same scope gives the same nullifier whether or not you bind an action. The Coinbase circuits derive theirs from the signed challenge instead. Nothing to configure — the SDK picks the rule the circuit expects, and refuses a circuit it has no rule for rather than guessing one. Requires **0.2.14 or later**; earlier versions sent the Coinbase rule for every circuit, which a GIWA proof rejects as a nullifier mismatch.
|
|
105
|
+
|
|
104
106
|
## Quick Start
|
|
105
107
|
|
|
106
108
|
```typescript
|
package/dist/attestation.d.ts
CHANGED
|
@@ -53,12 +53,5 @@ export declare function recoverAttesterPubkey(rawTransaction: string): string;
|
|
|
53
53
|
* Get the signer address from a recovered public key.
|
|
54
54
|
*/
|
|
55
55
|
export declare function getSignerAddress(pubkey: string): string;
|
|
56
|
-
/**
|
|
57
|
-
* Full attestation fetch pipeline:
|
|
58
|
-
* 1. Query EAS GraphQL for the latest attestation
|
|
59
|
-
* 2. Fetch the raw transaction from RPC
|
|
60
|
-
* 3. Validate transaction fields
|
|
61
|
-
* 4. Return attestation + raw transaction
|
|
62
|
-
*/
|
|
63
56
|
export declare function fetchAttestation(config: ClientConfig, circuitId: CircuitId, recipientAddress: string): Promise<AttestationData>;
|
|
64
57
|
//# sourceMappingURL=attestation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attestation.d.ts","sourceRoot":"","sources":["../src/attestation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attestation.d.ts","sourceRoot":"","sources":["../src/attestation.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAyC3F;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,cAAc,CAAC,CAkCzB;AAID;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CA2DjB;AAID;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAChE,GAAG,MAAM,CAuBT;AAID;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,SAAS,GACnB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAwBpC;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CA0BpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAsED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,eAAe,CAAC,CAiC1B"}
|
package/dist/attestation.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
|
-
import { CIRCUITS,
|
|
2
|
+
import { CIRCUITS, DEFAULT_EAS_GRAPHQL, DEFAULT_EAS_RPC, attestationSource, } from './constants.js';
|
|
3
3
|
// ─── GraphQL query ──────────────────────────────────────────────────────
|
|
4
4
|
const EAS_ATTESTATIONS_QUERY = `
|
|
5
5
|
query GetAttestations($schemaId: String!, $recipient: String!) {
|
|
@@ -159,11 +159,13 @@ export function reconstructRawTransaction(txData) {
|
|
|
159
159
|
*/
|
|
160
160
|
export function validateAttestationTx(rawTransaction, circuitId) {
|
|
161
161
|
const tx = ethers.Transaction.from(rawTransaction);
|
|
162
|
-
// Check destination
|
|
163
|
-
|
|
162
|
+
// Check destination: the attester contract THIS circuit's attestation must
|
|
163
|
+
// have been sent to, from the one table that knows.
|
|
164
|
+
const expectedAttester = attestationSource(circuitId).contract;
|
|
165
|
+
if (!tx.to || tx.to.toLowerCase() !== expectedAttester.toLowerCase()) {
|
|
164
166
|
return {
|
|
165
167
|
valid: false,
|
|
166
|
-
error: `Transaction destination ${tx.to} does not match
|
|
168
|
+
error: `Transaction destination ${tx.to} does not match the attester contract for ${circuitId}: ${expectedAttester}`,
|
|
167
169
|
};
|
|
168
170
|
}
|
|
169
171
|
// Check function selector
|
|
@@ -219,7 +221,66 @@ export function getSignerAddress(pubkey) {
|
|
|
219
221
|
* 3. Validate transaction fields
|
|
220
222
|
* 4. Return attestation + raw transaction
|
|
221
223
|
*/
|
|
224
|
+
/**
|
|
225
|
+
* The GIWA attestation for a wallet, found by reading our attester's own calls.
|
|
226
|
+
*
|
|
227
|
+
* Not an EAS query: GIWA's attester is ours on GIWA Sepolia and nothing indexes
|
|
228
|
+
* it. Asking Base's EAS for a GIWA wallet does not fail cleanly either -- the
|
|
229
|
+
* schema id is absent, so the request comes back HTTP 400 and reads like a
|
|
230
|
+
* broken endpoint rather than "wrong chain".
|
|
231
|
+
*/
|
|
232
|
+
async function fetchGiwaAttestation(source, recipientAddress) {
|
|
233
|
+
const attester = ethers.getAddress(source.signers[0]);
|
|
234
|
+
const wanted = ethers.getAddress(recipientAddress);
|
|
235
|
+
const listUrl = `${source.explorer}/api?module=account&action=txlist` +
|
|
236
|
+
`&address=${attester}&sort=desc&page=1&offset=100`;
|
|
237
|
+
const listResponse = await fetch(listUrl);
|
|
238
|
+
if (!listResponse.ok) {
|
|
239
|
+
throw new Error(`GIWA explorer request failed: HTTP ${listResponse.status}`);
|
|
240
|
+
}
|
|
241
|
+
const listBody = (await listResponse.json());
|
|
242
|
+
const calls = Array.isArray(listBody.result)
|
|
243
|
+
? listBody.result
|
|
244
|
+
: [];
|
|
245
|
+
const ATTEST_ACCOUNT = '0x56feed5e';
|
|
246
|
+
const match = calls.find((tx) => {
|
|
247
|
+
if (!tx.to || ethers.getAddress(tx.to) !== ethers.getAddress(source.contract))
|
|
248
|
+
return false;
|
|
249
|
+
if (!tx.input?.toLowerCase().startsWith(ATTEST_ACCOUNT) || tx.input.length < 74)
|
|
250
|
+
return false;
|
|
251
|
+
try {
|
|
252
|
+
return ethers.getAddress('0x' + tx.input.slice(34, 74)) === wanted;
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
if (!match) {
|
|
259
|
+
throw new Error(`No GIWA attestation found for ${recipientAddress} on GIWA Sepolia. ` +
|
|
260
|
+
'This is not a Coinbase attestation -- the wallet must be attested by GIWA.');
|
|
261
|
+
}
|
|
262
|
+
const rawTransaction = await fetchRawTransaction(source.rpc, match.hash);
|
|
263
|
+
return {
|
|
264
|
+
attestation: {
|
|
265
|
+
id: match.hash,
|
|
266
|
+
txid: match.hash,
|
|
267
|
+
recipient: wanted,
|
|
268
|
+
attester,
|
|
269
|
+
time: 0,
|
|
270
|
+
expirationTime: 0,
|
|
271
|
+
schemaId: '',
|
|
272
|
+
},
|
|
273
|
+
rawTransaction,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
222
276
|
export async function fetchAttestation(config, circuitId, recipientAddress) {
|
|
277
|
+
// Which chain attests THIS circuit, and how it is found. Coinbase's are
|
|
278
|
+
// indexed by EAS on Base Mainnet; GIWA's are not indexed at all, so they are
|
|
279
|
+
// read from our attester's own calls.
|
|
280
|
+
const source = attestationSource(circuitId);
|
|
281
|
+
if (source.kind === 'giwa-sepolia') {
|
|
282
|
+
return fetchGiwaAttestation(source, recipientAddress);
|
|
283
|
+
}
|
|
223
284
|
// EAS attestations are ALWAYS on Base Mainnet — never configurable
|
|
224
285
|
const easGraphqlUrl = DEFAULT_EAS_GRAPHQL;
|
|
225
286
|
const easRpcUrl = DEFAULT_EAS_RPC;
|
package/dist/attestation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attestation.js","sourceRoot":"","sources":["../src/attestation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"attestation.js","sourceRoot":"","sources":["../src/attestation.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -12,6 +12,53 @@ export declare const CIRCUITS: Record<CircuitId, {
|
|
|
12
12
|
}>;
|
|
13
13
|
export declare const COINBASE_ATTESTER_CONTRACT = "0x357458739F90461b99789350868CD7CF330Dd7EE";
|
|
14
14
|
export declare const AUTHORIZED_SIGNERS: string[];
|
|
15
|
+
/** MockGiwaAttester on GIWA Sepolia -- the `to` of a GIWA attest transaction. */
|
|
16
|
+
export declare const GIWA_ATTESTER_CONTRACT = "0x6646d970499BBeD728636823A5A7e551E811b414";
|
|
17
|
+
/** The one address that signs GIWA attest transactions. */
|
|
18
|
+
export declare const GIWA_AUTHORIZED_SIGNERS: string[];
|
|
19
|
+
/**
|
|
20
|
+
* GIWA Sepolia, where giwa_attestation is attested and verified.
|
|
21
|
+
*
|
|
22
|
+
* Constants, not configuration, for the same reason the EAS endpoints below
|
|
23
|
+
* are: a customer has no reason to point this at another chain, and letting
|
|
24
|
+
* them would only produce proofs against an attester nobody accepts.
|
|
25
|
+
*/
|
|
26
|
+
export declare const GIWA_RPC = "https://sepolia-rpc.giwa.io/";
|
|
27
|
+
export declare const GIWA_EXPLORER = "https://sepolia-explorer.giwa.io";
|
|
28
|
+
export declare const GIWA_CHAIN_ID = 91342;
|
|
29
|
+
/**
|
|
30
|
+
* Where THIS circuit's attestation lives, and who is allowed to have signed it.
|
|
31
|
+
*
|
|
32
|
+
* One table, keyed by circuit id, `Record<CircuitId, …>` so a new circuit
|
|
33
|
+
* without an entry is a compile error. It replaces three separate two-branch
|
|
34
|
+
* tests -- which attester contract, which signer list, which lookup -- each of
|
|
35
|
+
* which ended on Coinbase's values for anything that was not GIWA. That is the
|
|
36
|
+
* shape this repo bans: a circuit nobody added would not fail, it would be
|
|
37
|
+
* checked against Coinbase's attester and proved against Coinbase's signers.
|
|
38
|
+
*
|
|
39
|
+
* `null` is not "unknown": it is a circuit with no attestation transaction at
|
|
40
|
+
* all. OIDC's signature is inside the identity token.
|
|
41
|
+
*/
|
|
42
|
+
export type AttestationSource = {
|
|
43
|
+
kind: 'eas-base';
|
|
44
|
+
contract: string;
|
|
45
|
+
signers: readonly string[];
|
|
46
|
+
} | {
|
|
47
|
+
kind: 'giwa-sepolia';
|
|
48
|
+
contract: string;
|
|
49
|
+
signers: readonly string[];
|
|
50
|
+
chainId: number;
|
|
51
|
+
rpc: string;
|
|
52
|
+
explorer: string;
|
|
53
|
+
};
|
|
54
|
+
export declare const ATTESTATION_SOURCES: Record<CircuitId, AttestationSource | null>;
|
|
55
|
+
/**
|
|
56
|
+
* The attestation source for a circuit, or an error naming the circuit.
|
|
57
|
+
*
|
|
58
|
+
* Two different failures, said differently: a circuit this build has never
|
|
59
|
+
* heard of, and a circuit that genuinely has no attestation to fetch.
|
|
60
|
+
*/
|
|
61
|
+
export declare function attestationSource(circuitId: CircuitId): AttestationSource;
|
|
15
62
|
export declare const DEFAULT_EAS_GRAPHQL = "https://base.easscan.org/graphql";
|
|
16
63
|
export declare const DEFAULT_EAS_RPC = "https://base.drpc.org";
|
|
17
64
|
export declare const RAW_TX_PADDED_LENGTH = 300;
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CA2BA,CAAC;AAEF,eAAO,MAAM,0BAA0B,+CAA+C,CAAC;AAEvF,eAAO,MAAM,kBAAkB,UAK9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AAKtE,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAEvD,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,uBAAuB,KAAK,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CA2BA,CAAC;AAEF,eAAO,MAAM,0BAA0B,+CAA+C,CAAC;AAEvF,eAAO,MAAM,kBAAkB,UAK9B,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,+CAA+C,CAAC;AAEnF,2DAA2D;AAC3D,eAAO,MAAM,uBAAuB,UAAiD,CAAC;AAEtF;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,iCAAiC,CAAC;AACvD,eAAO,MAAM,aAAa,qCAAqC,CAAC;AAChE,eAAO,MAAM,aAAa,QAAQ,CAAC;AAEnC;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3H,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAyB3E,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,iBAAiB,CAazE;AAED,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AAKtE,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAEvD,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,uBAAuB,KAAK,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -39,6 +39,62 @@ export const AUTHORIZED_SIGNERS = [
|
|
|
39
39
|
'0x88fe64ea2e121f49bb77abea6c0a45e93638c3c5',
|
|
40
40
|
'0x44ace9abb148e8412ac4492e9a1ae6bd88226803',
|
|
41
41
|
];
|
|
42
|
+
/** MockGiwaAttester on GIWA Sepolia -- the `to` of a GIWA attest transaction. */
|
|
43
|
+
export const GIWA_ATTESTER_CONTRACT = '0x6646d970499BBeD728636823A5A7e551E811b414';
|
|
44
|
+
/** The one address that signs GIWA attest transactions. */
|
|
45
|
+
export const GIWA_AUTHORIZED_SIGNERS = ['0xEE099845CDfF93e73aDcBcB36A9B93578bcCed4b'];
|
|
46
|
+
/**
|
|
47
|
+
* GIWA Sepolia, where giwa_attestation is attested and verified.
|
|
48
|
+
*
|
|
49
|
+
* Constants, not configuration, for the same reason the EAS endpoints below
|
|
50
|
+
* are: a customer has no reason to point this at another chain, and letting
|
|
51
|
+
* them would only produce proofs against an attester nobody accepts.
|
|
52
|
+
*/
|
|
53
|
+
export const GIWA_RPC = 'https://sepolia-rpc.giwa.io/';
|
|
54
|
+
export const GIWA_EXPLORER = 'https://sepolia-explorer.giwa.io';
|
|
55
|
+
export const GIWA_CHAIN_ID = 91342;
|
|
56
|
+
export const ATTESTATION_SOURCES = {
|
|
57
|
+
[CIRCUIT_IDS.COINBASE_ATTESTATION]: {
|
|
58
|
+
kind: 'eas-base',
|
|
59
|
+
contract: COINBASE_ATTESTER_CONTRACT,
|
|
60
|
+
signers: AUTHORIZED_SIGNERS,
|
|
61
|
+
},
|
|
62
|
+
[CIRCUIT_IDS.COINBASE_COUNTRY_ATTESTATION]: {
|
|
63
|
+
kind: 'eas-base',
|
|
64
|
+
contract: COINBASE_ATTESTER_CONTRACT,
|
|
65
|
+
signers: AUTHORIZED_SIGNERS,
|
|
66
|
+
},
|
|
67
|
+
[CIRCUIT_IDS.ARC_ELIGIBILITY]: {
|
|
68
|
+
kind: 'eas-base',
|
|
69
|
+
contract: COINBASE_ATTESTER_CONTRACT,
|
|
70
|
+
signers: AUTHORIZED_SIGNERS,
|
|
71
|
+
},
|
|
72
|
+
[CIRCUIT_IDS.GIWA_ATTESTATION]: {
|
|
73
|
+
kind: 'giwa-sepolia',
|
|
74
|
+
contract: GIWA_ATTESTER_CONTRACT,
|
|
75
|
+
signers: GIWA_AUTHORIZED_SIGNERS,
|
|
76
|
+
chainId: GIWA_CHAIN_ID,
|
|
77
|
+
rpc: GIWA_RPC,
|
|
78
|
+
explorer: GIWA_EXPLORER,
|
|
79
|
+
},
|
|
80
|
+
[CIRCUIT_IDS.OIDC_DOMAIN_ATTESTATION]: null,
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* The attestation source for a circuit, or an error naming the circuit.
|
|
84
|
+
*
|
|
85
|
+
* Two different failures, said differently: a circuit this build has never
|
|
86
|
+
* heard of, and a circuit that genuinely has no attestation to fetch.
|
|
87
|
+
*/
|
|
88
|
+
export function attestationSource(circuitId) {
|
|
89
|
+
if (!(circuitId in ATTESTATION_SOURCES)) {
|
|
90
|
+
throw new Error(`Unknown circuit '${circuitId}'. Known: ${Object.keys(ATTESTATION_SOURCES).join(', ')}.`);
|
|
91
|
+
}
|
|
92
|
+
const source = ATTESTATION_SOURCES[circuitId];
|
|
93
|
+
if (!source) {
|
|
94
|
+
throw new Error(`'${circuitId}' has no on-chain attestation to fetch -- its signature is inside the identity token.`);
|
|
95
|
+
}
|
|
96
|
+
return source;
|
|
97
|
+
}
|
|
42
98
|
export const DEFAULT_EAS_GRAPHQL = 'https://base.easscan.org/graphql';
|
|
43
99
|
// Use drpc.org instead of mainnet.base.org: the latter prunes transactions
|
|
44
100
|
// older than ~30 days, so eth_getTransactionByHash returns null for any
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAKhB;IACH,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE;QAClC,WAAW,EAAE,cAAc;QAC3B,WAAW,EAAE,oEAAoE;QACjF,gBAAgB,EAAE,YAAY;KAC/B;IACD,CAAC,WAAW,CAAC,4BAA4B,CAAC,EAAE;QAC1C,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,oEAAoE;QACjF,gBAAgB,EAAE,YAAY;KAC/B;IACD,CAAC,WAAW,CAAC,uBAAuB,CAAC,EAAE;QACrC,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,MAAM;KAClB;IACD,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE;QAC7B,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,oEAAoE;QACjF,gBAAgB,EAAE,YAAY;KAC/B;IACD,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE;QAC9B,WAAW,EAAE,kBAAkB;QAC/B,yEAAyE;QACzE,yEAAyE;QACzE,6CAA6C;QAC7C,gBAAgB,EAAE,YAAY;KAC/B;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,4CAA4C,CAAC;AAEvF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,4CAA4C;IAC5C,4CAA4C;IAC5C,4CAA4C;IAC5C,4CAA4C;CAC7C,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AACtE,2EAA2E;AAC3E,wEAAwE;AACxE,+EAA+E;AAC/E,2DAA2D;AAC3D,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/inputs.d.ts
CHANGED
|
@@ -31,6 +31,23 @@ export declare function computeScope(scopeString: string): Uint8Array;
|
|
|
31
31
|
* Compute nullifier = keccak256(keccak256(address + signalHash) + scope)
|
|
32
32
|
*/
|
|
33
33
|
export declare function computeNullifier(userAddress: string, signalHash: Uint8Array, scopeBytes: Uint8Array): Uint8Array;
|
|
34
|
+
/**
|
|
35
|
+
* Compute nullifier = keccak256(keccak256(address + keccak256(circuitId)) + scope)
|
|
36
|
+
*
|
|
37
|
+
* The wallet and a constant compiled into the circuit, and NOT `signal_hash`.
|
|
38
|
+
* The circuits that can bind an action derive it this way because they must:
|
|
39
|
+
* `signal_hash` is empty in action mode, so a nullifier taken from it would
|
|
40
|
+
* give one wallet two identities in one scope depending on how it asked. It
|
|
41
|
+
* was already wrong before those circuits branched — nothing constrains
|
|
42
|
+
* `signal_hash` there, so varying bytes minted identities.
|
|
43
|
+
*
|
|
44
|
+
* MUST match `verify_wallet_nullifier` in the circuit library and
|
|
45
|
+
* `computeWalletNullifier` in the server's input builder. When they disagree
|
|
46
|
+
* the proof fails with "Nullifier mismatch" and nothing names this function.
|
|
47
|
+
*/
|
|
48
|
+
export declare function computeWalletNullifier(userAddress: string, circuitId: string, scopeBytes: Uint8Array): Uint8Array;
|
|
49
|
+
/** The nullifier this circuit expects, by its own rule. */
|
|
50
|
+
export declare function nullifierForCircuit(circuitId: CircuitId, userAddress: string, signalHash: Uint8Array, scopeBytes: Uint8Array): Uint8Array;
|
|
34
51
|
/**
|
|
35
52
|
* Prepare all inputs for POST /prove.
|
|
36
53
|
*
|
package/dist/inputs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../src/inputs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../src/inputs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAevE;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAOhD;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAKjF;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,UAAU,CAMZ;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,GACpB,MAAM,CAKR;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAE5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,GACrB,UAAU,CAQZ;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,GACrB,UAAU,CAMZ;AAiBD,2DAA2D;AAC3D,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,GACrB,UAAU,CAaZ;AA4ED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE;IAChE,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,WAAW,CAAC,CAoGvB"}
|
package/dist/inputs.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import { CIRCUIT_IDS } from './circuits.js';
|
|
3
|
-
import { CIRCUITS, MERKLE_PROOF_MAX_DEPTH, COUNTRY_LIST_MAX_LENGTH } from './constants.js';
|
|
3
|
+
import { CIRCUITS, MERKLE_PROOF_MAX_DEPTH, COUNTRY_LIST_MAX_LENGTH, attestationSource, } from './constants.js';
|
|
4
4
|
import { fetchAttestation, recoverAttesterPubkey, getSignerAddress } from './attestation.js';
|
|
5
5
|
import { findSignerIndex, buildSignerMerkleTree } from './merkle.js';
|
|
6
6
|
// ─── Utility functions ──────────────────────────────────────────────────
|
|
@@ -60,6 +60,52 @@ export function computeNullifier(userAddress, signalHash, scopeBytes) {
|
|
|
60
60
|
const userSecret = ethers.getBytes(ethers.keccak256(ethers.concat([userAddressBytes, signalHash])));
|
|
61
61
|
return ethers.getBytes(ethers.keccak256(ethers.concat([userSecret, scopeBytes])));
|
|
62
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Compute nullifier = keccak256(keccak256(address + keccak256(circuitId)) + scope)
|
|
65
|
+
*
|
|
66
|
+
* The wallet and a constant compiled into the circuit, and NOT `signal_hash`.
|
|
67
|
+
* The circuits that can bind an action derive it this way because they must:
|
|
68
|
+
* `signal_hash` is empty in action mode, so a nullifier taken from it would
|
|
69
|
+
* give one wallet two identities in one scope depending on how it asked. It
|
|
70
|
+
* was already wrong before those circuits branched — nothing constrains
|
|
71
|
+
* `signal_hash` there, so varying bytes minted identities.
|
|
72
|
+
*
|
|
73
|
+
* MUST match `verify_wallet_nullifier` in the circuit library and
|
|
74
|
+
* `computeWalletNullifier` in the server's input builder. When they disagree
|
|
75
|
+
* the proof fails with "Nullifier mismatch" and nothing names this function.
|
|
76
|
+
*/
|
|
77
|
+
export function computeWalletNullifier(userAddress, circuitId, scopeBytes) {
|
|
78
|
+
const circuitTag = ethers.getBytes(ethers.keccak256(ethers.toUtf8Bytes(circuitId)));
|
|
79
|
+
const userSecret = ethers.getBytes(ethers.keccak256(ethers.concat([ethers.getBytes(userAddress), circuitTag])));
|
|
80
|
+
return ethers.getBytes(ethers.keccak256(ethers.concat([userSecret, scopeBytes])));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Which nullifier each circuit expects. A table rather than a test on the id,
|
|
84
|
+
* so a circuit nobody thought about is an error instead of whichever formula
|
|
85
|
+
* the last branch held.
|
|
86
|
+
*/
|
|
87
|
+
const NULLIFIER_RULE = {
|
|
88
|
+
[CIRCUIT_IDS.COINBASE_ATTESTATION]: 'wallet-and-signal-hash',
|
|
89
|
+
[CIRCUIT_IDS.COINBASE_COUNTRY_ATTESTATION]: 'wallet-and-signal-hash',
|
|
90
|
+
[CIRCUIT_IDS.ARC_ELIGIBILITY]: 'wallet-and-circuit-tag',
|
|
91
|
+
[CIRCUIT_IDS.GIWA_ATTESTATION]: 'wallet-and-circuit-tag',
|
|
92
|
+
// OIDC's nullifier is derived inside the OIDC payload builder, from the
|
|
93
|
+
// identity token; this function is never asked for it.
|
|
94
|
+
[CIRCUIT_IDS.OIDC_DOMAIN_ATTESTATION]: 'built-from-the-token',
|
|
95
|
+
};
|
|
96
|
+
/** The nullifier this circuit expects, by its own rule. */
|
|
97
|
+
export function nullifierForCircuit(circuitId, userAddress, signalHash, scopeBytes) {
|
|
98
|
+
const rule = NULLIFIER_RULE[circuitId];
|
|
99
|
+
if (!rule) {
|
|
100
|
+
throw new Error(`No nullifier rule for circuit '${circuitId}'. Known: ${Object.keys(NULLIFIER_RULE).join(', ')}.`);
|
|
101
|
+
}
|
|
102
|
+
if (rule === 'built-from-the-token') {
|
|
103
|
+
throw new Error(`'${circuitId}' builds its nullifier from the identity token, not from a wallet signature.`);
|
|
104
|
+
}
|
|
105
|
+
return rule === 'wallet-and-circuit-tag'
|
|
106
|
+
? computeWalletNullifier(userAddress, circuitId, scopeBytes)
|
|
107
|
+
: computeNullifier(userAddress, signalHash, scopeBytes);
|
|
108
|
+
}
|
|
63
109
|
// ─── Internal helpers for input assembly ────────────────────────────────
|
|
64
110
|
/**
|
|
65
111
|
* Pad a byte array to a target length with trailing zeros.
|
|
@@ -187,12 +233,13 @@ export async function prepareInputs(config, params) {
|
|
|
187
233
|
const attesterPubkey = recoverAttesterPubkey(attestationData.rawTransaction);
|
|
188
234
|
const attesterAddress = getSignerAddress(attesterPubkey);
|
|
189
235
|
const { x: attesterPubkeyX, y: attesterPubkeyY } = extractPubkeyCoordinates(attesterPubkey);
|
|
190
|
-
// Step 5: Build Merkle tree
|
|
191
|
-
const
|
|
192
|
-
const
|
|
193
|
-
|
|
236
|
+
// Step 5: Build Merkle tree over the signers THIS circuit accepts.
|
|
237
|
+
const { signers } = attestationSource(circuitId);
|
|
238
|
+
const signerIndex = findSignerIndex(attesterAddress, signers);
|
|
239
|
+
const merkleData = buildSignerMerkleTree(signerIndex, signers);
|
|
240
|
+
// Step 6: Compute scope and the nullifier THIS circuit expects
|
|
194
241
|
const scopeBytes = computeScope(scope);
|
|
195
|
-
const nullifierBytes =
|
|
242
|
+
const nullifierBytes = nullifierForCircuit(circuitId, userAddress, signalHash, scopeBytes);
|
|
196
243
|
// Step 7: Convert raw TX to byte array
|
|
197
244
|
const rawTxBytes = hexToBytes(attestationData.rawTransaction);
|
|
198
245
|
const txLength = rawTxBytes.length;
|
package/dist/inputs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputs.js","sourceRoot":"","sources":["../src/inputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"inputs.js","sourceRoot":"","sources":["../src/inputs.ts"],"names":[],"mappings":"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"}
|
package/dist/merkle.d.ts
CHANGED
|
@@ -21,11 +21,11 @@ export declare class SimpleMerkleTree {
|
|
|
21
21
|
* Find the index of a signer address in the authorized signers list.
|
|
22
22
|
* Case-insensitive comparison.
|
|
23
23
|
*/
|
|
24
|
-
export declare function findSignerIndex(signerAddress: string): number;
|
|
24
|
+
export declare function findSignerIndex(signerAddress: string, signers: readonly string[]): number;
|
|
25
25
|
/**
|
|
26
26
|
* Build a Merkle tree from authorized signers and get proof for the given signer index.
|
|
27
27
|
*/
|
|
28
|
-
export declare function buildSignerMerkleTree(signerIndex: number): {
|
|
28
|
+
export declare function buildSignerMerkleTree(signerIndex: number, signers: readonly string[]): {
|
|
29
29
|
root: string;
|
|
30
30
|
proof: string[];
|
|
31
31
|
leafIndex: number;
|
package/dist/merkle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../src/merkle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../src/merkle.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,MAAM,CAAa;gBAEf,SAAS,EAAE,MAAM,EAAE;IA+B/B,OAAO,IAAI,MAAM;IAIjB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IA8B9E,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAMnC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,EAMrB,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,CAUR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG;IACtF,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAMA"}
|
package/dist/merkle.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
|
-
import { AUTHORIZED_SIGNERS } from './constants.js';
|
|
3
2
|
/**
|
|
4
3
|
* Simple binary Merkle tree for signer verification.
|
|
5
4
|
*
|
|
@@ -76,8 +75,14 @@ export class SimpleMerkleTree {
|
|
|
76
75
|
* Find the index of a signer address in the authorized signers list.
|
|
77
76
|
* Case-insensitive comparison.
|
|
78
77
|
*/
|
|
79
|
-
export function findSignerIndex(signerAddress
|
|
80
|
-
|
|
78
|
+
export function findSignerIndex(signerAddress,
|
|
79
|
+
/*
|
|
80
|
+
* Required, with no default. It defaulted to Coinbase's four, which meant a
|
|
81
|
+
* caller that forgot to pass GIWA's single signer got "signer not authorized"
|
|
82
|
+
* naming an address that IS authorized -- for the other chain.
|
|
83
|
+
*/
|
|
84
|
+
signers) {
|
|
85
|
+
const index = signers.findIndex(addr => addr.toLowerCase() === signerAddress.toLowerCase());
|
|
81
86
|
if (index === -1) {
|
|
82
87
|
throw new Error(`Signer ${signerAddress} is not in the authorized signers list`);
|
|
83
88
|
}
|
|
@@ -86,8 +91,8 @@ export function findSignerIndex(signerAddress) {
|
|
|
86
91
|
/**
|
|
87
92
|
* Build a Merkle tree from authorized signers and get proof for the given signer index.
|
|
88
93
|
*/
|
|
89
|
-
export function buildSignerMerkleTree(signerIndex) {
|
|
90
|
-
const tree = new SimpleMerkleTree(
|
|
94
|
+
export function buildSignerMerkleTree(signerIndex, signers) {
|
|
95
|
+
const tree = new SimpleMerkleTree([...signers]);
|
|
91
96
|
const root = tree.getRoot();
|
|
92
97
|
const { proof, leafIndex, depth } = tree.getProof(signerIndex);
|
|
93
98
|
return { root, proof, leafIndex, depth };
|
package/dist/merkle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merkle.js","sourceRoot":"","sources":["../src/merkle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"merkle.js","sourceRoot":"","sources":["../src/merkle.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zkproofport-ai/sdk",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.14",
|
|
4
4
|
"description": "TypeScript SDK for ZKProofport identity proofs and experimental Arc Testnet EIP-712 action authorization. Circle Agent Wallet payments, Circle Gateway nanopayments and x402 USDC; Coinbase KYC, country and OIDC proofs.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sdk",
|