On or before November 1st, Bitcoin ABC will publish a new software version that contains an updated Difficulty Adjustment Algorithm (DAA).

This is a change to the Bitcoin Cash consensus rules, but the change does not activate until November 13th.  This is a hard fork, so exchanges, wallets, and other software need to upgrade before November 13th.

We have been in communication with Bitcoin Cash miners and they are expecting this upgrade.

The original Bitcoin Cash “EDA” allowed Bitcoin Cash to survive as a minority chain but produces wild fluctuations of hashrate. This is problematic because it prevents consistently fast confirmations for users, and radically shifts the coin issuance schedule.

Several proposals to improve the DAA were put forth  We appreciate these proposals and have reviewed them all.  After careful consideration, we have made the decision to implement a proposal from Bitcoin ABC lead developer Amaury Sechet (more details on this proposal below).

Our decision to choose one specific proposal was not easy, because Bitcoin Cash has several independent development teams, and there was a great deal of deliberation between developers from the different groups.

We have the utmost respect for the all developers involved in the discussions, but only one algorithm could be chosen, and a timely decision was required.

Therefore, we decided to take a scientific approach and utilized two impartial and unconnected testing teams: Bitprim and nChain.  These teams conducted their tests separately and came to the same conclusion of which algorithm was most appropriate.

In the future, consensus level changes should have more planning, as well as a process to facilitate cross-team communication.  We look forward to working with other teams to define and hone that process in the months and years to come.

The top three algorithms that were tested include “D578” from Neil Booth, “D601” from Amaury Sechet, and “D622” from Tom Harding.

All 3 produced similar results in our own testing, and all 3 produced mean block times of approximately 600 seconds, a colossal improvement over the current code.Synopses from Bitprim and nChain are as follows:

BitPrim: “Tom and Amaury’s proposals are very similar in performance.  Amaury’s proposal has better chances to get network consensus”

nChain: “D601 is the logical choice.  D622  is 3.1% (+/- 1.2% at 95% CI) better in most instances, but there are edge cases against it.  For example a large miner can set fluctuations into the timing”

We acknowledge that D601 (proposal from Amaury Sechet) may not necessarily have the highest performance, but since all 3 had similar performance, D601 was selected because it appears to have the least risk.

Algorithm

The new DAA algorithm seeks to accomplish the following objectives:

1. Adjust difficulty to hash rate to target a mean block interval of 600 seconds.
2. Avoid sudden changes in difficulty when hash rate is fairly stable.
3. Adjust difficulty rapidly when hash rate changes rapidly.
4. Avoid oscillations from feedback between hash rate and difficulty.
5. Be resilient to attacks such as timestamp manipulation.

This algorithm is based on a 144-period simple moving average.  The difficulty is adjusted each block, based on the amount of work done and the elapsed time of the previous 144 blocks.

To compute the difficulty, we begin with the three topmost blocks, and choose the one with the median timestamp of the three.  Next, the process is repeated with blocks 144, 145, and 146 (blocks of 144-146 height less than the current) and a median timestamp block is again chosen from those 3.

From these 2 blocks roughly 144 blocks apart, we define W as the amount of work done between the blocks, and T as the elapsed time between the blocks.  A high-low filter is applied so that T has maximum value of 2 days and a minimum value of .5 days.  This prevents difficulty from changing too abruptly. (Normally 144 blocks takes approximately 1 day).

We can then compute:
Wn = W * ExpectedBlockTime / T .
G = (2^256 / Wn) – 1

 This is our difficulty target.  Lastly, a final filter is applied to enforce a maximal target.

Activation of the new consensus rules will be done on a median time stamp basis on blocks that occur after timestamp 1510600000, which corresponds to November 13th, 2:06 PM GMT.  This activation code has been merged. 

The exact time of upgrade will depend on the timestamp of the blocks mined after this timestamp.

Upgrading the Network

Bitcoin ABC will take steps to contact major exchanges and wallet providers.  All assistance in this effort is welcome.  You can help by contacting exchanges, wallet providers, and other ecosystem participants, and letting them know they should upgrade their software or run an updated version of Bitcoin ABC or other compatible software.

On a final note, Bitcoin ABC is committed to the values of decentralized development.  We strive to be a leading implementation and drive innovation and progress, but we do not wish to be THE leader, as we believe there should never be one singular authority.

Although this time it is Bitcoin ABC’s proposal that is being put forth to the miners, we are confident that in time, other development teams will also see their ideas implemented as we move forward together as a united community.