chikvdf implements the Verifiable Delay Function used by Chik's timelord. It builds on Linux (x86_64 and arm64), macOS (Intel and Apple Silicon), and Windows (x64), and produces:
vdf_client- the CPU software timelord client.vdf_bench- a CPU benchmark for estimating iterations per second.hw_vdf_clientandhw_test- the Chik VDF ASIC client and board test.emu_hw_vdf_clientandemu_hw_test- hardware-free emulators for CI and development.- The
chikvdfPython bindings used by chik-blockchain to validate proofs of time, plus optionalchikvdfcshared/static libraries.
CI builds the CPU and ASIC binaries on all of those platforms. The ASIC emulator tests run without a board.
A timelord needs a synced Chik full node and one or more VDF clients connected to the timelord's port 8000. Choose the CPU or ASIC path below.
Use vdf_client. The normal installation path is chik-blockchain's
install-timelord.sh,
which installs the chikvdf package and builds vdf_client from source. Then
start the full node, timelord, and launcher:
chik start node timelordThe launcher starts the software vdf_client processes. For full node and
timelord setup, see the
Chik timelord install guide.
To build and test the client directly from this repository, see
Building Timelord and related binaries.
Use hw_vdf_client with a Chik VDF ASIC board. Hardware support is available
on Linux x86_64 and arm64, macOS Intel and Apple Silicon, and Windows x64.
chik-blockchain does not start the hardware client, so start the node and
timelord without the software launcher, then start the client yourself:
chik start node timelord-only
hw_vdf_client 8000 3See
README_ASIC.md
for board and FTDI requirements, packaged and source builds, --device-loc
when using multiple boards, timelord allowlisting, service setup, and
troubleshooting. emu_hw_vdf_client and emu_hw_test let you exercise the
hardware paths without a board.
The published chikvdf wheels contain the native verifier bindings that
chik-blockchain uses to validate proofs of time. This lets a node install a
prebuilt wheel instead of compiling the C++ library itself.
The Python bindings require Python 3.11 or newer. Building them requires CMake, a C++17 compiler, and GMP (MPIR on Windows). Building the timelord client and tests also requires Boost headers.
python3 -m venv venv
source venv/bin/activate
pip install wheel setuptools_scm pybind11
BUILD_VDF_CLIENT=N pip wheel .BUILD_VDF_CLIENT=N builds only the Python extension. The next section
builds the CPU timelord client and related binaries.
The Python wheel build uses GitHub Actions to build binary wheels for Linux
(x86_64 and arm64), macOS (Intel and Apple Silicon), and Windows (x64), and
publishes them, plus a source distribution, to PyPI. See
.github/workflows/build.yml. CMake uses the installed pybind11 package when
available and falls back to
FetchContent
to download pybind11.
cibuildwheel manages the wheel
builds. Install a published wheel with pip install chikvdf.
The same source tree also builds the CPU timelord client and benchmark on
Linux, macOS, and Windows. vdf_client is the CPU process that computes the
Proof of Time requested by the timelord. vdf_bench estimates iterations per
second on a given CPU. Try ./vdf_bench square_asm 250000 on x86/x64 for the
phased/asm pipeline. On non-x86 architectures, use
./vdf_bench square 250000 (NUDUPL).
Set CHIKVDF_LOG_AVX=1 to emit AVX feature detection logs during startup.
For the ASIC client, hw_vdf_client, see
README_ASIC.md.
For direct CMake builds, the following options are available:
BUILD_VDF_CLIENT- buildvdf_clientBUILD_VDF_BENCH- buildvdf_benchBUILD_VDF_TESTS- build test binaries (1weso_test,2weso_test,prover_test) and CTest/GoogleTest targets (for examplevdf_client_session_test)BUILD_HW_TOOLS- build the ASIC timelord tools (hw_vdf_client,hw_test, emulators, andhw_proof_wait_test)ENABLE_GNU_ASM- enable GNU-style asm pipeline on x86/x64 (enabled by default)GENERATE_ASM_TRACKING_DATA- enabletrack_asm()instrumentation in generated asm (off by default to avoid hot-loop overhead)
Example:
cmake -S src -B build \
-DBUILD_PYTHON=OFF \
-DBUILD_CHIKVDFC=OFF \
-DBUILD_VDF_CLIENT=ON \
-DBUILD_VDF_BENCH=ON \
-DBUILD_VDF_TESTS=ON
cmake --build build --target vdf_client vdf_bench 1weso_test 2weso_test prover_test vdf_client_session_testFor the ASIC tools, add -DBUILD_HW_TOOLS=ON and follow
README_ASIC.md
for FTDI libraries and the Windows clang-cl/Ninja setup used by CI.
The legacy setup.py + Makefile.vdf-client flow runs make for native
binaries when either BUILD_VDF_CLIENT=Y (the default) or
BUILD_VDF_BENCH=Y is set. Set both to N to skip native binaries. The
Makefile's default target builds vdf_client, vdf_bench, and the integration
test binaries; for selective builds, call
make -f Makefile.vdf-client <target> directly.
For direct CMake builds, use -DBUILD_* flags instead.
AVX runtime flags:
CHIKVDF_LOG_AVX=1: emit AVX detection logs at startupCHIK_DISABLE_AVX2=1: disable AVX2 path even when supportedCHIK_FORCE_AVX2=1: force AVX2 pathCHIK_DISABLE_AVX512_IFMA=1: disable AVX-512 IFMA pathCHIK_ENABLE_AVX512_IFMA=1: enable AVX-512 IFMA path when CPUID support is presentCHIK_FORCE_AVX512_IFMA=1: force AVX-512 IFMA path
The chik-blockchain
install-timelord.sh
script automates the software timelord installation and builds the
vdf_client binary from the chikvdf package.
The following tests are available, depending on which type of timelord you are running:
./1weso_testforsanitizer_mode../2weso_testfor a timelord that extends the chain with the slow algorithm../prover_testfor a timelord that extends the chain with the fast algorithm.
Those tests simulate vdf_client and verify that the produced proofs are
correct.
Note: ./prover_test defaults to a long soak/stress run. Set
CHIKVDF_PROVER_TEST_FAST=1 to run a short, CI-friendly correctness check.
Regression tests for specific bugs use GoogleTest and run via CTest. Example:
cmake -S src -B build \
-DBUILD_PYTHON=OFF \
-DBUILD_CHIKVDFC=OFF \
-DBUILD_VDF_CLIENT=OFF \
-DBUILD_VDF_BENCH=OFF \
-DBUILD_VDF_TESTS=ON \
-DBUILD_HW_TOOLS=OFF
cmake --build build --target vdf_client_session_test
ctest --test-dir build --output-on-failure -R '^regression\.'- Binary integration tests:
1weso_test,2weso_test,prover_test; these simulatevdf_clientand validate proof correctness. - Regression tests: GoogleTest targets executed via CTest (for example
vdf_client_session_test, typically filtered withctest -R '^regression\.'). - Hardware tests: standalone binaries such as
hw_test,emu_hw_test, andhw_proof_wait_test; build and run instructions are inREADME_ASIC.md.
Fuzz targets live under rust_bindings/fuzz. The prove target includes an
iteration cap to avoid out-of-memory conditions in CI. If you want deeper
iteration coverage, raise the cap in rust_bindings/fuzz/fuzz_targets/prove.rs
after validating memory usage and exec/s on your runner.
Contributions are welcome. More details are available in chik-blockchain's CONTRIBUTING.md.
main is the default branch. Tagged releases are published to PyPI and
consumed by chik-blockchain, so main can be ahead of the version
chik-blockchain currently pins. Branch from main, open a pull request against
main, and make sure the CI build and CodeQL analysis pass. Merging requires a
completed review.
The original VDF competition background, attribution, and implementation notes are in README_BACKGROUND_COMPETITION.md.