<div>Good morning Jim,<br></div><div><br></div><div><br></div><blockquote class="protonmail_quote" type="cite"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><div>It seems to me that adding an entire new attack vector in order to only *mitigate* (not eliminate!) another attack vector is not a good enough trade-off.&nbsp; In particular the new attack seems *easier* to perform.&nbsp; The current attack where I annoy the other side until it closes has the risk that the other side may have a high tolerance for annoyance, and decide not to close the channel unilaterally anyway.&nbsp; But in a symmetric-delay world, I do not have to wait for the other side to get annoyed: I just trigger the lockup period immediately in the active attack.<br></div></blockquote><div><br></div><div>I don't see the two attacks in the symmetric case as any different from one another. In 1.1, you force a unilateral close by becoming unresponsive and forcing the other side to eventually broadcast the commitment. In this case you waste the other party's channel balance for the full time of the delay PLUS the additional time they wait around to determine if you are ever going to come online. In 1.2, you force a unilateral close by broadcasting yourself. This is actually a weaker attack because the other party only has to wait for the delay period and there is no uncertainty about when they will get access to funds. So basically, I see no reason for an attacker to ever choose 1.2 over 1.1.<br></div></div></div></div></blockquote><div><br></div><div>You make a good point there, I understand.<br></div><div>&nbsp;<br></div><blockquote class="protonmail_quote" type="cite"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><span class="gmail-"><div>&gt; For example, in the case where the side unilaterally closing the
channel has zero balance, the other side gets no delay and symmetry as
measured by (coins locked) * (duration of lock) equals zero on both
sides. When the side closing the channel has at least 50% of the
balance, both sides must wait the full delay. Thoughts?<br></div><div><br></div></span><div>So on channel setup where I am the funder to a 1BTC&nbsp; channel I make to Daniel:<br></div><div><br></div><div>* Daniel holds a commitment transaction with: ZmnSCPxj=1BTC+no delay, Daniel=0BTC+no delay<br></div><div>* I hold a commitment transaction with: ZmnSCPxj=1BTC+no delay, Daniel=0BTC+no delay<br></div></blockquote><div><br></div><div>I rather like Daniel's suggestion to scale the delay in proportion to the time-money lost by the broadcasting party. Essentially, the delay just serves as punishment, so we should ensure that the punishment delivered is no greater than the time-value lost by the initiator of the unilateral close.<br></div><div><br></div><div>This example is not quite right: the commitment delays do not need to be the same in both commitment transaction with this scaling strategy. So the delay for the local output is ALWAYS the to_local_delay, as it is in the BOLT 3 spec today. When assigning the delay on the remote output, however, instead of using 0 as BOLT specifies now or to_remote_delay as I originally proposed, a better rule might be min(to_remote_delay, to_local_delay * to_local_value / to_remote_value). So the delay is never worse than what the opposite side would get by broadcasting themself, but is the punishment duration is reduced if the attacker broadcasts a commitment transaction in which the balance of funds is skewed towards the victim's end of the channel. However, I'm not sure how much this matters because as I argued above, an attacker should always prefer to become unresponsive rather than broadcast the commitment themself.<br></div></div></div></div></blockquote><div><br></div><div>This seems complicated, so perhaps just make delays equal as in the original proposal.&nbsp; Of course, each side has its own `to_self_delay` that currently is applied to the other side.&nbsp; It seems best the rule:<br></div><div><br></div><div>If I impose a specific `to_self_delay`, that applies to your commitment transaction, but for both branches of that.<br></div><div><br></div><div>My commitment transaction will have delays from your `to_self_delay` setting.<br></div><div><br></div><div>Regards,<br></div><div>ZmnSCPxj<br></div>