Skip to content

rbitcoin v0.8.0

Latest

Choose a tag to compare

@github-actions github-actions released this 10 Oct 00:13
· 960 commits to master since this release
4b35535

rbitcoin v0.8.0

Linux musl x86_64 is the operator binary (statically linked).
Windows is CRT-static PE (no IoRing). Darwin aarch64 is ad-hoc
codesigned, not notarized (xattr -d com.apple.quarantine).

Highlights

  • Schema 26 opens a 0.7 datadir in place. Schema 24 and 25 rewrite
    header.body from 96 B to 88 B and meta to 26. A store older than schema
    22, including occupied 0.6.x, refuses with one wipe-and-IBD line.
  • Mainnet script skip is path-anchored. The default milestone still names
    height 840000 and block
    0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5. Scripts
    skip only on that header path once chain work meets Core
    nMinimumChainWork. Signet’s default milestone is 0 (every script). An
    explicit --milestone HEIGHT stays height-only.
  • Initial sync keeps moving on ordinary connections. One peer serves
    headers. The others download blocks, at most 64 blocks or 16 MiB in
    flight, sized from recent bodies. A peer holding the tip block is
    replaced only after 5 seconds, and only when a free peer would finish
    it in half the time. A full serve queue waits out the rest of a
    getdata instead of dropping it.
  • Consensus checks match Bitcoin Core where they used to disagree.
    BIP30 is off only when the header at BIP34 height is that network’s
    BIP34 block, and it is always on from height 1,983,702. A confirm batch
    cannot spend an output created by a later block in that batch. The
    genesis coinbase is not a spendable coin. An empty signature in legacy
    CHECKMULTISIG deletes OP_0 from scriptCode. A bad copy of a valid
    block is requested again and is not cached as invalid.
  • Peers and RPC fail closed under load. Counts above 50,000 in inv,
    getdata, and notfound fail decode. Compact-block and block
    transaction counts are rejected before allocation. The RPC body cap is
    2 MiB, and a full work queue is HTTP 503 before the handler. A session
    pauses once its outbound queue passes 4 MiB. An unpaged scripthash join
    above --max-sh-creates (default 10000) is refused.
  • Wallets, Lightning nodes, and explorers have a setup guide.
    docs/wallets.md and docs/lightning.md. Electrum and Esplora serve
    Electrum, Sparrow, Liana, Specter, Cake Wallet, BlueWallet, BitBox App,
    Envoy, and BDK (including Alby Hub). Wasabi’s full-node path uses
    getblockfilter and --rpc-cookie-file (HTTP Basic on TCP).
    getnetworkinfo.version stays 190000 (Core 0.19’s client integer); the
    semver stays in subversion. CLN (bcli and sauron), ldk-node
    (Esplora, Electrum, or REST), and LND with bitcoind.rpcpolling use
    this node as the chain source. Esplora /internal/* on the unix socket
    is the mempool.space electrs drop-in. /fee-estimates keeps the
    estimator’s precision. /fees/recommended and /ws are 404.
  • Feerate uses sigop-adjusted size. Admission, RBF, eviction, estimates,
    and -blockmintxfee use max(weight, sigop_cost × bytes_per_sigop)
    (default 20, --bytes-per-sigop, 0 disables). A transaction whose sigop
    cost reaches the template budget is rejected. Template selection applies
    the mintxfee floor per chunk and keeps the block sigop cap.
  • Fee quotes follow a log grid and a fullness blend. About 100 steps per
    decade from min relay (0.1 sat/vB) through 1000 sat/vB, plus one open
    bucket above that. The published rate is (1−α)·history + α·live flow.
    α is decayed admitted weight over about 1.44M WU (150s half-life). History
    is filled from txstat (at most 1 GiB; each block’s vsize-weighted p10
    of individual rates). estimatesmartfee returns {feerate, blocks}, or
    {errors, blocks} with no feerate when it has no estimate, and
    feerate is at least mempoolminfee.
  • Block filters and silent-payment tweaks build during IBD, and after
    it when they are behind.
    With the index on from the start, each
    confirmed block is built on the script pool and appended on the confirm
    write. A restart gap of at most 2,016 blocks is sealed before confirm.
    A larger gap, including an index enabled on an already synced datadir,
    is built afterward by rbtc-idx-wb (index: build) and does not hold
    the node in initial download. NODE_COMPACT_FILTERS is advertised once
    filters reach the tip. With --datadir-cold, blockfilter and
    sp_tweaks must sit on the cold store.
  • Spend annotations recover after a crash past the tip seal. A missing
    spent slot stays unspent until open replays above the spend_durable
    marker. rbtc-spend-sync checkpoints about every ten minutes, and once
    more on shutdown.

Thanks to @otaliptus for the security review, and to @dergoegge, @Rob1Ham, and @1440000bytes for earlier findings.

Thanks to @benthecarman, @average-gary, @bobberb, @Hero-Gamer, @bkeroack, @xstoicunicornx, and @RandyMcMillan for changes in this release.

Full notes: CHANGELOG.md ## [0.8.0].