<oembed><type>rich</type><version>1.0</version><author_name>npub1za0a9afyj7um5feva0d5xmhfsah3zxm252hna2duq0numa952frqvuua2a</author_name><author_url>https://nostr.ae/npub1za0a9afyj7um5feva0d5xmhfsah3zxm252hna2duq0numa952frqvuua2a</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2018-10-19&#xA;📝 Original message:&#xA;Good evening all,&#xA;&#xA;Thank you Rusty for starting us down this path :) and to ZmnSCPxj and Lisa&#xA;for&#xA;your thoughts. I think this narrows down the design space considerably!&#xA;&#xA;In light of this, and if I&#39;m following along, it seems our hand is forced in&#xA;splicing via a single on-chain transaction. In my book, this is preferable&#xA;anyway. I&#39;d much rather push complexity off-chain than having to do a&#xA;mutli-stage splicing pipeline.&#xA;&#xA;&gt; To add some context to this, if you start accepting HTLC&#39;s for the new&#xA;balance&#xA;&gt; after the parallel commitment is made, but before the re-anchor is buried,&#xA;&gt; there&#39;s the potential for a race condition between a unilateral close (or&#xA;any&#xA;&gt; revoked commitment transaction) and the re-anchoring commitment&#xA;transaction,&#xA;&gt; that spends the &#39;pre-committed&#39; UTXO of splicing in funds and the original&#xA;&gt; funding transaction&#xA;&#xA;Indeed, I&#39;m not aware of any splicing mechanism that enables off-chain use&#xA;of&#xA;spliced-in funds before the new funding output confirms. Even in the async,&#xA;single-txn case, the new funds cannot be spent until the new funding output&#xA;confirms sufficiently.&#xA;&#xA;&gt;From my POV, the desired properties of a splice are:&#xA; 1. non-blocking (asynchronous) usage of the channel&#xA; 2. single on-chain txn&#xA; 3. ability to RBF (have multiple pending splices)&#xA;&#xA;Of these, it seems we&#39;ve solidified 1 and 2. I understand the desire to not&#xA;tackle RBF on the first attempt given the additional complexity.  However, I&#xA;do believe there are ways we can proceed in which our first attempt largely&#xA;coincides with supporting it in the future.&#xA;&#xA;With that in mind, here are some thoughts on the proposals above.&#xA;&#xA;## RBF and Multiple Splices&#xA;&#xA;&gt; 1. type: 132 (`commitment_signed`)&#xA;&gt; 2. data:&#xA;&gt;    * [`32`:`channel_id`]&#xA;&gt;    * [`64`:`signature`]&#xA;&gt;    * [`2`:`num_htlcs`]&#xA;&gt;    * [`num_htlcs*64`:`htlc_signature`]&#xA;&gt;    * [`num_htlcs*64`:`htlc_splice_signature`] (`option_splice`)&#xA;&#xA;This will overflow the maximum message size of 65535 bytes for num_htlcs &gt;&#xA;511.&#xA;&#xA;I would propose sending a distinct message, which references the&#xA;`active_channel_id` and a `splice_channel_id` for the pending splice:&#xA;&#xA;1. type: XXX (`commitment_splice_signed`) (`option_splice`)&#xA;2. data:&#xA;   * [`32`:`active_channel_id`]&#xA;   * [`32`:`splice_channel_id`]&#xA;   * [`64`:`signature`]&#xA;   * [`2`:`num_htlcs`]&#xA;   * [`num_htlcs*64`:`htlc_signature`]&#xA;&#xA;This more directly addresses handling multiple pending splices, as well as&#xA;preventing us from running into any size constraints. The purpose of&#xA;including the `active_channel_id` would be to remote node locate the&#xA;spliced channel, since it may not be populated indexes containing&#xA;active channels. If we don&#39;t want to include this, the existing message&#xA;can be used without modification.&#xA;&#xA;&gt; We shouldn&#39;t allow more than one pending splice operation anyway, as&#xA;&gt; stated in your proposal initially. We are already critically reliant on&#xA;our&#xA;&gt; transaction being confirmed on-chain, so I don&#39;t see this as much of an&#xA;&gt; added issue.&#xA;&#xA;IMO there&#39;s no reason to limit ourselves to one pending splice at the&#xA;message&#xA;level. I think it&#39;d be an oversight to not to plan ahead with RBF in mind,&#xA;given that funding transactions have gone unconfirmed precisely because of&#xA;improperly chosen fee rates. Arguably, funding flow should be extended to&#xA;support this as well.&#xA;&#xA;CPFP works, though it&#39;s more wasteful than resigning and I&#39;d prefer only to&#xA;do&#xA;so out of necessity, rather than relying on it. CPFP is nice because it&#xA;doesn&#39;t&#xA;require interaction, though we are already assuming the other party to be&#xA;online during the splice (unlike unilateral closes).&#xA;&#xA;Adding a splice-reject message/error code should be sufficient to allow&#xA;implementations to signal that their local tolerance for number of pending&#xA;splices has been reached. It&#39;s likely we&#39;d all start with getting one splice&#xA;working, but then the messages won&#39;t need to modified if we want to&#xA;implement&#xA;additional pending splices via RBF.&#xA;&#xA;A node that wants to RBF but receives a reject can then proceed with CPFP&#xA;as a&#xA;last resort.&#xA;&#xA;Are there any downsides I&#39;m overlooking with this approach?&#xA;&#xA;&gt; | Bit Position  | Name                      | Field&#xA;      |&#xA;&gt; | ------------- | ------------------------- |&#xA;-------------------------------- |&#xA;&gt; | 0             | `option_channel_htlc_max` | `htlc_maximum_msat`&#xA;      |&#xA;&gt; | 1             | `option_channel_moving`   | `moving_txid&#xA;     |&#xA;&gt;&#xA;&gt; The `channel_update` gains the following field:&#xA;&gt;     * [`32`: moving_txid`] (option_channel_moving)&#xA;&#xA;Do we actually need to send the `moving_txid` via a channel update? I think&#xA;it&#39;s&#xA;enough for both parties to send `channel_update`s with the&#xA;`option_channel_moving` bit set, and continue to keep the channel in our&#xA;routing&#xA;table.&#xA;&#xA;If we receive later receive two `channel_update`s whose `short_channel_id`s&#xA;reference the spending transaction (and the node pubkeys are the same), we&#xA;assume the splice was successful and that this channel has been subsumed. I&#xA;think this works so long as the spending transaction doesn&#39;t contain&#xA;multiple&#xA;funding outputs, though I think the current proposal is fallible to this as&#xA;well.&#xA;&#xA;To me, this proposal has the benefit of not bloating gossip bandwidth with&#xA;an&#xA;extra field that would need to parsed indefinitely, and gracefully&#xA;supporting&#xA;RBF down the road. Otherwise we&#39;d need to gossip and store each potential&#xA;txid.&#xA;&#xA;With regards to forwarding, both `short_channel_id`s would be accepted by&#xA;the&#xA;splicers for up to 100 blocks (after splice confirm?), at which point they&#xA;can&#xA;both forget the prior `short_channel_id`.&#xA;&#xA;## Shachain&#xA;&#xA;&gt; I thought about restarting the revocation sequence, but it seems like&#xA;&gt; that only saves a tiny amount since we only store log(N) entries.  We&#xA;&gt; can drop old HTLC info post-splice though, and (after some delay for&#xA;&gt; obscurity) tell watchtowers to drop old entries I think.&#xA;&#xA;I agree the additional state isn&#39;t too burdensome, and that we would still&#xA;be&#xA;able to drop watchtower state after some delay as you mentioned.&#xA;&#xA;On one hand, it does seem like the opportune time to remove such state if&#xA;desired.&#xA;&#xA;OTOH, it is _really_ nice from an atomicity perspective that the current&#xA;channel and (potentially) N pending channels can be revoked using a single&#xA;commitment secret and message. Doing so would mean we don&#39;t have to&#xA;modify the `revoke_and_ack` or `channel_reestablish` messages. The receiver&#xA;would just apply the commitment secrets/points to the current channel and&#xA;any&#xA;pending splices.&#xA;&#xA;## Misc&#xA;&#xA;&gt; Any reason to now make the splicing_add_* messages allow one to add&#xA;several&#xA;&gt; inputs in a single message? Given &#34;acceptable&#34; constraints for how large&#xA;the&#xA;&gt; witness and pkScripts can be, we can easily enforce an upper limit on the&#xA;&gt; number of inputs/outputs to add.&#xA;&#xA;Yes, I prefer this simplification.&#xA;&#xA;&gt; Additionally, as the size of the channel is either expanding or&#xA;contracting,&#xA;&gt; both sides should be allowed to modify things like the CSV param, reserve,&#xA;&gt; max accepted htlc&#39;s, max htlc size, etc. Many of these parameters like the&#xA;&gt; CSV value should scale with the size of the channel, not allowing these&#xA;&gt; parameters to be re-negotiated could result in odd scenarios like still&#xA;&gt; maintain a 1 week CSV when the channel size has dipped from 1 BTC to 100k&#xA;&gt; satoshis.&#xA;&#xA;Agreed!&#xA;&#xA;&gt; These all seem marginal to me.  I think if we start hitting max values,&#xA;&gt; we should discuss increasing them.&#xA;&#xA;Doesn&#39;t this defeat the goal of firewalling funds against individual channel&#xA;failures?&#xA;&#xA;&gt;&gt;&gt; One thing that I think we should lift from the multiple funding output&#xA;&gt;&gt;&gt; approach is the &#34;pre seating of inputs&#34;. This is cool as it would allow&#xA;&gt;&gt;&gt; clients to generate addresses, that others could deposit to, and then&#xA;have&#xA;&gt;&gt;&gt; be spliced directly into the channel. Public derivation can be used,&#xA;along&#xA;&gt;&gt;&gt; with a script template to do it non-interactively, with the clients&#xA;picking&#xA;&gt;&gt;&gt; up these deposits, and initiating a splice in as needed.&#xA;&gt;&gt;&#xA;&gt;&gt; How about this restatement?&#xA;&gt;&gt;&#xA;&gt;&gt; 1.  Each channel has two public-key-derivation paths (BIP32) to create&#xA;onchain&#xA;&gt;&gt; addresses.  One for each side of the channel.&#xA;&gt;&gt; 2.  The base of the above is actually a combined private-public keypair&#xA;of both&#xA;&gt;&gt; sides (e.g. created via MuSig or some other protocol).  Thus the&#xA;addresses&#xA;&gt;&gt; require cooperation of both parties to spend.&#xA;&gt;&gt; 3.  When somebody sends to one of the onchain addresses in the path,&#xA;their&#xA;&gt;&gt; client detects this.&#xA;&gt;&gt; 4.  The client updates the current transaction state, such that the new&#xA;commit&#xA;&gt;&gt; transaction has two inputs ( the original channel transaction and the&#xA;new UTXO).&#xA;&gt;&gt;&#xA;&gt;&gt; The above seems unsafe without trust in the other peer, as, the other&#xA;peer can&#xA;&gt;&gt; simply refuse to create the new commit transaction.  Since the address&#xA;requires&#xA;&gt;&gt; both parties to spend, the money cannot be spent and there is no backoff&#xA;&gt;&gt; transaction that can be used.  But maybe you can describe some mechanism&#xA;to&#xA;&gt;&gt; ensure this, if this is what is meant instead?&#xA;&gt;&#xA;&gt; This could easily be solved by making the destination address a Taproot&#xA;&gt; address, which by default is just a 2-of-2, but in the uncooperative&#xA;&gt; case it can reveal the script it commits to, which is just a timelocked&#xA;&gt; refund that requires a single-sig. The only problem with this is that&#xA;&gt; the refund would be non-interactive, and so the entirety of the funds,&#xA;&gt; that may be from a third-party, need to be claimed by one endpoint,&#xA;&gt; i.e., there is no splitting the funds in case of an uncollaborative&#xA;&gt; refund. Not sure how important that is though, since I don&#39;t think&#xA;&gt; third-party funds will come from unrelated parties, e.g., most of these&#xA;&gt; funds will come from an on-chain wallet that is under the control of&#xA;&gt; either parties so the refund should go back to that party anyway.&#xA;&#xA;This can be accomplished similarly by having either (or both) party&#xA;publishing a&#xA;static address or publicly derivable address specific to the channel,&#xA;derived&#xA;from their HD seed.&#xA;&#xA;Arguably, the address should perhaps be global, so that it can outlive the&#xA;lifetime of the channel, i.e. as soon as the first person deposits and a&#xA;splice&#xA;is initiated, is the address still valid for the new channel if new keys are&#xA;used? Similarly, the channel could be closed and the funds locked until&#xA;the timeout if the peer disappears.&#xA;&#xA;Regardless, both approaches can be made to have equivalent amounts of&#xA;[non-]interactivity. However, the recipient isn&#39;t burdened in spending by&#xA;1) interaction with the channel peer, or 2) an absolute timeout if 1 fails,&#xA;giving the receiver more flexibility if they wish to not commit the received&#xA;funds to a splice. It also benefits from smaller witness sizes, a larger&#xA;anonymity set, etc.&#xA;&#xA;In general, using a 2-of-2+timeout to stage funds for splicing doesn&#39;t offer&#xA;that much IMO. It seems the primary purpose is to prevent the funds from&#xA;being&#xA;double spent during the splice, but observe that this is still possible if&#xA;the&#xA;timeout matures, perhaps because the splice doesn&#39;t confirm in a timely&#xA;manner.&#xA;&#xA;Acknowledging this, detecting double-spent inputs is still required for full&#xA;correctness. By implementing it, either party is free to propose arbitrary&#xA;inputs for a splice, which I believe reduces complexity in the long run.&#xA;&#xA;Splice out,&#xA;Conner&#xA;&#xA;On Tue, Oct 16, 2018 at 10:00 PM ZmnSCPxj via Lightning-dev &lt;&#xA;lightning-dev at lists.linuxfoundation.org&gt; wrote:&#xA;&#xA;&gt; Good morning lisa,&#xA;&gt;&#xA;&gt; This is a good observation.&#xA;&gt;&#xA;&gt; Before, I&#39;d already considered the rationale, for why channels have a&#xA;&gt; single 2-of-2 UTXO as funding output.  And it seems I should have&#xA;&gt; considered this, prior to accepting the &#34;parallel&#34; construction as feasible.&#xA;&gt;&#xA;&gt; For sake of posterity, I leave the below writeup as a tangential to the&#xA;&gt; design of splice (and to the design of Lightning having a single 2-of-2&#xA;&gt; UTXOs):&#xA;&gt;&#xA;&gt; # 0-conf is Unsafe, Yet Lightning is Safe; Why?&#xA;&gt;&#xA;&gt; To accept a 0-conf transaction output, is known to be unsafe.&#xA;&gt; Replace-by-fee is always a possibility, regardless of whether the&#xA;&gt; transaction opts in to RBF or not: a rational miner will always accept the&#xA;&gt; higher feerate, disregarding any &#34;opt-in&#34; flag that is set or not set on&#xA;&gt; the transaction.  Thus we reject any advice that claims that 0-conf is&#xA;&gt; tenable, even for tiny amounts.&#xA;&gt;&#xA;&gt; Yet when viewed solely in terms of transactions, Lightning protocol uses&#xA;&gt; transactions that are not on any block (are kept offchain).  Since they are&#xA;&gt; not in a block, they are indistinguishable from 0-conf transactions, which&#xA;&gt; are accepted by the receiver, yet are also not on any block.  One might&#xA;&gt; argue the distinction, that a &#34;real&#34; 0-conf transaction exists on some&#xA;&gt; mempool somewhere, and thus has a chance to be on a block in the future,&#xA;&gt; but mempools have no consensus, and the existence of a transaction on some&#xA;&gt; mempool is not a safe assurance of it existing in the mempool of the next&#xA;&gt; winning miner.&#xA;&gt;&#xA;&gt; So why is Lightning safe, when 0-conf transactions are in general not safe?&#xA;&gt;&#xA;&gt; Again, we should focus on why 0-conf transactions in general are not safe:&#xA;&gt; transaction replacement.  Thus, 0-conf transactions can be made safe, if&#xA;&gt; you are somehow able to ensure that replacement transactions cannot be made.&#xA;&gt;&#xA;&gt; For example, if you are part of an n-of-n federation that signs the&#xA;&gt; transaction, you can always safely accept a 0-conf transaction from that&#xA;&gt; federation paying only to you, because you can always veto any replacement&#xA;&gt; (by simply refusing to sign) that is not in your interests.&#xA;&gt;&#xA;&gt; This is in fact how Lightning works: a 2-of-2 federation (the channel&#xA;&gt; counterparties) are the signatories of the 0-conf transactions that are the&#xA;&gt; commitment transactions of the Lightning protocol.  Replacement of the&#xA;&gt; commitment transactions is strictly guided by the protocol; both sides have&#xA;&gt; veto rights, since the source transaction output is 2-of-2.&#xA;&gt;&#xA;&gt; Thus, Lightning, though it uses 0-conf transactions, is safe, because it&#xA;&gt; prevents the replacement of a 0-conf transaction without the receiver&#xA;&gt; allowing it, by the simple expedient of including the receiver in the&#xA;&gt; 2-of-2 multisig guarding its single funding TXO.&#xA;&gt;&#xA;&gt; ##  The Implications for Splice Proposals&#xA;&gt;&#xA;&gt; Some splice proposals involve creating the equivalent of multiple funding&#xA;&gt; TXOs for a single channel.  Such constructions are unsafe-by-default on&#xA;&gt; Poon-Dryja.&#xA;&gt;&#xA;&gt; In reality, every commitment transaction (or update transaction in&#xA;&gt; Decker-Osuntokun-Russell) is replaceable by any other commitment (or&#xA;&gt; update) transaction for that channel.  Under Poon-Dryja older transactions&#xA;&gt; are revoked (and hence one side risks loss of their collateral) while under&#xA;&gt; Decker-Osuntokun-Russell older transactions may be &#34;gainsaid&#34; (i.e. newer&#xA;&gt; update transactions may be reanchored to consume the TXO of the older&#xA;&gt; update transaction, thus preventing that update from truly being committed&#xA;&gt; to).&#xA;&gt;&#xA;&gt; This is relevant since before a splice, the channel has a single funding&#xA;&gt; TXO, while after the splice, the channel has multiple.&#xA;&gt;&#xA;&gt; In particular, a commitment (or update) transaction, that has multiple&#xA;&gt; inputs (to consume the multiple funding TXOs), can be replaced with a&#xA;&gt; commitment (or update) transaction that was created before the splice.&#xA;&gt; Under Poon-Dryja, such a commitment transaction may be revoked, but this&#xA;&gt; leaves the other funding TXOs unuseable.  Under Decker-Osuntokun-Russell,&#xA;&gt; as long as the sequence number is preserved across the splice, it is&#xA;&gt; possible for a later update transaction with multiple inputs to simply&#xA;&gt; gainsay the old single-input update with the new multiple-input update&#xA;&gt; transaction. (I suppose, that this is another advantage that&#xA;&gt; Decker-Osuntokun-Russell has).&#xA;&gt;&#xA;&gt; Regards,&#xA;&gt; ZmnSCPxj&#xA;&gt;&#xA;&gt;&#xA;&gt; Sent with ProtonMail &lt;https://protonmail.com&gt; Secure Email.&#xA;&gt;&#xA;&gt; ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐&#xA;&gt; On Wednesday, October 17, 2018 9:09 AM, lisa neigut &lt;niftynei at gmail.com&gt;&#xA;&gt; wrote:&#xA;&gt;&#xA;&gt; To add some context to this, if you start accepting HTLC&#39;s for the new&#xA;&gt; balance after the parallel commitment is made, but before the re-anchor is&#xA;&gt; buried, there&#39;s the potential for a race condition between a unilateral&#xA;&gt; close (or any revoked commitment transaction) and the re-anchoring&#xA;&gt; commitment transaction, that spends the &#39;pre-committed&#39; UTXO of splicing in&#xA;&gt; funds and the original funding transaction.&#xA;&gt;&#xA;&gt; You can get around this by waiting until both the pre-commitment UTXO and&#xA;&gt; the re-anchor have cleared a minimum depth before accepting HTLC&#39;s for the&#xA;&gt; new balance totals, but that&#39;s twice as long of a wait as the first,&#xA;&gt; synchronized re-commitment scheme that Rusty originally proposed.&#xA;&gt;&#xA;&gt; It also makes leaving the original funding transaction &#39;exposed&#39; (ie&#xA;&gt; Rene&#39;s version of parallel splice) untenable, as there&#39;s always the risk of&#xA;&gt; an old state being published to consume that input. This foobars your&#xA;&gt; current HTLC commitments.&#xA;&gt;&#xA;&gt; On Tue, Oct 16, 2018 at 3:31 PM Rusty Russell &lt;rusty at rustcorp.com.au&gt;&#xA;&gt; wrote:&#xA;&gt;&#xA;&gt;&gt; Rusty Russell &lt;rusty at rustcorp.com.au&gt; writes:&#xA;&gt;&gt; &gt; If we&#39;re going to do side splice-in like this, I would use a very&#xA;&gt;&gt; &gt; different protocol: the reason for this protocol was to treat splice-in&#xA;&gt;&gt; &gt; and splice-out the same, and inline splice-in requires wait time.  Since&#xA;&gt;&gt; &gt; splice-out doesn&#39;t, we don&#39;t need this at all.&#xA;&gt;&gt; &gt;&#xA;&gt;&gt; &gt; It would look much more like:&#xA;&gt;&gt; &gt;&#xA;&gt;&gt; &gt; 1. Prepare any output with script of specific form. eg:&#xA;&gt;&gt; &gt;         OP_DEPTH 3 OP_EQUAL OP_IF&#xA;&gt;&gt; &gt;                 &lt;funding_pubkey1&gt; &lt;funding_pubkey2&gt; OP_CHECKMULTISIG&#xA;&gt;&gt; &gt;         OP_ELSE&#xA;&gt;&gt; &gt;                 &lt;blockheight&gt; OP_CHECKLOCKTIMEVERIFY OP_DROP&#xA;&gt;&gt; &gt;                 &lt;myrescue_pubkey&gt; OP_CHECKSIG&#xA;&gt;&gt; &gt;         OP_ENDIF&#xA;&gt;&gt; &gt;&#xA;&gt;&gt; &gt; 1. type: 40 (`splice_in`) (`option_splice`)&#xA;&gt;&gt; &gt; 2. data:&#xA;&gt;&gt; &gt;    * [`32`:`channel_id`]&#xA;&gt;&gt; &gt;    * [`8`: `satoshis`]&#xA;&gt;&gt; &gt;    * [`32`: `txid`]&#xA;&gt;&gt; &gt;    * [`4`: `txoutnum`]&#xA;&gt;&gt; &gt;    * [`4`: `blockheight`]&#xA;&gt;&gt; &gt;    * [`33`: `myrescue_pubkey`]&#xA;&gt;&gt; &gt;&#xA;&gt;&gt; &gt; 1. type: 137 (`update_splice_in_accept`) (`option_splice`)&#xA;&gt;&gt; &gt;    data:&#xA;&gt;&gt; &gt;    * [`32`:`channel_id`]&#xA;&gt;&gt; &gt;    * [`32`: `txid`]&#xA;&gt;&gt; &gt;    * [`4`: `txoutnum`]&#xA;&gt;&gt; &gt;&#xA;&gt;&gt; &gt; 1. type: 138 (`update_splice_in_reject`) (`option_splice`)&#xA;&gt;&gt; &gt;    data:&#xA;&gt;&gt; &gt;    * [`32`:`channel_id`]&#xA;&gt;&gt; &gt;    * [`32`: `txid`]&#xA;&gt;&gt; &gt;    * [`2`:`len`]&#xA;&gt;&gt; &gt;    * [`len`:`errorstr`]&#xA;&gt;&gt; &gt;&#xA;&gt;&gt; &gt; The recipient of `splice_in` checks that it&#39;s happy with the&#xA;&gt;&gt; &gt; `blockheight` (far enough in future).  Once it sees the tx referred to&#xA;&gt;&gt; &gt; buried to its own `minimum_depth`, it checks output is what they&#xA;&gt;&gt; &gt; claimed, then sends `update_splice_in_accept`; it&#39;s followed up&#xA;&gt;&gt; &gt; `commitment_signed` like normal, but from this point onwards, all&#xA;&gt;&gt; &gt; commitment txs signatures have one extra sig.&#xA;&gt;&gt;&#xA;&gt;&gt; Lisa started asking pointed questions, and so I noticed that parallel&#xA;&gt;&gt; splice doesn&#39;t work with Poon-Dryja channels.&#xA;&gt;&gt;&#xA;&gt;&gt; The counterparty can spend the old funding txout with a revoked spend.&#xA;&gt;&gt; Sure, I can take all the money from that, but what about the spliced&#xA;&gt;&gt; input?&#xA;&gt;&gt;&#xA;&gt;&gt; I came up with increasingly elaborate workarounds, but nothing stuck.&#xA;&gt;&gt;&#xA;&gt;&gt; Back to Plan A...&#xA;&gt;&gt; Rusty.&#xA;&gt;&gt; _______________________________________________&#xA;&gt;&gt; Lightning-dev mailing list&#xA;&gt;&gt; Lightning-dev at lists.linuxfoundation.org&#xA;&gt;&gt; https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#xA;&gt;&gt;&#xA;&gt;&#xA;&gt; _______________________________________________&#xA;&gt; Lightning-dev mailing list&#xA;&gt; Lightning-dev at lists.linuxfoundation.org&#xA;&gt; https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#xA;&gt;&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20181018/d57ce11c/attachment-0001.html&gt;</html></oembed>