协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
bitcoin-core-release-engineering【开发与工程】Bitcoin Core release engineering: Guix reproducible builds, signed release tarballs, deterministic outputs, code-signing keys, the release process, security disclosure. USE WHEN: building Bitcoin Core from source for verification, understanding release security, contributing to consensus-critical code.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Bitcoin Core ships reproducible builds: anyone with the source
GNU Guix is the deterministic build environment.
# In bitcoin/ source directory
./contrib/guix/guix-build
Outputs:
guix-build-<version>/output/x86_64-linux-gnu/bitcoin-<version>-x86_64-linux-gnu.tar.gzThe hash of these tarballs is what gets signed by maintainers.
Repository: github.com/bitcoin-core/guix.sigs. The Guix build runs in
two stages and each stage gets its own attestation, so after each
release trusted builders publish two signed hash files:
<version>/<builder-name>/noncodesigned.SHA256SUMS # stage 1: built from source
<version>/<builder-name>/noncodesigned.SHA256SUMS.asc
<version>/<builder-name>/all.SHA256SUMS # stage 2: + code signatures
<version>/<builder-name>/all.SHA256SUMS.asc
Stage 2 attaches the Windows/macOS detached code signatures distributed
from bitcoin-core/bitcoin-detached-sigs. all.SHA256SUMS covers every
binary uploaded to the website and is what release downloads should be
checked against (guix.sigs README, as of September 2026).
Verifying a release: download official binaries, compute SHA256, compare to entries from N independent builders. If they all match, no single builder could have introduced malware.
As of Bitcoin Core v22.0 releases are signed by a set of builder keys published in the guix.sigs repository, one file per signer:
github.com/bitcoin-core/guix.sigs → builder-keys/<signer>.gpg
The old contrib/builder-keys/keys.txt in bitcoin/bitcoin is gone —
it shipped through v24.0 and was removed in November 2022 (commit
e6864fa1, "contrib: remove builder keys"). The path 404s on master
and on every tag from v25.0 onward (checked September 2026).
Publication does have thresholds. doc/release-process.md (as of
September 2026) gates the upload step on "6 or more people [having]
guix-built and their results match", and the Windows/macOS detached
code signatures are only produced "once the Windows and macOS builds
each have 3 matching signatures". Those numbers bind the release
managers. They are not a verification rule for you — downstream you
still pick which builder keys to trust and how many matching
signatures to demand.
Core ships the supported one-command path, contrib/verify-binaries/verify.py:
# download SHA256SUMS(.asc) + binaries, check sigs then hashes
./contrib/verify-binaries/verify.py pub 31.1
# fetch unrecognised builder keys automatically
./contrib/verify-binaries/verify.py --import-keys pub 31.1
# demand more attestations than the default of 3
./contrib/verify-binaries/verify.py --min-good-sigs 10 pub 31.1
Builders rotate keys and the signer set changes between releases; read
builder-keys/ as of the version you are verifying, not an old copy.
NN.x branched off master (e.g. 31.x).rc1, rc2, ...).doc/release-process.md (as of
September 2026): the bitcoin-dev and bitcoin-core-dev mailing lists,
the Bitcoin Core announcements list
(https://bitcoincore.org/en/list/announcements/join/) and the
project's social account. A bitcoincore.org blog post and the
maintained-versions table are updated in the same pass.To verify a downloaded tarball before building:
# Get GPG keys
gpg --keyserver hkps://keys.openpgp.org --recv-keys <maintainer-fingerprint>
# Verify
gpg --verify SHA256SUMS.asc SHA256SUMS
sha256sum -c SHA256SUMS
For Linux: no platform-level signing (rely on Guix + GPG).
bitcoind does NOT self-verify on each run. The integrity check is
done at install time:
sha256sum bitcoin-31.1-x86_64-linux-gnu.tar.gz
# compare to entries in SHA256SUMS
security@bitcoincore.org for security issues.
Embargoed disclosures: maintainers coordinate fixes across exchanges,
miners, services before public release.
Process documented in SECURITY.md of the repo.
Medium- and High-severity advisories are published about two weeks after the last affected version goes EOL, so the public CVE list lags the fix by a long way (Low severity is disclosed two weeks after the fixed major ships; Critical is handled ad hoc). Policy as of September 2026 — see https://bitcoincore.org/en/security-advisories/. CVE-2024-52911 (High; use-after-free — a background script-check thread could read the precomputed transaction data after it was destroyed; affects 0.14.0 through 28.x) was reported 2024-11-02, fixed in 29.0 (April 2025) and disclosed 2026-05-05, just over two weeks after 28.x went EOL on 2026-04-19. So "no advisory against this major" is not evidence it is safe. For the resulting version floor see operations/SKILL.md, "Security advisories and minimum safe version".
Bitcoin uses ad-hoc severity classification:
Past vulnerabilities like CVE-2018-17144 (inflation bug) → fixed silently before public disclosure.
master — current development.NN.x — one maintenance branch per major version.32.x is branched for the in-flight v32.0 (v32.0rc1 tagged
2026-09-14); when v32.0 ships, 29.x goes EOL.