Zebra Crates
The Zebra project publishes around 20 crates to the Rust crates.io website.
Zcash Foundation crates are controlled by the ZcashFoundation/owners
GitHub team.
The latest list of Zebra and FROST crates is available on crates.io.
The Zebra repository can be used to publish the crates in this list that match these patterns:
- starts with
zebra
(includingzebrad
and thezebra
placeholder) - starts with
tower
We also depend on these separate ZF crates:
zcash_script
ed25519-zebra
And these crates shared with ECC:
reddsa
redjubjub
Logging in to crates.io
To publish a crate or change owners, you'll need to log in to crates.io using cargo login
.
When you create a token, give it an expiry date, and limit its permissions to the task you're doing. For example, if you're doing a release, create a token for releasing crates.
Tokens that allow changing owners should have the shortest expiry possible.
Revoke the token after you're finished using it.
Here is an example login command:
$ cargo login
please paste the token found on https://crates.io/me below
...
Login token for `crates.io` saved
Publishing New Crates
We publish a new placeholder crate as soon as we have a good idea for a crate name.
Before starting with the publishing, please clone zebra and use the main
branch to create the placeholder crate, you need cargo release
installed in the system and be logged to crates.io with cargo login
.
Next, execute the following commands to publish a new placeholder and set the owners:
cargo new new-crate-name
cd new-crate-name
cargo release publish --verbose --package new-crate-name --execute
cargo owner --add oxarbitrage
cargo owner --add conradoplg
cargo owner --add github:zcashfoundation:owners
Changing Crate Ownership
crates.io has two kinds of owners: group owners and individual owners. All owners can publish and yank crates. But only individual owners can change crate owners.
Zcash Foundation crates should have:
- at least 2 individual owners, who are typically engineers on the relevant project
- a group owner that contains everyone who can publish the crate
When an individual owner leaves the foundation, they should be replaced with another individual owner.
New crate owners should go to crates.io/me to accept the invitation, then they will appear on the list of owners.
Here are some example commands for changing owners:
To change owners of deleted/placeholder Zebra crates:
$ mkdir placeholders
$ cd placeholders
$ for crate in tower-batch-cpu zebra zebra-cli zebra-client; do cargo new $crate; pushd $crate; cargo owner --add oxarbitrage; cargo owner --remove dconnolly; popd; done
Created binary (application) `zebra-cli` package
~/zebra-cli ~
Updating crates.io index
Owner user oxarbitrage has been invited to be an owner of crate zebra-cli
Updating crates.io index
Owner removing ["dconnolly"] from crate zebra-cli
~
Created binary (application) `zebra-client` package
~/zebra-client ~
Updating crates.io index
Owner user oxarbitrage has been invited to be an owner of crate zebra-client
Updating crates.io index
Owner removing ["dconnolly"] from crate zebra-client
~
...
To change owners of zcash_script
:
$ git clone https://github.com/ZcashFoundation/zcash_script
$ cd zcash_script
$ cargo owner --add oxarbitrage
Updating crates.io index
Owner user oxarbitrage has been invited to be an owner of crate zcash_script
$ cargo owner --remove dconnolly
Updating crates.io index
Owner removing ["dconnolly"] from crate zcash_script
To change owners of current Zebra crates:
$ git clone https://github.com/ZcashFoundation/zebra
$ cd zebra
$ for crate in tower-* zebra*; do pushd $crate; cargo owner --add oxarbitrage; cargo owner --remove dconnolly; popd; done
~/zebra/tower-batch-control ~/zebra
Updating crates.io index
Owner user oxarbitrage already has a pending invitation to be an owner of crate tower-batch-control
Updating crates.io index
Owner removing ["dconnolly"] from crate tower-batch-control
~/zebra
~/zebra/tower-fallback ~/zebra
Updating crates.io index
Owner user oxarbitrage has been invited to be an owner of crate tower-fallback
Updating crates.io index
Owner removing ["dconnolly"] from crate tower-fallback
~/zebra
...