pull down to refresh

In Fall 2022, many LND nodes crashed because a transaction their implementation of bitcoin thought was invalid got included in a block.
This time the discrepancy wasn't about something as obvious as double-spending.
LND nodes were using an implementation of Bitcoin called btcd, and this implementation had a limit to how much witness data could be included in a taproot transaction. Bitcoin Core did not have a limit for taproot transactions. When @brqgoo made a really big multisig transaction, Bitcoin Core nodes accepted it as valid, but btcd nodes did not.
Now, the reason the limit exists in the first place, I think, is to prevent denial-of-service attacks. It isn't really about consensus. Nonetheless, it changed consensus.
The removal of the limit on witness data was an explicit design decision for Tapscript (see BIP 342):
BTCD was not spec-conform by enforcing an unspecified limit.
running alternate implementations
In case you aren’t aware, there is a project that does exactly this. Fork Monitor currently runs
  • Bitcoin Core 26.0rc2
  • Bitcoin Core 0.21.1
  • Bitcoin Core 0.18.0
  • Bitcoin Core 0.10.3
  • bcoin 2.2.0
  • Bitcoin Knots 0.14.2
  • btcd 0.24.1
  • btcd 0.23.3
and alerts subscribers whenever any of these versions diverge on block acceptance.
If Bitcoin Core v26 did have a bug in it that allowed it to validate blocks that older versions considered invalid, we'd know because it would suddenly fork off from all the older versions. […] This sounds pretty damning. And if you recall where we started with my worries about upgrading to v26 of Core, things aren't looking too good.
If Bitcoin Core v26 accepted blocks that prior versions did not, that would be an accidental hardfork. If it didn’t accept blocks that prior versions accept, it would be an accidental softfork if at least 50% of the hashrate had upgraded already.—Not sure if it helps, but it seems to me that I have more confidence in Bitcoin Core’s test coverage than you do. :)
This is awesome! Thanks for pointing it out. I'm not sure how I managed to miss that it existed.
I run core as my node, so its definitely the implementation I have the most confidence in. But there's always this little niggling thing in my mind that if we all use Core we maybe lose something.
reply