# Contributing
We welcome code and documentation PRs. It's probably best to start by
opening or commenting on an existing issue, since the code is in a state
of flux.
# Workflow
## Branches
Currently, the work on the `bulletproofs` crate is in two branches:
* `main` holds the latest released version;
* `develop` holds ongoing development work.
Pull requests should be made against `develop`, **not** `main`.
It's best to start a PR for every in-progress branch so that it's possible
to track all ongoing development work. Adding the `PTAL` (please take a
look) label indicates that the branch is ready for code review.
## Labels
Labels starting with `T-` are for labeling topics (`T-api`, `T-r1cs`, etc).
The `T-research` label indicates unsolved open problems.
Labels starting with `P-` are for priority levels.
Labels starting with `E-` are for effort estimates.
## CI
We enforce style in CI using `cargo fmt`.
The `bulletproofs` repo currently pins a Rust nightly. This means that
all `cargo` invocations made inside of the `bulletproofs` repo use the
pinned nightly version. This means that running `cargo fmt` in the
`bulletproofs` repo requires that `rustfmt` is installed *for the pinned
nightly toolchain*. To do this, run
```
rustup component add rustfmt-preview
```
while in the `bulletproofs` repo.
To run `rustfmt`, use
```
cargo fmt
```