<oembed><type>rich</type><version>1.0</version><author_name>npub17ty4mumkv43w8wtt0xsz2jypck0gvw0j8xrcg6tpea25z2nh7meqf4qgyd</author_name><author_url>https://nostr.ae/npub17ty4mumkv43w8wtt0xsz2jypck0gvw0j8xrcg6tpea25z2nh7meqf4qgyd</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2015-10-05&#xA;📝 Original message:Putting aside stupid arguments about who is older or who starting using the&#xA;term SPV wallet first, let me try and make a better suggestion than what&#39;s&#xA;in the BIP. How about the following:&#xA;&#xA;A new flag is introduced to Core, --scriptchecks=[all,standardonly,none].&#xA;The default is all. When set to &#34;standardonly&#34;, non-standard scripts are&#xA;not checked but others are. This is similar to the behaviour during a soft&#xA;fork. In &#34;none&#34; you have something a bit like SPV mode, but still&#xA;calculating the UTXO set. This flag is simple and can be implemented in a&#xA;few lines of code. Then an unused opcode is used for CLTV, so making it a&#xA;hard fork.&#xA;&#xA;This has the following advantages:&#xA;&#xA;   - Nodes that want the pseudo-SPV behaviour of a soft fork can opt in to&#xA;   it if they want it. This prioritises availability (in a sense) over&#xA;   correctness.&#xA;&#xA;   - But otherwise, nodes will prioritise correctness by default, which is&#xA;   how it should be. This isn&#39;t PHP where nonsensical code the interpreter&#xA;   doesn&#39;t understand just does ...... something. This is financial software&#xA;   where money is at risk. I feel very strongly about this: undefined&#xA;   behaviour is fine *if you opted into getting it. *Otherwise it should be&#xA;   avoided whenever possible.&#xA;&#xA;   - SPV wallets do the right thing by default.&#xA;&#xA;   - IsStandard doesn&#39;t silently become a part of the consensus rules.&#xA;&#xA;   - All other software gets simpler. It&#39;s not just SPV wallets. Block&#xA;   explorers, for example, can just add a single line to their opcode map.&#xA;   With a soft fork they have to implement the entire soft fork logic just to&#xA;   figure out when an opcode transitioned from OP_NOP to CLTV and make sure&#xA;   they render old scripts differently to new scripts. And they face tricky&#xA;   questions - do they render an opcode as a NOP if the miner who built it was&#xA;   un-upgraded, or do they calculate the flag day and change all of them after&#xA;   that? It&#39;s just an explosion of complexity.&#xA;&#xA;Many people by now have accepted that hard forks are simpler, conceptually&#xA;cleaner, and prioritise correctness of results over availability of&#xA;results. I think these arguments are strong.&#xA;&#xA;So let me try addressing the counter-arguments one more time:&#xA;&#xA;   - Hard forks require everyone to upgrade and soft forks don&#39;t. I still&#xA;   feel this one has never actually been explained. There is no difference to&#xA;   the level of support required to trigger the change. With the suggestion&#xA;   above, if someone can&#39;t or won&#39;t upgrade their full node but can no longer&#xA;   verify the change, they can simply restart with -scriptchecks=standardonly&#xA;   and get the soft fork behaviour. Or they can upgrade and get their old&#xA;   security level back.&#xA;&#xA;   - Hard forks are somehow bad or immoral or can lead to &#34;schisms&#34;. This&#xA;   is just saying, if we hold a vote, the people who lose the vote might try&#xA;   starting a civil war and refuse to accept the change. That&#39;s not a reason&#xA;   to not hold votes.&#xA;&#xA;   But at any rate, they can do that with soft forks too: just decide that&#xA;   any output that contains OP_CLTV doesn&#39;t make it into the UTXO set.&#xA;   Eventually coins that trace back to such an output will become unusable in&#xA;   the section of the economy that decided to pick a fight.&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20151005/563a298c/attachment-0001.html&gt;</html></oembed>