Repository navigation
v1.7.3.0: KawPow Mining + New Tor + Code Modernization
This release v1.7.3.0 adds long-overdue improvements that make Breakout Chain a functional blockchain again, as it has been struggling for nearly 2 years. The improvements are numerous, so some may be forgotten in the following list:
- KawPow mining. Mining has been completely revamped to use a version of ethash called KawPow. KawPow is more ASIC resistant than ethash, but also uses more power. KawPow is an ideal ASIC-resistant candidate for a hybrid consensus blockchain like Breakout Chain. Mining is controlled with the
setgenerateRPC. - Recovery from miner abandonment. Mining is now less susceptible to hash abandonment, taking advantage of the fact that the blockchain can keep advancing under proof-of-stake. If miners suddenly quit mining, the mining difficulty tapers daily until it is worthwhile for hashes to return.
- New Tor. Tor has been upgraded from version 0.3.0.9 to 0.4.8.12. Version 0.3 has been completely unsupported by the Tor network since February 2022.
- New OpenSSL support. OpenSSL support has been modernized to version 3.6+ from version 2. This is part of a broader code modernization effort, to ensure easy builds for end users, along with the greater security that new versions of these libraries bring.
- New Boost support. Boost support has been upgraded to 1.90, which is contemporary with versions shipped by default with modern operating systems like macOS (via Homebrew), and Ubuntu 24.04 LTS.
- Qt6 upgrade. Qt support has been upgraded from Qt5 to Qt6. Qt5 is no longer supported in any capacity, and most package managers have deprecated Qt5 or abandoned it completely. Most importantly, the Qt upgrade allows for compatibility with newer C++ standards and modern compilers.
- C++ standard upgrade. Sources have been updated to support the C++17 standard. This standard is compatible with modern compilers, while reaching back far enough to support some older compilers. The result is that few, if any, users will need anything but the default compilers provided by their chosen operating system.
- Crypto++ dependency removed. The Crypto++ library is an aging and increasingly irrelevant cryptography library, last updated in 2023. The entire Crypto++ library used to be included in the Breakout Chain sources, resulting in longer compilation times, and other unnecessary overhead. These sources have been removed and the cryptographic functions are now provided by OpenSSL 3.6, making for a smaller codebase and less maintenance.
- Performance improvements. Several performance improvements have been added. (1) A block index lookup based on height has been added. This lookup functionality reduces the time to find a block index from O(N) (on average) to O(logN), resulting in noticeable performance increases for several RPC calls and other parts of normal operation. (2) Balances are kept real-time. Breakout is over 10 years old, and some long term stakers have so many staking transactions that their client spends more time calculating balances than trying to produce staking transactions. Previously, each balance calculation required iterating over every transaction belonging to the wallet. Real-time calculations means that now, balances are tracked continuously, and available to the protocol any time they are needed, without iterating over the entire set of transactions. Additionally, to ensure balances stay accurate, a separate, persistent thread periodically re-calculates balances by exhaustive iteration and logs any differences for debugging.
- Staking to a designated address. Breakout Chain now supports a
staketosetting that allows users to specify a public key to stake to for any address. The form as one would find it in thebreakout.confconfig file isstaketo={"address":"pubkey", ...}. Wildcards are permitted foraddress, i.e.staketo={"*":"pubkey"}. This allows any unambiguous mapping from any address to any public key. The intended use is for long term stakers to stake to a different wallet with fewer transactions. - New
consolidateRPC. The form isconsolidate <[source, ...]> <destination> ([ticker, ...]). This RPC consolidates coins from sources to the<destination>, creating a new thread that runs until sources are depleted. Sources and destination are compressed public key addresses. If the optional([ticker, ...])is given, then coins of only those tickers listed will be consolidated. The default is to consolidate all currencies. Consolidation transactions are sent 1 per block, ensuring the wallet doesn't attempt to consolidate the same coins twice. Likestaketo, theconsolidateRPC allows users to move dust and mint to a new wallet effortlessly. - New
minstakesplitsetting. Theminstakesplitsetting specifies the smallest output created from stake. Typically, stake can split indefinitely. While each split improves the chances to find a new block, they do so with increasingly marginal improvements. At some point the size of a wallet's UTXO set interferes with its ability to create new staking transactions, because the UTXO set must be searched for new stake. This new setting limits how small these UTXOs get so that a staking node doesn't choke on its own staking UTXOs. - Modern Deployments. The GUI client (the so-called "Qt") is now deployed for modern environments. The Windows Qt is now 64 bit. It had always been deployed as 32 bit for backwards compatibility, but the chain grew too large, causing RAM usage to exceed the 32 bit maximum of about 4 GB. The macOS Qt is deployed as a universal binary, meaning separate downloads are not necessary for the older Intel based processors and for the newer Apple Silicon (64 bit Arm) processors.
Undoubtedly, many other improvements are omitted from the above description simply because I forgot I added them. These changes have been made over years with the intent to one day add them to the official repository and get them on mainnet.
Today is that day.
With any luck this release will usher a new, positive chapter of the Breakout Chain saga.