<oembed><type>rich</type><version>1.0</version><author_name>npub1e46n428mcyfwznl7nlsf6d3s7rhlwm9x3cmkuqzt3emmdpadmkaqqjxmcu</author_name><author_url>https://nostr.ae/npub1e46n428mcyfwznl7nlsf6d3s7rhlwm9x3cmkuqzt3emmdpadmkaqqjxmcu</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2015-11-26&#xA;📝 Original message:Actually, with this argument I think CHECKSEQUENCEVERIFY is more appropriate. To an app developer, you&#39;re enforcing maturity by enforcing sequence. I think it&#39;s much more clear to app devs to say sequence here since it makes explicit how to create the transaction which passes the check, whereas saying maturity night be confusing.&#xA;&#xA;On November 25, 2015 6:41:03 PM EST, Eric Lombrozo via bitcoin-dev &lt;bitcoin-dev at lists.linuxfoundation.org&gt; wrote:&#xA;&gt;As I said in an earlier post, a systems developer and an application &#xA;&gt;developer have very different perspectives on this. From the former&#39;s &#xA;&gt;perspective, it is entirely sensible to name things based on basic &#xA;&gt;features of the system&#39;s design (i.e. a field in the txin or tx that &#xA;&gt;gets checked) - but from an app developer&#39;s perspective, what matters&#xA;&gt;is &#xA;&gt;how they will use a particular feature in an actual app.&#xA;&gt;&#xA;&gt;I think that part of what systems developers should strive to do is to &#xA;&gt;abstract out the inner minutiae of the system&#39;s guts and expose to app &#xA;&gt;developers the clearest interface with which to develop apps. This is &#xA;&gt;even more the case when the details of the inner workings are&#xA;&gt;completely &#xA;&gt;irrelevant to the application logic and there&#39;s no real gains to be had&#xA;&gt;&#xA;&gt;from attempting to optimize for the inner workings when designing an &#xA;&gt;application.&#xA;&gt;&#xA;&gt;From an app developer&#39;s perspective, I think it is pretty blatantly &#xA;&gt;clear that relative timelock is *the* critical exposed functionality &#xA;&gt;intended here. Now, one could argue that the satoshi script is still a &#xA;&gt;systems level component of the system...but with the advent of overlay &#xA;&gt;protocols such as payment channels and the Lightning Network, it is &#xA;&gt;clear that we now require a new abstraction layer for reasoning about &#xA;&gt;the higher level logic of the system that doesn&#39;t burden the protocol &#xA;&gt;designer with having to know the intimate and esoteric details of the &#xA;&gt;lower system levels. Of course, many of those who work on these higher &#xA;&gt;level protocols will also be experts in the underlying system design. &#xA;&gt;However, it greatly increases the learning curve and can easily &#xA;&gt;frustrate people looking to work on these ideas...and ultimately, &#xA;&gt;knowing the inner details of how the nSequence field is structured and &#xA;&gt;what the bits actually mean is irrelevant to someone trying to design &#xA;&gt;scripts for such applications.&#xA;&gt;&#xA;&gt;We&#39;ve already deployed another opcode, CHECKLOCKTIMEVERIFY, which does &#xA;&gt;refer to the field name. However, in this particular situation, the &#xA;&gt;field name reflects *far* more closely what the app developer actually &#xA;&gt;cares about than nSequence, which to the app developer might as well be&#xA;&gt;&#xA;&gt;called foo. As such, I stick with my original vote - we should call the&#xA;&gt;&#xA;&gt;opcode RCHECKLOCKTIMEVERIFY, which has the advantage of communicating &#xA;&gt;fairly directly to developers and protocol designers the semantics they&#xA;&gt;&#xA;&gt;actually care about and also makes clear the relationship between &#xA;&gt;absolute and relative timelock...that&#39;s to say, the ability for the &#xA;&gt;script designer to lock specific coins until either a specific moment&#xA;&gt;in &#xA;&gt;time or until a certain delay has passed since the coin output was &#xA;&gt;created (added to blockchain).&#xA;&gt;&#xA;&gt;Let&#39;s face it - the entire motivation behind BIP68/BIP112 is relative &#xA;&gt;timelock. Explicitly calling the opcode RCHECKLOCKTIMEVERIFY will make &#xA;&gt;life easier for everyone and will help sell the idea and help it gain &#xA;&gt;greater acceptance more quickly; while stubbornly adhering to an &#xA;&gt;esoteric detail that is only there for historical reasons will only &#xA;&gt;continue to delay the idea&#39;s acceptance and adoptance.&#xA;&gt;&#xA;&gt;- Eric&#xA;&gt;&#xA;&gt;------ Original Message ------&#xA;&gt;From: &#34;Mark Friedenbach via bitcoin-dev&#34; &#xA;&gt;&lt;bitcoin-dev at lists.linuxfoundation.org&gt;&#xA;&gt;To: &#34;Btc Drak&#34; &lt;btcdrak at gmail.com&gt;&#xA;&gt;Cc: &#34;Bitcoin Dev&#34; &lt;bitcoin-dev at lists.linuxfoundation.org&gt;&#xA;&gt;Sent: 11/25/2015 3:05:50 PM&#xA;&gt;Subject: Re: [bitcoin-dev] Alternative name for CHECKSEQUENCEVERIFY &#xA;&gt;(BIP112)&#xA;&gt;&#xA;&gt;&gt;Looks like I&#39;m the long dissenting voice here? As the originator of&#xA;&gt;the &#xA;&gt;&gt;name CHECKSEQUENCEVERIFY, perhaps I can explain why the name was &#xA;&gt;&gt;appropriately chosen and why the proposed alternatives don&#39;t stand up.&#xA;&gt;&gt;&#xA;&gt;&gt;First, the names are purposefully chosen to illustrate what they do:&#xA;&gt;&gt;&#xA;&gt;&gt;What does CHECKLOCKTIMEVERIFY do? It verifies the range of &#xA;&gt;&gt;tx.nLockTime.&#xA;&gt;&gt;What does CHECKSEQUENCEVERIFY do? It verifies the range of &#xA;&gt;&gt;txin.nSequence.&#xA;&gt;&gt;&#xA;&gt;&gt;Second, the semantics are not limited to relative lock-time / maturity&#xA;&gt;&#xA;&gt;&gt;only. They both leave open ranges with possible, but currently &#xA;&gt;&gt;undefined future consensus-enforced behavior. We don&#39;t know what sort &#xA;&gt;&gt;of future behavior these values might trigger, but the associated &#xA;&gt;&gt;opcodes are generic enough to handle them:&#xA;&gt;&gt;&#xA;&gt;&gt;CHECKLOCKTIMEVERIFY will pass an nSequence between 1985 and 2009, even&#xA;&gt;&#xA;&gt;&gt;though such constraints have no meaning in Bitcoin.&#xA;&gt;&gt;CHECKSEQUENCEVERIFY is explicitly written to permit a 5-byte push &#xA;&gt;&gt;operand, while checking only 17 of the available 39 bits of both the &#xA;&gt;&gt;operand and the nSequence. Indeed the most recent semantic change of &#xA;&gt;&gt;CSV was justified in part because it relaxes all constraints over the &#xA;&gt;&gt;values of these bits freeing them for other purposes in transaction &#xA;&gt;&gt;validation and/or future extensions of the opcode semantics.&#xA;&gt;&gt;&#xA;&gt;&gt;Third, single-byte opcode space is limited. There are less than 10&#xA;&gt;such &#xA;&gt;&gt;opcodes left. Maybe space won&#39;t be so precious in a post-segwitness &#xA;&gt;&gt;world, but I don&#39;t want to presume that just yet.&#xA;&gt;&gt;&#xA;&gt;&gt;&#xA;&gt;&gt;As for the alternatives, they capture only the initial use case of &#xA;&gt;&gt;nSequence. My objection would relax if nSequence were renamed, but I &#xA;&gt;&gt;think that would be too disruptive and unnecessary. In any case, the &#xA;&gt;&gt;imagined use cases for CHECKSEQUENCEVERIFY has to do with sequencing &#xA;&gt;&gt;execution pathways of script, so it&#39;s not a stretch in meaning. &#xA;&gt;&gt;Previously CHECKMATURITYVERIFY was a hypothicated opcode that directly&#xA;&gt;&#xA;&gt;&gt;checked the minimum age of inputs of a transaction. The indirect&#xA;&gt;naming &#xA;&gt;&gt;of CHECKSEQUENCEVERIFY on the other hand is due to its indirect &#xA;&gt;&gt;behavior. RELATIVELOCKTIMEVERIFY was also a hypothicated opcode that &#xA;&gt;&gt;would check a ficticious nRelativeLockTime field, which does not&#xA;&gt;exist. &#xA;&gt;&gt;Again my objection would go away if we renamed nSequence, but I &#xA;&gt;&gt;actually think the nSequence name is better...&#xA;&gt;&gt;&#xA;&gt;&gt;On Tue, Nov 24, 2015 at 2:30 AM, Btc Drak via bitcoin-dev &#xA;&gt;&gt;&lt;bitcoin-dev at lists.linuxfoundation.org&gt; wrote:&#xA;&gt;&gt;&gt;BIP68 introduces relative lock-time semantics to part of the&#xA;&gt;nSequence &#xA;&gt;&gt;&gt;field leaving the majority of bits undefined for other future &#xA;&gt;&gt;&gt;applications.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;BIP112 introduces opcode CHECKSEQUENCEVERIFY (OP_CSV) that is &#xA;&gt;&gt;&gt;specifically limited to verifying transaction inputs according to &#xA;&gt;&gt;&gt;BIP68&#39;s relative lock-time[1], yet the _name_ OP_CSV is much boarder &#xA;&gt;&gt;&gt;than that. We spent months limiting the number of bits used in BIP68 &#xA;&gt;&gt;&gt;so they would be available for future use cases, thus we have &#xA;&gt;&gt;&gt;acknowledged there will be completely different usecases that take &#xA;&gt;&gt;&gt;advantage of unused nSequence bits.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;For this reason I believe the BIP112 should be renamed specifically &#xA;&gt;&gt;&gt;for it&#39;s usecase, which is verifying the time/maturity of transaction&#xA;&gt;&#xA;&gt;&gt;&gt;inputs relative to their inclusion in a block.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;Suggestions:-&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;CHECKMATURITYVERIFY&#xA;&gt;&gt;&gt;RELATIVELOCKTIMEVERIFY&#xA;&gt;&gt;&gt;RCHECKLOCKTIMEVERIFY&#xA;&gt;&gt;&gt;RCLTV&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;We could of course softfork additional meaning into OP_CSV each time &#xA;&gt;&gt;&gt;we add new sequence number usecases, but that would become obscure&#xA;&gt;and &#xA;&gt;&gt;&gt;confusing. We have already shown there is no shortage of opcodes so&#xA;&gt;it &#xA;&gt;&gt;&gt;makes no sense to cram everything into one generic opcode.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;TL;DR: let&#39;s give BIP112 opcode a name that reflects it&#39;s actual &#xA;&gt;&gt;&gt;usecase rather than focusing on the bitcoin internals.&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;[1] &#xA;&gt;&gt;&gt;https://github.com/bitcoin/bitcoin/pull/6564/files#diff-be2905e2f5218ecdbe4e55637dac75f3R1223&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt;_______________________________________________&#xA;&gt;&gt;&gt;bitcoin-dev mailing list&#xA;&gt;&gt;&gt;bitcoin-dev at lists.linuxfoundation.org&#xA;&gt;&gt;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&#xA;&gt;&#xA;&gt;------------------------------------------------------------------------&#xA;&gt;&#xA;&gt;_______________________________________________&#xA;&gt;bitcoin-dev mailing list&#xA;&gt;bitcoin-dev at lists.linuxfoundation.org&#xA;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20151126/9a401bd9/attachment-0001.html&gt;</html></oembed>