Skip to content
Daira Hopwood edited this page Jul 17, 2016 · 26 revisions

Development

Make sure to read our Home#Background and Home#Design Goals.

We achieve our design goals primarily through this codebase as a reference implementation. This repository is a fork of bitcoin core and our implementation is a set of git commits on top of upstream Bitcoin releases. This implements the Zerocash protocol and a few other distinct features.

We use a homu instance called zkbot to merge all PRs. (Direct pushing to the "latest" branch of the repo is not allowed.) Here's just a quick overview of how it works.

If you're on our team, you can do @zkbot <command> to tell zkbot to do things. Here are a few examples:

  • r+ [commithash] this will test the merge and then actually commit the merge into the repo if the tests succeed.
  • try this will test the merge and nothing else.
  • rollup this is like r+ but for insignificant changes. Use this when we want to test a bunch of merges at once to save buildbot time.

More instructions are found here: http://ci.leastauthority.com:12477/

Our git branches and tags always follow this schema:

zc.<UPSTREAM TAG>.<ZC DETAIL>

Some example branches are:

zc.v0.11.1.latest
zc.v0.10.0.ticket197.python3-compat.0

The parts of this schema are as follows:

zc.
Our git branches and tags always begin with the prefix zc.. The goal is to disambiguate our branches/tags from upstream within the same repository. (This is predicated on upstream not using that prefix.)
<UPSTREAM TAG>
All of our changes are commits on top of an upstream core release tag. This field is the literal tag.
<ZC DETAIL>
  • latest is the most recent "development" branch based on the given upstream release. As we transition to newer upstream releases, older zc.<OLD UPSTREAM TAG>.latest branches will become dormant and contain a subset of our newer development changes.

Our development branches have the form zc.<UPSTREAM TAG>.latest, and when they are rebased, the new branch has a new name, since the <UPSTREAM TAG> field has changed. For example zc.v0.10.0.latest may be rebased to a new upstream release and the new branch zc.v0.11.2.latest.

  1. Fork our repository
  2. Create a new branch with your changes
  3. Submit a pull request

Zcash release tags will take the following form:

zc.<UPSTREAM TAG>.z<N>

The parts are:

<UPSTREAM TAG>
Described above.
<N>
The Zcash revision. This number resets to zero every time <UPSTREAM TAG> changes, and increments with each new Zcash release upon the same <UPSTREAM TAG>.

Commit messages should contain enough information in the first line to be able to scan a list of patches and identify which one is being searched for. Do not use "auto-close" keywords -- tickets should be closed manually. The auto-close keywords are "close[ds]", "resolve[ds]", and "fix(e[ds])?".

Watch the Buildbot. Because the Buildbot is watching you.

These are historical, probably bit-rotted, but also probably full of important nuggets: