circom-helper allows developers to test circom circuits quickly and easily.
It compiles circuits and exposes a JSON-RPC API which allows developers to generate witnesses and access signal values without writing command-line glue scripts.
Done:
- witness generation endpoint
- signal index lookup endpoint
npm i circom-helper
To build from source:
git clone git@github.com:weijiekoh/circom-helper.git && \
cd circom-helper && \
npm i && \
npm run build
Install dependencies:
sudo apt-get install libgmp-dev nlohmann-json3-dev nasm g++
-
Create a config file. Use
config.example.jsonas a reference. ThecircuitDirsfield should be an array of directories which contain thecircomfiles you wish to compile. Note that there should not be any filename collisions, even across directories. Additionally, ensure that you installcircom,snarkjs,circom_runtime, andffiasmin your project'snode_modules, and check their paths in the config file. -
Create a
compiled/andtemp/directory for compiled circuits and tempoary files. -
Run the server:
node build/index.js -c ./config.example.json -b ./compiled/ -p 9000 -nc
gen_witness
Generates a witness given a circuit name and public inputs.
Inputs:
circuit: the name of the circuit. For example, iftest.circomis in one of thecircuitDirs, and you want to generate a witness for inputs to this circuit, set this value astest.inputs: the public inputs to the circuit (as a JS object). For example:{ left: '1', right: '2' }. The number values should be strings as the JS safe integer limit is lower than the group order for BN254 and other elliptic curves used for ZK proofs.
Returns:
witness: an array of strings (e.g.[1, 3, 1, 2]).
To find the index of any signal (e.g. main.out), use get_signal_index. With
this index, you can then look up this array and get the value of the signal.
get_signal_index
Inputs:
circuit: the name of the circuit.name: the signal name (e.g.main.out).
Returns:
index: a numeric value as a string.