{"id":14992039,"url":"https://github.com/EspressoSystems/jellyfish","last_synced_at":"2025-09-25T14:30:42.610Z","repository":{"id":37092018,"uuid":"445617267","full_name":"EspressoSystems/jellyfish","owner":"EspressoSystems","description":"A Rust Implementation of the PLONK ZKP System and Extensions","archived":false,"fork":false,"pushed_at":"2025-01-13T03:50:38.000Z","size":45226,"stargazers_count":415,"open_issues_count":110,"forks_count":120,"subscribers_count":14,"default_branch":"main","last_synced_at":"2025-01-13T04:28:37.703Z","etag":null,"topics":["plonk","rust","zero-knowledge-proofs"],"latest_commit_sha":null,"homepage":"https://jellyfish.docs.espressosys.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EspressoSystems.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG_OLD.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-07T18:30:58.000Z","updated_at":"2025-01-10T17:44:33.000Z","dependencies_parsed_at":"2024-03-31T01:24:05.447Z","dependency_job_id":"f92a6ade-2e15-4b0f-a495-e030554cbf0e","html_url":"https://github.com/EspressoSystems/jellyfish","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EspressoSystems%2Fjellyfish","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EspressoSystems%2Fjellyfish/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EspressoSystems%2Fjellyfish/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EspressoSystems%2Fjellyfish/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EspressoSystems","download_url":"https://codeload.github.com/EspressoSystems/jellyfish/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234200157,"owners_count":18795139,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["plonk","rust","zero-knowledge-proofs"],"created_at":"2024-09-24T15:00:41.305Z","updated_at":"2025-09-25T14:30:42.597Z","avatar_url":"https://github.com/EspressoSystems.png","language":"Rust","readme":"# Jellyfish cryptographic library\n\n![example workflow](https://github.com/EspressoSystems/jellyfish/actions/workflows/build.yml/badge.svg)\n![Crates.io (version)](https://img.shields.io/crates/dv/jf-plonk/0.1.0)\n![GitHub](https://img.shields.io/github/license/EspressoSystems/jellyfish)\n\n## Disclaimer\n\n**DISCLAIMER:** This software is provided \"as is\" and its security has not been externally audited. Use at your own risk.\n\n## Chatroom\n\nFor general discussions on Jellyfish PLONK, please join our [Discord channel](https://discord.gg/GJa4gznGfU).\n\n## Crates\n\n### Helper\n- ['jf-utils'](utilities): utilities and helper functions.\n\n### Primitives\n- [`jf-prf`](prf): trait definitions for pseudorandom function (PRF).\n- [`jf-crhf`](crhf): trait definitions for collision-resistant hash function (CRHF).\n- [`jf-commitment`](commitment): trait definitions for cryptographic commitment scheme.\n- [`jf-rescue`](rescue): Rescue hash function, and its subsequent PRF, CRHF, commitment scheme implementations.\n- [`jf-elgamal`](elgamal): a Rescue-based ElGamal encryption scheme implementation.\n- [`jf-signature`](signature): signature scheme trait definition, and BLS/Schnorr signature scheme implementations.\n- [`jf-vrf`](vrf): verifiable random function trait definition and BLS-based implementation.\n- [`jf-aead`](aead): authenticated encryption with associated data (AEAD) implementation.\n- [`jf-merkle-tree`](merkle_tree): various (vanilla, sparse, namespaced) Merkle tree trait definitions and implementations.\n- [`jf-pcs`](pcs): polynomial commitment scheme (PCS) trait definitions and univariate/multilinear KZG-PCS implementations.\n- [`jf-poseidon2`](poseidon2): Poseidon2 permutation, and Sponge, CRHF, derived from this permutation.\n\nThe `jf-vid` crate is now moved to another repo [`jf-advz`](https://github.com/EspressoSystems/jellyfish-compat/tree/main/advz).\n\n### Plonk\n- [`jf-relation`](relation): Jellyfish constraint system for PLONK.\n- [`jf-plonk`](plonk): KZG-PCS based TurboPlonk and UltraPlonk implementations.\n\n## Development environment setup\n\nWe recommend the following tools:\n\n- [`nix`](https://nixos.org/download.html)\n- [`direnv`](https://direnv.net/docs/installation.html)\n\nRun `direnv allow` at the repo root. You should see dependencies (including Rust) being installed.\nAlternatively, enter the nix-shell manually via `nix develop`.\n\nYou can check you are in the correct development environment by running `which cargo`, which should print\nsomething like `/nix/store/2gb31jhahrm59n3lhpv1lw0wfax9cf9v-rust-minimal-1.69.0/bin/cargo`;\nand running `echo $CARGO_HOME` should print `~/.cargo-nix`.\n\n## Build, run tests and examples\n\nBuild:\n\n```\ncargo build\n```\n\nRun an example:\n\n```\ncargo run --release --example proof-of-exp --features test-srs\n```\n\nThis is a simple example to prove and verify knowledge of exponent.\nIt shows how one may compose a circuit, and then build a proof for the circuit.\n\n### WASM target\n\nJellyfish is `no_std` compliant and compilable to WASM target environment, just run:\n\n```\n./scripts/build_wasm.sh\n```\n\n### Backends\n\nTo choose different backends for arithmetics of `curve25519-dalek`, which is currently\nused by `jf-primitives/aead`, set the environment variable:\n\n```\nRUSTFLAGS='--cfg curve25519_dalek_backend=\"BACKEND\"'\n```\n\nSee the full list of backend options [here](https://github.com/dalek-cryptography/curve25519-dalek#backends).\n\nYou could further configure the word size for the backend by setting (see [here](https://github.com/dalek-cryptography/curve25519-dalek#word-size-for-serial-backends)):\n\n```\nRUSTFLAGS='--cfg curve25519_dalek_bits=\"SIZE\"'\n```\n\n### Tests\n\n```\ncargo test --release\n```\n\nNote that by default the _release_ mode does not check integers overflow.\nIn order to enforce this check run:\n\n```\n./scripts/run_tests.sh\n```\n\n#### Test coverage\n\nWe use [grcov](https://github.com/mozilla/grcov) for test coverage\n\n```\n./scripts/test_coverage.sh\n```\n\n### Generate and read the documentation\n\n#### Standard\n\n```\ncargo doc --open\n```\n\n### Code formatting\n\nTo format your code run\n\n```\ncargo fmt\n```\n\n### Updating non-cargo dependencies\n\nRun `nix flake update` if you would like to pin other version edit `flake.nix`\nbeforehand. Commit the lock file when happy.\n\nTo update only a single input specify it as argument, for example\n\n    nix flake update github:oxalica/rust-overlay\n\n### Benchmarks\n\n#### Primitives\n\nCurrently, a benchmark for verifying Merkle paths is implemented.\nThe additional flags allow using assembly implementation of `square_in_place` and `mul_assign` within arkworks:\n\n```bash\nRUSTFLAGS='-Ctarget-cpu=native -Ctarget-feature=+bmi2,+adx' cargo bench --bench=merkle_path\n```\n\n#### PLONK proof generation/verification\n\nFor benchmark, run:\n\n```\nRAYON_NUM_THREADS=N cargo bench\n```\n\nwhere N is the number of threads you want to use (N = 1 for single-thread).\n\nA sample benchmark result is available under [`bench.md`](./bench.md).\n\n## Git Hooks\n\nThe pre-commit hooks are installed via the nix shell. To run them on all files use\n\n```\npre-commit run --all-files\n```\n","funding_links":[],"categories":["Web3 and ZKP Framework"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FEspressoSystems%2Fjellyfish","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FEspressoSystems%2Fjellyfish","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FEspressoSystems%2Fjellyfish/lists"}