Hi everyone,

A bit over a year ago i started working on revisiting the 2019 Great Consensus 
Cleanup proposal from
Matt Corallo [0]. His proposal included:
- making <=64 bytes transactions invalid to fix merkle tree weaknesses;
- making non-pushonly scriptSigs, FindAndDelete matches, OP_CODESEPARATOR and 
non-standard sighash
  types fail script validation to mitigate the worst case block validation time;
- restrict the nTime field of the first block in each difficulty adjustment 
interval to be no less
  than 600 seconds lower than the previous block's;

I set out to research the impact of each of the vulnerabilities this intended 
to patch, the
alternative fixes possible for each and finally if there was any other protocol 
bug fix we'd want to
include if we went through the considerable effort of soft forking Bitcoin 
already.

Later in March i shared some first findings on Delving [1] and advertized the 
effort on this mailing
list [2]. I also created a companion thread on Delving, kept private, to 
discuss the details of the
worst case block validation time [3]. As one would expect due to the larger 
design space available
to fix this issue, this private thread is where most of the discussion would 
happen. Thank you to
everyone who contributed feedback, insights, ideas and argumented opinions on 
the different issues
all along the process.

Now i would like to update the broader Bitcoin development community on the 
outcome of this effort.
I believe a Consensus Cleanup proposal should include the following.
- A fix for vulnerabilities surrounding the use of timestamps in the difficulty 
adjustment
  algorithm.  In particular, a fix for the timewarp attack with a 7200 seconds 
grace period as well
  as a fix for the Murch-Zawy attack [4] by making invalid any difficulty 
adjustment period with a
  negative duration.
- A fix for long block validation times with a minimal "confiscation surface", 
by introducing a
  per-transaction limit on the number of legacy sigops in the inputs.
- A fix for merkle tree weaknesses by making transactions which serialize to 
exactly 64 bytes
  invalid.
- A fix for duplicate transactions to supplement BIP34 in order to avoid 
resuming unnecessary BIP30
  validation in the future. This is achieved by mandating the nLockTime field 
of coinbase
  transaction to be set to the height of their block minus 1.

I have started drafting a BIP draft with the detailed specs for this.

Antoine Poinsot


[0] 
https://github.com/TheBlueMatt/bips/blob/7f9670b643b7c943a0cc6d2197d3eabe661050c2/bip-XXXX.mediawiki
[1] https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710
[2] https://groups.google.com/g/bitcoindev/c/CAfm7D5ppjo/m/bYJ3BiOuAAAJ
[3] https://delvingbitcoin.org/t/worst-block-validation-time-inquiry/711
[4] 
https://delvingbitcoin.org/t/zawy-s-alternating-timestamp-attack/1062#variant-on-zawys-attack-2

-- 
You received this message because you are subscribed to the Google Groups 
"Bitcoin Development Mailing List" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to bitcoindev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/bitcoindev/jiyMlvTX8BnG71f75SqChQZxyhZDQ65kldcugeIDJVJsvK4hadCO3GT46xFc7_cUlWdmOCG0B_WIz0HAO5ZugqYTuX5qxnNLRBn3MopuATI%3D%40protonmail.com.

Reply via email to