This week’s newsletter includes a notice of Bitcoin Core 0.17’s impending release, links to the backport releases of Bitcoin Core 0.15 and 0.14 to fix the CVE-2018-17144 duplicate inputs bug for those users unable to run more recent releases, a brief description of a chainsplit on testnet, and links to notable merges in Bitcoin infrastructure projects.
- ● Upgrade to Bitcoin Core 0.17: the new release has been tagged and several people have begun reproducing builds of the software, so the binaries and formal release announcement are likely to become available Tuesday or Wednesday on BitcoinCore.org. The announcement will include a copy of the release notes detailing major changes to the software since the 0.16.0 release.
● Bitcoin Core 0.15.2 and 0.14.3 released: although source code has been available for these older branches since the public announcement of the CVE-2018-17144 duplicate inputs bug, getting enough people to certify a reproducible build took extra time before the binaries could be made available.
● CVE-2018-17144 duplicate inputs bug exploited on testnet: last Thursday a block was created on testnet containing a transaction that spent the same input twice. As expected, nodes believed to be vulnerable to the bug accepted the block and all other nodes rejected it, leading to a consensus failure (chainsplit) where the chain with the most proof of work contained the duplicate inputs and a weaker chain did not.
Eventually, the chain without the duplicate inputs gained more proof of work and the vulnerable nodes attempted to switch to it. This caused the vulnerable nodes to attempt to re-add the duplicate input to the UTXO database twice, triggering an assert and causing them to shutdown. When restarted, operators of the vulnerable nodes needed to manually trigger a lengthy reindex procedure to fix their nodes’ database inconsistencies. (This side-effect of recovering from a duplicate inputs chainsplit was previously known to developers.)
Nodes upgraded to Bitcoin Core 0.16.3, 0.17.0RC4, or running other software that wasn’t vulnerable had no reported problems. However, many block explorers with a testnet mode did accept the vulnerable block, providing a reminder that users should be careful about using third-parties to determine whether or not transactions are valid.
Notable code changes
● Bitcoin Core #14305: after the discovery of a few cases where Python-based tests were passing incorrectly as a result of using misnamed variables, a variable name whitelist was implemented using Python 3’s
__slots__feature for classes.
● C-Lightning #1982: The
invoiceRPC now implements RouteBoost by including a BOLT11
rparameter in the invoice that provides routing information to the payer for an already-open channel that has the capacity to support paying the invoice. This parameter was originally intended to help support private routes, but it can also be used this way to support nodes that no longer want to accept new incoming channels. Alternatively, if no available channel can support payment of the invoice, C-Lightning will emit a warning.