<oembed><type>rich</type><version>1.0</version><author_name>Braydon Fuller [ARCHIVE] (npub1fx…xxtaa)</author_name><author_url>https://nostr.ae/npub1fx2eyw7avet7dut0slazcehwvrrlhjp2u9jc9zd92l7nexpxeahs4xxtaa</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2019-10-11&#xA;📝 Original message:On 10/4/19 1:20 AM, David A. Harding wrote:&#xA;&#xA;&gt; On Thu, Oct 03, 2019 at 05:38:36PM -0700, Braydon Fuller via bitcoin-dev wrote:&#xA;&gt;&gt; This paper describes a solution [to DoS attacks] that does not&#xA;&gt;&gt; require enabling or maintaining checkpoints and provides improved security.&#xA;&gt;&gt; [...] &#xA;&gt;&gt; The paper is available at:&#xA;&gt;&gt; https://bcoin.io/papers/bitcoin-chain-expansion.pdf&#xA;&gt; Hi Braydon,&#xA;&gt;&#xA;&gt; Thank you for researching this important issue.  An alternative solution&#xA;&gt; proposed some time ago (I believe originally by Gregory Maxwell) was a&#xA;&gt; soft fork to raise the minimum difficulty.  You can find discussion of&#xA;&gt; it in various old IRC conversations[1,2] as well as in related changes&#xA;&gt; to Bitcoin Core such as PR #9053 addining minimum chain work[3] and the&#xA;&gt; assumed-valid change added in Bitcoin Core 0.14.0[4].&#xA;&gt;&#xA;&gt; [1] http://www.erisian.com.au/meetbot/bitcoin-core-dev/2016/bitcoin-core-dev.2016-10-27-19.01.log.html#l-121&#xA;&gt; [2] http://www.erisian.com.au/meetbot/bitcoin-core-dev/2017/bitcoin-core-dev.2017-03-02-19.01.log.html#l-57&#xA;&gt; [3] https://github.com/bitcoin/bitcoin/pull/9053/commits/fd46136dfaf68a7046cf7b8693824d73ac6b1caf&#xA;&gt; [4] https://bitcoincore.org/en/2017/03/08/release-0.14.0/#assumed-valid-blocks&#xA;&gt;&#xA;Okay, here is an overview of what I have found for the minimum&#xA;difficulty proposal:&#xA;&#xA;It describes having a new consensus rule to not fork or accept headers&#xA;prior to, or below, a minimum difficulty once the best chain work is&#xA;achieved at release time of the software. This would be instead of the&#xA;rule to not fork before the last checkpoint, as checkpoints are removed.&#xA;&#xA;It has an advantage to the existing checkpoint solution as it does not&#xA;require checkpoints to be enabled. This is not a surprise as the&#xA;proposal was to remove checkpoints entirely. It would increase the cost&#xA;of the attack without checkpoints. Long header chains would need to be&#xA;built using this minimum difficulty, instead of the current lowest&#xA;difficulty of the genesis block. The exact cost of that is not yet&#xA;calculated.&#xA;&#xA;There are a few caveats with the approach mentioned; nodes are&#xA;vulnerable if the initial loader peer is the attacker, it could leave&#xA;minority hashpower without an ability to softfork away during a&#xA;contentious hardfork, and requires period consensus changes to continue&#xA;to maintain:&#xA;  - Nodes are vulnerable during the initial sync when joining the&#xA;network until the minimum chainwork is achieved. This is possible if the&#xA;loader peer is the attacker. To mitigate this there would need to be a&#xA;minimum chainwork defined based on the current chainwork. However, such&#xA;could also be used to prevent nodes from joining the network as it&#39;s&#xA;rejecting rather that throttling.&#xA;  - A contentious hardfork could leave a minority hashpower without an&#xA;ability to softfork away without agreeing on a hardfork. This was the&#xA;reason why the minimum difficulty was about 10 devices instead of 10,000.&#xA;  - It&#39;s technically a consensus change each time the minimum difficulty&#xA;or best chainwork is updated. It is a similar consensus change as&#xA;maintaining the last checkpoint, as it&#39;s used to prevent forking prior&#xA;to the last checkpoint.&#xA;&#xA;I think the solution proposed in the Bitcoin Chain Width Expansion paper&#xA;solves those issues by limiting chain width and throttling based on&#xA;chainwork, instead of rejecting blocks based on the minimum difficulty.</html></oembed>