<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:Well, let&#39;s agree to disagree on these two things:&#xA;&#xA;- I define &#34;working&#34; for a full node as verifying everything; if a node&#xA;starts skipping bits then I&#39;d say it&#39;s not really &#34;working&#34; according to&#xA;its original design goals&#xA;&#xA;- Saying the pre-fork behaviour is defined and deterministic is true, but&#xA;only in the sense that reading an uninitialised variable in C is defined&#xA;and deterministic. It reads whatever happens to be at that stack position:&#xA;easily defined. For many programs, that may be the same value each time:&#xA;deterministic. Nonetheless, it&#39;s considered undefined behaviour by the C&#xA;specification and programmers that rely on it can easily create security&#xA;holes.&#xA;&#xA;In the same way, I&#39;d consider a node running a script with a NOP and&#xA;reaching the opposite conclusion from other nodes to be a case of undefined&#xA;behaviour leading to a non-fully-working node.&#xA;&#xA;But these are arguments about the semantics of words. I think we both know&#xA;what each other is getting at.&#xA;&#xA;On Mon, Oct 5, 2015 at 1:23 PM, Jeff Garzik &lt;jgarzik at gmail.com&gt; wrote:&#xA;&#xA;&gt;&#xA;&gt; - It is true that hard forks produce a much cleaner outcome, in terms of&#xA;&gt; well defined behavior across the entire network.&#xA;&gt;&#xA;&gt; - Replacing an opcode should not result in undefined behavior.  The&#xA;&gt; non-upgraded behavior is defined and deterministic.&#xA;&gt;&#xA;&gt; - IsStandard remains an assistant.  Miners may mine non-standard&#xA;&gt; transactions.&#xA;&gt;&#xA;&gt; - &#34;Hard forks require everyone to upgrade and soft forks don&#39;t&#34;   Doesn&#39;t&#xA;&gt; require tons of explanation:  Non upgraded clients continue working on the&#xA;&gt; network even after the rules are upgraded.&#xA;&gt;&#xA;&gt; All those corrections aside, I do think there has been too much hysteria&#xA;&gt; surrounding hard forks.  Hard forks, when done right, produce a much&#xA;&gt; cleaner system for users.&#xA;&gt;&#xA;&gt;&#xA;&gt;&#xA;&gt;&#xA;&gt;&#xA;&gt;&#xA;&gt;&#xA;&gt;&#xA;&gt; On Mon, Oct 5, 2015 at 6:59 AM, Mike Hearn via bitcoin-dev &lt;&#xA;&gt; bitcoin-dev at lists.linuxfoundation.org&gt; wrote:&#xA;&gt;&#xA;&gt;&gt; Putting aside stupid arguments about who is older or who starting using&#xA;&gt;&gt; the term SPV wallet first, let me try and make a better suggestion than&#xA;&gt;&gt; what&#39;s in the BIP. How about the following:&#xA;&gt;&gt;&#xA;&gt;&gt; A new flag is introduced to Core, --scriptchecks=[all,standardonly,none].&#xA;&gt;&gt; The default is all. When set to &#34;standardonly&#34;, non-standard scripts are&#xA;&gt;&gt; not checked but others are. This is similar to the behaviour during a soft&#xA;&gt;&gt; fork. In &#34;none&#34; you have something a bit like SPV mode, but still&#xA;&gt;&gt; calculating the UTXO set. This flag is simple and can be implemented in a&#xA;&gt;&gt; few lines of code. Then an unused opcode is used for CLTV, so making it a&#xA;&gt;&gt; hard fork.&#xA;&gt;&gt;&#xA;&gt;&gt; This has the following advantages:&#xA;&gt;&gt;&#xA;&gt;&gt;    - Nodes that want the pseudo-SPV behaviour of a soft fork can opt in&#xA;&gt;&gt;    to it if they want it. This prioritises availability (in a sense) over&#xA;&gt;&gt;    correctness.&#xA;&gt;&gt;&#xA;&gt;&gt;    - But otherwise, nodes will prioritise correctness by default, which&#xA;&gt;&gt;    is how it should be. This isn&#39;t PHP where nonsensical code the interpreter&#xA;&gt;&gt;    doesn&#39;t understand just does ...... something. This is financial software&#xA;&gt;&gt;    where money is at risk. I feel very strongly about this: undefined&#xA;&gt;&gt;    behaviour is fine *if you opted into getting it. *Otherwise it should&#xA;&gt;&gt;    be avoided whenever possible.&#xA;&gt;&gt;&#xA;&gt;&gt;    - SPV wallets do the right thing by default.&#xA;&gt;&gt;&#xA;&gt;&gt;    - IsStandard doesn&#39;t silently become a part of the consensus rules.&#xA;&gt;&gt;&#xA;&gt;&gt;    - All other software gets simpler. It&#39;s not just SPV wallets. Block&#xA;&gt;&gt;    explorers, for example, can just add a single line to their opcode map.&#xA;&gt;&gt;    With a soft fork they have to implement the entire soft fork logic just to&#xA;&gt;&gt;    figure out when an opcode transitioned from OP_NOP to CLTV and make sure&#xA;&gt;&gt;    they render old scripts differently to new scripts. And they face tricky&#xA;&gt;&gt;    questions - do they render an opcode as a NOP if the miner who built it was&#xA;&gt;&gt;    un-upgraded, or do they calculate the flag day and change all of them after&#xA;&gt;&gt;    that? It&#39;s just an explosion of complexity.&#xA;&gt;&gt;&#xA;&gt;&gt; Many people by now have accepted that hard forks are simpler,&#xA;&gt;&gt; conceptually cleaner, and prioritise correctness of results over&#xA;&gt;&gt; availability of results. I think these arguments are strong.&#xA;&gt;&gt;&#xA;&gt;&gt; So let me try addressing the counter-arguments one more time:&#xA;&gt;&gt;&#xA;&gt;&gt;    - Hard forks require everyone to upgrade and soft forks don&#39;t. I&#xA;&gt;&gt;    still feel this one has never actually been explained. There is no&#xA;&gt;&gt;    difference to the level of support required to trigger the change. With the&#xA;&gt;&gt;    suggestion above, if someone can&#39;t or won&#39;t upgrade their full node but can&#xA;&gt;&gt;    no longer verify the change, they can simply restart with&#xA;&gt;&gt;    -scriptchecks=standardonly and get the soft fork behaviour. Or they can&#xA;&gt;&gt;    upgrade and get their old security level back.&#xA;&gt;&gt;&#xA;&gt;&gt;    - Hard forks are somehow bad or immoral or can lead to &#34;schisms&#34;.&#xA;&gt;&gt;    This is just saying, if we hold a vote, the people who lose the vote might&#xA;&gt;&gt;    try starting a civil war and refuse to accept the change. That&#39;s not a&#xA;&gt;&gt;    reason to not hold votes.&#xA;&gt;&gt;&#xA;&gt;&gt;    But at any rate, they can do that with soft forks too: just decide&#xA;&gt;&gt;    that any output that contains OP_CLTV doesn&#39;t make it into the UTXO set.&#xA;&gt;&gt;    Eventually coins that trace back to such an output will become unusable in&#xA;&gt;&gt;    the section of the economy that decided to pick a fight.&#xA;&gt;&gt;&#xA;&gt;&gt;&#xA;&gt;&gt;&#xA;&gt;&gt; _______________________________________________&#xA;&gt;&gt; bitcoin-dev mailing list&#xA;&gt;&gt; bitcoin-dev at lists.linuxfoundation.org&#xA;&gt;&gt; https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#xA;&gt;&gt;&#xA;&gt;&gt;&#xA;&gt;&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20151005/1aabb5c5/attachment.html&gt;</html></oembed>