# etherlime zk

In order to start a project with Zero Knowledge Proof, please refer to [etherlime init command](https://etherlime.readthedocs.io/en/latest/cli/init.html#).

Available Commands:

## Circuit Compilation

> * `etherlime zk compile` Running this command will compile a circuit
>
>   file located in `zero-knowledge-proof/circuits` and generates a
>
>   new folder `compiled-circuits`.

## Establish Trusted Setup

> * `etherlime zk setup` Running this command will establish a trusted
>
>   setup based on compiled circuit and generates a folder \`trusted
>
>   setup`with`proving\_key`and`verification\_key\`. The command
>
>   reads the compiled circuit from
>
>   `zero-knowledge-proof/compiled-circuits`.

## Generate ZK Proof

> * `etherlime zk proof [signal] [circuit] [provingKey]` Running this
>
>   command will generates a proof based on compiled circuit, public
>
>   signal input and proving key. A new folder `generated-proof` is
>
>   generated with `proof` and `public_signals`. This proof can be
>
>   used for off-chain Zero-Knowledge-Proof verification.
>
>   > * Parameters:
>   >   * `signal` - \[Optional] Specifies the file with public
>   >
>   >     signals input to be used for generating a proof.
>   >
>   >     Defaults to `input.json` read from
>   >
>   >     `zero-knowledge-proof/input` folder.
>   >   * `circuit` - \[Optional] Specifies the compiled circuit
>   >
>   >     for checking of matched signals. Defaults to:
>   >
>   >     `circuit.json` read from
>   >
>   >     `zero-knowledge-proof/compiled-circuits` folder.
>   >   * `provingKey` - \[Optional] Specifies the prooving key
>   >
>   >     to be used for generating a proof. Defaults to:
>   >
>   >     `circuit_proving_key.json` read from
>   >
>   >     `zero-knowledge-proof/trusted-setup` folder.

## Verify Proof (Off-chain)

> * `etherlime zk verify [publicSignals] [proof] [verifierKey]`
>
>   Running this command will generates a verifier based on public
>
>   signals file that comes out of the proof command, the proof itself
>
>   and verifier key. A new folder `verified-proof` is generated with
>
>   `output.json` file.
>
>   > * Parameters:
>   >   * `publicSignals` - \[Optional] Specifies the file with
>   >
>   >     signals to be used for generating verifying a proof.
>   >
>   >     Defaults to `circuit_public_signals.json` read from
>   >
>   >     `zero-knowledge-proof/generated-proof` folder.
>   >   * `proof` - \[Optional] Specifies the compiled proof that
>   >
>   >     would be used for generating a proof based on it.
>   >
>   >     Defaults to: `circuit_proof.json` read from
>   >
>   >     `zero-knowledge-proof/generated-proof` folder.
>   >   * `verifierKey` - \[Optional] Specifies the verifier key
>   >
>   >     to be used for generating a proof. Defaults to:
>   >
>   >     `circuit_verification_key.json` read from
>   >
>   >     `zero-knowledge-proof/trusted-setup` folder.
>   >   * `output.json` file has two params:
>   >     * `verified` - whatever the proof is verified or not
>   >     * `timestamp` - identifier for the time that event occurs

## Generate Smart Contract for On-Chain Verification

> * `etherlime zk generate [verifierKey]` Generates a verifier smart
>
>   contract based on verification key which can be used for on-chain
>
>   verification. The smart contract is written in contracts folder
>
>   and it is ready to be compiled and deployed with \`etherlime
>
>   compile`and`etherlime deploy\`. The verifier smart contract has a
>
>   public view method `verifyProof` that can be called for on-chain
>
>   verification. You can generate the call parameters with \`etherlime
>
>   zk-generate-call\` cli command.
>
>   > * Parameters:
>   >   * `verifierKey` - \[Optional] Specifies the verifier key
>   >
>   >     to be used for generating a verifier smart contract.
>   >
>   >     Defaults to: circuit\_verification\_key.json read from
>   >
>   >     `zero-knowledge-proof/generated-proof` folder.

## Generate output call based for On-chanin Verification

> * `etherlime zk call [publicSignals] [proof]` Running this command
>
>   will generates a call based on proof and public signals. A new
>
>   folder `generated-call` is generated with `generatedCall.json`
>
>   file. This generated call can be used for on-chain verification,
>
>   for calling public view method `verifyProof` of the generated
>
>   verifier contract with this data.
>
>   > * Parameters:
>   >   * `publicSignals` - \[Optional] Specifies the file with
>   >
>   >     signals to be used for generating verifying a proof.
>   >
>   >     Defaults to `circuit_public_signals.json` read from
>   >
>   >     `zero-knowledge-proof/generated-proof` folder.
>   >   * `proof` - \[Optional] Specifies the compiled proof that
>   >
>   >     would be used for generating a proof based on it.
>   >
>   >     Defaults to: `circuit_proof.json` read from
>   >
>   >     `zero-knowledge-proof/generated-proof` folder.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://etherlime.gitbook.io/etherlime/developer-documentation/etherlime-cli/zk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
