{"id":26788266,"url":"https://github.com/qedprotocol/plonky3-fibonacci","last_synced_at":"2025-04-19T20:51:00.774Z","repository":{"id":229738197,"uuid":"777081381","full_name":"QEDProtocol/plonky3-fibonacci","owner":"QEDProtocol","description":null,"archived":false,"fork":false,"pushed_at":"2024-05-20T18:35:37.000Z","size":10485,"stargazers_count":4,"open_issues_count":1,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-29T13:16:36.766Z","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":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/QEDProtocol.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","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}},"created_at":"2024-03-25T06:50:20.000Z","updated_at":"2024-09-02T08:16:16.000Z","dependencies_parsed_at":"2024-03-26T03:36:23.457Z","dependency_job_id":null,"html_url":"https://github.com/QEDProtocol/plonky3-fibonacci","commit_stats":null,"previous_names":["qedprotocol/plonky3-fibonacci"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QEDProtocol%2Fplonky3-fibonacci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QEDProtocol%2Fplonky3-fibonacci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QEDProtocol%2Fplonky3-fibonacci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QEDProtocol%2Fplonky3-fibonacci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/QEDProtocol","download_url":"https://codeload.github.com/QEDProtocol/plonky3-fibonacci/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249797628,"owners_count":21326837,"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-29T13:16:40.501Z","updated_at":"2025-04-19T20:51:00.729Z","avatar_url":"https://github.com/QEDProtocol.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Plonky3-powered-by-polygon](https://github.com/Plonky3/Plonky3/assets/86010/7ec356ad-b0f3-4c4c-aa1d-3a151c1065e7)\n\nPlonky3 is a toolkit for implementing polynomial IOPs (PIOPs), such as PLONK and STARKs. It aims to support several polynomial commitment schemes, such as Brakedown.\n\nThis is the \"core\" repo, but the plan is to move each crate into its own repo once APIs stabilize.\n\n\n## Status\n\nFields:\n- [x] Mersenne31\n  - [x] \"complex\" extension field\n  - [x] ~128 bit extension field\n  - [x] AVX2\n  - [x] AVX-512\n  - [x] NEON\n- [x] BabyBear\n  - [x] ~128 bit extension field\n  - [x] AVX2\n  - [x] AVX-512\n  - [x] NEON\n- [x] Goldilocks\n  - [x] ~128 bit extension field\n\nGeneralized vector commitment schemes\n- [x] generalized Merkle tree\n\nPolynomial commitment schemes\n- [x] FRI-based PCS\n- [ ] tensor PCS\n- [ ] univariate-to-multivariate adapter\n- [ ] multivariate-to-univariate adapter\n\nPIOPs\n- [x] univariate STARK\n- [ ] multivariate STARK\n- [ ] PLONK\n\nCodes\n- [x] Brakedown\n- [x] Reed-Solomon\n\nInterpolation\n- [x] Barycentric interpolation\n- [x] radix-2 DIT FFT\n- [x] radix-2 Bowers FFT\n- [ ] four-step FFT\n- [x] Mersenne circle group FFT\n\nHashes\n- [x] Rescue\n- [x] Poseidon\n- [x] Poseidon2\n- [x] BLAKE3\n  - [ ] modifications to tune BLAKE3 for hashing small leaves\n- [x] Keccak-256\n- [x] Monolith\n\n\n## Benchmark\n\nWe sometimes use a Keccak AIR to compare Plonky3's performance to other libraries like Plonky2. Several variations are possible here, with different fields and so forth, but here is one example:\n```\nRUST_LOG=info cargo run --example prove_baby_bear_keccak --release --features parallel\n```\n\n## CPU features\n\nPlonky3 contains optimizations that rely on newer CPU instructions that are not available in older processors. These instruction sets include x86's [BMI1 and 2](https://en.wikipedia.org/wiki/X86_Bit_manipulation_instruction_set), [AVX2](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#Advanced_Vector_Extensions_2), and [AVX-512](https://en.wikipedia.org/wiki/AVX-512). Rustc does not emit those instructions by default; they must be explicitly enabled through the `target-feature` compiler option (or implicitly by setting `target-cpu`). To enable all features that are supported on your machine, you can set `target-cpu` to `native`. For example, to run the tests:\n```\nRUSTFLAGS=\"-Ctarget-cpu=native\" cargo test\n```\n\nSupport for some instructions, such as AVX-512, is still experimental. They are only available in the nightly build of Rustc and are enabled by the [`nightly-features` feature flag](#nightly-only-optimizations). To use them, you must enable the flag in Rustc (e.g. by setting `target-feature`) and you must also enable the `nightly-features` feature.\n\n## Nightly-only optimizations\n\nSome optimizations (in particular, AVX-512-optimized math) rely on features that are currently available only in the nightly build of Rustc. To use them, you need to enable the `nightly-features` feature. For example, to run the tests:\n```\ncargo test --features nightly-features\n```\n\n\n## License\n\nLicensed under either of\n\n* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n\n## Guidance for external contributors\n\nDo you feel keen and able to help with Plonky3? That's great! We\nencourage external contributions!\n\nWe want to make it easy for you to contribute, but at the same time we\nmust manage the burden of reviewing external contributions. We are a\nsmall team, and the time we spend reviewing external contributions is\ntime we are not developing ourselves.\n\nWe also want to help you to avoid inadvertently duplicating work that\nis already underway, or building something that we will not\nwant to incorporate.\n\nFirst and foremost, please keep in mind that this is a highly\ntechnical piece of software and contributing is only suitable for\nexperienced mathematicians, cryptographers and software engineers.\n\nThe Polygon Zero Team reserves the right to accept or reject any\nexternal contribution for any reason, including a simple lack of time\nto maintain it (now or in the future); we may even decline to review\nsomething that is not considered a sufficiently high priority for us.\n\nTo avoid disappointment, please communicate your intention to\ncontribute openly, while respecting the limited time and availability\nwe have to review and provide guidance for external contributions. It\nis a good idea to drop a note in our public Discord #development\nchannel of your intention to work on something, whether an issue, a\nnew feature, or a performance improvement. This is probably all that's\nreally required to avoid duplication of work with other contributors.\n\nWhat follows are some more specific requests for how to write PRs in a\nway that will make them easy for us to review. Deviating from these\nguidelines may result in your PR being rejected, ignored or forgotten.\n\n\n### General guidance for your PR\n\nObviously PRs will not be considered unless they pass our Github\nCI. The Github CI is not executed for PRs from forks, but you can\nsimulate the Github CI by running the commands in\n`.github/workflows/ci.yml`.\n\nUnder no circumstances should a single PR mix different purposes: Your\nPR is either a bug fix, a new feature, or a performance improvement,\nnever a combination. Nor should you include, for example, two\nunrelated performance improvements in one PR. Please just submit\nseparate PRs. The goal is to make reviewing your PR as simple as\npossible, and you should be thinking about how to compose the PR to\nminimise the burden on the reviewer.\n\nPlonky3 uses stable Rust, so any PR that depends on unstable features\nis likely to be rejected. It's possible that we may relax this policy\nin the future, but we aim to minimize the use of unstable features;\nplease discuss with us before enabling any.\n\nHere are a few specific guidelines for the three main categories of\nPRs that we expect:\n\n\n#### The PR fixes a bug\n\nIn the PR description, please clearly but briefly describe\n\n1. the bug (could be a reference to a GH issue; if it is from a\n   discussion (on Discord/email/etc. for example), please copy in the\n   relevant parts of the discussion);\n2. what turned out to the cause the bug; and\n3. how the PR fixes the bug.\n\nWherever possible, PRs that fix bugs should include additional tests\nthat (i) trigger the original bug and (ii) pass after applying the PR.\n\n\n#### The PR implements a new feature\n\nIf you plan to contribute an implementation of a new feature, please\ndouble-check with the Polygon Zero team that it is a sufficient\npriority for us that it will be reviewed and integrated.\n\nIn the PR description, please clearly but briefly describe\n\n1. what the feature does\n2. the approach taken to implement it\n\nAll PRs for new features must include a suitable test suite.\n\n\n#### The PR improves performance\n\nPerformance improvements are particularly welcome! Please note that it\ncan be quite difficult to establish true improvements for the\nworkloads we care about. To help filter out false positives, the PR\ndescription for a performance improvement must clearly identify\n\n1. the target bottleneck (only one per PR to avoid confusing things!)\n2. how performance is measured\n3. characteristics of the machine used (CPU, OS, #threads if appropriate)\n4. performance before and after the PR\n\n\n### Licensing\n\nUnless you explicitly state otherwise, any contribution intentionally\nsubmitted for inclusion in the work by you, as defined in the\nApache-2.0 license, shall be dual licensed as above, without any\nadditional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqedprotocol%2Fplonky3-fibonacci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqedprotocol%2Fplonky3-fibonacci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqedprotocol%2Fplonky3-fibonacci/lists"}