@zkproofport-ai/sdk 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/README.md +437 -0
- package/dist/attestation.d.ts +60 -0
- package/dist/attestation.d.ts.map +1 -0
- package/dist/attestation.js +220 -0
- package/dist/attestation.js.map +1 -0
- package/dist/cdp.d.ts +44 -0
- package/dist/cdp.d.ts.map +1 -0
- package/dist/cdp.js +89 -0
- package/dist/cdp.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +25 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +18 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +29 -0
- package/dist/constants.js.map +1 -0
- package/dist/flow.d.ts +19 -0
- package/dist/flow.d.ts.map +1 -0
- package/dist/flow.js +82 -0
- package/dist/flow.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/inputs.d.ts +56 -0
- package/dist/inputs.d.ts.map +1 -0
- package/dist/inputs.js +204 -0
- package/dist/inputs.js.map +1 -0
- package/dist/merkle.d.ts +34 -0
- package/dist/merkle.d.ts.map +1 -0
- package/dist/merkle.js +95 -0
- package/dist/merkle.js.map +1 -0
- package/dist/payment.d.ts +15 -0
- package/dist/payment.d.ts.map +1 -0
- package/dist/payment.js +114 -0
- package/dist/payment.js.map +1 -0
- package/dist/prove.d.ts +12 -0
- package/dist/prove.d.ts.map +1 -0
- package/dist/prove.js +25 -0
- package/dist/prove.js.map +1 -0
- package/dist/session.d.ts +8 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +20 -0
- package/dist/session.js.map +1 -0
- package/dist/signer.d.ts +69 -0
- package/dist/signer.d.ts.map +1 -0
- package/dist/signer.js +51 -0
- package/dist/signer.js.map +1 -0
- package/dist/types.d.ts +136 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/verify.d.ts +29 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +56 -0
- package/dist/verify.js.map +1 -0
- package/package.json +34 -0
package/dist/signer.d.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
/**
|
|
3
|
+
* Abstract signer interface for ProofPort proof generation.
|
|
4
|
+
* Enables different wallet providers (ethers.Wallet, CDP MPC, viem, etc.)
|
|
5
|
+
*/
|
|
6
|
+
export interface ProofportSigner {
|
|
7
|
+
getAddress(): string | Promise<string>;
|
|
8
|
+
signMessage(message: Uint8Array): Promise<string>;
|
|
9
|
+
signTypedData(domain: {
|
|
10
|
+
name: string;
|
|
11
|
+
version: string;
|
|
12
|
+
chainId: number;
|
|
13
|
+
verifyingContract: string;
|
|
14
|
+
}, types: Record<string, Array<{
|
|
15
|
+
name: string;
|
|
16
|
+
type: string;
|
|
17
|
+
}>>, message: Record<string, unknown>): Promise<string>;
|
|
18
|
+
sendTransaction(tx: {
|
|
19
|
+
to: string;
|
|
20
|
+
data: string;
|
|
21
|
+
value?: bigint;
|
|
22
|
+
}): Promise<{
|
|
23
|
+
hash: string;
|
|
24
|
+
wait(): Promise<{
|
|
25
|
+
status: number | null;
|
|
26
|
+
}>;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Adapter wrapping ethers.Wallet to implement ProofportSigner.
|
|
31
|
+
*/
|
|
32
|
+
export declare class EthersWalletSigner implements ProofportSigner {
|
|
33
|
+
private wallet;
|
|
34
|
+
constructor(wallet: ethers.Wallet);
|
|
35
|
+
getAddress(): string;
|
|
36
|
+
signMessage(message: Uint8Array): Promise<string>;
|
|
37
|
+
signTypedData(domain: {
|
|
38
|
+
name: string;
|
|
39
|
+
version: string;
|
|
40
|
+
chainId: number;
|
|
41
|
+
verifyingContract: string;
|
|
42
|
+
}, types: Record<string, Array<{
|
|
43
|
+
name: string;
|
|
44
|
+
type: string;
|
|
45
|
+
}>>, message: Record<string, unknown>): Promise<string>;
|
|
46
|
+
sendTransaction(tx: {
|
|
47
|
+
to: string;
|
|
48
|
+
data: string;
|
|
49
|
+
value?: bigint;
|
|
50
|
+
}): Promise<{
|
|
51
|
+
hash: string;
|
|
52
|
+
wait(): Promise<{
|
|
53
|
+
status: number | null;
|
|
54
|
+
}>;
|
|
55
|
+
}>;
|
|
56
|
+
/** Get the underlying ethers.Wallet (for cases needing direct access) */
|
|
57
|
+
getWallet(): ethers.Wallet;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create a ProofportSigner from an ethers.Wallet.
|
|
61
|
+
* Convenience factory for the most common case.
|
|
62
|
+
*/
|
|
63
|
+
export declare function fromEthersWallet(wallet: ethers.Wallet): ProofportSigner;
|
|
64
|
+
/**
|
|
65
|
+
* Create a ProofportSigner from a private key string.
|
|
66
|
+
* Optionally connects to a provider for transaction sending.
|
|
67
|
+
*/
|
|
68
|
+
export declare function fromPrivateKey(privateKey: string, provider?: ethers.Provider): ProofportSigner;
|
|
69
|
+
//# sourceMappingURL=signer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,aAAa,CACX,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,EACD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,EAC5D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,eAAe,CAAC,EAAE,EAAE;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,IAAI,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CAC3E;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,MAAM,CAAC,MAAM;IAIjC,UAAU,IAAI,MAAM;IAId,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjD,aAAa,CACjB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,EACD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,EAC5D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC;IAIZ,eAAe,CAAC,EAAE,EAAE;QACxB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,IAAI,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAWzE,yEAAyE;IACzE,SAAS,IAAI,MAAM,CAAC,MAAM;CAG3B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,eAAe,CAEvE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,GAAG,eAAe,CAK9F"}
|
package/dist/signer.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
/**
|
|
3
|
+
* Adapter wrapping ethers.Wallet to implement ProofportSigner.
|
|
4
|
+
*/
|
|
5
|
+
export class EthersWalletSigner {
|
|
6
|
+
wallet;
|
|
7
|
+
constructor(wallet) {
|
|
8
|
+
this.wallet = wallet;
|
|
9
|
+
}
|
|
10
|
+
getAddress() {
|
|
11
|
+
return this.wallet.address;
|
|
12
|
+
}
|
|
13
|
+
async signMessage(message) {
|
|
14
|
+
return this.wallet.signMessage(message);
|
|
15
|
+
}
|
|
16
|
+
async signTypedData(domain, types, message) {
|
|
17
|
+
return this.wallet.signTypedData(domain, types, message);
|
|
18
|
+
}
|
|
19
|
+
async sendTransaction(tx) {
|
|
20
|
+
const response = await this.wallet.sendTransaction(tx);
|
|
21
|
+
return {
|
|
22
|
+
hash: response.hash,
|
|
23
|
+
wait: async () => {
|
|
24
|
+
const receipt = await response.wait();
|
|
25
|
+
return { status: receipt?.status ?? null };
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** Get the underlying ethers.Wallet (for cases needing direct access) */
|
|
30
|
+
getWallet() {
|
|
31
|
+
return this.wallet;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a ProofportSigner from an ethers.Wallet.
|
|
36
|
+
* Convenience factory for the most common case.
|
|
37
|
+
*/
|
|
38
|
+
export function fromEthersWallet(wallet) {
|
|
39
|
+
return new EthersWalletSigner(wallet);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create a ProofportSigner from a private key string.
|
|
43
|
+
* Optionally connects to a provider for transaction sending.
|
|
44
|
+
*/
|
|
45
|
+
export function fromPrivateKey(privateKey, provider) {
|
|
46
|
+
const wallet = provider
|
|
47
|
+
? new ethers.Wallet(privateKey, provider)
|
|
48
|
+
: new ethers.Wallet(privateKey);
|
|
49
|
+
return new EthersWalletSigner(wallet);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=signer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AA0BhC;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAgB;IAE9B,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAmB;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,MAKC,EACD,KAA4D,EAC5D,OAAgC;QAEhC,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EAIrB;QACC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACvD,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACtC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC;YAC7C,CAAC;SACF,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,QAA0B;IAC3E,MAAM,MAAM,GAAG,QAAQ;QACrB,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC;QACzC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAClC,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/** Client-friendly circuit aliases. */
|
|
2
|
+
export type CircuitName = 'coinbase_kyc' | 'coinbase_country';
|
|
3
|
+
/** Canonical circuit IDs matching Nargo.toml names. */
|
|
4
|
+
export type CircuitId = 'coinbase_attestation' | 'coinbase_country_attestation';
|
|
5
|
+
/** Map client-friendly names to canonical circuit IDs. */
|
|
6
|
+
export declare const CIRCUIT_NAME_MAP: Record<CircuitName, CircuitId>;
|
|
7
|
+
/** Map canonical circuit IDs back to client-friendly names. */
|
|
8
|
+
export declare const CIRCUIT_ID_MAP: Record<CircuitId, CircuitName>;
|
|
9
|
+
export interface ClientConfig {
|
|
10
|
+
/** proofport-ai server URL (e.g. https://stg-ai.zkproofport.app) */
|
|
11
|
+
baseUrl: string;
|
|
12
|
+
/** Base Mainnet RPC for EAS attestation fetching */
|
|
13
|
+
easRpcUrl?: string;
|
|
14
|
+
/** EAS GraphQL endpoint */
|
|
15
|
+
easGraphqlUrl?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface PaymentInfo {
|
|
18
|
+
nonce: string;
|
|
19
|
+
recipient: string;
|
|
20
|
+
amount: number;
|
|
21
|
+
asset: string;
|
|
22
|
+
network: string;
|
|
23
|
+
instruction: string;
|
|
24
|
+
}
|
|
25
|
+
export interface PaymentRequirements {
|
|
26
|
+
scheme: string;
|
|
27
|
+
network: string;
|
|
28
|
+
maxAmountRequired: string;
|
|
29
|
+
resource: string;
|
|
30
|
+
description: string;
|
|
31
|
+
mimeType: string;
|
|
32
|
+
payTo: string;
|
|
33
|
+
extra: {
|
|
34
|
+
name: string;
|
|
35
|
+
version: string;
|
|
36
|
+
nonce: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export interface ChallengeResponse {
|
|
40
|
+
error: string;
|
|
41
|
+
message: string;
|
|
42
|
+
nonce: string;
|
|
43
|
+
payment: PaymentRequirements;
|
|
44
|
+
}
|
|
45
|
+
export interface ProveInputs {
|
|
46
|
+
signal_hash: string;
|
|
47
|
+
nullifier: string;
|
|
48
|
+
scope_bytes: string;
|
|
49
|
+
merkle_root: string;
|
|
50
|
+
user_address: string;
|
|
51
|
+
signature: string;
|
|
52
|
+
user_pubkey_x: string;
|
|
53
|
+
user_pubkey_y: string;
|
|
54
|
+
raw_transaction: string;
|
|
55
|
+
tx_length: number;
|
|
56
|
+
coinbase_attester_pubkey_x: string;
|
|
57
|
+
coinbase_attester_pubkey_y: string;
|
|
58
|
+
merkle_proof: string[];
|
|
59
|
+
leaf_index: number;
|
|
60
|
+
depth: number;
|
|
61
|
+
country_list?: string[];
|
|
62
|
+
is_included?: boolean;
|
|
63
|
+
}
|
|
64
|
+
export interface ProveRequest {
|
|
65
|
+
circuit: CircuitName;
|
|
66
|
+
inputs: ProveInputs;
|
|
67
|
+
}
|
|
68
|
+
export interface ProveResponse {
|
|
69
|
+
proof: string;
|
|
70
|
+
publicInputs: string;
|
|
71
|
+
proofWithInputs: string;
|
|
72
|
+
attestation: {
|
|
73
|
+
document: string;
|
|
74
|
+
proof_hash: string;
|
|
75
|
+
verification: {
|
|
76
|
+
rootCaValid: boolean;
|
|
77
|
+
chainValid: boolean;
|
|
78
|
+
signatureValid: boolean;
|
|
79
|
+
pcrs: Record<number, string>;
|
|
80
|
+
};
|
|
81
|
+
} | null;
|
|
82
|
+
timing: {
|
|
83
|
+
totalMs: number;
|
|
84
|
+
paymentVerifyMs?: number;
|
|
85
|
+
inputBuildMs?: number;
|
|
86
|
+
proveMs?: number;
|
|
87
|
+
};
|
|
88
|
+
verification: {
|
|
89
|
+
chainId: number;
|
|
90
|
+
verifierAddress: string;
|
|
91
|
+
rpcUrl: string;
|
|
92
|
+
} | null;
|
|
93
|
+
}
|
|
94
|
+
export interface VerifyResult {
|
|
95
|
+
valid: boolean;
|
|
96
|
+
transactionHash?: string;
|
|
97
|
+
error?: string;
|
|
98
|
+
}
|
|
99
|
+
export interface EASAttestation {
|
|
100
|
+
id: string;
|
|
101
|
+
txid: string;
|
|
102
|
+
recipient: string;
|
|
103
|
+
attester: string;
|
|
104
|
+
time: number;
|
|
105
|
+
expirationTime: number;
|
|
106
|
+
schemaId: string;
|
|
107
|
+
}
|
|
108
|
+
export interface AttestationData {
|
|
109
|
+
attestation: EASAttestation;
|
|
110
|
+
rawTransaction: string;
|
|
111
|
+
}
|
|
112
|
+
export interface ProofParams {
|
|
113
|
+
circuit: CircuitName;
|
|
114
|
+
/** Scope string for the proof (defaults to "proofport") */
|
|
115
|
+
scope?: string;
|
|
116
|
+
/** Country codes for the country circuit (e.g. ["US", "KR"]) */
|
|
117
|
+
countryList?: string[];
|
|
118
|
+
/** Whether the country list is an inclusion or exclusion list */
|
|
119
|
+
isIncluded?: boolean;
|
|
120
|
+
}
|
|
121
|
+
export interface ProofResult {
|
|
122
|
+
proof: string;
|
|
123
|
+
publicInputs: string;
|
|
124
|
+
proofWithInputs: string;
|
|
125
|
+
paymentTxHash: string;
|
|
126
|
+
attestation: ProveResponse['attestation'];
|
|
127
|
+
timing: ProveResponse['timing'];
|
|
128
|
+
verification: ProveResponse['verification'];
|
|
129
|
+
}
|
|
130
|
+
export interface StepResult<T = unknown> {
|
|
131
|
+
step: number;
|
|
132
|
+
name: string;
|
|
133
|
+
data: T;
|
|
134
|
+
durationMs: number;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// ─── Circuit name mappings ──────────────────────────────────────────────
|
|
2
|
+
/** Map client-friendly names to canonical circuit IDs. */
|
|
3
|
+
export const CIRCUIT_NAME_MAP = {
|
|
4
|
+
coinbase_kyc: 'coinbase_attestation',
|
|
5
|
+
coinbase_country: 'coinbase_country_attestation',
|
|
6
|
+
};
|
|
7
|
+
/** Map canonical circuit IDs back to client-friendly names. */
|
|
8
|
+
export const CIRCUIT_ID_MAP = {
|
|
9
|
+
coinbase_attestation: 'coinbase_kyc',
|
|
10
|
+
coinbase_country_attestation: 'coinbase_country',
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAQ3E,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAmC;IAC9D,YAAY,EAAE,sBAAsB;IACpC,gBAAgB,EAAE,8BAA8B;CACjD,CAAC;AAEF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAmC;IAC5D,oBAAoB,EAAE,cAAc;IACpC,4BAA4B,EAAE,kBAAkB;CACjD,CAAC"}
|
package/dist/verify.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { VerifyResult, ProveResponse } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Verify a ZK proof on-chain using server-provided verification info.
|
|
4
|
+
*
|
|
5
|
+
* @param verification - Chain info from ProveResponse (chainId, verifierAddress, rpcUrl)
|
|
6
|
+
* @param proof - Raw proof hex
|
|
7
|
+
* @param publicInputs - Concatenated public inputs hex
|
|
8
|
+
*/
|
|
9
|
+
export declare function verifyOnChain(verification: {
|
|
10
|
+
chainId: number;
|
|
11
|
+
verifierAddress: string;
|
|
12
|
+
rpcUrl: string;
|
|
13
|
+
}, proof: string, publicInputs: string): Promise<VerifyResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Verify a proof using the verification info from a ProveResponse.
|
|
16
|
+
* Convenience wrapper that extracts verification data from the prove result.
|
|
17
|
+
*
|
|
18
|
+
* @param result - The full ProveResponse from generateProof()
|
|
19
|
+
* @returns VerifyResult
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const result = await generateProof(config, signers, params);
|
|
24
|
+
* const verified = await verifyProof(result);
|
|
25
|
+
* console.log(verified.valid); // true
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function verifyProof(result: ProveResponse): Promise<VerifyResult>;
|
|
29
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAkB9D;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC1E,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC,CAYvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAK9E"}
|
package/dist/verify.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
const VERIFIER_ABI = [
|
|
3
|
+
'function verify(bytes calldata _proof, bytes32[] calldata _publicInputs) external view returns (bool)',
|
|
4
|
+
];
|
|
5
|
+
/**
|
|
6
|
+
* Split concatenated public inputs hex into array of bytes32 values.
|
|
7
|
+
*/
|
|
8
|
+
function splitPublicInputs(publicInputsHex) {
|
|
9
|
+
const hex = publicInputsHex.startsWith('0x') ? publicInputsHex.slice(2) : publicInputsHex;
|
|
10
|
+
const chunks = [];
|
|
11
|
+
for (let i = 0; i < hex.length; i += 64) {
|
|
12
|
+
chunks.push('0x' + hex.slice(i, i + 64));
|
|
13
|
+
}
|
|
14
|
+
return chunks;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Verify a ZK proof on-chain using server-provided verification info.
|
|
18
|
+
*
|
|
19
|
+
* @param verification - Chain info from ProveResponse (chainId, verifierAddress, rpcUrl)
|
|
20
|
+
* @param proof - Raw proof hex
|
|
21
|
+
* @param publicInputs - Concatenated public inputs hex
|
|
22
|
+
*/
|
|
23
|
+
export async function verifyOnChain(verification, proof, publicInputs) {
|
|
24
|
+
const provider = new ethers.JsonRpcProvider(verification.rpcUrl);
|
|
25
|
+
const verifier = new ethers.Contract(verification.verifierAddress, VERIFIER_ABI, provider);
|
|
26
|
+
const publicInputsArray = splitPublicInputs(publicInputs);
|
|
27
|
+
try {
|
|
28
|
+
const result = await verifier.verify(proof, publicInputsArray);
|
|
29
|
+
return { valid: result === true };
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
33
|
+
return { valid: false, error: `On-chain verification failed: ${message}` };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Verify a proof using the verification info from a ProveResponse.
|
|
38
|
+
* Convenience wrapper that extracts verification data from the prove result.
|
|
39
|
+
*
|
|
40
|
+
* @param result - The full ProveResponse from generateProof()
|
|
41
|
+
* @returns VerifyResult
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const result = await generateProof(config, signers, params);
|
|
46
|
+
* const verified = await verifyProof(result);
|
|
47
|
+
* console.log(verified.valid); // true
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export async function verifyProof(result) {
|
|
51
|
+
if (!result.verification) {
|
|
52
|
+
return { valid: false, error: 'No verification info in response (verifier not deployed on this network)' };
|
|
53
|
+
}
|
|
54
|
+
return verifyOnChain(result.verification, result.proof, result.publicInputs);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,YAAY,GAAG;IACnB,uGAAuG;CACxG,CAAC;AAEF;;GAEG;AACH,SAAS,iBAAiB,CAAC,eAAuB;IAChD,MAAM,GAAG,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;IAC1F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAA0E,EAC1E,KAAa,EACb,YAAoB;IAEpB,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC3F,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAE1D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;IACpC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,OAAO,EAAE,EAAE,CAAC;IAC7E,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAqB;IACrD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,0EAA0E,EAAE,CAAC;IAC7G,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;AAC/E,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zkproofport-ai/sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Client SDK for ZKProofport proof generation",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"typecheck": "tsc --noEmit"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"ethers": "^6.13.0"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"typescript": "^5.6.0"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"README.md"
|
|
27
|
+
],
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/zkproofport/proofport-ai",
|
|
32
|
+
"directory": "packages/sdk"
|
|
33
|
+
}
|
|
34
|
+
}
|