Here's all you need to know to start contributing to kimchi.
- The following video goes over the project organization.
- The Mina book contains specifications, rust documentation, RFCs, and explainers on the different aspects of the system.
- The Discussion page can be used to start discussions or ask questions.
We have a list of easy task to start contributing. Start over there.
Make sure you have the GNU make utility installed since we use it to
streamline various tasks. Windows users may need to use the WSL to run make
commands. For the complete list of make targets, please refer to the
Makefile.
After the repository being cloned, run:
make setupthis will also synchronize the Git submodules to get the version of Optimism the zkVM has been developed for.
- Follow these instructions to install OCaml: https://ocaml.org/docs/install.html
- Follow these instructions to install Rust: https://rustup.rs/
Windows development can be done using Windows Subsystem for Linux (WSL).
- Install and open WSL
- Within WSL, install OCaml using your distro's package manager. For example:
apt install opam - Within WSL, navigate to the project directory and run
cargo test. If there are no failures then everything is set up correctly.
To run all tests:
make install-test-depsmake test-allmake nextest-allWe also provide the make targets to run tests with the code coverage
reporting, for example:
make test-all-with-coverageYou can also specify an extra CLI argument to make to pass it to the cargo or
binary, for example:
CARGO_EXTRA_ARGS="-p poly-commitment" make test-all-with-coverage
BIN_EXTRA_ARGS="-p poly-commitment" make nextest-all-with-coverageNote: In example above we run tests for the poly-commitment package only. You
can also use the environment variable BIN_EXTRA_ARGS to select a specific test
to run. For instance:
BIN_EXTRA_ARGS="test_opening_proof" make nextest
will only run the tests containing test_opening_proof.
We build and run tests in --release mode, because otherwise tests execution
can last for a long time.
To check formatting:
make formatTo scan for lints:
make lintNote: cargo can automatically fix some lints. To do so, add --fix to the
CARGO_EXTRA_ARGS variable and use it with the command above like this:
CARGO_EXTRA_ARGS="--fix" make lintFormatting and lints are enforced by GitHub PR checks, so please be sure to have any errors produced by the above tools fixed before pushing the code to your pull request branch. Please refer to CI workflow to see all PR checks.
Generally, proof-systems intends to be synchronized with the mina repository (see their README-branching.md), and so its branching policy is quite similar. However several important (some, temporary) distinctions exist:
compatible:- Compatible with
rampupinmina. - Mina's
compatible, similarly to mina'smaster, does not haveproof-systems.
- Compatible with
berkeley: future hardfork release, will be going out to berkeley.- This is where hotfixes go.
develop: matches mina'sdevelop, soft fork-compatibility.- Also used by
mina/o1js-mainando1js/main.
- Also used by
master: future feature work development, containing breaking changes. Anything that does not need to be released alongside mina.- Note that
mina'smasterdoes not depend onproof-systemsat all.
- Note that
izmir: next hardfork release after berkeley.- In the future:
master/developwill reverse roles and become something like gitflow.- After Berkeley release
compatiblewill become properly synced withmina/compatible.
- Direction of merge:
- Back-merging:
compatibleintoberkeleyintodevelopintomaster. - Front-merging (introducing new features): other direction, but where you start depends on where the feature belongs.
- Back-merging: