fix(rln-cli): handle missing or empty config file; improve readability of input/output; remove duplicate config field fix(rln-cli): back to using path for input data in RLN-CLI, add real-world spam prevention example fix(rln-cli): fix Readme.md format, remove TREE_HEIGHT constant and fix recover_id_secret part for relay example fix(rln-cli): implement stateless RLN example fix(rln-cli): add missing Cargo.lock update fix(rln-cli): update RLN-CLI version to 0.7.0
3.6 KiB
Zerokit RLN-CLI
The Zerokit RLN-CLI provides a command-line interface for interacting with the public API of the Zerokit RLN Module.
It also contain:
- Relay Example to demonstrate the use of the RLN module for spam prevention.
- Stateless Example to demonstrate the use of the RLN module for stateless features.
Configuration
The CLI can be configured using a JSON configuration file (see the example).
You can specify the configuration file path using the RLN_CONFIG_PATH
environment variable:
export RLN_CONFIG_PATH=example.config.json
Alternatively, you can provide the configuration file path as an argument for each command:
RLN_CONFIG_PATH=example.config.json cargo run -- <SUBCOMMAND> [OPTIONS]
If the configuration file is empty, default settings will be used, but the tree data folder will be temporary and not saved to the preconfigured path.
We recommend using the example config, as all commands (except new
and create-with-params
) require an initialized RLN instance.
CLI Commands
Instance Management
To initialize a new RLN instance:
cargo run new --tree-height <HEIGHT>
To initialize an RLN instance with custom parameters:
cargo run new-with-params --resources-path <PATH> --tree-height <HEIGHT>
To update the Merkle tree height:
cargo run set-tree --tree-height <HEIGHT>
Leaf Operations
To set a single leaf:
cargo run set-leaf --index <INDEX> --input <INPUT_PATH>
To set multiple leaves:
cargo run set-multiple-leaves --index <START_INDEX> --input <INPUT_PATH>
To reset multiple leaves:
cargo run reset-multiple-leaves --input <INPUT_PATH>
To set the next available leaf:
cargo run set-next-leaf --input <INPUT_PATH>
To delete a specific leaf:
cargo run delete-leaf --index <INDEX>
Proof Operations
To generate a proof:
cargo run prove --input <INPUT_PATH>
To generate an RLN proof:
cargo run generate-proof --input <INPUT_PATH>
To verify a proof:
cargo run verify --input <PROOF_PATH>
To verify a proof with multiple Merkle roots:
cargo run verify-with-roots --input <INPUT_PATH> --roots <ROOTS_PATH>
Tree Information
To retrieve the current Merkle root:
cargo run get-root
To obtain a Merkle proof for a specific index:
cargo run get-proof --index <INDEX>
Feature Flags
The CLI supports optional features. To enable the arkzkey feature, run:
cargo run --features arkzkey -- <SUBCOMMAND> [OPTIONS]
For more details, refer to the Zerokit RLN Module documentation.
Relay Example
The following Example demonstrates how RLN enables spam prevention in anonymous environments for multple users.
You can run the example using the following command:
cargo run --example relay
or with the arkzkey feature flag:
cargo run --example relay --features arkzkey
You can also change MESSAGE_LIMIT constant in the relay.rs file to see how the RLN instance behaves with different parameters.
Stateless Example
The following Example demonstrates how RLN can be used for stateless features by creating the Merkle tree outside of RLN instance.
You can run the example using the following command:
cargo run --example stateless --features stateless
or with the arkzkey feature flag:
cargo run --example stateless --features stateless,arkzkey