{"id":13470140,"url":"https://github.com/anonklub/anonklub","last_synced_at":"2025-03-23T04:05:33.188Z","repository":{"id":63174666,"uuid":"557886043","full_name":"anonklub/anonklub","owner":"anonklub","description":"Anonymous Proof of Ethereum Address Ownership","archived":false,"fork":false,"pushed_at":"2024-09-23T12:24:42.000Z","size":19296,"stargazers_count":39,"open_issues_count":2,"forks_count":6,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-10-30T04:49:52.690Z","etag":null,"topics":["address","circom","ethereum","halo2","membership","ownership","privacy","snarkjs","spartan","wasm","zk-snarks","zkp"],"latest_commit_sha":null,"homepage":"https://anonklub.github.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anonklub.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-26T13:43:45.000Z","updated_at":"2024-10-15T17:02:39.000Z","dependencies_parsed_at":"2023-09-10T16:26:08.114Z","dependency_job_id":"d4e55c00-91f6-4d8a-a970-511266aab85e","html_url":"https://github.com/anonklub/anonklub","commit_stats":{"total_commits":496,"total_committers":14,"mean_commits":35.42857142857143,"dds":0.502016129032258,"last_synced_commit":"6884d934f95f2c153bd9531aca36ba7a6e6d4720"},"previous_names":["anonklub/anonklub","privacy-scaling-explorations/e2e-zk-ecdsa"],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonklub%2Fanonklub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonklub%2Fanonklub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonklub%2Fanonklub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonklub%2Fanonklub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anonklub","download_url":"https://codeload.github.com/anonklub/anonklub/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245052673,"owners_count":20553172,"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":["address","circom","ethereum","halo2","membership","ownership","privacy","snarkjs","spartan","wasm","zk-snarks","zkp"],"created_at":"2024-07-31T16:00:23.806Z","updated_at":"2025-03-23T04:05:33.165Z","avatar_url":"https://github.com/anonklub.png","language":"TypeScript","funding_links":[],"categories":["Implementations"],"sub_categories":[],"readme":"![anonklub banner](https://raw.githubusercontent.com/anonklub/assets/main/img/anonklub-banner-2.jpg)\n\n\u003e [!Warning]\n\u003e\n\u003e This project has been sunset and isn't being actively worked on anymore.\n\u003e The previously deployed services (query API, UI, discord bot) have been shut down. So the corresponding links (_anonklub.xyz_, _docs.anonklub.xyz_, _query.anonklub.xyz_) in docs/README(s) won't work.\n\n\u003cp align=\"center\"\u003e\nAnonKlub focuses on building applications that allow for secure and anonymous proof of membership.\nIt does so by performing both ECDSA signatures and Merkle Tree inclusion verifications in a SNARK.\nIt enables privacy applications such as anonymous airdrops, anonymous NFT minting, anonymous chat groups…\u003cbr\u003e\u003cbr\u003e\n\u003ca href=\"https://github.com/anonklub/anonklub/blob/main/LICENSE\"\u003e\n        \u003cimg alt=\"Github license\" src=\"https://img.shields.io/github/license/anonklub/anonklub\"\u003e\n    \u003c/a\u003e\n\u003cbr\u003e\n \u003ca href=\"https://github.com/anonklub/anonklub/actions?query=workflow%3Amain-staging\"\u003e\n        \u003cimg alt=\"GitHub Workflow test\" src=\"https://img.shields.io/github/actions/workflow/status/anonklub/anonklub/main-staging.yml?style=flat-squarebranch=main\u0026label=main\u0026logo=github\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://coveralls.io/github/anonklub/anonklub?branch=main\"\u003e\n  \u003cimg alt=\"Coveralls Badge\" src=\"https://img.shields.io/coverallsCoverage/github/anonklub/anonklub.svg?label=coverage\u0026logo=coveralls\"\u003e\n\u003c/a\u003e\n\u003cbr\u003e\n\u003ca href=\"https://www.npmjs.com/package/@anonklub/halo2-binary-merkle-tree\"\u003e\n\u003cimg alt=\"@anonklub/halo2-binary-merkle-tree npm badge\" src=\"https://img.shields.io/npm/v/%40anonklub/halo2-binary-merkle-tree?logo=npm\u0026label=%40anonklub%2Fhalo2-binary-merkle-tree\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.npmjs.com/package/@anonklub/halo2-binary-merkle-tree-worker\"\u003e\n\u003cimg alt=\"@anonklub/halo2-binary-merkle-tree-worker npm badge\" src=\"https://img.shields.io/npm/v/%40anonklub/halo2-binary-merkle-tree-worker?logo=npm\u0026label=%40anonklub%2Fhalo2-binary-merkle-tree-worker\"\u003e\n\u003c/a\u003e\n\u003cbr\u003e\n\u003ca href=\"https://www.npmjs.com/package/@anonklub/halo2-eth-membership\"\u003e\n\u003cimg alt=\"@anonklub/halo2-eth-membership npm badge\" src=\"https://img.shields.io/npm/v/%40anonklub/halo2-eth-membership?logo=npm\u0026label=%40anonklub%2Fhalo2-eth-membership\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.npmjs.com/package/@anonklub/halo2-eth-membership-worker\"\u003e\n\u003cimg alt=\"@anonklub/halo2-eth-membership-worker npm badge\" src=\"https://img.shields.io/npm/v/%40anonklub/halo2-eth-membership-worker?logo=npm\u0026label=%40anonklub%2Fhalo2-eth-membership-worker\"\u003e\n\u003c/a\u003e\n\u003cbr\u003e\n\u003ca href=\"https://www.npmjs.com/package/@anonklub/merkle-tree-wasm\"\u003e\n\u003cimg alt=\"@anonklub/merkle-tree-wasm npm badge\" src=\"https://img.shields.io/npm/v/%40anonklub/merkle-tree-wasm?logo=npm\u0026label=%40anonklub%2Fmerkle-tree-wasm\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.npmjs.com/package/@anonklub/merkle-tree-worker\"\u003e\n\u003cimg alt=\"@anonklub/merkle-tree-worker npm badge\" src=\"https://img.shields.io/npm/v/%40anonklub/merkle-tree-worker?logo=npm\u0026label=%40anonklub%2Fmerkle-tree-worker\"\u003e\n\u003c/a\u003e\n\u003cbr\u003e\n\u003ca href=\"https://www.npmjs.com/package/@anonklub/proof\"\u003e\n\u003cimg alt=\"@anonklub/proof npm badge\" src=\"https://img.shields.io/npm/v/%40anonklub/proof?logo=npm\u0026label=%40anonklub%2Fproof\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.npmjs.com/package/@anonklub/query\"\u003e\n\u003cimg alt=\"@anonklub/query npm badge\" src=\"https://img.shields.io/npm/v/%40anonklub/query?logo=npm\u0026label=%40anonklub%2Fquery\"\u003e\n\u003c/a\u003e\n\u003cbr\u003e\n\u003ca href=\"https://www.npmjs.com/package/@anonklub/spartan-ecdsa-wasm\"\u003e\n\u003cimg alt=\"@anonklub/spartan-ecdsa-wasm npm badge\" src=\"https://img.shields.io/npm/v/%40anonklub/spartan-ecdsa-wasm?logo=npm\u0026label=%40anonklub%2Fspartan-ecdsa-wasm\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.npmjs.com/package/@anonklub/spartan-ecdsa-worker\"\u003e\n\u003cimg alt=\"@anonklub/spartan-ecdsa-worker npm badge\" src=\"https://img.shields.io/npm/v/%40anonklub/spartan-ecdsa-worker?logo=npm\u0026label=%40anonklub%2Fspartan-ecdsa-worker\"\u003e\n\u003c/a\u003e\n\u003cbr\u003e\n\u003ca href=\"https://crates.io/crates/akli\"\u003e\n\u003cimg alt=\"akli rust badge\" src=\"https://img.shields.io/crates/v/akli?logo=rust\u0026label=akli\u0026color=blue\"\u003e\n\u003c/a\u003e\n\u003cbr\u003e\n\u003c/p\u003e\n\n| Content                                                                      | Description                                                                                                                                                |       Status       |\n| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------: |\n| [discord-bot](discord-bot)                                                   | Discord Verification Bot                                                                                                                                   |         ✔️          |\n| nullifier                                                                    |                                                                                                                                                            |  :calendar: TO DO  |\n| [pkgs/cli](pkgs/cli)                                                         | Rust CLI                                                                                                                                                   |         ⏳         |\n| [pkgs/halo2-binary-merkle-tree](pkgs/halo2-binary-merkle-tree)               | Binary merkle tree rust implmentation with a Halo2 gadget for merkle proof verification                                                                    | :heavy_check_mark: |\n| [pkgs/halo2-binary-merkle-tree-worker](pkgs/halo2-binary-merkle-tree-worker) | Web worker that runs the Wasm compilation of [pkgs/halo2-binary-merkle-tree](pkgs/halo2-binary-merkle-tree)                                                | :heavy_check_mark: |\n| [pkgs/halo2-eth-membership](pkgs/halo2-eth-membership)                       | Halo2 ECDSA circuit                                                                                                                                        | :heavy_check_mark: |\n| [pkgs/halo2-eth-membership-worker](pkgs/halo2-eth-membership-worker)         | Web worker that runs the Wasm compilation of [pkgs/halo2-eth-membership](pkgs/halo2-eth-membership)                                                        | :heavy_check_mark: |\n| [pkgs/merkle-tree-wasm](pkgs/merkle-tree-wasm)                               | Merkle tree Rust crate \u0026 corresponding wasm TS package                                                                                                     | :heavy_check_mark: |\n| [pkgs/merkle-tree-worker](pkgs/merkle-tree-worker)                           | Web worker wrapper of the [@anonklub/merkle-tree-wasm](merkle-tree-wasm/Cargo.toml) wasm package                                                           | :heavy_check_mark: |\n| [pkgs/query](pkgs/query)                                                     | Node package wrapper for the Query API                                                                                                                     | :heavy_check_mark: |\n| [pkgs/proof](pkgs/proof)                                                     | Node package to assist in creating proof requests                                                                                                          | :heavy_check_mark: |\n| [pkgs/spartan-ecdsa-wasm](pkgs/spartan-ecdsa-wasm)                           | Spartan/Sapir circuits \u0026 corresponding wasm TS package.                                                                                                    | :heavy_check_mark: |\n| [pkgs/spartan-ecdsa-worker](pkgs/spartan-ecdsa-worker)                       | Web worker wrapper of the [@anonklub/spartan](circuits/spartan/Cargo.toml) wasm package                                                                    | :heavy_check_mark: |\n| [queries/crypto_ethereum](queries/crypto_ethereum)                           | Google [`bigquery-public-data.crypto_ethereum`](https://console.cloud.google.com/marketplace/product/ethereum/crypto-ethereum-blockchain) queries examples | :heavy_check_mark: |\n| [queries/dune_analytics](queries/dune_analytics)                             | [Dune Analytics](https://dune.com/) queries examples                                                                                                       | :heavy_check_mark: |\n| [queries/the_graph](queries/the_graph)                                       | [The Graph](https://thegraph.com/en/) queries examples                                                                                                     | :heavy_check_mark: |\n| [query-api](query-api)                                                       | Query API server                                                                                                                                           | :heavy_check_mark: |\n| [ui](ui)                                                                     | User Interface (fetch anonymity sets, generate or verify membership proofs)                                                                                | :heavy_check_mark: |\n\n## Archive branches\n\n- [`circom`](https://github.com/iden3/circom)/[`snarkjs`](https://github.com/iden3/snarkjs) (groth16) implementation: [`archive/circom`](https://github.com/anonklub/anonklub/tree/archive/circom)\n- [`spartan-ecdsa`](https://github.com/personaelabs/spartan-ecdsa)/[`sapir`](https://github.com/personaelabs/sapir) implementation: [`archive/spartan-sapir`](https://github.com/anonklub/anonklub/tree/archive/spartan-sapir)\n\n## Develop\n\n#### TLDR\n\n```commandline\ngit clone https://github.com/anonklub/anonklub.git\ncd anonklub\ncp .envrc{.example,}\n# edit .envrc\nsource .envrc\npnpm i\npnpm start.ui\n```\n\n### [Requirements](./.tool-versions)\n\n### Environment\n\nSee [`.envrc.example`](.envrc.example).\\\nCopy it in an .envrc file and source it.\n\n```commandline\ncp .envrc{.example,}\n# edit .envrc\nsource .envrc\n```\n\n### Scripts\n\nCheck available scripts with `pnpm run`.\\\nEspecially, to start the ui or the query-api: `pnpm start.ui` or `pnpm start.query-api`.\\\nDon't bother running build tasks explicitly beforehand: [turbo](https://turbo.build/repo/docs) takes care of topological dependencies between tasks.\n\n## Benchmarks\n\n### Overview\n\nThis benchmarking process evaluates the relationship between the parameter `k` and the performance metrics such as a proof generation time, proof size, and verification time. The results are stored in a CSV file and visualized using plots.\n\n### Setup\n\nBefore running the benchmarks, ensure that your Rust environment is set up correctly and that the appropriate target is configured.\n\n#### Configuring the Rust Target\n\nThis benchmarking process is intended to run on a native Linux target, not on WebAssembly (WASM). The project uses a specific Rust toolchain version.\n\n1. Set Up the Rust Toolchain:\n   Ensure to use the same nightly Rust version in the `rust-toolchain`.\n\n```rs\n[toolchain]\nchannel = \"nightly-2024-07-25\"\n```\n\n2. Check the Installed Targets:\n   You can check which targets are installed in your Rust toolchain with:\n\n```bash\nrustup target list --installed\n```\n\n3. Add the Required Target:\n   If the `x86_64-unknown-linux-gnu` target is not installed, you can add it with:\n\n```bash\nrustup target add x86_64-unknown-linux-gnu\n```\n\n4. Run the Benchmark:\n   Ensure that the benchmark is run with the correct target by using the following command:\n\n```bash\ncargo test --target x86_64-unknown-linux-gnu --features \"bench\"\n```\n\n### Results\n\nThe benchmark results were obtained on `Lenovo Legion 5` running Linux (12 CPU cores, 62 GB RAM) -- no GPU was used.\n\n| k  | numAdvice | numLookupAdvice | numInstance | numLookupBits | numVirtualInstance | proof_time | proof_size | verify_time |\n| -- | --------- | --------------- | ----------- | ------------- | ------------------ | ---------- | ---------- | ----------- |\n| 19 | 1         | 1               | 1           | 18            | 1                  | 176.9s     | 992        | 2.3s        |\n| 18 | 2         | 1               | 1           | 17            | 1                  | 171.1s     | 1504       | 7.6s        |\n| 17 | 4         | 1               | 1           | 16            | 1                  | 71.7s      | 2080       | 639.7ms     |\n| 16 | 8         | 2               | 1           | 15            | 1                  | 59.3s      | 3584       | 365.1ms     |\n| 15 | 17        | 3               | 1           | 14            | 1                  | 51.2s      | 6592       | 267.6ms     |\n| 14 | 34        | 6               | 1           | 13            | 1                  | 51.6s      | 12736      | 283.8ms     |\n| 13 | 68        | 12              | 1           | 12            | 1                  | 52.5s      | 25024      | 411.5ms     |\n| 12 | 139       | 24              | 1           | 11            | 1                  | 58.3s      | 50528      | 761.7ms     |\n| 11 | 291       | 53              | 1           | 10            | 1                  | 72.4s      | 106304     | 1.5s        |\n\n\u003e Note: those benchmark config parameters have been selected based on `halo2-lib` benchmark params [github.com/axiom-crypto/halo2-lib](https://github.com/axiom-crypto/halo2-lib?tab=readme-ov-file#secp256k1-ecdsa)\n\nThe benchmark results are visualized in the plot below:\n\n![Benchmark Plot](pkgs/halo2-eth-membership/configs//benchmark_plot.png)\n\n### Results using `criterion.rs`\n\nTODO\n\n## [Contribute](https://github.com/anonklub/anonklub/contribute)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanonklub%2Fanonklub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanonklub%2Fanonklub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanonklub%2Fanonklub/lists"}