A year in review: Hennadii Stepanov’s contributions to Bitcoin Core
2020 was an exciting year for Bitcoin. We saw large price movements, increased adoption, and despite memes to the contrary, major advancements in the development of the Bitcoin protocol and software projects in the surrounding ecosystem. At higher layers, improvements were made upon the lightning network, statechains, sidechains, discrete log contracts, RGB and more.1,2,3,4,5 There was notable progress in the development of Stratum v2, a protocol to enhance mining decentralization.6 Software which improves the security of key management has advanced at blistering speeds.7 Even low-level cryptographic libraries continued their march forward.8 Underpinning it all of course is Bitcoin Core, which saw changes to nearly all major components of the codebase.
Keeping up with just some of these projects can be a full time job, let alone directly participating in their development processes whether through code contributions, review, testing, documentation or translations. Bitcoin Core is no exception. Its list of contributors continues to grow, alongside a seemingly endless list of pull requests that require careful implementation, extensive review and the occasional refactor.
Bitcoin Core is particularly important to CardCoins’ day-to-day operations and of course we rely on its consensus engine to protect the ideals on which Bitcoin is built. As an expression of our gratitude, last year CardCoins and our friends at Payvant announced a grant to Hennadii Stepanov, aka hebasto. Today we are excited to announce a renewal of this grant, and would like to highlight some of the work he has done over the last 12 months.
As some background, it was just a year ago when we were first introduced to hebasto. Despite having a full time job, he was regularly making high quality contributions to Bitcoin Core. When news of his desire to focus on Bitcoin Core full time crossed our desk, we jumped at the opportunity to fund his efforts.
In 2020 alone, hebasto opened 188 pull requests (PRs), had 103 PRs merged, and made 2793 review comments. Beyond the data is the work itself, which spans net/net processing, the GUI, build system, validation (consensus), testing framework, wallet and documentation. We’ve cherry picked some of our favorite pull requests below. As a general reminder, while a PR may be introduced by one person, its review and ultimate merge represent the efforts of many contributors.
Bitcoin Core has logic for managing connections with peers (net/net processing), an area in which hebasto spearheaded the implementation of a concept derivative of countermeasure 5 from Ethan Heilman’s seminal paper on eclipse attacks, such that outbound block-relay-only connections are preserved across restarts.9 This makes sure that an eclipse attacker who causes a victim node to restart cannot trick the node into dropping its honest block-relay-only connections to free up slots for new peers under the attacker’s control. Additionally, PR 19991 extends the -bind config option so inbound Tor connections can be easily differentiated from localhost connections. In 19473, hebasto repurposed the setnetworkactive RPC command into the -networkactive command-line argument/config option, which allows the node to start with a disabled p2p network. There is also PR 18077 which introduces a less risky library for automatic port forwarding (libnatpmp) to Bitcoin Core, following historical security concerns with libminiupnpc.10
In the GUI, 18121 allows reindexing to take place without freezing the UI. 16224 makes GUI error messages bilingual and ensures that only untranslated messages are written to the debug log, as their prior inclusion undermines the log as a “universally understood debugging medium.” 16432 introduces a privacy mode to the Overview page, so users can hide their balance when opening their wallet in public.
Hebasto has extensive experience with build systems. The number of contributors that work on the build system for the Bitcoin Core project is limited, so his efforts on this front are particularly helpful. If you’re interested in build systems, check out 18331, 18307, 18297, and 18556–they affect everything from the Windows build system to deterministic gitian builds.
Two interesting PRs related to the testing framework were merged. 18485 covers the case in which information related to descendants/ancestors must be updated when transactions from an orphan or stale block are re-added to the mempool. 19982 includes new deadlock detection tests, a fix for a buggy wallet test that missed an inconsistent lock order and improvements to deadlock detection and deadlock detection output.
Removing the Boost dependencies from Bitcoin Core has long been desired, and 21059 and 18710 progress towards that goal. On the wallet front, 20230 fixes a bug related to newly-created encrypted wallets being unable to create new receive addresses. Lastly, 19979 makes writing thread-safe code less error prone by using compile time checks as opposed to runtime checks.
And that is only a small sampling! If you’re interested in learning more about hebasto’s work you can peruse his commits and follow him on GitHub. To Hennadii, all Bitcoin Core contributors, and FOSS developers everywhere, CardCoins and Payvant are so grateful for your excellent work. Thank you! We hope 2021 brings you health, happiness and a stress-free taproot activation. 😉
[1] lnd, c-lightning, eclair, rust-lightning, electrum lightning
[2] https://github.com/commerceblock/mercury
[3] https://github.com/ElementsProject/elements/tree/simplicity
[4] https://github.com/discreetlogcontracts/dlcspecs#implementations
[5] https://rgb-org.github.io/
[6] https://github.com/braiins/braiins/tree/bos-devel/open/protocols/stratum/src/v2
[7] specter-desktop, sparrow, caravan, coldcore, ckbunker
[8] secp256k1, secp256k1-zkp
[9] https://eprint.iacr.org/2015/263.pdf
[10] https://bitcoin.org/en/alert/2015-10-12-upnp-vulnerability