<oembed><type>rich</type><version>1.0</version><title>ZmnSCPxj [ARCHIVE] wrote</title><author_name>ZmnSCPxj [ARCHIVE] (npub1g5…3ms3l)</author_name><author_url>https://yabu.me/npub1g5zswf6y48f7fy90jf3tlcuwdmjn8znhzaa4vkmtxaeskca8hpss23ms3l</author_url><provider_name>njump</provider_name><provider_url>https://yabu.me</provider_url><html>📅 Original date posted:2021-06-01&#xA;📝 Original message:&#xA;Good morning LL,&#xA;&#xA;&gt; Hi Z,&#xA;&gt;&#xA;&gt; I just went through the presentation which made your thinking very clear. Thanks.&#xA;&gt; I will not be able to match this effort so please bear with me as I try and explain my own thinking.&#xA;&gt; I don&#39;t see why fast forwards (FF) need &#34;symmetrically encumbered outputs&#34;? To me the protocol should be asymmetric.&#xA;&gt;&#xA;&gt; This is what I think happens when offering a FF HTLC:&#xA;&gt; 1. The offerer creates and signs a new commitment tx as normal with the HTLC except it has the same revocation key as the last one.&#xA;&gt; 2. The offerer patches their balance output by sending a tx spending from it to a new tx which has the HTLC output and their balance output (unencumbered).&#xA;&gt;&#xA;&gt; The HTLC is now irrevocably committed from the perspective of the receiver.&#xA;&gt; Now the receiver presents the pre-image and the offerer then:&#xA;&gt;&#xA;&gt; 1. The offerer creates and signs a new commitment tx as normal consolidating the funds into the receiver&#39;s balance output except once again it has the same revocation key as the last one.&#xA;&gt; 2. The offerer patches their commitment tx balance output again by sending a tx spending from it to a new tx which splits into the receiver&#39;s balance (the value of the claimed HTLC) and the offerer&#39;s remaining balance.&#xA;&gt;&#xA;&gt; You can repeat the above process without having the receiver&#39;s revocation keys online or their commitment tx keys for many HTLCs while the offerer still has balance towards the receiver.&#xA;&gt; The on-chain cost is about the same as before for an uncooperative close.&#xA;&gt;&#xA;&gt; Once the receiver brings their keys on line they can consolidate the FF state into a new commitment txs on both sides and with a proper revocation operate the channel normally. What has been the receiver up until now can finally send funds.&#xA;&gt;&#xA;&gt; Am I missing something?&#xA;&#xA;Basically, you are taking advantage of the fact that we **actually** let the commitments on both sides be desynchronized with each other.&#xA;I tend to elide this fact when explaining, and also avoid it when planning protocols.&#xA;&#xA;However I believe the idea is correct.&#xA;&#xA;Anyway, as I understood it:&#xA;&#xA;So suppose we start with this pair of commitment txes:&#xA;&#xA;    +--------------------------+&#xA;    |  Commitment tx 1 of A    |&#xA;    +------------+-------------+&#xA;    |            | (A[0] &amp;&amp; B) |&#xA;    |            |||(A &amp;&amp; CSV) |&#xA;    |    SigB    +-------------+&#xA;    |            |      B      |&#xA;    |            |             |&#xA;    +------------+-------------+&#xA;&#xA;    +--------------------------+&#xA;    |  Commitment tx 1 of B    |&#xA;    +------------+-------------+&#xA;    |    SigA    |      A      |&#xA;    |            |             |&#xA;    |            +-------------+&#xA;    |            | (A &amp;&amp; B[0]) |&#xA;    |            |||(B &amp;&amp; CSV) |&#xA;    +------------+-------------+&#xA;&#xA;Now Alice wants to offer an HTLC to Bob.&#xA;What Alice does is:&#xA;&#xA;* **Retain** the Alice commitment tx and create an HTLC tx spending from it.&#xA;* **Advance** the Bob commitment tx (and letting it desync from the Alice commitment tx), adding the same HTLC.&#xA;&#xA;So after Alice sends its new signatures, our offchain txes are:&#xA;&#xA;    +--------------------------+    +--------------------------+&#xA;    |  Commitment tx 1 of A    |    |          HTLC Tx         |&#xA;    +------------+-------------+    +------------+-------------+&#xA;    |            | (A[0] &amp;&amp; B) |---&gt;|  SigA[0]   | (A[0] &amp;&amp; B) |&#xA;    |            |||(A &amp;&amp; CSV) |    |            |||(A &amp;&amp; CSV) |&#xA;    |    SigB    +-------------+    |            +-------------+&#xA;    |            |      B      |    |            |    A-&gt;B     |&#xA;    |            |             |    |            |    HTLC     |&#xA;    +------------+-------------+    +------------+-------------+&#xA;&#xA;    +--------------------------+&#xA;    | Commitment tx *2* of B   |&#xA;    +------------+-------------+&#xA;    |    SigA    |      A      |&#xA;    |            |             |&#xA;    |            +-------------+&#xA;    |            | (A &amp;&amp; B[1]) |&#xA;    |            |||(B &amp;&amp; CSV) |&#xA;    |            +-------------+&#xA;    |            |    A-&gt;B     |&#xA;    |            |    HTLC     |&#xA;    +------------+-------------+&#xA;&#xA;Notes:&#xA;&#xA;* Again, for Alice to offer the HTLC to Bob, only Alice has to make new signatures (`SigA[0]` and `SigA` for commitment tx *2* of Bob).&#xA;* If Alice goes offline and Bob decides to drop onchain, Bob only needs to sign the new commitment tx.&#xA;  We can argue that dropping channels *should* be rare enough that requiring privkeys for this operation is not a burden.&#xA;* If Alice decides to drop the channel onchain, Bob only needs to bring in the privkey for the HTLC tx, which we can (at a lower, detailed level) be different from the &#34;main&#34; B privkey.&#xA;&#xA;So yes, I think it seems workable without symmetric encumbrance.&#xA;&#xA;Regards.&#xA;ZmnSCPxj</html></oembed>