<oembed><type>rich</type><version>1.0</version><author_name>npub1dw88wd5gqsqn6ufxhf9h03uk8087l7gfzdtez5csjlt6pupu4pwsj8plrw</author_name><author_url>https://nostr.ae/npub1dw88wd5gqsqn6ufxhf9h03uk8087l7gfzdtez5csjlt6pupu4pwsj8plrw</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2022-04-21&#xA;📝 Original message:On Thu, Apr 21, 2022 at 1:04 AM Anthony Towns via bitcoin-dev &lt;&#xA;bitcoin-dev at lists.linuxfoundation.org&gt; wrote:&#xA;&#xA;&gt;&#xA;&gt;  - is there really any benefit to doing it as a NOP vs a taproot-only&#xA;&gt;    opcode like TXHASH? Theoretically, sure, that saves some bytes; but as&#xA;&gt;    was pointed out on #bitcoin-wizards the other day, you can&#39;t express&#xA;&gt;    those outputs as an address, which makes them not very interoperable,&#xA;&gt;    and if they&#39;re not interoperable between, say, an exchange and its&#xA;&gt;    users trying to do a withdraw, how useful is that really ever going&#xA;&gt;    to be?&#xA;&gt;&#xA;&#xA;FWIW, this is also approximately where my sticking point lies with BIP-119.&#xA;&#xA;Overall I&#39;ve come around to the idea of something like CTV.  The ability to&#xA;construct &#34;smart contracts&#34; that commit to *multiple* possible payout&#xA;schemes based on some conditions seems like a very useful construct, and&#xA;there have been several examples of  schemes proposed that use this feature.&#xA;&#xA;However, I&#39;m still skeptical of the bare-CTV part of BIP-119 (and I&#39;m told&#xA;that bare-CTV hasn&#39;t even appeared on the CTV signet).  Unlike the general&#xA;smart-contracting case, bare-CTV does not have any branches.  All it can do&#xA;is commit to a subsequent transaction&#39;s outputs.  At first glance this&#xA;appears to be a waste because, for less bandwidth, that transaction could&#xA;just realize those outputs immediately, so why would anyone want to delay&#xA;the inevitable?&#xA;&#xA;One reason might be that you want to commit to the output early during a&#xA;high-fee time, and then complete the transaction later during a low-fee&#xA;time.  While there are fee-rate situations where this could result in lower&#xA;fees than committing to the outputs all at once, it would be even cheaper&#xA;still to just wait to do the payout at the low-fee time.  I&#39;m struggling to&#xA;understand the advantages of the advanced commitment, along with all the&#xA;overhead that entails.  Doesn&#39;t it just cause more blockspace to be used&#xA;overall?&#xA;&#xA;There are some other proposed use cases for bare-CTV.  A bare-CTV can be&#xA;used to delay a &#34;trigger&#34;-transaction.  Some contracts, such as vaults, use&#xA;a relative-locktime as part of their construction and it could make sense&#xA;to make an output commitment but not realize those outputs yet until you&#xA;are ready to start your relative-time lock clock.  But bare-CTV doesn&#39;t&#xA;support any co-signing ability here, so you are relying entirely on keeping&#xA;the transaction data secret to prevent a third-party from triggering your&#xA;relative-lock clock.  More specifically for a vault scheme, since&#xA;bare-CTV&#39;s are currently unaddressable, and AFAIK, there is no address&#xA;format proposal yet, it is impossible to receive funds directly into a&#xA;vault.  You must shuffle received funds into your vault yourself, which&#xA;seems very likely to negate the cost savings of using bare-CTV in the first&#xA;place (please correct me if I&#39;m wrong).  Better to receive funds directly&#xA;into a taproot-CTV vault, which has an address, and while you are at it,&#xA;you could place the cold-key as the taproot key to save even more when&#xA;using the cold-key to move vault funds.&#xA;&#xA;There might be even more exotic use cases of bare-CTV.  For example you&#xA;could commit to a transaction that has a second input that doesn&#39;t yet&#xA;exist in the UTXO set in an attempt to coax it into existence. I don&#39;t know&#xA;if there have been any proposals to take advantage of this.&#xA;&#xA;With that said, everything that bare-CTV can do, can also be done by&#xA;tapscript-CTV; so it is just a matter of cost.  I&#39;m struggling to&#xA;understand where this cost savings is and how much those savings are going&#xA;to be given that bare-CTV is unaddressable and seems to ultimately occupy&#xA;more-blockspace than if the outputs were directly committed to.&#xA;&#xA;I also believe the bare-CTV question is material, because if bare-CTV were&#xA;not part of the spec, then I&#39;d be advocating for using an OP_SUCCESS code&#xA;from tapscript instead, and either use push-style semantics for CTV, which&#xA;would be composed with EQUAL_VERIFY to mimic the currently proposed&#xA;verification style-semantics, or a hybrid push-or-verify semantics that&#xA;would either push or verify depending on the size of the input.  (And I&#xA;still think a more general TXHASH would be even better, though if I cannot&#xA;convince aj then perhaps I&#39;m wrong.)&#xA;&#xA;I&#39;m not saying bare-CTV is necessarily a bad idea.  I&#39;m just struggling&#xA;with its justification.&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220421/7dabd75a/attachment-0001.html&gt;</html></oembed>