{"id":26319569,"url":"https://github.com/pluto/edge","last_synced_at":"2025-03-15T15:19:52.945Z","repository":{"id":260537149,"uuid":"868482806","full_name":"pluto/edge","owner":"pluto","description":"client side proving","archived":false,"fork":false,"pushed_at":"2025-03-07T18:51:09.000Z","size":395,"stargazers_count":4,"open_issues_count":7,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-07T19:29:57.813Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/pluto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-06T13:55:19.000Z","updated_at":"2025-03-07T17:13:37.000Z","dependencies_parsed_at":"2024-11-01T18:25:21.299Z","dependency_job_id":"7b80eec0-db2e-4815-bbb5-e282d89e9e31","html_url":"https://github.com/pluto/edge","commit_stats":null,"previous_names":["pluto/proving_ground","pluto/client-side-prover","pluto/edge"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pluto%2Fedge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pluto%2Fedge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pluto%2Fedge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pluto%2Fedge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pluto","download_url":"https://codeload.github.com/pluto/edge/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243746378,"owners_count":20341236,"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":[],"created_at":"2025-03-15T15:19:52.441Z","updated_at":"2025-03-15T15:19:52.932Z","avatar_url":"https://github.com/pluto.png","language":"Rust","funding_links":[],"categories":["Developer Tools"],"sub_categories":["Proving Backends"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/pluto/.github/main/profile/assets/assets_ios_Pluto-1024%401x.png\" alt=\"Pluto Logo\" width=\"50\" height=\"50\"\u003e\n  \u003cbr\u003e\n  \u003cb style=\"font-size: 24px;\"\u003ePluto\u003c/b\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://t.me/pluto_xyz/1\"\u003e\u003cimg src=\"https://img.shields.io/badge/Telegram-Group-8B5CF6?style=flat-square\u0026logo=telegram\u0026logoColor=white\u0026labelColor=24292e\u0026scale=1.5\" alt=\"Telegram\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://docs.pluto.xyz/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Docs-Pluto-8B5CF6?style=flat-square\u0026logo=readme\u0026logoColor=white\u0026labelColor=24292e\u0026scale=1.5\" alt=\"Docs\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/License-Apache%202.0-8B5CF6.svg?label=license\u0026labelColor=2a2f35\" alt=\"License\"\u003e\n\u003c/p\u003e\n\n---\n\n# Edge\n\u003e Enabling private computation on the edge.\n\n## Features\n- Supernova NIVC folding scheme implementation\n- Support for Noir circuit DSL\n- Client-side proving capabilities through native x86, aarch64, and WASM\n- End-to-end proof setup, running, and verification\n\n## Project Structure\nThe repository contains several key components:\n- `edge-prover`: Backend implementation of Supernova NIVC folding scheme\n- `edge-frontend`: Frontend adapters for Noir to use `edge-prover`\n- `demo`: A demo application for the `edge-frontend` and `edge-prover`\n- `nivc`: A Noir package to use with the NIVC folding scheme\n\n### Prerequisites\nBefore running the demo, ensure you have:\n1. Rust, Noir, and their associated tools installed\n2. The Noir programs compiled to JSON (located in the `target/` directory). To do so, just run \n```\nnargo compile --workspace\n```\nfrom the root directory.\n\n### Running the Demo\nThe demo application has three main commands: setup, prove, and verify. The help command can be used to see the available options.\n```\ncargo run -p demo -- --help\n```\nThe demo application proves sequences to a fun (and unproven) math called the Collatz conjecture. In short, for any positive integer `n`, the sequence is defined as:\n```\nif n is 1, stop.\nif n is even, repeat this process on n/2.\nif n is odd, repeat this process on 3n + 1.\n```\nSo depending on the starting value, you will find a different sequence of circuits is used to prove the sequence. If you happen to find a case where this proof doesn't work, please let us know -- you may have found a counter example to the conjecture! 😁\n\n#### 1. Setup Phase\nFirst, run the offline setup phase:\n```\ncargo run -p demo -- setup\n```\nThis will create a `setup.bytes` file in the current directory. You can specify an output file name as an argument (see help for more details).\n\n#### 2. Prove Phase\nGenerate a proof for a specific input value (e.g., 42):\n```\ncargo run -p demo -- prove --input 42\n```\nThis creates:\n- `proof.bytes`: The compressed proof\n- `proof.meta.json`: Metadata about the proof, including:\n  - The input value\n  - Number of steps in the Collatz sequence\n  - The complete sequence of even/odd operations\nIf you'd like, you can run with some logging to see the steps:\n```\ncargo run -p demo -- prove --input 42 -v\n```\nand to see more logs, you can use `-vv` or `-vvv`.\n\n#### 3. Verify Phase\nTo verify a proof, run:\n```\ncargo run -p demo -- verify --input 42\n```\nThis will verify the proof. Without verbosity, no output implies a valid proof. But if you provided an incorrect input, you will see an error message. For example, if you provide an input of 43, you will see:\n```\nERROR demo: ❌ Proof verification failed: NovaError\nError: NovaError(ProofVerifyError)\n```\n\n## Usage\nYou can use the `edge-frontend` crate to use the NIVC folding scheme for your own Noir programs. In your `Cargo.toml`, add the following:\n```\n[dependencies]\nedge-frontend = { git = \"https://github.com/pluto/edge\", branch = \"main\" }\n```\nand then add the following to your `Nargo.toml`:\n```\n[dependencies]\nnivc = { tag = \"v0.1.0\", git = \"https://github.com/pluto/edge\" }\n```\nThe `edge-frontend` assumes that the structure provided by the `nivc` crate is used. Please see the `demo` crate for an example of how to use the `edge-frontend` with the `nivc` crate and the `examples` directory for examples of Noir programs that use the `nivc` crate inside of other tests (see `frontend/tests/nivc/`).\n\n\u003e [!WARNING]\n\u003e This repository and its crates are **not** production ready. Do not use them in production. No audits have been done and none are planned.\n \nWith that said, work has been done to make the implementation here work with an offline setup phase. Therefore, this can be used run proofs on an edge device which can later be verified by a remote server.\n\n## Contributing\n\nWe welcome contributions to our open-source projects. If you want to contribute or follow along with contributor discussions, join our main [Telegram channel](https://t.me/pluto_xyz/1) to chat about Pluto's development.\n\nOur contributor guidelines can be found in our [CONTRIBUTING.md](https://github.com/pluto/.github/blob/main/profile/CONTRIBUTING.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.\n\n## License\n\nThis project is licensed under the Apache V2 License - see the [LICENSE](LICENSE) file for details.\n\n## Acknowledgements\n\u003e [!NOTE]\n\u003e This repository is a fork of the original hosted at [https://github.com/microsoft/nova](https://github.com/microsoft/nova) and also forked from [https://github.com/argumentcomputer/arecibo](https://github.com/argumentcomputer/arecibo).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpluto%2Fedge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpluto%2Fedge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpluto%2Fedge/lists"}