On May 9, 2021 at 12:26 UTC the Dynamic (DYN) blockchain forked and created two chains. Upon investigation, it was determined that this was not a malicious attack but simply an unintended consequence of oscillating hashrate from the Anomp mining pool. Anomp mined approximately 10 blocks during one of their boost cycles with very few peers and created the fork. Some peers were able to join their longer fork before it got past the auto reconnect block height (10 blocks). You can see the Anomp oscillation in the hash graph below:
Below is information about the fork pulled from the block explorer:
Fork after block 704847 on May 9, 2021 12:26:52 AM (000000003612cf11777257e20522d35edd860c985d845bc612c39e07406c3119)
May 9, 2021 12:26:52 AM — 704847 (fork block)
May 9, 2021 12:28:12 AM — 704848 (80 sec) May 9, 2021 12:33:27 AM
May 9, 2021 12:28:22 AM — 704849 (10 sec)
May 9, 2021 12:34:45 AM — 704850 (383 sec)
May 9, 2021 12:38:59 AM — 704851 (254 sec)
May 9, 2021 12:39:05 AM — 704852 (6 sec)
May 9, 2021 12:39:10 AM — 704853 (5 sec)
May 9, 2021 12:40:18 AM — 704854 (68 sec)
May 9, 2021 12:40:26 AM — 704855 (8 sec)
May 9, 2021 12:40:48 AM — 704856 (22 sec)
May 9, 2021 12:41:41 AM — 704857 (53 sec)
889/10 = 89 seconds/block
May 9, 2021 12:42:44 AM — 704858 (63 sec)
May 9, 2021 12:43:31 AM — 704859 (47 sec)
May 9, 2021 12:43:48 AM — 704860 (17 sec)
May 9, 2021 12:43:56 AM — 704861 (8 sec)
May 9, 2021 12:44:29 AM — 704862 (33 sec)
May 9, 2021 12:48:50 AM — 704863 (261 sec)
May 9, 2021 12:51:56 AM — 704864 (186 sec)
May 9, 2021 12:52:32 AM — 704865 (36 sec)
May 9, 2021 12:55:22 AM — 704866 (170 sec)
May 9, 2021 12:55:28 AM — 704867 (6 sec)
May 9, 2021 12:59:50 AM — 704868 (262 sec)
1978/21 = 94 seconds/block (longer chain)
9306/21 = 443 seconds/block (shorter chain) block 704868: May 9, 2021 3:01:58 AM
Why did it happen?
As stated above, the reason this happened was because of oscillating hash power from a single pool that dominated the network hash rate. The image below shows the mining pool hash power distribution.
Can this be prevented in the future?
The best thing to do is for the community to spread hash power to different mining pools. This will balance out the network and prevent this from happening again.
Next Steps:
Reindex your controller wallet by going to the Tools and Wallet Repair menu item.
Fresh Bootstraps are available to make this process faster. https://duality.solutions/duality/bootstraps/dyn/bootstrap-latest.tar.gz
Once synced, please ensure all your nodes are on the correct chain by running the following command:
getblock 00000000be0a6432b9e0c7974a62b4229927df291805ffd062156b2c304618ee
If you don’t get an error when you run that command, then you are on the correct chain.
The official explorer is synced and can be used to reference the most recent block. https://dynexplorer.duality.solutions/
Restarting your Dynodes:
Once your controller wallet is reindexed, contact your host to make sure they are on the correct chain before you start them again.
Conclusion:
We continue to monitor the situation and will be adding code to the new versions of Dynamic to mitigate problems in the future. We will look into the difficulty adjustment algorithm to see if we can discourage hash power oscillation.
At the end of the day, the wallet did what it is meant to do. It looked at the chaindata and decided the best chain was the longest one — exactly as it was programmed to do
Community members are encouraged to spread their hash power to other pools. The official Duality mining pool has some of the lowest fees available at 0.1% compared to 5.0% of others.