Running Code

System Requirements

  1. Ubuntu version 20 or higher WSL (Windows Subsystem for Linux) is also supported. Other similar Linux distros should also work.

For WSL installation guide, read here.

  1. Some APT package dependencies Run the following to install the required packages:

sudo apt install build-essential
sudo apt install pkg-config
sudo apt install libssl-dev
  1. Rust compiler toolchain Follow this 2-step instruction to install the Rust toolchain.

# 1: install cargo toolchain
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
# 2: source the cargo env for the first time
source "$HOME/.cargo/env"

Installing the SDK and Run zkpass-demo

Follow these steps to install the zkPass SDK and to run the demo application.

For the purposes of this guide, the zkpass-sdk repository is cloned under the home directory of the current user, retaining its default name. This places the root directory for the zkpass-sdk repository at ~/zkpass-sdk. As a result, the directory for the Rust/Linux binding of the SDK is set at ~/zkpass-sdk/rust.

Should you choose to clone the zkpass-sdk repository into a different location, ensure that you adjust any referenced paths in the instructions to match your chosen directory structure.

  1. Clone the zkpass-sdk repo

git clone https://github.com/gl-zkPass/zkpass-sdk.git
  1. Enter zkpass-sdk/rust Directory

cd zkpass-sdk/rust
  1. From the zkpass-sdk/rust directory, execute test.sh script to build the SDK and run the demo application:

./test.sh

The correct output of zkpass-demo should look like the following:

<== Using Single User Data ==>
#### starting zkpass proof generation...
2024-09-03T07:23:42.591248Z  INFO run_data_holder{zkvm="r0" ... (omitted for clarity) ... >> generate_zkpass_proof
2024-09-03T07:23:42.626726Z  INFO run_data_holder{zkvm="r0" ... (omitted for clarity) ... Fetching public keys from https://playground-zkpass.ssi.id/.well-known/jwks.json
2024-09-03T07:23:48.169443Z  INFO run_data_holder{zkvm="r0" ... (omitted for clarity) ... << generate_zkpass_proof
#### generation completed [time=5.833258046s]

#### starting zkpass proof verification...
2024-09-03T07:23:48.424559Z  INFO run_data_holder{zkvm="r0" ... (omitted for clarity) ... >> verify_zkpass_proof_internal
2024-09-03T07:23:48.461295Z  INFO run_data_holder{zkvm="r0" ... (omitted for clarity) ... Fetching public keys from https://playground-zkpass.ssi.id/.well-known/jwks.json
2024-09-03T07:23:48.729210Z  INFO run_data_holder{zkvm="r0" ... (omitted for clarity) ... >> verify_zkproof
2024-09-03T07:23:48.729437Z  INFO run_data_holder{zkvm="r0" ... (omitted for clarity) ... << verify_zkproof
2024-09-03T07:23:48.732602Z  INFO run_data_holder{zkvm="r0" ... (omitted for clarity) ... << verify_zkpass_proof_internal
#### found dvr: id=868cbebb-9172-4807-846f-7f5bea6d20e3
#### verification completed [time=308.127227ms]
json-result={
  "name": "Dewi",
  "result": true
}
>> output list:
key=name, value=Str("Dewi")
key=result, value=Bool(true)
<< end of list
the query result is true

... (omitted for clarity) ...


<== Using Multiple User Data ==>
#### starting zkpass proof generation...
... (omitted for clarity) ...
#### generation completed [time=5.33967994s]

#### starting zkpass proof verification...
... (omitted for clarity) ...
#### verification completed [time=221.231359ms]
json-result={
  "name": "Dewi",
  "result": true
}
>> output list:
key=name, value=Str("Dewi")
key=result, value=Bool(true)
<< end of list
the query result is true

... (omitted for clarity) ...


<== Using Example ==>
#### starting zkpass proof generation...
... (omitted for clarity) ...
#### generation completed [time=5.55306725s]

#### starting zkpass proof verification...
... (omitted for clarity) ...
#### verification completed [time=288.768931ms]
json-result={
  "title": "Loan Query Results",
  "result": true,
  "name": "Ramana",
  "email": "Ramana.Maharshi@karma.org"
}
>> output list:
key=title, value=Str("Loan Query Results")
key=result, value=Bool(true)
key=name, value=Str("Ramana")
key=email, value=Str("Ramana.Maharshi@karma.org")
<< end of list
the query result is true

Troubleshooting

Fetch Timeout

This demo will download a binary file. If the download process times out, try the following solutions:

  1. Ensure you have a stable internet connection when running the script.

  2. Turn off any active VPNs and try again.

Missing/Corrupt .so Files

The error message "cannot open shared object file: No such file or directory" indicates an issue. This may occur due to missing or corrupted .so. Here are some possible solutions:

  1. Ensure you have a stable internet connection when running the script.

  2. Turn off any active VPNs and try again.

  3. Manually download the .so file:

    1. Download libdvr_client.so file from the website.

    2. Move these files to zkpass-sdk/rust/lib folder.

    3. Comment out download-so.sh in test.shscript.

    4. Run the test.sh script again; the error should be resolved.

Last updated