-
Dobbscoin Core v0.13.8 Stable
released this
2026-09-18 14:33:59 +00:00 | 4 commits to main since this releaseConsensus
CHECKLOCKTIMEVERIFY (BIP65).
OP_NOP2becomesOP_CHECKLOCKTIMEVERIFY, enforced from
block 2,000,000 on mainnet, the same height as the AuxPoW merge-mining fork, so the network
takes one upgrade instead of two. Below that height the opcode behaves exactly as it always did,
which is what keeps this a soft fork. This is what atomic swaps need; nothing else in the release
depends on it.Signature verification moved from OpenSSL to libsecp256k1 v0.5.1. Validation no longer depends
on which OpenSSL version a binary happened to link against. Unlike CLTV this is live the moment
the node runs, not at a future height. Signing already used libsecp256k1; only verification was
on the OpenSSL path.Block-version comparisons read the base version. Past block 2,000,000 the AuxPoW chain ID
occupies the high bits ofnVersion, so every block reads as version 11,534,339 and a plain
nVersion >= Ncomparison is true for every N. Six comparisons, including the soft-fork majority
checks, now callGetBaseVersion(). A no-op below 2,000,000 and the reason soft-fork logic still
means something above it.Network
A peer running an older protocol version is no longer refused.
MIN_PEER_PROTO_VERSIONwas
defined asPROTOCOL_VERSIONitself, so the next bump of the protocol version, for any reason at
all, would have made the new release refuse every node already on the network while those nodes
happily accepted it. Nothing changes today; the floor is the literal 70005, where the network has
been since the v10.2.0 hardfork.Ten spare DNS seeds.
seed1.dobbscoin.infothroughseed10.dobbscoin.infoship alongside
seed.dobbscoin.info. They have resolved since 2026-08-16; until now the client asked for one of
them. One seed name is one thing to break.A peer-selection loop no longer burns a CPU core.
CAddrMan::Select_()retried an unbounded
random walk over a sparse address table, and on a node with few known addresses it could spin at
essentially 100% of a core indefinitely. It is bounded now, and it stops using the slow RNG to do
it. Measured on a real node: 99.2% of a core before, 0.1% after.Wallet
The pool field defaults to
pool.dobbscoin.info:3033. A blank field sent miners to 3032 at
difficulty 15,000, where a small rig finds nothing and sees no error. 3033 starts at difficulty 4.Node operators
-assumevalid=<blockhash>. Skips signature verification for the named block and everything
before it, which until now only the last checkpoint could do. It defaults to block 1,890,000 and
-assumevalid=0turns it off and verifies everything. This is a local sync-speed setting: it
relaxes no consensus rule, every other check still runs on every block, and a block that fails one
is still rejected. The named block has to be on the header chain the node is actually following, so
a low-work chain cannot talk a node out of verifying.getblockheader, andgetblockaccepts an integer verbosity. Standard RPC shapes that tooling
expects.Developer
qa/run-all.shruns every suite in the tree in one command: the unit tests, the CLTV and AuxPoW and
assumevalid chain harnesses, and all twenty functional tests. 25 suites, 0 failures, about five
and a half minutes.The twenty functional tests in
qa/rpc-testshad not run in years; they were written for Python 2.
They run again. Regtest also stopped retargeting its difficulty, which it had been doing from block
20 on a chain whose block times are all zero, hardening the target by three orders of magnitude and
taking mining from 30 milliseconds a block to 33 seconds.
Should you upgrade?
Miners and pool operators: yes, before block 2,000,000 (roughly 2027-01-24 at 120-second
spacing). CLTV is a soft fork, which means it makes previously-valid things invalid. A miner running
older software past that height can mine a block that violates a CLTV lock; upgraded nodes will
reject it and that block is lost. There is no version signaling to warn anyone first: the AuxPoW
chain ID makes version bits unreadable past 2,000,000, so activation is by height, flag-day style.Everyone else: yes, whenever convenient. The addrman fix is the one change with an effect you
can see today. A node older than this release still follows the chain until 2,000,000, and v0.12.0
remains the floor for the AuxPoW fork itself.Evidence behind the consensus changes
- 68,863 real mainnet transactions revalidated with the new verification path:
verifychain 4 50000, heights 1,855,101 to 1,905,101, all above checkpoint 1,848,000 so signatures are genuinely
checked. No inconsistencies. - That harness was proved by sabotage, not trusted: patching
Verifyto fail after its first
200 calls makes the same check return false. - High-S signatures proved by mutation. Low-S is not a consensus rule on this chain, so a
libsecp256k1 port that normalises wrong would reject blocks an OpenSSL node accepts. Deleting the
normalisation line makes a real high-S spend get rejected on a real chain while the entire unit
test suite still passes. - A/B against production. A node running this build followed mainnet alongside a node running
v0.13.7, compared every five minutes on tip hash rather than height. Zero divergences. -assumevalidproved by sabotage too. With an abort wired into the signature-checking branch,
a node with-assumevalidset syncs the whole chain and the control node stops dead at the first
block carrying a spend.- CLTV activation suite 3/3, signature normalisation suite 2/2, on freshly built binaries.
- AuxPoW regtest suites: RPC contract 6/6 and the consensus path 9/9, the latter accepting a real
merge-mined block and refusing eight malformed proofs, each for its own distinct reason. - Full unit suite 163 cases, no errors, and the encrypt-wallet round trip passes.
The test suite passes, for the first time
test_dobbscoinhad reported failures for years: 62 of them, then 42 after signature verification
moved to libsecp256k1. It is now 163 test cases with no errors. The last 42 were fixtures, not
code —script_tests.cppbuilds its cases at run time and asserts each appears in
script_valid.json/script_invalid.json, and 42 did not, each differing from a same-named entry
only in the signature bytes. The missing vectors were merged in rather than overwriting the files,
which would have deleted about a thousand hand-written ones.That matters more than it sounds: while 42 tests were red, a new regression was indistinguishable
from the standing noise.What the Linux builds need
The
.tar.gzbuilds are dynamically linked. On Debian or Ubuntu:sudo apt install libnatpmp1 libminiupnpc17 libssl3 \ libboost-chrono1.74.0 libboost-filesystem1.74.0 \ libboost-program-options1.74.0 libboost-thread1.74.0Most systems have all of these except
libnatpmp1. Without it the daemon fails in the loader
before it can say anything itself:error while loading shared libraries: libnatpmp.so.1That is a missing package, not a bad download. This has been true of every Linux build since
v0.13.5, when NAT-PMP was added; it went unnoticed because our own nodes were older than the
feature. The AppImage bundles all of them and needs none of this.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download
- 68,863 real mainnet transactions revalidated with the new verification path: