<div dir="ltr"><div>&gt; However personally I do not really see the need to create multiple channels</div><div>&gt; to a single peer, or increase the capacity with a specific peer (via splice</div><div>&gt; or dual-funding).  As Christian says in the other mail, this consideration,</div><div>&gt; is that it becomes less a network and more of some channels to specific big</div><div>&gt; businesses you transact with regularly.</div><div><br></div><div>I made no reference to any &quot;big businesses&quot;, only the utility that arises</div><div>when one has multiple channels to a given peer. Consider an easier example:</div><div>given the max channel size, I can only ever send 0.16 or so BTC to that</div><div>peer. If I have two channels, then I can send 0.32 and so on. Consider the</div><div>case post AMP where we maintain the current limit of the number of in flight</div><div>HTLCs. If AMP causes most HTLCs to generally be in flight within the</div><div>network, then all of a sudden, this &quot;queue&quot; size (outstanding HTLCS in a</div><div>commitment) becomes more scarce (assume a global MTU of say 100k sat for</div><div>simplicity). This may then promote nodes to open additional channels to</div><div>other nodes (1+) in order to accommodate the increased HTLC bandwidth load</div><div>due to the sharded multi-path payments.</div><div><br></div><div>Independent on bolstering the bandwidth capabilities of your links to other</div><div>nodes, you would still want to maintain a diverse set of channels for fault</div><div>tolerance, path diversity, and redundancy reasons.</div><div><br></div><div>In the splicing case, if only a single in flight splice is permitted, and me</div><div>as users wants to keep all their funds in channels, the more channels I</div><div>have, the more concurrent on-chain withdraws/deposits I&#39;ll be able to</div><div>service.</div><div><br></div><div>&gt; I worry about doing away with initiator distinction</div><div><br></div><div>Can you re-phrase this sentence? I&#39;m having trouble parsing it, thanks.</div><div><br></div><div>&gt; which puzzles me, and I wonder if I am incorrect in my prioritization.</div><div><br></div><div>Consider that not all work items are created equal, and they have varying</div><div>levels of implementation and network wide synchronization. For example, I</div><div>think we all consider multi-hop decor to be a high priority.  However, it</div><div>has the longest and hardest road to deployment as it effectively forces us</div><div>to perform a &quot;slow motion hard-fork&quot; within the network. On the other hand,</div><div>if lnd wanted to deploy a flavor of non-interactive (no invoice) payments</div><div>*today*, we could do that without *any* synchronization at the</div><div>implementation of network level, as it&#39;s purely an end-to-end change.</div><div><br></div><div>&gt; I am uncertain what this means in particular, but let me try to restate</div><div>&gt; what you are talking about in other terms:</div><div><br></div><div>Thought about it a bit more (like way ago) and this is really no different</div><div>than having a donation page where people use public derivation to derive</div><div>addresses to deposit directly to your channel. All the Lightning node needs</div><div>to do, is recognize that any coins send to these derived addresses should be</div><div>immediately spliced into an available channel (doesn&#39;t have any other</div><div>outstanding splices). </div><div><br></div><div>&gt; It seems to me naively that the above can be done by the client software</div><div>&gt; without any modifications to the Lightning Network BOLT protocol</div><div><br></div><div>Sticking with that prior version yes, this would be able to be seamlessly</div><div>included in the async splce proposal. The one requirement is a link-level</div><div>protocol that allows both sides to collaboratively create and recognize</div><div>these outputs.</div><div><br></div><div>&gt; Or is my above restatement different from what you are talking about?</div><div><br></div><div>You&#39;re missing the CLTV timeout clause. It isn&#39;t a plain p2wkh, it&#39;s a p2wsh</div><div>script. Either they splice this in before the timeout, or it times out and</div><div>it goes back to one party. In this case, it&#39;s no different than the async</div><div>concurrent commitment splice in double spend case.</div><div><br></div><div>-- Laolu</div><div><br></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Oct 16, 2018 at 10:16 PM ZmnSCPxj &lt;<a href="mailto:ZmnSCPxj@protonmail.com">ZmnSCPxj@protonmail.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Good morning Laolu,<br></div><div><br></div><blockquote type="cite" class="m_1662604777575658118protonmail_quote"><div dir="ltr"><div dir="ltr"><div>Is there a fundamental reason that CL will never allow nodes to create<br></div><div>multiple channels? It seems unnecessarily limiting.<br></div></div></div></blockquote><div><br></div><div>The architecture of c-lightning assigns a separate process to each peer.  For simplicity this peer process handles only a single channel.  Some of the channel initiation and shutdown protocols are written &quot;directly&quot;, i.e. if the BOLT spec says this must happen before that, we literally write in the C code this_function(); that_function();.  It would be possible  to change this architecture with significant difficulty.<br></div><div><br></div><div>However personally I do not really see the need to create multiple channels to a single peer, or increase the capacity with a specific peer (via splice or dual-funding).  As Christian says in the other mail, this consideration, is that it becomes less a network and more of some channels to specific big businesses you transact with regularly.  But I suppose, that we will have to see how the network evolves eventually; perhaps the goal of decentralization is simply doomed regardless, and Lightning will indeed evolve into a set of channels you maintain to specific big businesses you regularly work with.<br></div><div><br></div><div><br></div><blockquote type="cite" class="m_1662604777575658118protonmail_quote"><div dir="ltr"><div dir="ltr"><div>&gt;    * [`4`:`feerate_per_kw`]<br></div><div><br></div><div>What fee rate is this? IMO we should do commitmentv2 before splicing as then<br></div><div>we can more or less do away with the initiator distinction and have most<br></div><div>fees be ad hoc.<br></div></div></div></blockquote><div><br></div><div>I worry about doing away with initiator distinction, as I worry that an initiatee may be forced to pay fees they did not really voluntarily consider paying, when they are given funds on a channel initiated by someone else in exchange for funds on a separate channel; but this is probably a separate topic.<br></div><div><br></div><div dir="ltr">&gt;If you think any of these items is a higher priority than splicing then you<br></div><div dir="ltr">&gt;can simply start working on them! There&#39;s no agency that prescribes what<br></div><div dir="ltr">&gt;should and shouldn&#39;t be pursued or developed, just your willingness to<br></div><div dir="ltr">&gt;write some code.<br></div><div dir="ltr"><br></div><div dir="ltr">While true, for me personally I can only devote a limited amount of time to coding for Lightning, and thus I must always worry whether my priorities are even correct.  I find it very common that people want to prioritize splicing over AMP or watchtowers, which puzzles me, and I wonder if I am incorrect in my prioritization.<br></div><div><br></div><div dir="ltr">&gt; One thing that I think we should lift from the multiple funding output<br></div><div dir="ltr">&gt; approach is the &quot;pre seating of inputs&quot;. This is cool as it would allow<br></div><div dir="ltr">&gt; clients to generate addresses, that others could deposit to, and then have<br></div><div dir="ltr">&gt; be spliced directly into the channel. Public derivation can be used, along<br></div><div dir="ltr">&gt; with a script template to do it non-interactively, with the clients picking<br></div><div dir="ltr">&gt; up these deposits, and initiating a splice in as needed.<br></div><div dir="ltr"><br></div><div dir="ltr">I am uncertain what this means in particular, but let me try to restate what you are talking about in other terms:<br></div><div dir="ltr"><br></div><div dir="ltr">1.  Each channel has two public-key-derivation paths (BIP32) to create onchain addresses.  One for each side of the channel.<br></div><div dir="ltr">2.  When somebody sends to one of the onchain addresses in the path, their client detects this.<br></div><div dir="ltr">3.  The client initiates a splice-in automatically from this UTXO paying to that address into the channel.<br></div><div><br></div><div>It seems to me naively that the above can be done by the client software without any modifications to the Lightning Network BOLT protocol, as long as the BOLT protocol is capable of supporting *some* splice-in operation, i.e. it seems to be something that a client software can implement as a feature without requiring a BOLT change.  Or is my above restatement different from what you are talking about?<br></div><div><br></div><div>How about this restatement?<br></div><div><br></div><div dir="ltr">1.  Each channel has two public-key-derivation paths (BIP32) to create onchain addresses.  One for each side of the channel.<br></div><div dir="ltr">2.  The base of the above is actually a combined private-public keypair of both sides (e.g. created via MuSig or some other protocol).  Thus the addresses require cooperation of both parties to spend.<br></div><div dir="ltr">3.  When somebody sends to one of the onchain addresses in the path, their client detects this.<br></div><div dir="ltr">4.  The client updates the current transaction state, such that the new commit transaction has two inputs ( the original channel transaction and the new UTXO).<br></div><div dir="ltr"><br></div><div dir="ltr">The above seems unsafe without trust in the other peer, as, the other peer can simply refuse to create the new commit transaction.  Since the address requires both parties to spend, the money cannot be spent and there is no backoff transaction that can be used.  But maybe you can describe some mechanism to ensure this, if this is what is meant instead?<br></div><div><br></div><div>Regards,<br></div><div>ZmnSCPxj<br></div></blockquote></div></div>