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