15 releases (8 breaking)
0.10.0 | Jul 11, 2024 |
---|---|
0.8.0 | May 16, 2024 |
0.5.2 | Feb 21, 2024 |
0.2.13 | Nov 21, 2023 |
0.2.9 | Jul 25, 2023 |
#13 in #exports
1.5MB
9K
SLoC
chik_rs
A collection of Rust crates for working with the Chik blockchain. There are also Python bindings in the form of a wheel.
Prerequisites
- Python 3.8 or higher installed.
- The Rust toolchain must be installed.
Unit Tests
To run the unit tests for the whole workspace:
cargo test --workspace
Some slow tests are only enabled in optimized builds, so it may also be a good idea to run the tests in release mode:
cargo test --workspace --release
Python Linking
You may need a Python virtual environment activated for the tests to link properly, due to the pyo3
dependency in wheel
.
You can setup a virtual environment with the following command:
python3 -m venv venv
Activate the virtual env:
. ./venv/bin/activate
Python Tests
The wheel
crate is a single Python wheel that exports bindings to various functionality in the repository, mostly from chik-consensus
and chik-protocol
.
It's built with maturin
, so you need to have activated a python virtual environment for the build to work.
The bindings are tested with pytest
. Before you run them, install the following dependencies:
pip install pytest maturin typing-extensions chik-blockchain==2.1.2
And build the Python wheel:
maturin develop -m wheel/Cargo.toml
Finally, you can run the Python binding tests:
pytest tests
Note that these tests can take several minutes to complete.
Benchmarks
To run benchmarks for a specific crate before you make changes:
cargo bench -- --save-baseline before
After you apply the changes, finish the benchmark:
cargo bench -- --save-baseline after
critcmp after before
You can also run all the benchmarks by including --workspace
.
Note that you must include the flag before the --
, for example:
cargo bench --workspace -- --save-baseline before
Precommit Hook
This repository has a pre-commit configuration, which is hooked into git by running:
pre-commit install --hook-type pre-commit --hook-type pre-push
It runs Prettier and then cargo fmt
on all crates on every commit. When you push, it runs cargo clippy
, cargo test
, and cargo build
.
To run all checks explicitly (without pushing), run:
pre-commit run --all --hook-stage pre-push
Fuzzers
Fuzzers can't be run or listed for the whole workspace, but only for individual crates. There is a tool to generate a fuzzing corpus from a blockchain database.
It's run like this:
cd crates/chik-tools
cargo run --release --bin gen-corpus -- --help
The following crates have fuzzers:
- chik-bls
- chik-consensus
- chik-protocol
- chik-puzzles
- klvm-utils
To list and run fuzzers:
cargo fuzz list
cargo fuzz run <name-of-fuzzer>
Bumping Version Number
Make sure you have cargo-workspaces
installed:
cargo install cargo-workspaces
To bump the versions of all relevant crates:
cargo ws version --all --no-git-commit
Select "minor update" if there has not been any incompatible API changes, otherwise "major update".
Dependencies
~10–21MB
~389K SLoC