github Chia-Network/chiavdf 1.2.0

4 hours ago

Changes since 1.1.14 (released 2025-11-05).

Highlights

  • Cross-platform ASIC/hardware timelord support for Linux (x86_64 and arm64), macOS ARM64, and Windows, including emulator coverage.
  • ARM64 NUDUPL and MASM VDF paths, plus proof-construction and arithmetic performance improvements.
  • Hardening for discriminant/proof bounds, strict BQFC deserialization, buffer handling, and Windows LLP64 correctness.
  • macOS and Windows release bundles (now signed, notarized and installable), GMP 6.3.0, and atomic GitHub release-asset publishing.
  • Python 3.11–3.14 wheels, PEP 561 type stubs, and refreshed timelord/ASIC documentation.

Thanks to our contributors: @Frank-Buss, @manoj398, @OverActiveBladderSystem and @xearl4.

Upgrade notes

  • Python 3.11 or newer is now required. Python 3.9 and 3.10 are no longer supported.
  • Wheels are built for CPython 3.11–3.14 on Linux x86_64/arm64, macOS Intel/Apple Silicon, and Windows x64.
  • The minimum supported macOS version is now 15.
  • The Python extension module moved to the private chiavdf._chiavdf; import chiavdf and the public API are unchanged.
  • Windows release binaries are now signed with Azure Artifact Signing instead of DigiCert, and the Windows zip places DLLs beside the executables.

Core

  • ARM64 NUDUPL VDF path — The main VDF loop now uses the C++ NUDUPL implementation on ARM64, with x86-only pipeline and assembly paths guarded so Apple Silicon and Linux aarch64 get a fast, maintainable native path. (#298)
  • MASM VDF path and base-integer VDF — Integrates the ARM64 NUDUPL work into the core, adds a MASM assembly path for Windows, and adds listener/profile support so Windows builds can use the optimized implementation. (#300)
  • Cross-platform hardware VDF client — hw_vdf_client now builds on Linux, macOS arm64 and Windows, with FT4222 driver provisioning scripts for each OS and hardening of the callback and prover paths. (#299)
  • Faster proof checking — qfb_nucomp now reuses per-thread GMP scratch space as qfb_nudupl already did, and exponents are checked four bits at a time, reducing allocation and work in the proof checker. (#431), thanks @OverActiveBladderSystem!
  • Bounded ASIC proof checkpoints — ASIC proof construction now bounds its checkpoints and shares a single NUCOMP scratch across persistent aux workers, keeping memory use predictable. (#434)
  • Glitched ASIC proofs are dropped — An invalid intermediate value from the hardware now causes that proof to be discarded instead of terminating the process or stalling the session. (#435)
  • Auto-frequency PLL bounds — The hardware auto-frequency loop now stays within the PLL frequency table at both ends instead of stepping past it. (#440)
  • Windows LLP64 correctness — Fixes 64-bit integer truncation in Reducer and xgcd_partial on 64-bit Windows, where long is 32 bits, so results match Linux and macOS. (#419), thanks @manoj398!
  • Windows 128-bit integer backend — Removes non-standard std trait specializations from the vendored uint128_t and unifies backend selection under CHIAVDF_USE_UINT128_T_FALLBACK, fixing builds on newer MSVC toolsets. (#375)
  • Windows MPIR CPU detection — Windows builds now pin the MPIR build that selects code paths by CPUID feature detection, so binaries run correctly across CPU generations. (#423)
  • GMP 6.3.0 — Updates GMP to 6.3.0 with patches so Linux builds work correctly on older CPUs without BMI2. (#270)
  • Prover header cleanup — Fixes a One Definition Rule mismatch in Prover::GetForm and consolidates Prover/ParallelProver into a single shared declaration. (#306, #307, #308), thanks @xearl4 for #306!
  • Test-only code out of production builds — Test-only headers in vdf.h are now gated behind VDF_TEST, so production builds such as vdf_client no longer compile the unused reference path. (#396)
  • --version flag — vdf_client, vdf_bench, hw_test and hw_vdf_client now print their embedded version with --version. (#314)
  • Python type stubs — chiavdf now ships PEP 561 py.typed and __init__.pyi stubs, checked by stubtest in CI. (#366)

Hardening

  • Input validation for discriminants and proofs — Adds explicit runtime bounds checks for discriminant size and form serialization in the verifier and BQFC paths, replacing assert-only assumptions, and makes vdf_client session parsing return clean errors. (#331)
  • Discriminant size validation — CreateDiscriminant now rejects non-positive, oversized and non-multiple-of-8 sizes and empty seeds. (#286)
  • Strict BQFC canonical forms — Strict-mode BQFC decoding now accepts only reduced forms, so each form has a single canonical encoding. (#335)
  • Session setup buffer checks — InitSession in vdf_client now validates sizes before using them. (#296), thanks @Frank-Buss!
  • Checked parameter conversions — ApproximateParameters replaces unchecked float/integer casts with range-checked conversions. (#316)
  • Tiny-iteration ProveSlow — Guards parameter estimation for very small iteration counts, fixing a crash on macOS ARM. (#318)

Signing and release packaging

  • macOS release bundle — Adds signed macOS ARM64/x86_64 Homebrew-ready release bundles with private FTDI libraries and portable install names. (#319)
  • GMP bundled on macOS — The macOS release zip now bundles GMP, so the hardened-runtime binaries launch without depending on Homebrew paths. (#437)
  • Signed, notarized macOS .pkg — Adds a Developer ID Installer–signed, notarized and stapled .pkg to the macOS release assets alongside the Homebrew zip. (#443)
  • Windows bundle and winget packaging — Adds a Windows CLI bundle, release-artifact upload and signing for release builds. (#323)
  • Windows zip layout — The Windows zip now places the MPIR and FTDI DLLs beside the executables so they launch without extra setup. (#436)
  • Azure Artifact Signing — Windows release signing moves from DigiCert to Azure Artifact Signing, authenticating with an OIDC federated credential instead of stored certificate secrets. (#444)
  • Ubuntu ARM64 packages — Builds and uploads .deb packages for both Ubuntu x86_64 and arm64. (#320)
  • Atomic release publishing — GitHub release assets are attached only after every matrix job succeeds, instead of piecemeal from each job. (#438)
  • Downstream trigger after all builds — The release notification to downstream packaging now runs in its own job after every build finishes. (#321)
  • Release 1.2.0 — Bumps the Rust crate to 1.2.0 and requires Python 3.11+. (#442)

Build and CI

  • Unified CI workflow — Merges the vdf_client and hw_vdf_client workflows into one cross-platform workflow, and reorders regressions after the hardware smoke tests. (#311, #324)
  • macOS 15 minimum — Raises the macOS minimum and runners to 15, and fixes the resulting Intel build and packaging issues. (#326, #327)
  • Windows CI fixes — Fixes Windows assembly CI and aligns optimized test coverage with other platforms. (#304)
  • Less warning noise — Reduces compiler warnings across Ubuntu, macOS and Windows and fixes Windows optimized build regressions. (#315)
  • Runner naming — Uses GitHub's ubuntu-24.04-arm runner label and simplifies non-matrix jobs. (#347)
  • Python version support — Raised the floor to 3.10, then retired 3.10 wheels and moved package CI to Python 3.12 with a single pinned cibuildwheel version. (#389, #333, #428)
  • Wheel build fixes — Fixes the cibuildwheel skip pattern, unblocks setuptools-scm 10.2.3 wheel builds on macOS/Windows, and downloads GMP from the kernel.org mirror after ftp.gnu.org timeouts. (#288, #411, #418)
  • Node 24 actions — Replaces the unmaintained stale fork with actions/stale v11 and moves the MSVC setup step to a Node 24 action. (#448, #445)
  • Managed workflow updates — Syncs the shared dependency review, commit-signing and Dependabot workflows from the organization template, including tighter workflow permissions. (#284, #329, #332, #340, #341, #342, #343, #344, #346, #360, #363, #378, #382, #393, #399, #406, #412, #420, #421, #422, #424, #426, #446)

Tests

  • GoogleTest regressions — Adds regression tests for vdf_client session parsing, compressed form/proof deserialization and tiny-iteration ProveSlow, consolidated into fewer test binaries. (#313, #317)
  • ASIC failure tests — Tightens the abandoned-interior proof tests so they exercise the cancellation mechanism they are named for. (#447)
  • Fuzzing — Rust fuzz targets now use typed Arbitrary inputs and cover recursion and larger iteration counts; the fuzzer builds with hardening and Rust bindings build on macOS; the cargo-fuzz install falls back when nightly drifts. (#290, #289, #358)

Documentation

  • Timelord and ASIC guides — Rewrites README_ASIC.md as a build and operations guide for Linux, macOS and Windows, adds software vs. ASIC timelord setup paths to the README, and moves historical competition background to its own file. (#432, #441)
  • License — Updates the copyright year to 2026. (#295)

Dependencies

Don't miss a new chiavdf release

NewReleases is sending notifications on new releases.