<oembed><type>rich</type><version>1.0</version><title>Olaoluwa Osuntokun [ARCHIVE] wrote</title><author_name>Olaoluwa Osuntokun [ARCHIVE] (npub19h…zkvn4)</author_name><author_url>https://yabu.me/npub19helcfnqgk2jrwzjex2aflq6jwfc8zd9uzzkwlgwhve7lykv23mq5zkvn4</author_url><provider_name>njump</provider_name><provider_url>https://yabu.me</provider_url><html>📅 Original date posted:2022-06-27&#xA;📝 Original message:&#xA;Hi y&#39;all,&#xA;&#xA;This mail was inspired by this [1] spec PR from Lisa. At a high level, it&#xA;proposes the nodes add a delay between the time they see a channel closed on&#xA;chain, to when they remove it from their local channel graph. The motive&#xA;here is to give the gossip message that indicates a splice is in process,&#xA;&#34;enough&#34; time to propagate through the network. If a node can see this&#xA;message before/during the splicing operation, then they&#39;ll be able relate&#xA;the old and the new channels, meaning it&#39;s usable again by senders/receiver&#xA;_before_ the entire chain of transactions confirms on chain.&#xA;&#xA;IMO, this sort of arbitrary delay (expressed in blocks) won&#39;t actually&#xA;address the issue in practice. The proposal suffers from the following&#xA;issues:&#xA;&#xA;  1. 12 blocks is chosen arbitrarily. If for w/e reason an announcement&#xA;  takes longer than 2 hours to reach the &#34;economic majority&#34; of&#xA;  senders/receivers, then the channel won&#39;t be able to mask the splicing&#xA;  downtime.&#xA;&#xA;  2. Gossip propagation delay and offline peers. These days most nodes&#xA;  throttle gossip pretty aggressively. As a result, a pair of nodes doing&#xA;  several in-flight splices (inputs become double spent or something, so&#xA;  they need to try a bunch) might end up being rate limited within the&#xA;  network, causing the splice update msg to be lost or delayed significantly&#xA;  (IIRC CLN resets these values after 24 hours). On top of that, if a peer&#xA;  is offline for too long (think mobile senders), then they may miss the&#xA;  update all together as most nodes don&#39;t do a full historical&#xA;  _channel_update_ dump anymore.&#xA;&#xA;In order to resolve these issues, I think instead we need to rely on the&#xA;primary splicing signal being sourced from the chain itself. In other words,&#xA;if I see a channel close, and a closing transaction &#34;looks&#34; a certain way,&#xA;then I know it&#39;s a splice. This would be used in concert w/ any new gossip&#xA;messages, as the chain signal is a 100% foolproof way of letting an aware&#xA;peer know that a splice is actually happening (not a normal close). A chain&#xA;signal doesn&#39;t suffer from any of the gossip/time related issues above, as&#xA;the signal is revealed at the same time a peer learns of a channel&#xA;close/splice.&#xA;&#xA;Assuming, we agree that a chain signal has some sort of role in the ultimate&#xA;plans for splicing, we&#39;d need to decide on exactly _what_ such a signal&#xA;looks like. Off the top, a few options are:&#xA;&#xA;  1. Stuff something in the annex. Works in theory, but not in practice, as&#xA;  bitcoind (being the dominant full node implementation on the p2p network,&#xA;  as well as what all the miners use) treats annexes as non-standard. Also&#xA;  the annex itself might have some fundamental issues that get in the way of&#xA;  its use all together [2].&#xA;&#xA;  2. Re-use the anchors for this purpose. Anchor are nice as they allow for&#xA;  1st/2nd/3rd party CPFP. As a splice might have several inputs and outputs,&#xA;  both sides will want to make sure it gets confirmed in a timely manner.&#xA;  Ofc, RBF can be used here, but that requires both sides to be online to&#xA;  make adjustments. Pre-signing can work too, but the effectiveness&#xA;  (minimizing chain cost while expediting confirmation) would be dependent&#xA;  on the fee step size.&#xA;&#xA;  In this case, we&#39;d use a different multi-sig output (both sides can rotate&#xA;  keys if they want to), and then roll the anchors into this splicing&#xA;  transaction. Given that all nodes on the network know what the anchor size&#xA;  is (assuming feature bit understanding), they&#39;re able to realize that it&#39;s&#xA;  actually a splice, and they don&#39;t need to remove it from the channel graph&#xA;  (yet).&#xA;&#xA;  3. Related to the above: just re-use the same multi-sig output. If nodes&#xA;  don&#39;t care all that much about rotating these keys, then they can just use&#xA;  the same output. This is trivially recognizable by nodes, as they already&#xA;  know the funding keys used, as they&#39;re in the channel_announcement.&#xA;&#xA;  4. OP_RETURN (yeh, I had to list it). Self explanatory, push some bytes in&#xA;  an OP_RETURN and use that as the marker.&#xA;&#xA;  5. Fiddle w/ the locktime+sequence somehow to make it identifiable to&#xA;  verifiers. This might run into some unintended interactions if the inputs&#xA;  provided have either relative or absolute lock times. There might also be&#xA;  some interaction w/ the main constructing for eltoo (uses the locktime).&#xA;&#xA;Of all the options, I think #2 makes the most sense: we already use anchors&#xA;to be able to do fee bumping after-the-fact for closing transactions, so why&#xA;not inherit them here. They make the splicing transaction slightly larger,&#xA;so maybe #3 (or something else) is a better choice.&#xA;&#xA;The design space for spicing is preeetty large, so I figure the most&#xA;productive route might be discussing isolated aspects of it at a time.&#xA;Personally, I&#39;m not suuuper caught up w/ what the latest design drafts are&#xA;(aside from convos at the recent LN Dev Summit), but from my PoV, how to&#xA;communicate the splice to other peers has been an outstanding design&#xA;question.&#xA;&#xA;[1]: https://github.com/lightning/bolts/pull/1004&#xA;[2]:&#xA;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-March/020045.html&#xA;&#xA;-- Laolu&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220627/1544d48a/attachment.html&gt;</html></oembed>