<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated>2023-06-09T12:16:57Z</updated>
  <generator>https://njump.me</generator>

  <title>Nostr notes by Conner Fromknecht [ARCHIVE]</title>
  <author>
    <name>Conner Fromknecht [ARCHIVE]</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://njump.me/npub1za0a9afyj7um5feva0d5xmhfsah3zxm252hna2duq0numa952frqvuua2a.rss" />
  <link href="https://njump.me/npub1za0a9afyj7um5feva0d5xmhfsah3zxm252hna2duq0numa952frqvuua2a" />
  <id>https://njump.me/npub1za0a9afyj7um5feva0d5xmhfsah3zxm252hna2duq0numa952frqvuua2a</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://njump.me/nevent1qqsxccrm6dfurh039q07ncykqc5gfvm0exrckgns0c259qnhj642vrczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvyn6yar</id>
    
      <title type="html">📅 Original date posted:2020-10-20 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxccrm6dfurh039q07ncykqc5gfvm0exrckgns0c259qnhj642vrczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvyn6yar" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0w20pmv5w7ch6c8ngspwssq5ax303tcpppa0au8rwvnpuzdyppcsml24k9&#39;&gt;nevent1q…24k9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-10-20&lt;br/&gt;📝 Original message:&lt;br/&gt;-----BEGIN PGP SIGNED MESSAGE-----&lt;br/&gt;Hash: SHA256&lt;br/&gt;&lt;br/&gt;Hi all,&lt;br/&gt;&lt;br/&gt;Today we are writing to disclose the details of CVE-2020-26895 as a follow up to&lt;br/&gt;the partial disclosure sent to lightning-dev [1].&lt;br/&gt;&lt;br/&gt;## Abstract&lt;br/&gt;&lt;br/&gt;Prior to v0.10.0-beta, a malicious peer could force an lnd node to accept a&lt;br/&gt;high-S ECDSA signature when updating new off-chain states. Though the signatures&lt;br/&gt;are valid according to consensus rules, the mempool policy would reject&lt;br/&gt;transactions containing high-S values, potentially leading to loss of funds if&lt;br/&gt;time-sensitive transactions cannot be relayed and confirmed. We have no evidence&lt;br/&gt;of the bug being exploited in the wild.&lt;br/&gt;&lt;br/&gt;It affects all classes of lnd nodes: routing, merchant, mobile, etc.&lt;br/&gt;&lt;br/&gt;The vulnerability was reported privately to the lnd team by Antoine Riard.&lt;br/&gt;&lt;br/&gt;## Background&lt;br/&gt;&lt;br/&gt;The lightning-rfc specifies a fixed-width, 64-byte encoding used to transmit&lt;br/&gt;ECDSA signatures in the Lightning protocol, which differs from the DER-encoding&lt;br/&gt;used at the consensus layer. For regular, on-chain transactions, signature&lt;br/&gt;serialization is handled by the btcec library&amp;#39;s Signature.Serialize() method&lt;br/&gt;[2]. This method always normalizes signatures to their low-S variant before&lt;br/&gt;performing the DER-encoding to ensure that the btcec library can&amp;#39;t _produce_&lt;br/&gt;high-S signatures.&lt;br/&gt;&lt;br/&gt;Early in lnd&amp;#39;s history, however, serialization modeled off btcec was added to&lt;br/&gt;produce DER-encoded signatures directly from the fixed-width representation,&lt;br/&gt;bypassing the conversion into big.Int representation used internally by btcec.&lt;br/&gt;In doing so, retaining the low-S normalization behavior was overlooked, and so&lt;br/&gt;Sig.ToSignatureBytes() [3] would return high-S DER signatures whenever the&lt;br/&gt;fixed-size signature was encoded with a high-S value.&lt;br/&gt;&lt;br/&gt;During unilateral closure, this can be exploited by an attacker to cause a&lt;br/&gt;second-level HTLC-success transaction from being accepted to the mempool. If the&lt;br/&gt;victim is unable to patch before the HTLC&amp;#39;s CLTV expires, the attacker can then&lt;br/&gt;broadcast their HTLC-timeout transaction and recover the full value of the HTLC&lt;br/&gt;minus fees. On the other hand, lnd’s cooperative close fully verifies the remote&lt;br/&gt;party’s signatures using full policy-aware verification. As a result, the only&lt;br/&gt;exploitation vector occurs during the force close scenario.&lt;br/&gt;&lt;br/&gt;## Updates to Lighting RFC&lt;br/&gt;&lt;br/&gt;As noted by Riard during the process, the lightning-rfc is lacking in terms of&lt;br/&gt;specifying how nodes should validate signatures accepted off-chain. Notably, the&lt;br/&gt;signatures should be checked for conformation to both consensus _and_ tx-relay&lt;br/&gt;standardness rules, and rejected otherwise. Riard has confirmed that he is&lt;br/&gt;planning to submit an update to the specification incorporating these&lt;br/&gt;recommendations.&lt;br/&gt;&lt;br/&gt;## Patch&lt;br/&gt;&lt;br/&gt;This vulnerability was fixed in v0.10.0-beta by converting all witness&lt;br/&gt;construction methods in lnd to accept signatures according to the&lt;br/&gt;input.Signature interface introduced in PR 4172 [4], which requires the passed&lt;br/&gt;object to have a Serialize() method. lnwire.Sig does not have a Serialize()&lt;br/&gt;method, and so cannot satisfy the interface. As a result, the relevant call&lt;br/&gt;sites were updated to pass in a btcec.Signature, forcing witness signature&lt;br/&gt;serialization through btcec&amp;#39;s Serialize() method which includes low-S&lt;br/&gt;normalization.&lt;br/&gt;&lt;br/&gt;Note: A high-S signature can be converted to a low-S one manually w/o software&lt;br/&gt;changes, or by a 3rd party, assuming one is aware of the reason for rejection.&lt;br/&gt;&lt;br/&gt;Though the above recommendation to the spec by Riard also mitigates the issue,&lt;br/&gt;this approach was chosen because it could retroactively patch affected nodes if&lt;br/&gt;they are upgraded before the HTLC deadline expires, as well as its covertness.&lt;br/&gt;After upgrading, any outstanding broadcasts would be reattempted, this time&lt;br/&gt;normalizing any previously-persisted high-S signatures into their low-S variant.&lt;br/&gt;&lt;br/&gt;Following the disclosure, lnd will also introduce the full tx-relay standardness&lt;br/&gt;checks that are to be added to the lightning-rfc, as this offers a more general&lt;br/&gt;and complete approach to ensuring lnd always adheres to standardness rules.&lt;br/&gt;&lt;br/&gt;## Timeline&lt;br/&gt;&lt;br/&gt;04/03/2020 - Initial report from Antoine Riard&lt;br/&gt;04/10/2020 - PR 4172 merged into master&lt;br/&gt;04/29/2020 - lnd v0.10.0-beta released&lt;br/&gt;08/20/2020 - lnd v0.11.0-beta released&lt;br/&gt;10/08/2020 - Partial Disclosure sent to lightning-dev and lnd mailing list [1]&lt;br/&gt;10/20/2020 - Full Disclosure sent to lightning-dev and lnd mailing list&lt;br/&gt;&lt;br/&gt;## References&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-October/002819.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-October/002819.html&lt;/a&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://github.com/btcsuite/btcd/blob/ba530c4abb35ea824a1d3c01d74969b5564c3b08/btcec/signature.go#L47&#34;&gt;https://github.com/btcsuite/btcd/blob/ba530c4abb35ea824a1d3c01d74969b5564c3b08/btcec/signature.go#L47&lt;/a&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://github.com/lightningnetwork/lnd/blob/0f94b8dc624cf0e96ddc8fe1b8e3bf4b3fc4c074/lnwire/signature.go#L92&#34;&gt;https://github.com/lightningnetwork/lnd/blob/0f94b8dc624cf0e96ddc8fe1b8e3bf4b3fc4c074/lnwire/signature.go#L92&lt;/a&gt;&lt;br/&gt;[4] &lt;a href=&#34;https://github.com/lightningnetwork/lnd/pull/4172&#34;&gt;https://github.com/lightningnetwork/lnd/pull/4172&lt;/a&gt;&lt;br/&gt;[5] &lt;a href=&#34;https://gist.github.com/ariard/fb432a9d2cd3ba24fdc18ccc8c5c6eb4&#34;&gt;https://gist.github.com/ariard/fb432a9d2cd3ba24fdc18ccc8c5c6eb4&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Huge thanks to Antoine Riard for the responsible disclosure and for helping to&lt;br/&gt;make lnd more safu. More information can be found in Antoine’s disclosure [5].&lt;br/&gt;&lt;br/&gt;Regards,&lt;br/&gt;Conner Fromknecht&lt;br/&gt;&lt;br/&gt;-----BEGIN PGP SIGNATURE-----&lt;br/&gt;&lt;br/&gt;iQIzBAEBCAAdFiEEnI1hhop8SSADsnRO59c3tn&#43;lkscFAl&#43;PWykACgkQ59c3tn&#43;l&lt;br/&gt;ksf7Yg//WqZjtkw4Ol1fsbK&#43;lfAkt6UENAq6Pja4/ZatkFI&#43;U9Of3SwCNA5aAP1p&lt;br/&gt;XSSk4tQptNJi3o8IoUSGLuFZVOzc6SB/vrU3l&#43;MMVcAfgnSj1N5rqW1OLv3Lm/fH&lt;br/&gt;Jz8eSvPtSEdtFt1JOC1VEd4ZEukjB8T6P/d4yudptUTk0tMrkLhLcN7byflxttU/&lt;br/&gt;vG2JTtLl0uO&#43;A2rhHkNvoUYqNLEOQssoAmShEBu&#43;8uK56xGkRJQoBWvWN&#43;yJDWor&lt;br/&gt;MsI9awUzWrvlGU4qCD2WxVWjK7/SXK7cz4PC1XaNr0RqhucXm6lL2wn4r/G1Qqx6&lt;br/&gt;z6ztMG3rHNnLI43Y1DVn2qPiLyhx1cBe/X8U9EUmA1jDv3zCKo9MmRx1gS69DQx&#43;&lt;br/&gt;rWBx3N6AIevs3aU6fF2IrwMfrX/0Xb0HT/fIDq1qhN46UZaxJTUuRkQkpJHNNajI&lt;br/&gt;ze5mmussTg/cdPlSkYTt7/h0CgWN6DAEGVYp6hsPqGoH7jrsEB&#43;wRtsihHRAXevX&lt;br/&gt;dcHZRoB4OG/oKs5vYZk2LIRKr1miNSdas5T0rJA7voGMMJEa5L8nKqGfzMXsudAv&lt;br/&gt;n&#43;gVXCLPx3KjTF8yQrNu277ptGIy4AG71MQoOdxkzLtbzm2vfyDMNd14Qk3KWHVz&lt;br/&gt;NACF4EXcq&#43;oebSIj5kkiNx2jei0hdYVJGPHp8XkewRb0KuB2yDw=&lt;br/&gt;=Sd09&lt;br/&gt;-----END PGP SIGNATURE-----
    </content>
    <updated>2023-06-09T13:01:23Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrn0jgjq8g39p3x6cstzzwhczfr8etk9hphv4kv5zsrrdrwryltnszyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvzz8dje</id>
    
      <title type="html">📅 Original date posted:2020-10-20 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrn0jgjq8g39p3x6cstzzwhczfr8etk9hphv4kv5zsrrdrwryltnszyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvzz8dje" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsr2f5lgsh3d9lmhnm4mlmefrlkhvtsfkkpacjes8qcsmu022nk2usdsx24x&#39;&gt;nevent1q…x24x&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-10-20&lt;br/&gt;📝 Original message:&lt;br/&gt;-----BEGIN PGP SIGNED MESSAGE-----&lt;br/&gt;Hash: SHA256&lt;br/&gt;&lt;br/&gt;Hi all,&lt;br/&gt;&lt;br/&gt;Today we are writing to disclose the details of CVE-2020-26896 as a follow up to&lt;br/&gt;the partial disclosure sent to lightning-dev [1].&lt;br/&gt;&lt;br/&gt;## Abstract&lt;br/&gt;&lt;br/&gt;Prior to v0.11.0-beta, an lnd node could be coerced into revealing an invoice&lt;br/&gt;preimage for a forwarded HTLC with a colliding payment hash. This can be&lt;br/&gt;exploited to a) weaken the victim&amp;#39;s receiver privacy by confirming the&lt;br/&gt;destination of an HTLC, and/or b) under certain circumstances, result in loss of&lt;br/&gt;funds to the victim by believing the invoice was paid when it only received&lt;br/&gt;routing fees. We have no evidence of either case being exploited in the wild.&lt;br/&gt;&lt;br/&gt;It affects routing nodes, i.e. any lnd node that permits HTLC forwarding and&lt;br/&gt;operates as any form of merchant node (accepts payment for goods &amp;amp; services);&lt;br/&gt;nodes that use rejecthtlc=1 are not affected.&lt;br/&gt;&lt;br/&gt;The vulnerability was reported privately to the lnd team by Antoine Riard.&lt;br/&gt;&lt;br/&gt;## Background&lt;br/&gt;&lt;br/&gt;When resolving incoming HTLCs on-chain, the forwarding node is expected to&lt;br/&gt;supply a valid preimage via the witness in order to claim the HTLC. Preimages&lt;br/&gt;can be learned in two primary ways: by generating an invoice or receiving a&lt;br/&gt;preimage as the result of a successfully forwarded HTLC. Internally, lnd tracks&lt;br/&gt;these differing preimage classes in two distinct places: an invoice database and&lt;br/&gt;a preimage database.&lt;br/&gt;&lt;br/&gt;For proper handling, a node should inspect the off-chain HTLC it received to&lt;br/&gt;determine whether the node was an intermediary or the final hop (indicated by an&lt;br/&gt;all zeros next_hop short channel id). Final hops are intended to consult the&lt;br/&gt;invoice database for preimages, while intermediaries should consult the preimage&lt;br/&gt;database.&lt;br/&gt;&lt;br/&gt;Earlier versions of lnd would incorrectly fallback to the invoice database if&lt;br/&gt;the preimage database did not contain the preimage. This resulted in situations&lt;br/&gt;where the node would reveal an invoice preimage, even though the victim was not&lt;br/&gt;the final hop in a route.&lt;br/&gt;&lt;br/&gt;In coordination with a triggered channel closure, an attacker can construct a&lt;br/&gt;malicious HTLC through the victim, divulging the target invoice preimage&lt;br/&gt;on-chain when the incoming HTLCis claimed. After disclosing the preimage, an&lt;br/&gt;attacker can claim a concurrent outgoing HTLC whose CLTV has not yet expired.&lt;br/&gt;his results in the HTLC&amp;#39;s value being stolen, minus routing fees, since the&lt;br/&gt;victim incorrectly believes they received the payment.&lt;br/&gt;&lt;br/&gt;## Attack Scenario&lt;br/&gt;&lt;br/&gt;An example of the attack goes as follows:&lt;br/&gt;&lt;br/&gt;Assume a _real HTLC_ is routed to a malicious node, Malice, that has a channel&lt;br/&gt;with sufficient outgoing bandwidth to forward to the victim, Bob, the intended&lt;br/&gt;receiver of the payment.&lt;br/&gt;&lt;br/&gt;Instead of forwarding the real HTLC, Malice creates a new _malicious HTLC_ which&lt;br/&gt;has the same payment hash. The first hop’s amount should be equal or slightly&lt;br/&gt;larger, the CLTV can be increased as desired up to default implementation&lt;br/&gt;limits.&lt;br/&gt;&lt;br/&gt;Malice forwards the malicious HTLC in a circular route through Bob and back to&lt;br/&gt;herself, where she holds the malicious HTLC.&lt;br/&gt;&lt;br/&gt;With the malicious HTLC locked in place, Malice triggers a unilateral close of&lt;br/&gt;the Malice-Bob channel. The commitment played (from Bob’s POV) has an incoming&lt;br/&gt;HTLC with the target invoice’s payment hash. The unilateral closure should be&lt;br/&gt;initiated well before any of the malicious HTLC’s CLTVs expire, otherwise the&lt;br/&gt;last channel in the route will also go to chain.&lt;br/&gt;&lt;br/&gt;When the unilateral close is confirmed, Bob will promptly broadcast the&lt;br/&gt;HTLC-success transaction for the malicious HTLC. Due to the bug, the preimage&lt;br/&gt;provided to sweep the malicious HTLC is obtained from the invoice database as a&lt;br/&gt;fallback to the (forwarded) preimage database, rather than being ignored.&lt;br/&gt;&lt;br/&gt;The victim, Bob, has already marked the invoice settled and published the&lt;br/&gt;preimage on-chain. However, the malicious HTLC is still active on Bob’s&lt;br/&gt;downstream channel (and the rest of the circular route), allowing Malice to&lt;br/&gt;settle the malicious HTLC she holds _after_ the invoice has already been marked&lt;br/&gt;paid. This results in Bob only receiving routing fees, and the Malice&lt;br/&gt;redirecting the payment to herself, while simultaneously convincing Bob of&lt;br/&gt;receiving the full payment.&lt;br/&gt;&lt;br/&gt;At this point, the malicious HTLC  has been successfully pulled from Malice to&lt;br/&gt;herself in a circular route, making herself whole minus routing fees (in&lt;br/&gt;addition to chain fees if she was the initiator of the Malice-Bob channel).&lt;br/&gt;Malice then settles the real, intercepted HTLC using the same preimage to obtain&lt;br/&gt;a profit.&lt;br/&gt;&lt;br/&gt;### Caveats&lt;br/&gt;&lt;br/&gt;For the attack to succeed, Malice must intercept a legacy HTLC or a&lt;br/&gt;single-sharded MPP HTLC. If any other concurrent MPP shard has already reached&lt;br/&gt;Bob before attempting to claim on-chain, the attack will fail due to additional&lt;br/&gt;safety checks added to lnd [2], preventing an invoice from being settled by a&lt;br/&gt;downgraded HTLC after it has already accepted an MPP shard with a valid payment&lt;br/&gt;secret.&lt;br/&gt;&lt;br/&gt;In order to directly profit from the attack, Malice must be intercepting a&lt;br/&gt;payment from an unsuspecting victim, limiting control of timing and the amount&lt;br/&gt;that can be siphoned. Malice must also somehow infer or guess that Bob has the&lt;br/&gt;corresponding invoice being paid.&lt;br/&gt;&lt;br/&gt;If Malice runs the same attack without intercepting a real HTLC, she pays&lt;br/&gt;routing fees, and possibly chain fees, in exchange for the invoice preimage and&lt;br/&gt;identity of the receiver. However, it is possible for her to indirectly profit&lt;br/&gt;from this if the service provider releases tangible goods or services to anyone&lt;br/&gt;with knowledge of the invoice preimage, which is not recommended in practice.&lt;br/&gt;&lt;br/&gt;The upstream attacker does not need to be adjacent, they only need to know which&lt;br/&gt;channel to target and watch for closure. Being adjacent increases the&lt;br/&gt;assuredness of pulling off an exploit, but is not strictly required.&lt;br/&gt;&lt;br/&gt;Similarly, the downstream attacker (possibly distinct from Malice) does not need&lt;br/&gt;to be adjacent, they can settle the malicious HTLC further downstream to the&lt;br/&gt;same effect at the cost of more routing fees.&lt;br/&gt;&lt;br/&gt;## Patch&lt;br/&gt;&lt;br/&gt;This vulnerability was patched in lnd v0.11.0-beta, by properly isolating the&lt;br/&gt;preimage database from the invoice database according to the HTLC&amp;#39;s next_hop&lt;br/&gt;field in commit cf739f3f [3] of PR 4157 [4]. The isolation ensures that we can&lt;br/&gt;only claim forwarded HTLCs as a result of learning the preimage from an outgoing&lt;br/&gt;HTLC. It also fixes the privacy leak by not revealing invoice preimages unless&lt;br/&gt;the node is the final destination.&lt;br/&gt;&lt;br/&gt;Due to the complexities involved in describing vulnerabilities over textual&lt;br/&gt;mediums, the full nature of the issue wasn’t fully understood until after&lt;br/&gt;v0.10.0-beta had been released. Additionally, the covert fix contained in the&lt;br/&gt;v0.11.0-beta release was pushed back due to a concurrent investigation into&lt;br/&gt;network instabilities resulting in unexpected channel closures.&lt;br/&gt;&lt;br/&gt;Note, although the above patch fixes the issue, this issue could have also been&lt;br/&gt;avoided by having receivers require payment secrets (BOLT 11 `s` field) since&lt;br/&gt;the attackers would be unable to guess the payment secret. However, left as&lt;br/&gt;optional, the attacker can always downgrade to using malicious HTLCs that omit&lt;br/&gt;the payment secret.&lt;br/&gt;&lt;br/&gt;For some time we have debated flipping the switch on requiring payment secrets&lt;br/&gt;across the three major implementations. This vulnerability is further evidence&lt;br/&gt;to the additional safety and privacy benefits. Now almost a year since the&lt;br/&gt;initial deployment of payment secrets in lnd, the upcoming v0.12.0-beta release&lt;br/&gt;of lnd is likely to make payment secrets required by default. We would welcome&lt;br/&gt;other implementations to do the same.&lt;br/&gt;&lt;br/&gt;## Timeline&lt;br/&gt;&lt;br/&gt;04/19/2020 - Initial report from Antoine Riard&lt;br/&gt;04/29/2020 - lnd v0.10.0-beta released&lt;br/&gt;07/07/2020 - PR 4157 merged into master&lt;br/&gt;08/20/2020 - lnd v0.11.0-beta released&lt;br/&gt;10/08/2020 - Partial Disclosure sent to lightning-dev and lnd mailing list [1]&lt;br/&gt;10/20/2020 - Full Disclosure sent to lightning-dev and lnd mailing list&lt;br/&gt;&lt;br/&gt;## References&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-October/002819.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-October/002819.html&lt;/a&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://github.com/lightningnetwork/lnd/blob/9f32942a90bcd91cc37a4a9c6c2fb454f534a65d/invoices/update.go#L229&#34;&gt;https://github.com/lightningnetwork/lnd/blob/9f32942a90bcd91cc37a4a9c6c2fb454f534a65d/invoices/update.go#L229&lt;/a&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://github.com/lightningnetwork/lnd/pull/4157/commits/cf739f3f87fdcb28ab45dfd48e3d18adf26e45b3&#34;&gt;https://github.com/lightningnetwork/lnd/pull/4157/commits/cf739f3f87fdcb28ab45dfd48e3d18adf26e45b3&lt;/a&gt;&lt;br/&gt;[4] &lt;a href=&#34;https://github.com/lightningnetwork/lnd/pull/4157&#34;&gt;https://github.com/lightningnetwork/lnd/pull/4157&lt;/a&gt;&lt;br/&gt;[5] &lt;a href=&#34;https://gist.github.com/ariard/6bdeb995565d1cc292753e1ee4ae402d&#34;&gt;https://gist.github.com/ariard/6bdeb995565d1cc292753e1ee4ae402d&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;A big thank you to Antoine for the responsible disclosure and for helping to&lt;br/&gt;make lnd more safu. More information can be found in Antoine’s disclosure [5].&lt;br/&gt;&lt;br/&gt;Regards,&lt;br/&gt;Conner Fromknecht&lt;br/&gt;&lt;br/&gt;-----BEGIN PGP SIGNATURE-----&lt;br/&gt;&lt;br/&gt;iQIzBAEBCAAdFiEEnI1hhop8SSADsnRO59c3tn&#43;lkscFAl&#43;PWzMACgkQ59c3tn&#43;l&lt;br/&gt;kseIJw//UwswUyh6BNgmi4D8NoC6olelW0dRmecqcZF7JBQa619kVFm/D7rixp33&lt;br/&gt;J1YsXvZC2OLTpqmaJcJ3OvBKLVcW7CxheDp3Pm0JjrfVnmOl1NGX4CSymL6Zpou7&lt;br/&gt;nFqh&#43;nqOZ2n6o4OIv&#43;mx0y2YANKjAVtAcr9LakubMn/3LgYzqvKKu39QGqrtz9vZ&lt;br/&gt;lYGAAPU3zlAjIjFNv56xWpF0Pj9VE2mQB27w2QmbSuNtR21feOSJhJimEvmXhk6d&lt;br/&gt;O0Ze78Fea&#43;eaS&#43;d1uyRkB7aaEKBRAA5WCtDKgSOwfEY&#43;mHC7u5&#43;LRasyegjlc8Ie&lt;br/&gt;hYBNOsjEZqVjwIgr&#43;lqMDbQ8B5RtW4LVro/LMYGCbVRnGuF16gHu/lkDnVgz/sY7&lt;br/&gt;sbsPVG11wfVFH0U/TyJoBC8qOmeHMJoVsvGbY9I2XQiFw7yAbWxEdU&#43;7mMhQZA2Z&lt;br/&gt;Zd9pl0ATByLFPyg58gA6G4JV&#43;F45DvYrG3jj6cdkUvL2nQST08IZtTjnDxAnkDTk&lt;br/&gt;HwnJo0fd7vsixEyssTMuSCjbGSaPDMPCkmNQg8PAhhoIK8MeKUlylCKJuM6gMWeW&lt;br/&gt;YypzGBmE6O7OtoMTOYFWysU67edVXgQTV2dD/PE6abTYOfS79gvkNekU4BvW9NDE&lt;br/&gt;af0JBywXovzNVshdqpijPBleOT8/QSyTdLvI78ev&#43;zpJMsKMugU=&lt;br/&gt;=PY6W&lt;br/&gt;-----END PGP SIGNATURE-----
    </content>
    <updated>2023-06-09T13:01:23Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2ut95ztmutqfw7cdqfs495m632nudwc0q9nhcnxahkcze42dw2ygzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvska4f8</id>
    
      <title type="html">📅 Original date posted:2020-10-08 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2ut95ztmutqfw7cdqfs495m632nudwc0q9nhcnxahkcze42dw2ygzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvska4f8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg4attzfvgj2fy5zq72vpkw33ywtslpqcaeyjve9vjw42wcdsfmugs9quy7&#39;&gt;nevent1q…quy7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-10-08&lt;br/&gt;📝 Original message:&lt;br/&gt;-----BEGIN PGP SIGNED MESSAGE-----&lt;br/&gt;Hash: SHA256&lt;br/&gt;&lt;br/&gt;Hi all,&lt;br/&gt;&lt;br/&gt;We are writing to let the Lightning community know about the existence of&lt;br/&gt;vulnerabilities that affect lnd versions 0.10.x and below. The full details of&lt;br/&gt;these vulnerabilities will be disclosed on October 20, 2020. The circumstances&lt;br/&gt;surrounding the discovery resulted in a compressed disclosure timeline compared&lt;br/&gt;to our usual timeframes. We will be publishing more details about this in the&lt;br/&gt;coming weeks along with a comprehensive bug bounty program.&lt;br/&gt;&lt;br/&gt;While we have no reason to believe these vulnerabilities have been exploited in&lt;br/&gt;the wild, we strongly urge the community to upgrade to lnd 0.11.0 or above ASAP.&lt;br/&gt;Please ping us on the #lnd IRC channel, the LND Slack, or at&lt;br/&gt;support at lightning.engineering if you need any assistance in doing so. Upgrade&lt;br/&gt;instructions can be found in our installation docs:&lt;br/&gt;&lt;a href=&#34;https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md#installing-lnd&#34;&gt;https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md#installing-lnd&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Regards,&lt;br/&gt;Conner Fromknecht&lt;br/&gt;-----BEGIN PGP SIGNATURE-----&lt;br/&gt;&lt;br/&gt;iQIzBAEBCAAdFiEEnI1hhop8SSADsnRO59c3tn&#43;lkscFAl9/ozwACgkQ59c3tn&#43;l&lt;br/&gt;kscVvBAAk21z6tlHPkOSwfj1lBE0pqc65A6Qa927WEjN5hdUpjjof4Xo2j&#43;GzbnN&lt;br/&gt;Uoj4HGZu&#43;koakzoVpJ4mzN&#43;vg086zAnv&#43;K668hhl7bbPHsQu6FqA1ALiAyy0nH6H&lt;br/&gt;1yukXxpRflq53RTIVPjrEnFVdt6FCLhkCm9LuOk0a/SUf8D4b/N6OaB1Bxupeceu&lt;br/&gt;QFSCIkb9kvW/Eplwkv7PEnx/IZNGIQP9F11DaKLTAjWY5RnIxmCw/oamvlP8Mxt8&lt;br/&gt;/AqlzWVtPVqvwgJLhbMziraXNVV05naHrIXvbXrOI2Q7FZjdaxF&#43;S4EKT4feuq1w&lt;br/&gt;iW7NYSS/u5N2FP3yK8YIdoX0I/nwYQQcpsfbAv2dS4Ql2Td/dyREId4NcchmaKSV&lt;br/&gt;N3w1jByMPWrgUtinl5WEDDOJdUKS2PHkQ95t3s/1uYDFsPz1kXJR2x37a/1AVz/K&lt;br/&gt;6zQ45wFvHEopFR49hu/CV6MUvsvn4XKzPa46Ii7puaBaNqygx0RwuwlxbxCNxPNQ&lt;br/&gt;v45CaCUEq2Tj3stu7YoYGntFvrXVkxXJocn51eK6D&#43;g0bIEXxaGlPJeTuvifKMTO&lt;br/&gt;3T3ZEEbCe9UhDUT8Ja2boP2IIi8wAyExGS59k0tndQGzMSjkzWZ0fzgYyyf&#43;y4nt&lt;br/&gt;r3nTCGi5WWe4y1i2KpiYZTRrQkbrNkRf&#43;fnVdlnTS4lcgEWFFiY=&lt;br/&gt;=8t9Q&lt;br/&gt;-----END PGP SIGNATURE-----
    </content>
    <updated>2023-06-09T13:01:06Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsf0hemaqdt7yu2lytldxwnw2znw4ugysx3hkf5jf7m355r0ny33sgzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv4592pm</id>
    
      <title type="html">📅 Original date posted:2020-10-09 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsf0hemaqdt7yu2lytldxwnw2znw4ugysx3hkf5jf7m355r0ny33sgzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv4592pm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2ut95ztmutqfw7cdqfs495m632nudwc0q9nhcnxahkcze42dw2ygxdkljr&#39;&gt;nevent1q…kljr&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-10-09&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi all,&lt;br/&gt;&lt;br/&gt;For those looking to verify the gpg signature, please be sure the&lt;br/&gt;support email is formatted&lt;br/&gt;correctly. For example, the archive replaces &amp;#34;@&amp;#34; with &amp;#34; at &amp;#34;, and&lt;br/&gt;apparently google groups&lt;br/&gt;trims &amp;#34;support&amp;#34; to &amp;#34;sup...&amp;#34;. If you run into issues, please double&lt;br/&gt;check the plaintext matches&lt;br/&gt;verbatim with what was sent on lightning-dev.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Thu, Oct 8, 2020 at 5:19 PM Conner Fromknecht&lt;br/&gt;&amp;lt;conner at lightning.engineering&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -----BEGIN PGP SIGNED MESSAGE-----&lt;br/&gt;&amp;gt; Hash: SHA256&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We are writing to let the Lightning community know about the existence of&lt;br/&gt;&amp;gt; vulnerabilities that affect lnd versions 0.10.x and below. The full details of&lt;br/&gt;&amp;gt; these vulnerabilities will be disclosed on October 20, 2020. The circumstances&lt;br/&gt;&amp;gt; surrounding the discovery resulted in a compressed disclosure timeline compared&lt;br/&gt;&amp;gt; to our usual timeframes. We will be publishing more details about this in the&lt;br/&gt;&amp;gt; coming weeks along with a comprehensive bug bounty program.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While we have no reason to believe these vulnerabilities have been exploited in&lt;br/&gt;&amp;gt; the wild, we strongly urge the community to upgrade to lnd 0.11.0 or above ASAP.&lt;br/&gt;&amp;gt; Please ping us on the #lnd IRC channel, the LND Slack, or at&lt;br/&gt;&amp;gt; support at lightning.engineering if you need any assistance in doing so. Upgrade&lt;br/&gt;&amp;gt; instructions can be found in our installation docs:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md#installing-lnd&#34;&gt;https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md#installing-lnd&lt;/a&gt;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; Conner Fromknecht&lt;br/&gt;&amp;gt; -----BEGIN PGP SIGNATURE-----&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; iQIzBAEBCAAdFiEEnI1hhop8SSADsnRO59c3tn&#43;lkscFAl9/ozwACgkQ59c3tn&#43;l&lt;br/&gt;&amp;gt; kscVvBAAk21z6tlHPkOSwfj1lBE0pqc65A6Qa927WEjN5hdUpjjof4Xo2j&#43;GzbnN&lt;br/&gt;&amp;gt; Uoj4HGZu&#43;koakzoVpJ4mzN&#43;vg086zAnv&#43;K668hhl7bbPHsQu6FqA1ALiAyy0nH6H&lt;br/&gt;&amp;gt; 1yukXxpRflq53RTIVPjrEnFVdt6FCLhkCm9LuOk0a/SUf8D4b/N6OaB1Bxupeceu&lt;br/&gt;&amp;gt; QFSCIkb9kvW/Eplwkv7PEnx/IZNGIQP9F11DaKLTAjWY5RnIxmCw/oamvlP8Mxt8&lt;br/&gt;&amp;gt; /AqlzWVtPVqvwgJLhbMziraXNVV05naHrIXvbXrOI2Q7FZjdaxF&#43;S4EKT4feuq1w&lt;br/&gt;&amp;gt; iW7NYSS/u5N2FP3yK8YIdoX0I/nwYQQcpsfbAv2dS4Ql2Td/dyREId4NcchmaKSV&lt;br/&gt;&amp;gt; N3w1jByMPWrgUtinl5WEDDOJdUKS2PHkQ95t3s/1uYDFsPz1kXJR2x37a/1AVz/K&lt;br/&gt;&amp;gt; 6zQ45wFvHEopFR49hu/CV6MUvsvn4XKzPa46Ii7puaBaNqygx0RwuwlxbxCNxPNQ&lt;br/&gt;&amp;gt; v45CaCUEq2Tj3stu7YoYGntFvrXVkxXJocn51eK6D&#43;g0bIEXxaGlPJeTuvifKMTO&lt;br/&gt;&amp;gt; 3T3ZEEbCe9UhDUT8Ja2boP2IIi8wAyExGS59k0tndQGzMSjkzWZ0fzgYyyf&#43;y4nt&lt;br/&gt;&amp;gt; r3nTCGi5WWe4y1i2KpiYZTRrQkbrNkRf&#43;fnVdlnTS4lcgEWFFiY=&lt;br/&gt;&amp;gt; =8t9Q&lt;br/&gt;&amp;gt; -----END PGP SIGNATURE-----
    </content>
    <updated>2023-06-09T13:01:06Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqst6penj20uh9448ghjez89gnm83wzyg7vtpufw9h6etv4pzs00z9gzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvpqsljp</id>
    
      <title type="html">📅 Original date posted:2019-12-03 📝 Original message: Good ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqst6penj20uh9448ghjez89gnm83wzyg7vtpufw9h6etv4pzs00z9gzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvpqsljp" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0elnmtq2f3d7hlfp7drzggv9hj4glhrf3s9ahnefp6hsegsvus4ccwdu3w&#39;&gt;nevent1q…du3w&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-12-03&lt;br/&gt;📝 Original message:&lt;br/&gt;Good evening,&lt;br/&gt;&lt;br/&gt;&amp;gt; I didn&amp;#39;t think this was the design.  The update transaction can spend any&lt;br/&gt;prior, with a fixed script, due to NOINPUT.&lt;br/&gt;&lt;br/&gt;&amp;gt;From my reading of the final construction, each update transaction has a&lt;br/&gt;unique script to bind settlement transactions to exactly one update.&lt;br/&gt;&lt;br/&gt;&amp;gt; My understanding is that this is not logically possible?&lt;br/&gt;The update transaction has no fixed txid until it commits to a particular&lt;br/&gt;output-to-be-spent, which is either the funding/kickoff txout, or a&lt;br/&gt;lower-`nLockTime` update transaction output.&lt;br/&gt;&amp;gt; Thus a settlement transaction *must* use `NOINPUT` as well, as it has no&lt;br/&gt;txid it can spend, if it is constrained to spend a particular update&lt;br/&gt;transaction.&lt;br/&gt;&lt;br/&gt;This is also my understanding. Any presigned descendants of a NOINPUT txn&lt;br/&gt;must also use NOINPUT as well. This chain must continue until a signer is&lt;br/&gt;online to bind a txn to a confirmed input. The unique settlement keys thus&lt;br/&gt;prevent rebinding of settlement txns since NOINPUT with a shared script&lt;br/&gt;would be too liberal.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner&lt;br/&gt;&lt;br/&gt;On Mon, Dec 2, 2019 at 18:55 ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Rusty,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Hi all,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; I recently revisited the eltoo paper and noticed some things related&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; watchtowers that might affect channel construction.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Due to NOINPUT, any update transaction can spend from any other, so&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; in theory the tower only needs the most recent update txn to resolve&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; any dispute.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; In order to spend, however, the tower must also produce a witness&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; script which when hashed matches the witness program of the input. To&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; ensure settlement txns can only spend from exactly one update txn,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; each update txn uses unique keys for the settlement clause, meaning&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; that each state has a unique witness program.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I didn&amp;#39;t think this was the design. The update transaction can spend&lt;br/&gt;&amp;gt; &amp;gt; any prior, with a fixed script, due to NOINPUT.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The settlement transaction does not use NOINPUT, and thus can only&lt;br/&gt;&amp;gt; &amp;gt; spend the matching update.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My understanding is that this is not logically possible?&lt;br/&gt;&amp;gt; The update transaction has no fixed txid until it commits to a particular&lt;br/&gt;&amp;gt; output-to-be-spent, which is either the funding/kickoff txout, or a&lt;br/&gt;&amp;gt; lower-`nLockTime` update transaction output.&lt;br/&gt;&amp;gt; Thus a settlement transaction *must* use `NOINPUT` as well, as it has no&lt;br/&gt;&amp;gt; txid it can spend, if it is constrained to spend a particular update&lt;br/&gt;&amp;gt; transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Unless I misunderstand how update transactions work, or what settlement&lt;br/&gt;&amp;gt; transactions are.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;-- &lt;br/&gt;—Sent from my Spaceship&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20191202/00acdf73/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20191202/00acdf73/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:57:32Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsyjqnw5r76c2hema4sa49hlqensnan7mx28wftpar9fm4hjmm26dqzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv8sudlm</id>
    
      <title type="html">📅 Original date posted:2019-11-26 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsyjqnw5r76c2hema4sa49hlqensnan7mx28wftpar9fm4hjmm26dqzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv8sudlm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgtwk0wnl0uesrc3v5029cxmez9kz8dsyzk7c2d0wajdzvs3tkt8qrd5ay2&#39;&gt;nevent1q…5ay2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-11-26&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi all,&lt;br/&gt;&lt;br/&gt;I recently revisited the eltoo paper and noticed some things related&lt;br/&gt;watchtowers that might affect channel construction.&lt;br/&gt;&lt;br/&gt;Due to NOINPUT, any update transaction _can_ spend from any other, so&lt;br/&gt;in theory the tower only needs the most recent update txn to resolve&lt;br/&gt;any dispute.&lt;br/&gt;&lt;br/&gt;In order to spend, however, the tower must also produce a witness&lt;br/&gt;script which when hashed matches the witness program of the input. To&lt;br/&gt;ensure settlement txns can only spend from exactly one update txn,&lt;br/&gt;each update txn uses unique keys for the settlement clause, meaning&lt;br/&gt;that each state has a _unique_ witness program.&lt;br/&gt;&lt;br/&gt;Naively then a tower could store settlement keys for all states,&lt;br/&gt;permitting it to reconstruct arbitrary witness scripts for any given&lt;br/&gt;sequence of confirmed update txns.&lt;br/&gt;&lt;br/&gt;So far, the only work around I’ve come up with to avoid this is to&lt;br/&gt;give the tower an extended parent pubkey for each party, and then&lt;br/&gt;derive non-hardened settlement keys on demand given the state numbers&lt;br/&gt;that get confirmed. It&amp;#39;s not the most satisfactory solution though,&lt;br/&gt;since leaking one hot settlement key now compromises all sibling&lt;br/&gt;settlement keys.&lt;br/&gt;&lt;br/&gt;Spending the unique witness programs is mentioned somewhat in section&lt;br/&gt;4.1.4, which refers to deriving keys via state numbers, but to me it&lt;br/&gt;reads mostly from the PoV of the counterparties and not a third-party&lt;br/&gt;service. Is requiring non-hardened keys a known consequence of the&lt;br/&gt;construction? Are there any alternative approaches folks are aware of?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner
    </content>
    <updated>2023-06-09T12:57:28Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqp3c8ggtpnmuh8ehhwexev36jm9fh4pag5wa0f4mysgk69l352sqzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvjpx2p4</id>
    
      <title type="html">📅 Original date posted:2019-06-14 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqp3c8ggtpnmuh8ehhwexev36jm9fh4pag5wa0f4mysgk69l352sqzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvjpx2p4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs03u8qjvsas9stn2g04exec5z2lch28mh64rhyffzxuaa8d4sz4ngyrkl0w&#39;&gt;nevent1q…kl0w&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-14&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Paberlance,&lt;br/&gt;&lt;br/&gt;As ZmnSCPxj mentioned, it should be possible to so after TLV and related&lt;br/&gt;dependencies are finalized.&lt;br/&gt;&lt;br/&gt;However I don’t think embedding an invoice in the onion is the most&lt;br/&gt;efficient way to do this. Once a spontaneous payments protocol is&lt;br/&gt;established, it should be sufficient to embed, minimally, the sender’s&lt;br/&gt;pubkey, and perhaps some hop hints if the node is private.&lt;br/&gt;&lt;br/&gt;Obviously this leaks the sender’s identity, but no more than an invoice&lt;br/&gt;would. IMO leaking the sender’s pubkey in every payment (even ones that&lt;br/&gt;might not be refunded) seems like pretty big drawback. That being said, the&lt;br/&gt;same info could probably be provided externally (or out of band) if the&lt;br/&gt;sender really does want to be refunded and offer better privacy for&lt;br/&gt;non-refunded payments.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Thu, Jun 13, 2019 at 23:16 ZmnSCPxj via Lightning-dev &amp;lt;&lt;br/&gt;lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Paberlance,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You may be interested in the current work with &amp;#34;TLV&amp;#34; that is on-going at&lt;br/&gt;&amp;gt; the spec level now.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This will allow a sort of key-value map to be sent on every payment.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It would be possible, *once TLV has been finalized*, to propose the&lt;br/&gt;&amp;gt; addition of such data in a Lightning payment.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As of now, there is no easy way to transmit extra application-level data&lt;br/&gt;&amp;gt; on each payment.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The dependencies, as I understand them, are:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; refund invoice on payment -&amp;gt; application-specific data TLV -&amp;gt; TLV spec -&amp;gt;&lt;br/&gt;&amp;gt; variable-length onion packet&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Variable-length onion packet should finalize &amp;#34;soon&amp;#34; for some definition of&lt;br/&gt;&amp;gt; &amp;#34;soon&amp;#34;, if my understanding is correct.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sent with ProtonMail Secure Email.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐&lt;br/&gt;&amp;gt; On Friday, June 14, 2019 1:53 PM, Paberlance via Lightning-dev &amp;lt;&lt;br/&gt;&amp;gt; lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Hello Lightning Devs,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; i was wondering about the following idea: What if you attach a refund&lt;br/&gt;&amp;gt; invoice to any LN payment. With this the recipient then has the possibility&lt;br/&gt;&amp;gt; to refund, fully, partially or eventually tipping even a higher payment&lt;br/&gt;&amp;gt; amount back to the sender.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; From the user side, the userwallet pays just as normal Lightning&lt;br/&gt;&amp;gt; Invoice, but attached along with the payment of 0 sat invoice back to the&lt;br/&gt;&amp;gt; seller. From a UX perspective, this all happens is controlled by the&lt;br/&gt;&amp;gt; wallet, which must agree on a protocol for embedding the return invoice&lt;br/&gt;&amp;gt; with the LN payment.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On the recipee side, a normal LN invoice is recieved and optionally&lt;br/&gt;&amp;gt; store that invoice to be able to perform a spontaneous refund later in time&lt;br/&gt;&amp;gt; if he wants.As the invoice amount is not predefined, the seller is free to&lt;br/&gt;&amp;gt; refund any payment, just bounded to the invoice timeout. Probably the payer&lt;br/&gt;&amp;gt; will be motivated to issue invoices with a high expiry time-out.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Possible Usecases:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; *Promotions, like: Every 100x Purchaser wins a prize, gets the order for&lt;br/&gt;&amp;gt; free.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; *Refunds: I order something, cancel the transaction, seller refunds the&lt;br/&gt;&amp;gt; transaction partially, charging a service fee that he does not return.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; *Safety deposits: You rent a car, the company keeps the payment as&lt;br/&gt;&amp;gt; safety deposit, that gets reverted as soon as the car is returned.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; *Spontanous payouts in games&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Alternatives:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; *Hodl invoice, can achieve the same goal to refund the customer, but&lt;br/&gt;&amp;gt; limited as it&amp;#39;s an &amp;#34;all or nothing refund&amp;#34; option. Amount can&amp;#39;t be more&lt;br/&gt;&amp;gt; than the actual payment.&lt;br/&gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://github.com/lightningnetwork/lnd/pull/2022&#34;&gt;https://github.com/lightningnetwork/lnd/pull/2022&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; *&amp;#34;Spontaneous LN invoice creation &amp;#34; with server that acts as a lookup&lt;br/&gt;&amp;gt; proxy that handles the lightning creation on request. Inspiration:&lt;br/&gt;&amp;gt; @georgevaccaro&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Requirements:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Payer has to generate a invoice and provide it encoded in the payment&lt;br/&gt;&amp;gt; request as payload.&lt;br/&gt;&amp;gt; &amp;gt; Reciver: must be able to settle the actual payment. And optionaly he may&lt;br/&gt;&amp;gt; support the feature After storing the refund invoice, he then has the&lt;br/&gt;&amp;gt; ability to decice if or how he will use it to refunde the client in the&lt;br/&gt;&amp;gt; future.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Does this exist yet? What people can help me with this idea?&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Any ressources or hints to digg deeper, built on top of that idea?&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Paberlance&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-- &lt;br/&gt;—Sent from my Spaceship&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20190613/3ebd8d8a/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20190613/3ebd8d8a/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:55:10Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqeldqcqf88rmvxd7c662qm9smjajvysa0ql0xnllukxy9huucq2czyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvwgqf7n</id>
    
      <title type="html">📅 Original date posted:2018-11-15 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqeldqcqf88rmvxd7c662qm9smjajvysa0ql0xnllukxy9huucq2czyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvwgqf7n" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyykhk8g3ygvzdjdaq39k7yl7zr8ew9tk468vm3kxzde9u0glrlds7mjrz7&#39;&gt;nevent1q…jrz7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-11-15&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;Precisely, something like that is what I had in mind.&lt;br/&gt;&lt;br/&gt;Since the max message size is 65KB, one option could be to only allow&lt;br/&gt;the varint to&lt;br/&gt;be max 2 bytes where:&lt;br/&gt; - if the 8th bit is not set, the lowest 7 bits of the first bytes&lt;br/&gt;translate to 0 - 127&lt;br/&gt; - if the 8th bit is set, this implies that the second byte is also&lt;br/&gt;treated as part of the&lt;br/&gt;   length, and the total value is 0x7f &amp;amp; first byte &#43; second byte &amp;lt;&amp;lt; 7&lt;br/&gt;&lt;br/&gt;This would be fairly straightforward to implement, at the cost of&lt;br/&gt;limiting a particular&lt;br/&gt;field to 2^15 bytes. I wonder, is this too restrictive?&lt;br/&gt;&lt;br/&gt;At the same time, we could offer a varint that could extend up to the&lt;br/&gt;three bytes.&lt;br/&gt;The third byte would only come in to play if the length of the field&lt;br/&gt;is greater than&lt;br/&gt;2^14 - 1. The argument could be made that for values of this size, one&lt;br/&gt;extra byte&lt;br/&gt;is irrelevant compared to the size of these larger fields.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner&lt;br/&gt;&lt;br/&gt;On Thu, Nov 15, 2018 at 1:45 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Good morning Conner et al,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; 5.  `len` - one byte or two? I believe we tend to use two bytes for various&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     lengths.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Maybe varint? One byte is not enough for all lengths, but two seems excessive&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; for uint8 or even uint32.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Given that messages are currently only up to 65536 bytes total, is that not a bit much?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sorry, I misunderstood.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is varint, correct? &lt;a href=&#34;http://learnmeabitcoin.com/glossary/varint&#34;&gt;http://learnmeabitcoin.com/glossary/varint&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If so, I think this is good idea.&lt;br/&gt;&amp;gt; It seems we do not have varint currently in Lightning (at least the parts I am familiar with).&lt;br/&gt;&amp;gt; I suppose the t-l-v being in a different BOLT would let us make some section or part for describing `varint`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj
    </content>
    <updated>2023-06-09T12:52:54Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvsn6lqneyaaearum4hvc7vm809eya52hnxxmp6le0wx956snepsqzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvtjge0a</id>
    
      <title type="html">📅 Original date posted:2018-11-15 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvsn6lqneyaaearum4hvc7vm809eya52hnxxmp6le0wx956snepsqzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvtjge0a" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs96zg9zqwdqpfd2glvgk9n493zda7mgqn97gsmr43pfstzzwtrcwqe788kx&#39;&gt;nevent1q…88kx&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-11-15&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;Thanks for writing this up! I had started an email, but you beat me to it :)&lt;br/&gt;&lt;br/&gt;&amp;gt; 1.  For a sequence of `type,len,value`, each `type` must be unique. --&lt;br/&gt;&amp;gt; accepted.&lt;br/&gt;&lt;br/&gt;To add to this, it seemed that there was some agreement that repeated fields&lt;br/&gt;should be serialized under a single root key, since a receiver can&amp;#39;t know if a&lt;br/&gt;field is allowed to have duplicates if they don&amp;#39;t understand the field.&lt;br/&gt;&lt;br/&gt;&amp;gt; For a sequence of `type,len,value`, the `type`s must be in ascending order&lt;br/&gt;&amp;gt; -- not explicitly accepted or rejected.  It would be easier to check&lt;br/&gt;&amp;gt; uniqueness &amp;gt; (the previous rule we accepted) here for a naive parser (keep&lt;br/&gt;&amp;gt; track of some &amp;#34;minimum allowed type&amp;#34; that initializes at zero, check current&lt;br/&gt;&amp;gt; type &amp;gt;= this, update to current type &#43; 1) if `type`s are in ascending order.&lt;br/&gt;&lt;br/&gt;Yep ascending makes sense to me, for the reasons you stated.&lt;br/&gt;&lt;br/&gt;&amp;gt; 1, `type` - one byte or two?&lt;br/&gt;&lt;br/&gt;I&amp;#39;d lean towards one, if a message has 256 optional fields, it might be time to&lt;br/&gt;consider a new message type altogether.&lt;br/&gt;&lt;br/&gt;&amp;gt; 3. `type` - does &amp;#34;it&amp;#39;s OK to be odd&amp;#34; apply?  i.e. if an even `type` that is&lt;br/&gt;&amp;gt; not known is found, crash and burn.  But intent of this system is for future&lt;br/&gt;&amp;gt; expansion for optional fields, so...?&lt;br/&gt;&lt;br/&gt;Perhaps this depends on context:&lt;br/&gt; - for gossip messages, I think the primary concern is not breaking signature&lt;br/&gt;     validation, and that these would need to remain optional for backwards&lt;br/&gt;     compatibility.&lt;br/&gt; - for link-level messages, we have a little more control. I imagined the fields&lt;br/&gt;   would be gated by feature bit negotiation, and deviating from&lt;br/&gt;   unsupported/required would result in being disconnected.&lt;br/&gt;&lt;br/&gt;&amp;gt; 5. `len` - one byte or two? I believe we tend to use two bytes for various&lt;br/&gt;&amp;gt; lengths.&lt;br/&gt;&lt;br/&gt;Maybe varint? One byte is not enough for all lengths, but two seems excessive&lt;br/&gt;for uint8 or even uint32.&lt;br/&gt;&lt;br/&gt;&amp;gt; 6.  BOLT - I propose making a separate BOLT for `type,len,value`, which other&lt;br/&gt;&amp;gt; messages and so on simply refer to.&lt;br/&gt;&lt;br/&gt;Indeed, are you thinking we&amp;#39;d use this to add new fields proposed in 1.1?&lt;br/&gt;&lt;br/&gt;In addition to the above, do we also want to flesh out what sub-TLV structures&lt;br/&gt;would look like? Or perhaps that isn&amp;#39;t necessary, if we can continue adding more&lt;br/&gt;root-level keys.&lt;br/&gt;&lt;br/&gt;--Conner&lt;br/&gt;On Wed, Nov 14, 2018 at 8:54 PM ZmnSCPxj via Lightning-dev&lt;br/&gt;&amp;lt;lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Good morning list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; An item added discussed in the summit was the proposed &amp;#34;type,len,value&amp;#34;, which is added to the end of messages and other intercommunication structures (invoices and so on).&lt;br/&gt;&amp;gt; This would allow some transition to future additional fields while maintaining backward compatibility.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe these were brought up:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1.  For a sequence of `type,len,value`, each `type` must be unique. -- accepted.&lt;br/&gt;&amp;gt; 2.  For a sequence of `type,len,value`, the `type`s must be in ascending order -- not explicitly accepted or rejected.  It would be easier to check uniqueness (the previous rule we accepted) here for a naive parser (keep track of some &amp;#34;minimum allowed type&amp;#34; that initializes at zero, check current type &amp;gt;= this, update to current type &#43; 1) if `type`s are in ascending order.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Now for bikeshedding:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1, `type` - one byte or two?&lt;br/&gt;&amp;gt; 2. `type` - maybe some other name, since we already use `type` for messages?  How about, `key` instead?&lt;br/&gt;&amp;gt; 3. `type` - does &amp;#34;it&amp;#39;s OK to be odd&amp;#34; apply?  i.e. if an even `type` that is not known is found, crash and burn.  But intent of this system is for future expansion for optional fields, so...?&lt;br/&gt;&amp;gt; 4. `len` - measures bytes of `value`, obviously since if the receiver does not know the `type` then it cannot know what unit is used for the `value`.&lt;br/&gt;&amp;gt; 5. `len` - one byte or two? I believe we tend to use two bytes for various lengths.&lt;br/&gt;&amp;gt; 6.  BOLT - I propose making a separate BOLT for `type,len,value`, which other messages and so on simply refer to.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;
    </content>
    <updated>2023-06-09T12:52:53Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdlcn4m69vcchpn5rud0csmlzj04q8hrjxeeyh4ywn64pf5q60nugzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvcv40u9</id>
    
      <title type="html">📅 Original date posted:2018-11-21 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdlcn4m69vcchpn5rud0csmlzj04q8hrjxeeyh4ywn64pf5q60nugzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvcv40u9" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsp65agr5u8gxnmllxzhj5ky575xpc3j7ayd5097jkmck6c53r5gegvp52pt&#39;&gt;nevent1q…52pt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-11-21&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi all,&lt;br/&gt;&lt;br/&gt;&amp;gt; But it&amp;#39;s unnecessary for the recipient to know the total amount I meant&lt;br/&gt;&amp;gt; to pay; they just need to return the receipt once it exceeds the amount&lt;br/&gt;&amp;gt; they want.&lt;br/&gt;&lt;br/&gt;I think it’s true that the recipient doesn’t need to know necessarily, but&lt;br/&gt;sending the intended amount is more robust IMO, since it provides an order&lt;br/&gt;invariant hint for when the receiver can safely settle.&lt;br/&gt;&lt;br/&gt;If the sender does amount fuzzing (as CL does) or adds a tip, it’s possible&lt;br/&gt;for the final partial payment to be less than `amount_to_pay` -&lt;br/&gt;`invoice_amount`, causing the sender to settle prematurely. Otherwise, we&lt;br/&gt;might want to specify that no split should be less than the amount&lt;br/&gt;overpaid.&lt;br/&gt;&lt;br/&gt;Of course, if that amount never comes through yet the invoice is satisfied,&lt;br/&gt;the receiver can always choose to settle even if the remaining amount never&lt;br/&gt;arrives.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner&lt;br/&gt;&lt;br/&gt;On Wed, Nov 21, 2018 at 14:55 Rusty Russell &amp;lt;rusty at rustcorp.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Johan Torås Halseth &amp;lt;johanth at gmail.com&amp;gt; writes:&lt;br/&gt;&amp;gt; &amp;gt; Seems like we can restrict the changes to BOLT11 by having the receiver&lt;br/&gt;&amp;gt; &amp;gt; assume NAMP for incoming payments &amp;lt; invoice_amount. (with some timeout of&lt;br/&gt;&amp;gt; &amp;gt; course, but that would need to be the case even when the sender is&lt;br/&gt;&amp;gt; &amp;gt; signalling NAMP).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This would effectively become a probe for Base AMP; if you get a partial&lt;br/&gt;&amp;gt; payment error, it&amp;#39;s because the recipient didn&amp;#39;t support Base AMP.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Seems cleaner to have a flag, both on BOLT11 and inside the onion.  Then&lt;br/&gt;&amp;gt; it&amp;#39;s explicitly opt-in for both sides and doesn&amp;#39;t affect existing nodes&lt;br/&gt;&amp;gt; in any way.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Rusty.&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-- &lt;br/&gt;—Sent from my Spaceship&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20181121/afe803d2/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20181121/afe803d2/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:52:46Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs804pqvvj52qg2veesksu0pvwn5cvfhd63w70n833m9q2h0wv528czyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv73au2k</id>
    
      <title type="html">📅 Original date posted:2018-11-13 📝 Original message: Good ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs804pqvvj52qg2veesksu0pvwn5cvfhd63w70n833m9q2h0wv528czyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv73au2k" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs00qymms56z9uf6xec8yxslx833f8n80qa7cftkwma4xuc3tfjztqkd48q4&#39;&gt;nevent1q…48q4&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-11-13&lt;br/&gt;📝 Original message:&lt;br/&gt;Good morning all,&lt;br/&gt;&lt;br/&gt;&amp;gt; MUST NOT forward (if an intermediate node) or claim (if the final node) unless&lt;br/&gt;&amp;gt; it has received a total greater or equal to `intended_total_payment` in all&lt;br/&gt;&amp;gt; incoming HTLCs for the same `payment_hash`.&lt;br/&gt;&lt;br/&gt;I was under the impression that this would not require changes on behalf of the&lt;br/&gt;intermediaries, and only need to be implemented by the sender and receiver?&lt;br/&gt;If not, then nodes would need to advertise that they support this so that the&lt;br/&gt;sender can be sure to route through the subset of nodes that support it.&lt;br/&gt;&lt;br/&gt;Either way, it would seem that this constraint can only be accurately enforced&lt;br/&gt;by the receiver. If any partial payments fail, then the `intended_total_payment`&lt;br/&gt;through an intermediary may never arise and the payment would be held. This&lt;br/&gt;would also seem to exclude the possibility of iterative path finding, since the&lt;br/&gt;entire payment flow must be known up front during onion packet construction.&lt;br/&gt;&lt;br/&gt;Seems the proposal still works without the intermediaries needing to know this?&lt;br/&gt;&lt;br/&gt;We may want to add that the receiver:&lt;br/&gt;* SHOULD fail the payment if `intended_total_payment` is less than the invoice&lt;br/&gt;   amount&lt;br/&gt;&lt;br/&gt;&amp;gt; I&amp;#39;m wondering, since these payments are no longer atomic, should we name it&lt;br/&gt;&amp;gt; accordingly?&lt;br/&gt;&lt;br/&gt;Indeed this true. Perhaps NAMP or CPHR (Concurrent Payment Hash Re-use) are more&lt;br/&gt;accurate and may avoid confusion?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner&lt;br/&gt;On Tue, Nov 13, 2018 at 8:33 AM Johan Torås Halseth &amp;lt;johanth at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Good evening Z and list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m wondering, since these payments are no longer atomic, should we name it accordingly?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Johan&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, Nov 13, 2018 at 1:28 PM ZmnSCPxj via Lightning-dev &amp;lt;lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Good morning list,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I propose the below to support Base AMP.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The below would allow arbitrary merges of paths, but not arbitrary splits.  I am uncertain about the safety of arbitrary splits.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ### The `multipath_merge_per_hop` type (`option_base_amp`)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This indicates that payment has been split by the sender using Base AMP, and that the receiver should wait for the total intended payment before forwarding or claiming the payment.&lt;br/&gt;&amp;gt;&amp;gt; In case the receiving node is not the last node in the path, then succeeding hops MUST be the same across all splits.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 1. type: 1 (`termination_per_hop`)&lt;br/&gt;&amp;gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;&amp;gt;   * [`8` : `short_channel_id`]&lt;br/&gt;&amp;gt;&amp;gt;   * [`8` : `amt_to_forward`]&lt;br/&gt;&amp;gt;&amp;gt;   * [`4` : `outgoing_cltv_value`]&lt;br/&gt;&amp;gt;&amp;gt;   * [`8` : `intended_total_payment`]&lt;br/&gt;&amp;gt;&amp;gt;   * [`4` : `zeros`]&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The contents of this hop will be the same across all paths of the Base AMP.&lt;br/&gt;&amp;gt;&amp;gt; The `payment_hash` of the incoming HTLCs will also be the same across all paths of the Base AMP.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; `intended_total_payment` is the total amount of money that this node should expect to receive in all incoming paths to the same `payment_hash`.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This may be the last hop of a payment onion, in which case the `HMAC` for this hop will be `0` (the same rule as for `per_hop_type` 0).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The receiver:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * MUST impose a reasonable timeout for waiting to receive all component paths, and fail all incoming HTLC offers for the `payment_hash`  if they have not totalled equal to `intended_total_payment`.&lt;br/&gt;&amp;gt;&amp;gt; * MUST NOT forward (if an intermediate node) or claim (if the final node) unless it has received a total greater or equal to `intended_total_payment` in all incoming HTLCs for the same `payment_hash`.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The sender:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * MUST use the same `payment_hash` for all paths of a single multipath payment.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;
    </content>
    <updated>2023-06-09T12:52:41Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsd5620qr25ulckql7g0p63s94d0sm4t264jkf95xlx8zughcp78tqzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvnev0m6</id>
    
      <title type="html">📅 Original date posted:2018-11-13 📝 Original message: Quick ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsd5620qr25ulckql7g0p63s94d0sm4t264jkf95xlx8zughcp78tqzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvnev0m6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvslegmlss0m24nfc7fl45v638hljd9hvvfm3h9kjwtuq3ec5fthg2mnxa0&#39;&gt;nevent1q…nxa0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-11-13&lt;br/&gt;📝 Original message:&lt;br/&gt;Quick correction:&lt;br/&gt;&lt;br/&gt;&amp;gt; Thus, the cost to perform the attack would be many orders of&lt;br/&gt;&amp;gt; magnitude greater than the cost to back up one channel.&lt;br/&gt;&lt;br/&gt;This was written assuming the attacker was trying to upload multiple encrypted&lt;br/&gt;blobs for the same txid, which seems like an unlikely attack vector if the tower&lt;br/&gt;inherently defends against it. If instead they are just trying to fill&lt;br/&gt;up the tower, the cost&lt;br/&gt;is linear in the amount of blobs they send.&lt;br/&gt;&lt;br/&gt;--Conner&lt;br/&gt;On Tue, Nov 13, 2018 at 4:12 PM Conner Fromknecht&lt;br/&gt;&amp;lt;conner at lightning.engineering&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I haven&amp;#39;t yet gotten around to writing up everything documenting in the working&lt;br/&gt;&amp;gt; watchtower design. However, I think we are nearing that phase where things seem&lt;br/&gt;&amp;gt; mostly solidified and would welcome feedback before attempting to formalize it.&lt;br/&gt;&amp;gt; Expect some follow up posts on the ML :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; From my bare knowledge of go, it seems data structures and messages so far,&lt;br/&gt;&amp;gt; &amp;gt; without actual logic, but please inform me if I am incorrect.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Much of the server side has been implemented, which accepts encrypted blobs from&lt;br/&gt;&amp;gt; watchtower clients and stores them. The functionality related to scanning blocks&lt;br/&gt;&amp;gt; and publishing justice txns has also been implemented, but has not been merged&lt;br/&gt;&amp;gt; yet. The big remaining task is to integrate the client such that it properly&lt;br/&gt;&amp;gt; backs up states after receiving revocations from the remote peer.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Note however that watchtowers would require to keep all encrypted blobs that&lt;br/&gt;&amp;gt; &amp;gt; are keyed to the same partial txid.  I.e. watchtowers need to store the pair&lt;br/&gt;&amp;gt; &amp;gt; in a set with the set looking at the entire txid&#43;blob as the identity of the&lt;br/&gt;&amp;gt; &amp;gt; object.  Otherwise it would be possible, if your watchtower is identified by&lt;br/&gt;&amp;gt; &amp;gt; your counterparty, for the counterparty to give the commitment transaction&amp;#39;s&lt;br/&gt;&amp;gt; &amp;gt; txid with a randomly-generated blob to your watchtower before it gives the&lt;br/&gt;&amp;gt; &amp;gt; revocation key to you.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I have described the above problem before here:&lt;br/&gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-April/001203.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-April/001203.html&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; with an unsatisfactory solution.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Indeed, this was great observation! The tower can&amp;#39;t be sure which client is&lt;br/&gt;&amp;gt; uploading the &amp;#34;real&amp;#34; blob either. In light of that, the chosen design uses a&lt;br/&gt;&amp;gt; two level bucketing structure that maps:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   &amp;lt;txid[:16]&amp;gt; -&amp;gt; client_pubkey1 : encrypted_blob1&lt;br/&gt;&amp;gt;                     -&amp;gt; client_pubkey2 : encrypted_blob2&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ensuring that different client&amp;#39;s can&amp;#39;t overwrite each other. Further, the tower&lt;br/&gt;&amp;gt; will only store one blob for a given txid per client. Upon decryption, the tower&lt;br/&gt;&amp;gt; would learn that only one of this a valid update (and possibly delete state for&lt;br/&gt;&amp;gt; the offender).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; However, this remains your counterparty best avenue of attack, is to simply&lt;br/&gt;&amp;gt; &amp;gt; spam your watchtower until it runs out of resources and crashes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The client pubkeys described above are tied to what we&amp;#39;ve been referring to as a&lt;br/&gt;&amp;gt; session. In order for a client to facilitate the attack described above, they&lt;br/&gt;&amp;gt; would have to pay the tower for multiple sessions tied to different ephemeral&lt;br/&gt;&amp;gt; session keys.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A session grants the client the ability to store up to N blobs, where N would be&lt;br/&gt;&amp;gt; several thousand. Thus, the cost to perform the attack would be many orders of&lt;br/&gt;&amp;gt; magnitude greater than the cost to back up one channel. In the private tower&lt;br/&gt;&amp;gt; case, there isn&amp;#39;t necessarily payment, though it&amp;#39;s more or less assumed that one&lt;br/&gt;&amp;gt; wouldn&amp;#39;t DOS their own tower.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In practice, the tower should only ever accept sessions if it can be certain it&lt;br/&gt;&amp;gt; has the appropriate disk-space to facilitate them, so I don&amp;#39;t think&lt;br/&gt;&amp;gt; there is much&lt;br/&gt;&amp;gt; risk in the node crashing due to this. Someone could still pay to fill&lt;br/&gt;&amp;gt; up my tower,&lt;br/&gt;&amp;gt; but the tower would be compensated appropriately. The tower could also raise&lt;br/&gt;&amp;gt; it&amp;#39;s price point if it detects such behavior.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; And if the watchtower identifies the user, then this leaks the privacy of the&lt;br/&gt;&amp;gt; &amp;gt; user to the watchtower, and what would then be the point of encrypted blob?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe the same session-based, encrypted-blob approach would work eltoo&lt;br/&gt;&amp;gt; towers as well, if the concern is primarily about the channel partner presuming&lt;br/&gt;&amp;gt; the valid blob. The general design should be readily able to serve&lt;br/&gt;&amp;gt; eltoo clients,&lt;br/&gt;&amp;gt; with some slight modifications to breach detection and justice txn construction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My greater concern with the update-and-replace model is that it leaks timing&lt;br/&gt;&amp;gt; information about a particular channel to the tower, since the tower must know&lt;br/&gt;&amp;gt; which prior state needs replacing. So even though it is possible to make eltoo&lt;br/&gt;&amp;gt; towers constant-space per channel, IMO we&amp;#39;re better off storing all prior&lt;br/&gt;&amp;gt; encrypted blobs to maintain adequate privacy. On private towers, perhaps this&lt;br/&gt;&amp;gt; privacy/space tradeoff may acceptable, but not sure if the tradeoff makes sense&lt;br/&gt;&amp;gt; on public towers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Conner&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Mon, Nov 12, 2018 at 1:18 AM ZmnSCPxj via Lightning-dev&lt;br/&gt;&amp;gt; &amp;lt;lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Good morning list,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; We were not able to discuss this topic much at recent summit, but I noticed that lnd has some code related to watchtowers already.  From my bare knowledge of go, it seems data structures and messages so far, without actual logic, but please inform me if I am incorrect.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I assume much of the watchtowers code and design in lnd is by Conner, simply because, he discussed this on this list earlier this year.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I have seen recently, some paper about paying watchtowers by actually simulating breaches.  You would give a watchtower some txid&#43;blob pair, then send that txid and see if the watchtower claims it.  If it does, then you have evidence of liveness and correct behavior, and have also paid for and incentivized the watchtower to operate correctly.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Note however that watchtowers would require to keep all encrypted blobs that are keyed to the same partial txid.  I.e. watchtowers need to store the pair in a set with the set looking at the entire txid&#43;blob as the identity of the object.  Otherwise it would be possible, if your watchtower is identified by your counterparty, for the counterparty to give the commitment transaction&amp;#39;s txid with a randomly-generated blob to your watchtower before it gives the revocation key to you.  However, this remains your counterparty best avenue of attack, is to simply spam your watchtower until it runs out of resources and crashes.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I have described the above problem before here: &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-April/001203.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-April/001203.html&lt;/a&gt; with an unsatisfactory solution.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; --&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I have also been thinking about watchtowers compatible with Decker-Russell-Osuntokun channels.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; As I understand, in a separate thread, laolu is promoting that Decker-Russell-Osuntokun channels can simply &amp;#34;update&amp;#34; the blob side of a txid-blob entry, with the txid being the kickoff/trigger transaction.  As I point out, unless the watchtower identifies the user somehow, this is unsafe; if I can identify your watchtower, then after you update it but before I attack, I can &amp;#34;update&amp;#34; the blob side with a randomly-generated, invalid blob.  And if the watchtower identifies the user, then this leaks the privacy of the user to the watchtower, and what would then be the point of encrypted blob? &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-May/001264.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-May/001264.html&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I am curious what Conner and the other lnd developers are planning for these issues?  You seem to be the first movers into this, and I cannot read go well enough to decipher what plans you have.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Regards,&lt;br/&gt;&amp;gt; &amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; &amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;
    </content>
    <updated>2023-06-09T12:52:32Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvslegmlss0m24nfc7fl45v638hljd9hvvfm3h9kjwtuq3ec5fthgzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv6ut0hp</id>
    
      <title type="html">📅 Original date posted:2018-11-13 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvslegmlss0m24nfc7fl45v638hljd9hvvfm3h9kjwtuq3ec5fthgzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv6ut0hp" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsge4pyz5mhntcyv3nxlsv4yc58crph4mxxnfl2qz4y9hw9aa0yyeq0259xr&#39;&gt;nevent1q…59xr&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-11-13&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;I haven&amp;#39;t yet gotten around to writing up everything documenting in the working&lt;br/&gt;watchtower design. However, I think we are nearing that phase where things seem&lt;br/&gt;mostly solidified and would welcome feedback before attempting to formalize it.&lt;br/&gt;Expect some follow up posts on the ML :)&lt;br/&gt;&lt;br/&gt;&amp;gt; From my bare knowledge of go, it seems data structures and messages so far,&lt;br/&gt;&amp;gt; without actual logic, but please inform me if I am incorrect.&lt;br/&gt;&lt;br/&gt;Much of the server side has been implemented, which accepts encrypted blobs from&lt;br/&gt;watchtower clients and stores them. The functionality related to scanning blocks&lt;br/&gt;and publishing justice txns has also been implemented, but has not been merged&lt;br/&gt;yet. The big remaining task is to integrate the client such that it properly&lt;br/&gt;backs up states after receiving revocations from the remote peer.&lt;br/&gt;&lt;br/&gt;&amp;gt; Note however that watchtowers would require to keep all encrypted blobs that&lt;br/&gt;&amp;gt; are keyed to the same partial txid.  I.e. watchtowers need to store the pair&lt;br/&gt;&amp;gt; in a set with the set looking at the entire txid&#43;blob as the identity of the&lt;br/&gt;&amp;gt; object.  Otherwise it would be possible, if your watchtower is identified by&lt;br/&gt;&amp;gt; your counterparty, for the counterparty to give the commitment transaction&amp;#39;s&lt;br/&gt;&amp;gt; txid with a randomly-generated blob to your watchtower before it gives the&lt;br/&gt;&amp;gt; revocation key to you.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I have described the above problem before here:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-April/001203.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-April/001203.html&lt;/a&gt;&lt;br/&gt;&amp;gt; with an unsatisfactory solution.&lt;br/&gt;&lt;br/&gt;Indeed, this was great observation! The tower can&amp;#39;t be sure which client is&lt;br/&gt;uploading the &amp;#34;real&amp;#34; blob either. In light of that, the chosen design uses a&lt;br/&gt;two level bucketing structure that maps:&lt;br/&gt;&lt;br/&gt;  &amp;lt;txid[:16]&amp;gt; -&amp;gt; client_pubkey1 : encrypted_blob1&lt;br/&gt;                    -&amp;gt; client_pubkey2 : encrypted_blob2&lt;br/&gt;&lt;br/&gt;ensuring that different client&amp;#39;s can&amp;#39;t overwrite each other. Further, the tower&lt;br/&gt;will only store one blob for a given txid per client. Upon decryption, the tower&lt;br/&gt;would learn that only one of this a valid update (and possibly delete state for&lt;br/&gt;the offender).&lt;br/&gt;&lt;br/&gt;&amp;gt; However, this remains your counterparty best avenue of attack, is to simply&lt;br/&gt;&amp;gt; spam your watchtower until it runs out of resources and crashes.&lt;br/&gt;&lt;br/&gt;The client pubkeys described above are tied to what we&amp;#39;ve been referring to as a&lt;br/&gt;session. In order for a client to facilitate the attack described above, they&lt;br/&gt;would have to pay the tower for multiple sessions tied to different ephemeral&lt;br/&gt;session keys.&lt;br/&gt;&lt;br/&gt;A session grants the client the ability to store up to N blobs, where N would be&lt;br/&gt;several thousand. Thus, the cost to perform the attack would be many orders of&lt;br/&gt;magnitude greater than the cost to back up one channel. In the private tower&lt;br/&gt;case, there isn&amp;#39;t necessarily payment, though it&amp;#39;s more or less assumed that one&lt;br/&gt;wouldn&amp;#39;t DOS their own tower.&lt;br/&gt;&lt;br/&gt;In practice, the tower should only ever accept sessions if it can be certain it&lt;br/&gt;has the appropriate disk-space to facilitate them, so I don&amp;#39;t think&lt;br/&gt;there is much&lt;br/&gt;risk in the node crashing due to this. Someone could still pay to fill&lt;br/&gt;up my tower,&lt;br/&gt;but the tower would be compensated appropriately. The tower could also raise&lt;br/&gt;it&amp;#39;s price point if it detects such behavior.&lt;br/&gt;&lt;br/&gt;&amp;gt; And if the watchtower identifies the user, then this leaks the privacy of the&lt;br/&gt;&amp;gt; user to the watchtower, and what would then be the point of encrypted blob?&lt;br/&gt;&lt;br/&gt;I believe the same session-based, encrypted-blob approach would work eltoo&lt;br/&gt;towers as well, if the concern is primarily about the channel partner presuming&lt;br/&gt;the valid blob. The general design should be readily able to serve&lt;br/&gt;eltoo clients,&lt;br/&gt;with some slight modifications to breach detection and justice txn construction.&lt;br/&gt;&lt;br/&gt;My greater concern with the update-and-replace model is that it leaks timing&lt;br/&gt;information about a particular channel to the tower, since the tower must know&lt;br/&gt;which prior state needs replacing. So even though it is possible to make eltoo&lt;br/&gt;towers constant-space per channel, IMO we&amp;#39;re better off storing all prior&lt;br/&gt;encrypted blobs to maintain adequate privacy. On private towers, perhaps this&lt;br/&gt;privacy/space tradeoff may acceptable, but not sure if the tradeoff makes sense&lt;br/&gt;on public towers.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner&lt;br/&gt;&lt;br/&gt;On Mon, Nov 12, 2018 at 1:18 AM ZmnSCPxj via Lightning-dev&lt;br/&gt;&amp;lt;lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Good morning list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We were not able to discuss this topic much at recent summit, but I noticed that lnd has some code related to watchtowers already.  From my bare knowledge of go, it seems data structures and messages so far, without actual logic, but please inform me if I am incorrect.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I assume much of the watchtowers code and design in lnd is by Conner, simply because, he discussed this on this list earlier this year.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I have seen recently, some paper about paying watchtowers by actually simulating breaches.  You would give a watchtower some txid&#43;blob pair, then send that txid and see if the watchtower claims it.  If it does, then you have evidence of liveness and correct behavior, and have also paid for and incentivized the watchtower to operate correctly.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note however that watchtowers would require to keep all encrypted blobs that are keyed to the same partial txid.  I.e. watchtowers need to store the pair in a set with the set looking at the entire txid&#43;blob as the identity of the object.  Otherwise it would be possible, if your watchtower is identified by your counterparty, for the counterparty to give the commitment transaction&amp;#39;s txid with a randomly-generated blob to your watchtower before it gives the revocation key to you.  However, this remains your counterparty best avenue of attack, is to simply spam your watchtower until it runs out of resources and crashes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I have described the above problem before here: &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-April/001203.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-April/001203.html&lt;/a&gt; with an unsatisfactory solution.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I have also been thinking about watchtowers compatible with Decker-Russell-Osuntokun channels.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As I understand, in a separate thread, laolu is promoting that Decker-Russell-Osuntokun channels can simply &amp;#34;update&amp;#34; the blob side of a txid-blob entry, with the txid being the kickoff/trigger transaction.  As I point out, unless the watchtower identifies the user somehow, this is unsafe; if I can identify your watchtower, then after you update it but before I attack, I can &amp;#34;update&amp;#34; the blob side with a randomly-generated, invalid blob.  And if the watchtower identifies the user, then this leaks the privacy of the user to the watchtower, and what would then be the point of encrypted blob? &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-May/001264.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-May/001264.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I am curious what Conner and the other lnd developers are planning for these issues?  You seem to be the first movers into this, and I cannot read go well enough to decipher what plans you have.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;
    </content>
    <updated>2023-06-09T12:52:32Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvtjkzy2ul0erh5m04wtvtkuwgludtnv7pat43p4cdzj38j0hm6aczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv6yv9v5</id>
    
      <title type="html">📅 Original date posted:2018-11-13 📝 Original message: Good ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvtjkzy2ul0erh5m04wtvtkuwgludtnv7pat43p4cdzj38j0hm6aczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv6yv9v5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgn2rj32ag7zjw8rq5kyttt4ykf5d7uzytme3se3hdc3l67pewpccvtsalv&#39;&gt;nevent1q…salv&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-11-13&lt;br/&gt;📝 Original message:&lt;br/&gt;Good morning all,&lt;br/&gt;&lt;br/&gt;Taking a step back—even if key switching can be done mathematically, it seems&lt;br/&gt;dubious that we would want to introduce re-routing or rendezvous routing in this&lt;br/&gt;manner. If the example provided _could_ be done, it would directly violate the&lt;br/&gt;wrap-resistance property of the ideal onion routing scheme defined in [1]. This&lt;br/&gt;property is proven for Sphinx in section 4.3 of [2]. Schemes like HORNET [3]&lt;br/&gt;support rendezvous routing and are formally proven in this model. Seems this&lt;br/&gt;would be the obvious path forward, given that we&amp;#39;ve already done a considerable&lt;br/&gt;amount of work towards implementing HORNET via Sphinx.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner&lt;br/&gt;&lt;br/&gt;[1] A Formal Treatment of Onion Routing:&lt;br/&gt;&lt;a href=&#34;https://www.iacr.org/cryptodb/archive/2005/CRYPTO/1091/1091.pdf&#34;&gt;https://www.iacr.org/cryptodb/archive/2005/CRYPTO/1091/1091.pdf&lt;/a&gt;&lt;br/&gt;[2] Sphinx: &lt;a href=&#34;https://cypherpunks.ca/~iang/pubs/Sphinx_Oakland09.pdf&#34;&gt;https://cypherpunks.ca/~iang/pubs/Sphinx_Oakland09.pdf&lt;/a&gt;&lt;br/&gt;[3] HORNET: &lt;a href=&#34;https://arxiv.org/pdf/1507.05724.pdf&#34;&gt;https://arxiv.org/pdf/1507.05724.pdf&lt;/a&gt;&lt;br/&gt;On Mon, Nov 12, 2018 at 8:47 PM ZmnSCPxj via Lightning-dev&lt;br/&gt;&amp;lt;lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Good morning Christian,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I am nowhere near a mathematician, thus, cannot countercheck your expertise here (and cannot give a counterproposal thusly).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But I want to point out the below scenarios:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1.  C is the payer.  He is in contact with an unknown payee (who in reality is E).  E provides the onion-wrapped route D-&amp;gt;E with ephemeral key and other data necessary, as well as informing C that D is the rendez-vous point.  Then C creates a route from itself to D (via channel C-&amp;gt;D or via C-&amp;gt;A-&amp;gt;D).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2.  B is the payer.  He knows the entire route B-&amp;gt;C-&amp;gt;D-&amp;gt;E and knows that payee is C.  Unfortunately the C&amp;lt;-&amp;gt;D channel is low capacity or down or etc etc.  At C, B has provided the onion-wrapped route D-&amp;gt;E with ephemeral key and other data necessary, as well as informing to C that D is the next node.  Then C either pays via C-&amp;gt;D or via C-&amp;gt;A-&amp;gt;D.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Even if there is an off-by-one error in our thinking about rendez-vous nodes, could it not be compensated also by an off-by-one in the link-level payment splitting via intermediary rendez-vous node?&lt;br/&gt;&amp;gt; In short, D is the one that switches keys instead of A.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The operation of processing a hop would be:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1.  Unwrap the onion with current ephemeral key.&lt;br/&gt;&amp;gt; 2.  Dispatch based on realm byte.&lt;br/&gt;&amp;gt; 2.1.  If realm byte 0:&lt;br/&gt;&amp;gt; 2.1.1.  Normal routing behavior, extract HMAC, etc etc&lt;br/&gt;&amp;gt; 2.2.  If realm byte 2 &amp;#34;switch ephemeral keys&amp;#34;:&lt;br/&gt;&amp;gt; 2.2.1.  Set current ephemeral key to bytes 1 -&amp;gt; 32 of packet.&lt;br/&gt;&amp;gt; 2.2.2.  Shift onion by one hop packet.&lt;br/&gt;&amp;gt; 2.2.3.  Goto 1.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Would that not work?&lt;br/&gt;&amp;gt; (I am being naive here, as I am not a mathist and I did not understand half what you wrote, sorry)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Then at C, we have the onion from D-&amp;gt;E, we also know the next ephemeral key to use (we can derive it since we would pass it to D anyway).&lt;br/&gt;&amp;gt; It rightshifts the onion by one, storing the next ephemeral key to the new hop it just allocated.&lt;br/&gt;&amp;gt; Then it encrypts the onion using a new ephemeral key that it will use to generate the D&amp;lt;-A&amp;lt;-C part of the onion.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sent with ProtonMail Secure Email.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐&lt;br/&gt;&amp;gt; On Tuesday, November 13, 2018 11:45 AM, Christian Decker &amp;lt;decker.christian at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Great proposal ZmnSCPxj, but I think I need to raise a small issue with&lt;br/&gt;&amp;gt; &amp;gt; it. While writing up the proposal for rendez-vous I came across a&lt;br/&gt;&amp;gt; &amp;gt; problem with the mechanism I described during the spec meeting: the&lt;br/&gt;&amp;gt; &amp;gt; padding at the rendez-vous point would usually zero-padded and then&lt;br/&gt;&amp;gt; &amp;gt; encrypted in one go with the shared secret that was generated from the&lt;br/&gt;&amp;gt; &amp;gt; previous ephemeral key (i.e., the one before the switch). That ephemeral&lt;br/&gt;&amp;gt; &amp;gt; key is not known to the recipient (barring additional rounds of&lt;br/&gt;&amp;gt; &amp;gt; communication) so the recipient would be unable to compute the correct&lt;br/&gt;&amp;gt; &amp;gt; MACs. There are a number of solutions to this, basically setting the&lt;br/&gt;&amp;gt; &amp;gt; padding to something that the recipient could know when generating its&lt;br/&gt;&amp;gt; &amp;gt; half onion.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; My current favorite goes like this:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 1.  Rendez-vous RV receives an onion, performs ECDH like normal to get&lt;br/&gt;&amp;gt; &amp;gt;     the shared secret, decrypts its payload, simultaneously encrypts&lt;br/&gt;&amp;gt; &amp;gt;     the padding.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 2.  It extracts its per-hop payload and shifts the entire packet over&lt;br/&gt;&amp;gt; &amp;gt;     (shift its payload out and the newly generated padding in)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 3.  It then notices that it should perform an ephemeral key switch, now&lt;br/&gt;&amp;gt; &amp;gt;     deviating from the normal protocol (which would just be to generate&lt;br/&gt;&amp;gt; &amp;gt;     the new ephemeral key, serialize and forward)&lt;br/&gt;&amp;gt; &amp;gt;     3.1. It zero-fills the padding that it just added (so we are in a&lt;br/&gt;&amp;gt; &amp;gt;     state that the recipient knew when generating its partial onion&lt;br/&gt;&amp;gt; &amp;gt;     3.2 It performs ECDH with the switched in ephemeral key to get a new&lt;br/&gt;&amp;gt; &amp;gt;     shared secret that which is then used to unwrap one additional&lt;br/&gt;&amp;gt; &amp;gt;     layer of encryption, and most importantly encrypt the padding so&lt;br/&gt;&amp;gt; &amp;gt;     the next hop doesn&amp;#39;t see the zero-filled padding.&lt;br/&gt;&amp;gt; &amp;gt;     3.3 Only then will it generate the new ephemeral key for the next&lt;br/&gt;&amp;gt; &amp;gt;     hop, based on the switched in ephemeral key and the newly&lt;br/&gt;&amp;gt; &amp;gt;     generated shared secret, serialize the packet and forward it.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     This has the advantage of reusing all the existing machinery but&lt;br/&gt;&amp;gt; &amp;gt;     assembling it a bit differently, by adding a little detour when&lt;br/&gt;&amp;gt; &amp;gt;     generating the next onion. It involves one additional ECDH at the&lt;br/&gt;&amp;gt; &amp;gt;     rendez-vous, one ChaCha20 encryption and one scalar multiplication to&lt;br/&gt;&amp;gt; &amp;gt;     generate the next ephemeral keys. It does not need more space than the&lt;br/&gt;&amp;gt; &amp;gt;     single ephemeral key in the per-hop payload.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     And now for the reason that I write this as a reply to your post: with&lt;br/&gt;&amp;gt; &amp;gt;     this scheme it is not possible for C to find an ephemeral key that would&lt;br/&gt;&amp;gt; &amp;gt;     end up identical to the one that D would require to decrypt the onion&lt;br/&gt;&amp;gt; &amp;gt;     correctly. This would not be an issue if D is informed about this split&lt;br/&gt;&amp;gt; &amp;gt;     and would basically accept whatever it gets, but that kind of defeats&lt;br/&gt;&amp;gt; &amp;gt;     the transparency that you were going for with your proposal.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     I&amp;#39;m open for other proposals but I currently can&amp;#39;t think of a way to&lt;br/&gt;&amp;gt; &amp;gt;     make sure that a) the recipient can deterministically generate the same&lt;br/&gt;&amp;gt; &amp;gt;     padding that RV will generate, and b) hide the fact that RV was indeed a&lt;br/&gt;&amp;gt; &amp;gt;     rendez-vous point (e.g., by leaving the padding be a well known&lt;br/&gt;&amp;gt; &amp;gt;     constant).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     Sorry for this problem, I had a mental off-by-one at the meeting that I&lt;br/&gt;&amp;gt; &amp;gt;     hadn&amp;#39;t considered, the solution should work, but it makes this kind of&lt;br/&gt;&amp;gt; &amp;gt;     things a bit harder.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     Cheers,&lt;br/&gt;&amp;gt; &amp;gt;     Christian&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     ZmnSCPxj via Lightning-dev lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; writes:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Good morning list,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; As was discussed directly in summit, we accept link-lvel payment splitting (scid is not binding), and provisionally accept rendez-vous routing.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; It strikes me, that even if your node has only a single channel to the next node (c-lightning), it is possible, to still perform link-level payment splitting/re-routing.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; For instance, consider this below graph:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;       E&amp;lt;---D---&amp;gt;C&amp;lt;---B&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;            ^  /&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;            | /&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;            |L&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;            A&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; In the above, B requests a route from B-&amp;gt;C-&amp;gt;D-&amp;gt;E.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; However, C cannot send to D, since the channel direction is saturated in favor of D.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Alternately, C can route to D via A instead. It holds the (encrypted) route from D to E. It can take that sub-route and treat it as a partial route-to-payee under rendez-vous routing, as long as node A supports rendez-vous routing.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; This can allow re-routing or payment splitting over multiple hops.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Even though C does not know the number of remaining hops between D and the destination, its alternative is to earn nothing anyway as its only alternative is to fail the routing. At least with this, there is a chance it can succeed to send the payment to the final destination.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Regards,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;
    </content>
    <updated>2023-06-09T12:52:25Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxzjvcvppms9vdlcr7gqvratlmd3kd9n33qwr7c8ed8pqdaeeuzdczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv708swq</id>
    
      <title type="html">📅 Original date posted:2018-11-09 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxzjvcvppms9vdlcr7gqvratlmd3kd9n33qwr7c8ed8pqdaeeuzdczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv708swq" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstsvxymcx0wlr8kzu659knp7grkasafr5rx00caclsjh5tnf9j97s37eh4m&#39;&gt;nevent1q…eh4m&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-11-09&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; How do i unsubscribe from this email list? Could someone help me please.&lt;br/&gt;&lt;br/&gt;There’s a link in the footer to the linux list, there you can enter your&lt;br/&gt;email to unsubscribe&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner&lt;br/&gt;&lt;br/&gt;-- Sent from my Spaceship&lt;br/&gt;&lt;br/&gt;On Fri, Nov 9, 2018 at 17:19 alexis petropoulos &amp;lt;akexis823 at hotmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; How do i unsubscribe from this email list? Could someone help me please.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Kindly,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Alex&lt;br/&gt;&amp;gt; ------------------------------&lt;br/&gt;&amp;gt; *From:* lightning-dev-bounces at lists.linuxfoundation.org &amp;lt;&lt;br/&gt;&amp;gt; lightning-dev-bounces at lists.linuxfoundation.org&amp;gt; on behalf of Gert-Jaap&lt;br/&gt;&amp;gt; Glasbergen &amp;lt;gertjaap at gertjaap.nl&amp;gt;&lt;br/&gt;&amp;gt; *Sent:* Monday, November 5, 2018 3:48:56 PM&lt;br/&gt;&amp;gt; *To:* lightning-dev at lists.linuxfoundation.org; Rusty Russell&lt;br/&gt;&amp;gt; *Subject:* Re: [Lightning-dev] RFC: simplifications and suggestions on&lt;br/&gt;&amp;gt; open/accept limits.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Op 1 nov. 2018 om 03:38 heeft Rusty Russell &amp;lt;rusty at rustcorp.com.au&amp;gt; het&lt;br/&gt;&amp;gt; volgende geschreven:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe this would render you inoperable in practice; fees are&lt;br/&gt;&amp;gt; frequently sub-satoshi, so you would fail everything.  The entire&lt;br/&gt;&amp;gt; network would have to drop millisatoshis, and the bitcoin maximalist in&lt;br/&gt;&amp;gt; me thinks that&amp;#39;s unwise :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I can see how not wanting to use millisatoshis makes you less compatible&lt;br/&gt;&amp;gt; with other people that do prefer using that unit of account. But in this&lt;br/&gt;&amp;gt; case I think it&amp;#39;s important to allow the freedom to choose.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I essentially feel we should be allowed to respect the confines of the layer&lt;br/&gt;&amp;gt; we&amp;#39;re building upon. There&amp;#39;s already a lot of benefits to achieve from second&lt;br/&gt;&amp;gt; layer scaling whilst still respecting the limits of the base layer. Staying&lt;br/&gt;&amp;gt; within those limits means optimally benefit form the security it offers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Essentially by allowing to keep satoshi as the smallest fraction, you ensure&lt;br/&gt;&amp;gt; that everything you do off-chain is also valid and enforced by the chain when&lt;br/&gt;&amp;gt; you need it to. It comes at trade offs though: it would mean that if someone&lt;br/&gt;&amp;gt; routes your payment, you can only pay fees in whole satoshis - essentially&lt;br/&gt;&amp;gt; meaning if someone wants to charge a (small) fee, you will be overpaying to&lt;br/&gt;&amp;gt; stay within your chosen security parameters. Which is a consequence of your&lt;br/&gt;&amp;gt; choice.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I would be happy to make a further analysis on what consequences allowing this&lt;br/&gt;&amp;gt; choice would have for the specification, and come up with a proposal on how to&lt;br/&gt;&amp;gt; add support for this. But I guess this discussion is meant to &amp;#34;test the waters&amp;#34;&lt;br/&gt;&amp;gt; to see how much potential such a proposal would have to eventually be included.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I guess what I&amp;#39;m searching for is a way to achieve the freedom of choice,&lt;br/&gt;&amp;gt; without negatively impacting other clients or users that decide to accept some&lt;br/&gt;&amp;gt; level of trust. In my view, this would be possible - but I think working it out&lt;br/&gt;&amp;gt; in a concrete proposal/RFC to the spec would be a logical next step.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Gert-Jaap&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20181109/c820dd77/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20181109/c820dd77/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:51:58Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsv5axpdzkl2dlnnas8wts2s9l394e6yprccgj7vxywsfcs453785czyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv73wmsh</id>
    
      <title type="html">📅 Original date posted:2018-10-20 📝 Original message: Good ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsv5axpdzkl2dlnnas8wts2s9l394e6yprccgj7vxywsfcs453785czyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv73wmsh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfzue2n69ltxvpqsrdmz34ljn2u0yfr65swermakc5v570skw900quv96p4&#39;&gt;nevent1q…96p4&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-10-20&lt;br/&gt;📝 Original message:&lt;br/&gt;Good morning everyone,&lt;br/&gt;&lt;br/&gt;&amp;gt; We could also use SIGHASH_ANYONECANPAY|SIGHASH_SINGLE&lt;br/&gt;&amp;gt; for HTLC txs, without adding the &amp;#34;OP_TRUE&amp;#34;&lt;br/&gt;&amp;gt; output to the commitment transaction&lt;br/&gt;&lt;br/&gt;Doesn’t this require a non-zero number of HTLCs on the commitment txn? We&lt;br/&gt;would still require the OP_TRUE if there are no HTLCs, right?&lt;br/&gt;&lt;br/&gt;&amp;gt;From my recollection, HTLC txns with an absolute timeout won’t be accepted&lt;br/&gt;in the mempool until the expiry has matured. So the commitment would have&lt;br/&gt;to be held until that time before it’s descendants can bump the fee rate I&lt;br/&gt;think.&lt;br/&gt;&lt;br/&gt;I agree that we should probably modify the HTLC sighashes regardless,&lt;br/&gt;though I wonder if it is a standalone replacement for OP_TRUE.&lt;br/&gt;&lt;br/&gt;&amp;gt; 3. The CLTV timeout should be symmetrical to avoid&lt;br/&gt;&amp;gt; trying to game the peer into closing. (Connor IIRC?).&lt;br/&gt;&lt;br/&gt;I believe Jimpo proposed this :)&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Conner&lt;br/&gt;&lt;br/&gt;On Fri, Oct 19, 2018 at 03:43 Rusty Russell &amp;lt;rusty at rustcorp.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Fabrice Drouin &amp;lt;fabrice.drouin at acinq.fr&amp;gt; writes:&lt;br/&gt;&amp;gt; &amp;gt; Hello,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; 1.  Rather than trying to agree on what fees will be in the future, we&lt;br/&gt;&amp;gt; &amp;gt;  &amp;gt;     should use an OP_TRUE-style output to allow CPFP (Roasbeef)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; We could also use SIGHASH_ANYONECANPAY|SIGHASH_SINGLE for HTLC txs,&lt;br/&gt;&amp;gt; without&lt;br/&gt;&amp;gt; &amp;gt; adding the &amp;#34;OP_TRUE&amp;#34; output to the commitment transaction. We would still&lt;br/&gt;&amp;gt; &amp;gt; need the update_fee message to manage onchain fees for the commit tx (but&lt;br/&gt;&amp;gt; &amp;gt; not the HTLC txs) but there would be no reason anymore to refuse fee&lt;br/&gt;&amp;gt; rates&lt;br/&gt;&amp;gt; &amp;gt; that are too high and channels would not get closed anymore when there&amp;#39;s&lt;br/&gt;&amp;gt; a&lt;br/&gt;&amp;gt; &amp;gt; spike in onchain fees.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Agreed, that was in the details below:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - HTLC-timeout and HTLC-success txs sigs are&lt;br/&gt;&amp;gt;   SIGHASH_ANYONECANPAY|SIGHASH_SINGLE, so you can Bring Your Own Fees.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The only problem with these proposals is that it requires you have an&lt;br/&gt;&amp;gt; available UTXO to make the CPFP etc.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Rusty.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20181020/a6c610be/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20181020/a6c610be/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:51:51Z</updated>
  </entry>

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

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

  <entry>
    <id>https://njump.me/nevent1qqs02s9u7ae6nupqeucq8vuzrk3auzr456ll0aqvffygsg2z2uutueczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvu96u9j</id>
    
      <title type="html">📅 Original date posted:2018-04-17 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs02s9u7ae6nupqeucq8vuzrk3auzr456ll0aqvffygsg2z2uutueczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvu96u9j" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs88dc2lv2zngdr77h7tvf9xmyr8mnkaqj94f4ez5smzlsd5dhqdacxnpuxl&#39;&gt;nevent1q…puxl&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-04-17&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;&amp;gt; I understand.  For myself, I will also wait for comment from other&lt;br/&gt;c-lightning&lt;br/&gt;&amp;gt; developers: this seems to require a bit of surgery on our code I think&lt;br/&gt;&amp;gt; (currently construction of justice transactions is done in a separate&lt;br/&gt;process,&lt;br/&gt;&amp;gt; and we always generate a justice transaction that claims all claimable&lt;br/&gt;outputs&lt;br/&gt;&amp;gt; of the revoked commitment transaction), and we might decide to defer this&lt;br/&gt;&amp;gt; feature for later (leaking revocation basepoint secret is easy and&lt;br/&gt;requires&lt;br/&gt;&amp;gt; maybe a few dozen sloc, but that requires a trusted WatchTower).&lt;br/&gt;&lt;br/&gt;Certainly, it will require changes to ours as well. Would also love to hear&lt;br/&gt;what the&lt;br/&gt;other implementations think of such a proposal. As of now, we detect if the&lt;br/&gt;commitment outputs have been spent, and if so, attempt to spend an&lt;br/&gt;aggregate of&lt;br/&gt;the commitment outputs and second-level outputs conditioned on which are&lt;br/&gt;reported as spent. To realize this fully, we would need to also detect the&lt;br/&gt;case&lt;br/&gt;in which the second-level txns have already been spent, and then forgo&lt;br/&gt;sweeping&lt;br/&gt;them entirely (on the assumption that it has already been done by a&lt;br/&gt;watchtower).&lt;br/&gt;&lt;br/&gt;&amp;gt; Ah, I thought you wanted to impose some kind of contract on&lt;br/&gt;&amp;gt; HTLC-timeout/HTLC-success to enforce this behavior, you are referring to a&lt;br/&gt;&amp;gt; technique that the attacker might attempt to use if we use only a single&lt;br/&gt;&amp;gt; justice transaction that claims all HTLC outputs.&lt;br/&gt;&lt;br/&gt;Precisely, if the attacker knows that we can only sweep a particular sets of&lt;br/&gt;outputs when batched, they can choose other sets that the watchtower can&amp;#39;t&lt;br/&gt;act&lt;br/&gt;on. Spending them independently seems to resolve this.&lt;br/&gt;&lt;br/&gt;-Conner&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Tue, Apr 17, 2018 at 8:02 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Conner,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I understand. It would be good to know what you have, and perhaps&lt;br/&gt;&amp;gt; consider&lt;br/&gt;&amp;gt; &amp;gt; planning a new BOLT document for such.&lt;br/&gt;&amp;gt; Yes, that is the ultimate goal. I think it might be a little to soon to&lt;br/&gt;&amp;gt; have a&lt;br/&gt;&amp;gt; full-on BOLT spec. There are still some implementation details that we&lt;br/&gt;&amp;gt; would&lt;br/&gt;&amp;gt; like to address before formalizing everything. I am working to have&lt;br/&gt;&amp;gt; something&lt;br/&gt;&amp;gt; written up in the short-term documenting the approach[es] that ends up&lt;br/&gt;&amp;gt; being&lt;br/&gt;&amp;gt; solidified. Hopefully that can get some eyes during development, and&lt;br/&gt;&amp;gt; perhaps&lt;br/&gt;&amp;gt; serve as working document/rough draft.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I understand.  For myself, I will also wait for comment from other&lt;br/&gt;&amp;gt; c-lightning developers: this seems to require a bit of surgery on our code&lt;br/&gt;&amp;gt; I think (currently construction of justice transactions is done in a&lt;br/&gt;&amp;gt; separate process, and we always generate a justice transaction that claims&lt;br/&gt;&amp;gt; all claimable outputs of the revoked commitment transaction), and we might&lt;br/&gt;&amp;gt; decide to defer this feature for later (leaking revocation basepoint secret&lt;br/&gt;&amp;gt; is easy and requires maybe a few dozen sloc, but that requires a trusted&lt;br/&gt;&amp;gt; WatchTower).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Sorry, I seem confused this idea.  Can you give example for commitment&lt;br/&gt;&amp;gt; with 2x&lt;br/&gt;&amp;gt; &amp;gt; HTLC?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sure thing! The confirmation of second level HTLC txns can be separated by&lt;br/&gt;&amp;gt; arbitrary delays. This is particularly true if the CLTVs have already&lt;br/&gt;&amp;gt; expired,&lt;br/&gt;&amp;gt; offering an attacker total control over when the txns appear on the&lt;br/&gt;&amp;gt; network. One&lt;br/&gt;&amp;gt; way this can happen is if the attacker iteratively broadcasts a single&lt;br/&gt;&amp;gt; second-level txn, waits for confirmation and CSV to expire, then repeat&lt;br/&gt;&amp;gt; with&lt;br/&gt;&amp;gt; another second-level txn.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Since the CSVs begin ticking as soon as they are included in the chain,&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; attacker could try to sweep each one immediately after its CSV expires.&lt;br/&gt;&amp;gt; If the&lt;br/&gt;&amp;gt; watchtower doesn&amp;#39;t have the ability to sweep outputs independently, it&lt;br/&gt;&amp;gt; would&lt;br/&gt;&amp;gt; have no way to intercept this behavior, and prevent the breacher from&lt;br/&gt;&amp;gt; sweeping&lt;br/&gt;&amp;gt; individual HTLCs sequentially.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Ah, I thought you wanted to impose some kind of contract on&lt;br/&gt;&amp;gt; HTLC-timeout/HTLC-success to enforce this behavior, you are referring to a&lt;br/&gt;&amp;gt; technique that the attacker might attempt to use if we use only a single&lt;br/&gt;&amp;gt; justice transaction that claims all HTLC outputs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 5.  0 or 1 or 2 signatures for the main outputs. These sign a single&lt;br/&gt;&amp;gt; &amp;gt; transaction that claims only the main outputs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, it seems necessary to separate the commitment outpoints from the HTLC&lt;br/&gt;&amp;gt; outpoints in case the commitment txn is broadcasted before the CLTVs&lt;br/&gt;&amp;gt; expire.&lt;br/&gt;&amp;gt; You could try to batch these with the HTLCs, but then we get back into&lt;br/&gt;&amp;gt; exponential territory.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Agreed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Is that approximately what is needed?  Have I missed anything?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Nope, I think your understanding is on point. IMO this seems to be a&lt;br/&gt;&amp;gt; reasonable&lt;br/&gt;&amp;gt; compromise of the tradeoffs at hand, and definitely something that could&lt;br/&gt;&amp;gt; serve&lt;br/&gt;&amp;gt; as an initial iteration due to its simplicity. In the future, there are definitely&lt;br/&gt;&amp;gt; ways&lt;br/&gt;&amp;gt; to improve on this on make it even more efficient! Though having a&lt;br/&gt;&amp;gt; solid/workable v0 is important if it is to be deployed. I enjoy hearing&lt;br/&gt;&amp;gt; your&lt;br/&gt;&amp;gt; thoughts on this, thank you for your responses!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thank you for this confirmation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180417/466f490f/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180417/466f490f/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:50:11Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsys3tarv4n8lu4sn0uku5rcqsrcy47h5sjrxjvqm407gmzs3kkj2czyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvsfn94t</id>
    
      <title type="html">📅 Original date posted:2018-04-17 📝 Original message: The ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsys3tarv4n8lu4sn0uku5rcqsrcy47h5sjrxjvqm407gmzs3kkj2czyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvsfn94t" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs02s9u7ae6nupqeucq8vuzrk3auzr456ll0aqvffygsg2z2uutuecdstxwd&#39;&gt;nevent1q…txwd&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-04-17&lt;br/&gt;📝 Original message:&lt;br/&gt;The ability for a watchtower to spend them independently seems to resolve&lt;br/&gt;this*&lt;br/&gt;On Tue, Apr 17, 2018 at 01:30 Conner Fromknecht&lt;br/&gt;&amp;lt;conner at lightning.engineering&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I understand.  For myself, I will also wait for comment from other&lt;br/&gt;&amp;gt; c-lightning&lt;br/&gt;&amp;gt; &amp;gt; developers: this seems to require a bit of surgery on our code I think&lt;br/&gt;&amp;gt; &amp;gt; (currently construction of justice transactions is done in a separate&lt;br/&gt;&amp;gt; process,&lt;br/&gt;&amp;gt; &amp;gt; and we always generate a justice transaction that claims all claimable&lt;br/&gt;&amp;gt; outputs&lt;br/&gt;&amp;gt; &amp;gt; of the revoked commitment transaction), and we might decide to defer this&lt;br/&gt;&amp;gt; &amp;gt; feature for later (leaking revocation basepoint secret is easy and&lt;br/&gt;&amp;gt; requires&lt;br/&gt;&amp;gt; &amp;gt; maybe a few dozen sloc, but that requires a trusted WatchTower).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Certainly, it will require changes to ours as well. Would also love to&lt;br/&gt;&amp;gt; hear what the&lt;br/&gt;&amp;gt; other implementations think of such a proposal. As of now, we detect if the&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; commitment outputs have been spent, and if so, attempt to spend an&lt;br/&gt;&amp;gt; aggregate of&lt;br/&gt;&amp;gt; the commitment outputs and second-level outputs conditioned on which are&lt;br/&gt;&amp;gt; reported as spent. To realize this fully, we would need to also detect the&lt;br/&gt;&amp;gt; case&lt;br/&gt;&amp;gt; in which the second-level txns have already been spent, and then forgo&lt;br/&gt;&amp;gt; sweeping&lt;br/&gt;&amp;gt; them entirely (on the assumption that it has already been done by a&lt;br/&gt;&amp;gt; watchtower).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Ah, I thought you wanted to impose some kind of contract on&lt;br/&gt;&amp;gt; &amp;gt; HTLC-timeout/HTLC-success to enforce this behavior, you are referring&lt;br/&gt;&amp;gt; to a&lt;br/&gt;&amp;gt; &amp;gt; technique that the attacker might attempt to use if we use only a single&lt;br/&gt;&amp;gt; &amp;gt; justice transaction that claims all HTLC outputs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Precisely, if the attacker knows that we can only sweep a particular sets&lt;br/&gt;&amp;gt; of&lt;br/&gt;&amp;gt; outputs when batched, they can choose other sets that the watchtower can&amp;#39;t&lt;br/&gt;&amp;gt; act&lt;br/&gt;&amp;gt; on. Spending them independently seems to resolve this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -Conner&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, Apr 17, 2018 at 8:02 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Good morning Conner,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I understand. It would be good to know what you have, and perhaps&lt;br/&gt;&amp;gt;&amp;gt; consider&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; planning a new BOLT document for such.&lt;br/&gt;&amp;gt;&amp;gt; Yes, that is the ultimate goal. I think it might be a little to soon to&lt;br/&gt;&amp;gt;&amp;gt; have a&lt;br/&gt;&amp;gt;&amp;gt; full-on BOLT spec. There are still some implementation details that we&lt;br/&gt;&amp;gt;&amp;gt; would&lt;br/&gt;&amp;gt;&amp;gt; like to address before formalizing everything. I am working to have&lt;br/&gt;&amp;gt;&amp;gt; something&lt;br/&gt;&amp;gt;&amp;gt; written up in the short-term documenting the approach[es] that ends up&lt;br/&gt;&amp;gt;&amp;gt; being&lt;br/&gt;&amp;gt;&amp;gt; solidified. Hopefully that can get some eyes during development, and&lt;br/&gt;&amp;gt;&amp;gt; perhaps&lt;br/&gt;&amp;gt;&amp;gt; serve as working document/rough draft.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I understand.  For myself, I will also wait for comment from other&lt;br/&gt;&amp;gt;&amp;gt; c-lightning developers: this seems to require a bit of surgery on our code&lt;br/&gt;&amp;gt;&amp;gt; I think (currently construction of justice transactions is done in a&lt;br/&gt;&amp;gt;&amp;gt; separate process, and we always generate a justice transaction that claims&lt;br/&gt;&amp;gt;&amp;gt; all claimable outputs of the revoked commitment transaction), and we might&lt;br/&gt;&amp;gt;&amp;gt; decide to defer this feature for later (leaking revocation basepoint secret&lt;br/&gt;&amp;gt;&amp;gt; is easy and requires maybe a few dozen sloc, but that requires a trusted&lt;br/&gt;&amp;gt;&amp;gt; WatchTower).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Sorry, I seem confused this idea.  Can you give example for commitment&lt;br/&gt;&amp;gt;&amp;gt; with 2x&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; HTLC?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Sure thing! The confirmation of second level HTLC txns can be separated&lt;br/&gt;&amp;gt;&amp;gt; by&lt;br/&gt;&amp;gt;&amp;gt; arbitrary delays. This is particularly true if the CLTVs have already&lt;br/&gt;&amp;gt;&amp;gt; expired,&lt;br/&gt;&amp;gt;&amp;gt; offering an attacker total control over when the txns appear on the&lt;br/&gt;&amp;gt;&amp;gt; network. One&lt;br/&gt;&amp;gt;&amp;gt; way this can happen is if the attacker iteratively broadcasts a single&lt;br/&gt;&amp;gt;&amp;gt; second-level txn, waits for confirmation and CSV to expire, then repeat&lt;br/&gt;&amp;gt;&amp;gt; with&lt;br/&gt;&amp;gt;&amp;gt; another second-level txn.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Since the CSVs begin ticking as soon as they are included in the chain,&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; attacker could try to sweep each one immediately after its CSV expires.&lt;br/&gt;&amp;gt;&amp;gt; If the&lt;br/&gt;&amp;gt;&amp;gt; watchtower doesn&amp;#39;t have the ability to sweep outputs independently, it&lt;br/&gt;&amp;gt;&amp;gt; would&lt;br/&gt;&amp;gt;&amp;gt; have no way to intercept this behavior, and prevent the breacher from&lt;br/&gt;&amp;gt;&amp;gt; sweeping&lt;br/&gt;&amp;gt;&amp;gt; individual HTLCs sequentially.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Ah, I thought you wanted to impose some kind of contract on&lt;br/&gt;&amp;gt;&amp;gt; HTLC-timeout/HTLC-success to enforce this behavior, you are referring to a&lt;br/&gt;&amp;gt;&amp;gt; technique that the attacker might attempt to use if we use only a single&lt;br/&gt;&amp;gt;&amp;gt; justice transaction that claims all HTLC outputs.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; 5.  0 or 1 or 2 signatures for the main outputs. These sign a single&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; transaction that claims only the main outputs.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Yes, it seems necessary to separate the commitment outpoints from the&lt;br/&gt;&amp;gt;&amp;gt; HTLC&lt;br/&gt;&amp;gt;&amp;gt; outpoints in case the commitment txn is broadcasted before the CLTVs&lt;br/&gt;&amp;gt;&amp;gt; expire.&lt;br/&gt;&amp;gt;&amp;gt; You could try to batch these with the HTLCs, but then we get back into&lt;br/&gt;&amp;gt;&amp;gt; exponential territory.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Agreed.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Is that approximately what is needed?  Have I missed anything?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Nope, I think your understanding is on point. IMO this seems to be a&lt;br/&gt;&amp;gt;&amp;gt; reasonable&lt;br/&gt;&amp;gt;&amp;gt; compromise of the tradeoffs at hand, and definitely something that could&lt;br/&gt;&amp;gt;&amp;gt; serve&lt;br/&gt;&amp;gt;&amp;gt; as an initial iteration due to its simplicity. In the future, there are definitely&lt;br/&gt;&amp;gt;&amp;gt; ways&lt;br/&gt;&amp;gt;&amp;gt; to improve on this on make it even more efficient! Though having a&lt;br/&gt;&amp;gt;&amp;gt; solid/workable v0 is important if it is to be deployed. I enjoy hearing&lt;br/&gt;&amp;gt;&amp;gt; your&lt;br/&gt;&amp;gt;&amp;gt; thoughts on this, thank you for your responses!&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thank you for this confirmation.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180417/ba5d4ec3/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180417/ba5d4ec3/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:50:11Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszwfg8vacuvz3xlcrsp0el79nlaa3xtpw7mfwz7ak7alrw09a3fhczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv200gp9</id>
    
      <title type="html">📅 Original date posted:2018-04-17 📝 Original message: Good ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszwfg8vacuvz3xlcrsp0el79nlaa3xtpw7mfwz7ak7alrw09a3fhczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv200gp9" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9d773hlu9u2z3ukem5c3cxh3h5hc8zwxd9eqn04v9m8fwlnwspsq47y4py&#39;&gt;nevent1q…y4py&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-04-17&lt;br/&gt;📝 Original message:&lt;br/&gt;Good evening ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;&amp;gt; Also, thank you for the link.&lt;br/&gt;&lt;br/&gt;Definitely! I had to do some digging myself to recover these hidden gems.&lt;br/&gt;&lt;br/&gt;&amp;gt; I understand. It would be good to know what you have, and perhaps consider&lt;br/&gt;&amp;gt; planning a new BOLT document for such.&lt;br/&gt;&lt;br/&gt;Yes, that is the ultimate goal. I think it might be a little to soon to&lt;br/&gt;have a&lt;br/&gt;full-on BOLT spec. There are still some implementation details that we would&lt;br/&gt;like to address before formalizing everything. I am working to have&lt;br/&gt;something&lt;br/&gt;written up in the short-term documenting the approach[es] that ends up being&lt;br/&gt;solidified. Hopefully that can get some eyes during development, and perhaps&lt;br/&gt;serve as working document/rough draft.&lt;br/&gt;&lt;br/&gt;&amp;gt; Sorry, I seem confused this idea.  Can you give example for commitment&lt;br/&gt;with 2x&lt;br/&gt;&amp;gt; HTLC?&lt;br/&gt;&lt;br/&gt;Sure thing! The confirmation of second level HTLC txns can be separated by&lt;br/&gt;arbitrary delays. This is particularly true if the CLTVs have already&lt;br/&gt;expired,&lt;br/&gt;offering an attacker total control over when the txns appear on the&lt;br/&gt;network. One&lt;br/&gt;way this can happen is if the attacker iteratively broadcasts a single&lt;br/&gt;second-level txn, waits for confirmation and CSV to expire, then repeat with&lt;br/&gt;another second-level txn.&lt;br/&gt;&lt;br/&gt;Since the CSVs begin ticking as soon as they are included in the chain, the&lt;br/&gt;attacker could try to sweep each one immediately after its CSV expires. If&lt;br/&gt;the&lt;br/&gt;watchtower doesn&amp;#39;t have the ability to sweep outputs independently, it would&lt;br/&gt;have no way to intercept this behavior, and prevent the breacher from&lt;br/&gt;sweeping&lt;br/&gt;individual HTLCs sequentially.&lt;br/&gt;&lt;br/&gt;&amp;gt; When the commitment txid is found onchain, the WatchTower creates a single&lt;br/&gt;&amp;gt; main output claim transaction using the 1 or 2 signatures for the main&lt;br/&gt;&amp;gt; outputs.  And for each HTLC outpoint on the commitment transaction, if it&lt;br/&gt;gets&lt;br/&gt;&amp;gt; spent, the WatchTower creates one HTLC justice transaction from the&lt;br/&gt;&amp;gt; second-stage HTLC transaction.&lt;br/&gt;&lt;br/&gt;Yes, this is how it would work in context of what I was suggesting.&lt;br/&gt;Certainly,&lt;br/&gt;there are other ways to accomplish the same thing. I don&amp;#39;t wish to claim&lt;br/&gt;that&lt;br/&gt;this is the best solution available, there are a lot of tradeoffs that need&lt;br/&gt;to be evaluated. I&amp;#39;m hoping that you and others can bring any shortcomings&lt;br/&gt;to&lt;br/&gt;light and help us sift through them.&lt;br/&gt;&lt;br/&gt;&amp;gt; 5.  0 or 1 or 2 signatures for the main outputs. These sign a single&lt;br/&gt;&amp;gt; transaction that claims only the main outputs.&lt;br/&gt;&lt;br/&gt;Yes, it seems necessary to separate the commitment outpoints from the HTLC&lt;br/&gt;outpoints in case the commitment txn is broadcasted before the CLTVs expire.&lt;br/&gt;You could try to batch these with the HTLCs, but then we get back into&lt;br/&gt;exponential territory.&lt;br/&gt;&lt;br/&gt;&amp;gt; Is that approximately what is needed?  Have I missed anything?&lt;br/&gt;&lt;br/&gt;Nope, I think your understanding is on point. IMO this seems to be a&lt;br/&gt;reasonable&lt;br/&gt;compromise of the tradeoffs at hand, and definitely something that could&lt;br/&gt;serve&lt;br/&gt;as an initial iteration due to its simplicity. In the future, there&lt;br/&gt;are definitely&lt;br/&gt;ways&lt;br/&gt;to improve on this on make it even more efficient! Though having a&lt;br/&gt;solid/workable v0 is important if it is to be deployed. I enjoy hearing your&lt;br/&gt;thoughts on this, thank you for your responses!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Conner&lt;br/&gt;&lt;br/&gt;On Tue, Apr 17, 2018 at 6:14 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Conner,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt; &amp;gt; Can you describe the &amp;#34;encrypted blob&amp;#34; approach to me? Or point me to&lt;br/&gt;&amp;gt; &amp;gt; materials?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There&amp;#39;s an awesome watchtower thread on the mailing list from 2016 that&lt;br/&gt;&amp;gt; starts&lt;br/&gt;&amp;gt; here [1]. It covers a broader range of possibilities than just the&lt;br/&gt;&amp;gt; encrypted&lt;br/&gt;&amp;gt; blob approach, and also considers other revocation schemes, e.g. elkrem.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Similar to what you described, one encrypted blob approached discussed in&lt;br/&gt;&amp;gt; that thread is:&lt;br/&gt;&amp;gt; 1. hint = tixd[:16]&lt;br/&gt;&amp;gt; 2. blob = Enc(data, txid[16:])&lt;br/&gt;&amp;gt; 3. Send (hint, blob) to watchtower.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Whenever a new block is mined, the watchtower checks if it has an entry&lt;br/&gt;&amp;gt; for each&lt;br/&gt;&amp;gt; txid[:16]. If so, it decrypts using txid[16:], assembles the justice txn,&lt;br/&gt;&amp;gt; and&lt;br/&gt;&amp;gt; broadcasts (assuming the reward output matches what was negotiated).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thank you, that is indeed similar to what I was thinking given the name&lt;br/&gt;&amp;gt; &amp;#34;encrypted blob&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Also, thank you for the link. I have not had much time to back-read&lt;br/&gt;&amp;gt; anything older than 2017 in the archives. I observe that neither Poon nor&lt;br/&gt;&amp;gt; Dryja seem to strongly participate in this list from 2017 onwards.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Do you have a description of the WatchTower protocol used in lnd? It&lt;br/&gt;&amp;gt; may be&lt;br/&gt;&amp;gt; &amp;gt; useful to be intercompatible.&lt;br/&gt;&amp;gt; We don&amp;#39;t have anything written up formally, though what we have currently&lt;br/&gt;&amp;gt; operates on the design above.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I understand. It would be good to know what you have, and perhaps consider&lt;br/&gt;&amp;gt; planning a new BOLT document for such.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Nicolas Dorier mentioned plans for BTCPay to somehow host &amp;#34;merchant&lt;br/&gt;&amp;gt; support networks&amp;#34; where merchants may expose WatchTower endpoints, which&lt;br/&gt;&amp;gt; other merchants may post revocation information for their channels to.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;ll also take this time to brain dump some recent investigations I&amp;#39;ve&lt;br/&gt;&amp;gt; been doing on&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; watchtowers. TL;DR @ fin.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; FWIW, I&amp;#39;ve been thinking about this in the context of the simple encrypted&lt;br/&gt;&amp;gt; blob approach, though the observations can generalize to other schemes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As Laolu mentioned, the storage requirement for the watchtower is&lt;br/&gt;&amp;gt; dominated by&lt;br/&gt;&amp;gt; the number of HTLC signatures included in the encrypted blob. Due to&lt;br/&gt;&amp;gt; independence of the second stage transactions, there is a combinatoric&lt;br/&gt;&amp;gt; blowup in&lt;br/&gt;&amp;gt; the number of signatures that would need to be pre-signed under the&lt;br/&gt;&amp;gt; revocation&lt;br/&gt;&amp;gt; private key _if sweeping of HTLC outputs is batched_.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If we want to batch sweep without more liberal sighash flags, I think we&amp;#39;d&lt;br/&gt;&amp;gt; need to&lt;br/&gt;&amp;gt; pre-sign n*2^n signatures. There are 2^n possible ways that n HTLCs can&lt;br/&gt;&amp;gt; straddle&lt;br/&gt;&amp;gt; the first and second stages, and each permutation would require n distinct&lt;br/&gt;&amp;gt; signatures&lt;br/&gt;&amp;gt; since the set of inputs is unique to each permutation. Needless to say,&lt;br/&gt;&amp;gt; this isn&amp;#39;t feasible&lt;br/&gt;&amp;gt; with the maximum number of HTLCs allowed in the protocol.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, I thought this too.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, I have some observations that might inform an efficient set of&lt;br/&gt;&amp;gt; signatures we can choose to include in the encrypted blobs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The first is that the HTLC timeout or HTLC success transaction _must_ be&lt;br/&gt;&amp;gt; broadcast before the attacker can move funds back into their wallet. If&lt;br/&gt;&amp;gt; these transactions are never mined, it is actually fine to do nothing and&lt;br/&gt;&amp;gt; leave&lt;br/&gt;&amp;gt; those outputs in the breached state.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If/when the victim comes back online, they themselves can sign and&lt;br/&gt;&amp;gt; broadcast&lt;br/&gt;&amp;gt; a justice transaction that executes the revocation clause of either the&lt;br/&gt;&amp;gt; offered or&lt;br/&gt;&amp;gt; received HTLC scripts, based on the observed spentness of the various&lt;br/&gt;&amp;gt; commitment&lt;br/&gt;&amp;gt; HLTC outputs at that time. So, we can save on signature data by only&lt;br/&gt;&amp;gt; requiring the&lt;br/&gt;&amp;gt; watchtower to act if second stage transactions are confirmed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is a good observation!  I initially thought that we would have to&lt;br/&gt;&amp;gt; provide both the first-stage and second-stage revocation signatures.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One reallyyy nice thing about not having the watchtower sweep the HTLC&lt;br/&gt;&amp;gt;  outputs&lt;br/&gt;&amp;gt; on the commitment txn directly is that it doesn&amp;#39;t need to know how to&lt;br/&gt;&amp;gt; reconstruct the more complex HTLC redeem scripts. It only needs to&lt;br/&gt;&amp;gt; reconstruct&lt;br/&gt;&amp;gt; commitment to-local and second-stage to-local scripts and witnesses. This&lt;br/&gt;&amp;gt; means&lt;br/&gt;&amp;gt; the blob primarily contains:&lt;br/&gt;&amp;gt;  - 1 revocation pubkey&lt;br/&gt;&amp;gt;  - 1 local delay pubkey&lt;br/&gt;&amp;gt;  - 1 CSV delay&lt;br/&gt;&amp;gt;  - 2 commitment signatures&lt;br/&gt;&amp;gt;  - n HTLC signatures&lt;br/&gt;&amp;gt; and we don&amp;#39;t have to bother sending CLTVs, local/remote htlc pubkeys, or&lt;br/&gt;&amp;gt; payment hashes at all.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The storage for this ends up being something like ~100 &#43; 64*(2&#43;nhtlcs)&lt;br/&gt;&amp;gt; when you&lt;br/&gt;&amp;gt; include other things like the sweep address.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thank you, that seems like a start at something that can be implemented.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The second observation is that the second stage transactions could be&lt;br/&gt;&amp;gt; broadcast&lt;br/&gt;&amp;gt; sequentially such that the CSV delays don&amp;#39;t overlap at all. In this&lt;br/&gt;&amp;gt; event, the&lt;br/&gt;&amp;gt; watchtower needs to sweep the HTLCs iteratively to prevent the attacker&lt;br/&gt;&amp;gt; from&lt;br/&gt;&amp;gt; sweeping any of the outputs as the relative timelocks expire.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sorry, I seem confused this idea.  Can you give example for commitment&lt;br/&gt;&amp;gt; with 2x HTLC?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One minimal solution could be to send signatures for independent sweep&lt;br/&gt;&amp;gt; transactions, allowing the watchtower to sweep each HTLC output&lt;br/&gt;&amp;gt; individually.&lt;br/&gt;&amp;gt; This is nice because it permits the watchtower to sweep exactly the&lt;br/&gt;&amp;gt; subset of&lt;br/&gt;&amp;gt; HTLCs that ever transition into the second stage, and under any&lt;br/&gt;&amp;gt; permutation&lt;br/&gt;&amp;gt; wrt. ordering of confirmed second stage transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, this seems like a good general idea.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With the single transaction per HTLC approach, the total number of&lt;br/&gt;&amp;gt; signatures that&lt;br/&gt;&amp;gt; are sent to the watchtower remains linear in the number HTLCs on the&lt;br/&gt;&amp;gt; commitment&lt;br/&gt;&amp;gt; transaction. This approach does have the downside of consuming slightly&lt;br/&gt;&amp;gt; more&lt;br/&gt;&amp;gt; fees, since each output is swept with a distinct transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, this approach is fairly efficient in preventing the attacker&lt;br/&gt;&amp;gt; entirely from&lt;br/&gt;&amp;gt; moving funds from the channel into their wallet wrt. to the amount of data&lt;br/&gt;&amp;gt; stored.&lt;br/&gt;&amp;gt; Considering that the majority of the channel balance is expected to be in&lt;br/&gt;&amp;gt; the commitment outputs and that hypothetically on-chains fees are offset&lt;br/&gt;&amp;gt; by the&lt;br/&gt;&amp;gt; remote balance, this could be an acceptable tradeoff.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I suspect that in practice, most second stage transactions will be valid&lt;br/&gt;&amp;gt; by the&lt;br/&gt;&amp;gt; time an attacker would drop to chain. Because of this, it&amp;#39;s possible that&lt;br/&gt;&amp;gt; they&lt;br/&gt;&amp;gt; could be mined in the same block as the breach transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If everything is mined in the same block or in quick succession, it might&lt;br/&gt;&amp;gt; be&lt;br/&gt;&amp;gt; worthwhile to also pre-sign a justice txn that batch sweeps all HTLCs&lt;br/&gt;&amp;gt; directly&lt;br/&gt;&amp;gt; from the second layer, requiring one additional signature/HTLC.&lt;br/&gt;&amp;gt; This could be a plausible scenario if the offender breached&lt;br/&gt;&amp;gt; unintentionally, and&lt;br/&gt;&amp;gt; their implementation tries to proceed normally. However it does require&lt;br/&gt;&amp;gt; all of the&lt;br/&gt;&amp;gt; CSV delays to conincide. If that doesn&amp;#39;t happen, the watchtower can always&lt;br/&gt;&amp;gt; resort to sweeping the outputs individually.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; All in all, I think the ability to sweep each HTLC independently is&lt;br/&gt;&amp;gt; more-or-less&lt;br/&gt;&amp;gt; a requirement just given the complexity of how the on-chain state-space can&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; manifest, especially if CLTVs have already expired. Other scenarios may&lt;br/&gt;&amp;gt; be worth including on a case by case basis or if we feel they are&lt;br/&gt;&amp;gt; justified. This&lt;br/&gt;&amp;gt; could be handled dynamically by including some bitvector or some compact&lt;br/&gt;&amp;gt; representation of how to reconstruct the transactions for any additional,&lt;br/&gt;&amp;gt; included&lt;br/&gt;&amp;gt; signatures.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Okay.  So it seems, the blob contains:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1.  Revocation pubkey (from our revocation basepoint and per-commitment&lt;br/&gt;&amp;gt; basepoint)&lt;br/&gt;&amp;gt; 2.  Their delayed payment pubkey (needed in scripts)&lt;br/&gt;&amp;gt; 3.  Our imposed to_self_delay (the setting we indicate, that we impose on&lt;br/&gt;&amp;gt; the remote side)&lt;br/&gt;&amp;gt; 4.  Our payment pubkey&lt;br/&gt;&amp;gt; 5.  0 or 1 or 2 signatures for the main outputs. These sign a single&lt;br/&gt;&amp;gt; transaction that claims only the main outputs.&lt;br/&gt;&amp;gt; 6.  0 or more second-stage HTLC revocation signatures.  These sign&lt;br/&gt;&amp;gt; individual transactions (one per HTLC) that claims only the second-stage&lt;br/&gt;&amp;gt; HTLC output.&lt;br/&gt;&amp;gt; 7.  scriptpubkey to put all the funds in.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; When the commitment txid is found onchain, the WatchTower creates a single&lt;br/&gt;&amp;gt; main output claim transaction using the 1 or 2 signatures for the main&lt;br/&gt;&amp;gt; outputs.  And for each HTLC outpoint on the commitment transaction, if it&lt;br/&gt;&amp;gt; gets spent, the WatchTower creates one HTLC justice transaction from the&lt;br/&gt;&amp;gt; second-stage HTLC transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Is that approximately what is needed?  Have I missed anything?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180417/873b48e1/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180417/873b48e1/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:50:10Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsryg585l2l6f4gl3avkuwgqzj53d9l6455z9szkq5jm6hf6w45l7szyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvyrenm6</id>
    
      <title type="html">📅 Original date posted:2018-04-17 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsryg585l2l6f4gl3avkuwgqzj53d9l6455z9szkq5jm6hf6w45l7szyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvyrenm6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqst69kyfz9yen3yzv698pv3retj682h2rv0d9l49ht3y4ep8gf302cvutj7p&#39;&gt;nevent1q…tj7p&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-04-17&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;&amp;gt; Can you describe the &amp;#34;encrypted blob&amp;#34; approach to me? Or point me to&lt;br/&gt;&amp;gt; materials?&lt;br/&gt;&lt;br/&gt;There&amp;#39;s an awesome watchtower thread on the mailing list from 2016 that&lt;br/&gt;starts&lt;br/&gt;here [1]. It covers a broader range of possibilities than just the encrypted&lt;br/&gt;blob approach, and also considers other revocation schemes, e.g. elkrem.&lt;br/&gt;&lt;br/&gt;Similar to what you described, one encrypted blob approached discussed in&lt;br/&gt;that thread is:&lt;br/&gt;1. hint = tixd[:16]&lt;br/&gt;2. blob = Enc(data, txid[16:])&lt;br/&gt;3. Send (hint, blob) to watchtower.&lt;br/&gt;&lt;br/&gt;Whenever a new block is mined, the watchtower checks if it has an entry for&lt;br/&gt;each&lt;br/&gt;txid[:16]. If so, it decrypts using txid[16:], assembles the justice txn,&lt;br/&gt;and&lt;br/&gt;broadcasts (assuming the reward output matches what was negotiated).&lt;br/&gt;&lt;br/&gt;&amp;gt; Do you have a description of the WatchTower protocol used in lnd? It may&lt;br/&gt;be&lt;br/&gt;&amp;gt; useful to be intercompatible.&lt;br/&gt;&lt;br/&gt;We don&amp;#39;t have anything written up formally, though what we have currently&lt;br/&gt;operates on the design above.&lt;br/&gt;&lt;br/&gt;There are more complex proposals discussed allowing an encrypted blob to&lt;br/&gt;reference data stored in a prior encrypted blob. Primary advantage would be&lt;br/&gt;reducing the storage costs of HTLCs present on multiple successive&lt;br/&gt;commitment transactions; primary disadvantage is that it&amp;#39;s significantly&lt;br/&gt;more&lt;br/&gt;complex, in addition to the other points brought up by Laolu.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not positive as to the extent this approach was implemented/fleshed&lt;br/&gt;out, or&lt;br/&gt;if any other pros/cons may have been realized in the process. I haven&amp;#39;t done&lt;br/&gt;nearly as much research as Tadge on that front, he&amp;#39;s probably got some&lt;br/&gt;extensive thoughts on the tradeoffs.&lt;br/&gt;&lt;br/&gt;=======&lt;br/&gt;&lt;br/&gt;I&amp;#39;ll also take this time to brain dump some recent investigations I&amp;#39;ve been&lt;br/&gt;doing on&lt;br/&gt;watchtowers. TL;DR @ fin.&lt;br/&gt;&lt;br/&gt;FWIW, I&amp;#39;ve been thinking about this in the context of the simple encrypted&lt;br/&gt;blob approach, though the observations can generalize to other schemes.&lt;br/&gt;&lt;br/&gt;As Laolu mentioned, the storage requirement for the watchtower is dominated&lt;br/&gt;by&lt;br/&gt;the number of HTLC signatures included in the encrypted blob. Due to&lt;br/&gt;independence of the second stage transactions, there is a combinatoric&lt;br/&gt;blowup in&lt;br/&gt;the number of signatures that would need to be pre-signed under the&lt;br/&gt;revocation&lt;br/&gt;private key _if sweeping of HTLC outputs is batched_.&lt;br/&gt;&lt;br/&gt;If we want to batch sweep without more liberal sighash flags, I think we&amp;#39;d&lt;br/&gt;need to&lt;br/&gt;pre-sign n*2^n signatures. There are 2^n possible ways that n HTLCs can&lt;br/&gt;straddle&lt;br/&gt;the first and second stages, and each permutation would require n distinct&lt;br/&gt;signatures&lt;br/&gt;since the set of inputs is unique to each permutation. Needless to say,&lt;br/&gt;this isn&amp;#39;t feasible&lt;br/&gt;with the maximum number of HTLCs allowed in the protocol.&lt;br/&gt;&lt;br/&gt;However, I have some observations that might inform an efficient set of&lt;br/&gt;signatures we can choose to include in the encrypted blobs.&lt;br/&gt;&lt;br/&gt;The first is that the HTLC timeout or HTLC success transaction _must_ be&lt;br/&gt;broadcast before the attacker can move funds back into their wallet. If&lt;br/&gt;these transactions are never mined, it is actually fine to do nothing and&lt;br/&gt;leave&lt;br/&gt;those outputs in the breached state.&lt;br/&gt;&lt;br/&gt;If/when the victim comes back online, they themselves can sign and broadcast&lt;br/&gt;a justice transaction that executes the revocation clause of either the&lt;br/&gt;offered or&lt;br/&gt;received HTLC scripts, based on the observed spentness of the various&lt;br/&gt;commitment&lt;br/&gt;HLTC outputs at that time. So, we can save on signature data by only&lt;br/&gt;requiring the&lt;br/&gt;watchtower to act if second stage transactions are confirmed.&lt;br/&gt;&lt;br/&gt;One reallyyy nice thing about not having the watchtower sweep the HTLC&lt;br/&gt; outputs&lt;br/&gt;on the commitment txn directly is that it doesn&amp;#39;t need to know how to&lt;br/&gt;reconstruct the more complex HTLC redeem scripts. It only needs to&lt;br/&gt;reconstruct&lt;br/&gt;commitment to-local and second-stage to-local scripts and witnesses. This&lt;br/&gt;means&lt;br/&gt;the blob primarily contains:&lt;br/&gt; - 1 revocation pubkey&lt;br/&gt; - 1 local delay pubkey&lt;br/&gt; - 1 CSV delay&lt;br/&gt; - 2 commitment signatures&lt;br/&gt; - n HTLC signatures&lt;br/&gt;and we don&amp;#39;t have to bother sending CLTVs, local/remote htlc pubkeys, or&lt;br/&gt;payment hashes at all.&lt;br/&gt;&lt;br/&gt;The storage for this ends up being something like ~100 &#43; 64*(2&#43;nhtlcs) when&lt;br/&gt;you&lt;br/&gt;include other things like the sweep address.&lt;br/&gt;&lt;br/&gt;The second observation is that the second stage transactions could be&lt;br/&gt;broadcast&lt;br/&gt;sequentially such that the CSV delays don&amp;#39;t overlap at all. In this event,&lt;br/&gt;the&lt;br/&gt;watchtower needs to sweep the HTLCs iteratively to prevent the attacker from&lt;br/&gt;sweeping any of the outputs as the relative timelocks expire.&lt;br/&gt;&lt;br/&gt;One minimal solution could be to send signatures for independent sweep&lt;br/&gt;transactions, allowing the watchtower to sweep each HTLC output&lt;br/&gt;individually.&lt;br/&gt;This is nice because it permits the watchtower to sweep exactly the subset&lt;br/&gt;of&lt;br/&gt;HTLCs that ever transition into the second stage, and under any permutation&lt;br/&gt;wrt. ordering of confirmed second stage transactions.&lt;br/&gt;&lt;br/&gt;With the single transaction per HTLC approach, the total number of&lt;br/&gt;signatures that&lt;br/&gt;are sent to the watchtower remains linear in the number HTLCs on the&lt;br/&gt;commitment&lt;br/&gt;transaction. This approach does have the downside of consuming slightly more&lt;br/&gt;fees, since each output is swept with a distinct transaction.&lt;br/&gt;&lt;br/&gt;However, this approach is fairly efficient in preventing the attacker&lt;br/&gt;entirely from&lt;br/&gt;moving funds from the channel into their wallet wrt. to the amount of data&lt;br/&gt;stored.&lt;br/&gt;Considering that the majority of the channel balance is expected to be in&lt;br/&gt;the commitment outputs and that hypothetically on-chains fees are offset by&lt;br/&gt;the&lt;br/&gt;remote balance, this could be an acceptable tradeoff.&lt;br/&gt;&lt;br/&gt;I suspect that in practice, most second stage transactions will be valid by&lt;br/&gt;the&lt;br/&gt;time an attacker would drop to chain. Because of this, it&amp;#39;s possible that&lt;br/&gt;they&lt;br/&gt;could be mined in the same block as the breach transaction.&lt;br/&gt;&lt;br/&gt;If everything is mined in the same block or in quick succession, it might be&lt;br/&gt;worthwhile to also pre-sign a justice txn that batch sweeps all HTLCs&lt;br/&gt;directly&lt;br/&gt;from the second layer, requiring one additional signature/HTLC.&lt;br/&gt;&lt;br/&gt;This could be a plausible scenario if the offender breached&lt;br/&gt;unintentionally, and&lt;br/&gt;their implementation tries to proceed normally. However it does require all&lt;br/&gt;of the&lt;br/&gt;CSV delays to conincide. If that doesn&amp;#39;t happen, the watchtower can always&lt;br/&gt;resort to sweeping the outputs individually.&lt;br/&gt;&lt;br/&gt;All in all, I think the ability to sweep each HTLC independently is&lt;br/&gt;more-or-less&lt;br/&gt;a requirement just given the complexity of how the on-chain state-space can&lt;br/&gt;manifest, especially if CLTVs have already expired. Other scenarios may&lt;br/&gt;be worth including on a case by case basis or if we feel they are&lt;br/&gt;justified. This&lt;br/&gt;could be handled dynamically by including some bitvector or some compact&lt;br/&gt;representation of how to reconstruct the transactions for any additional,&lt;br/&gt;included&lt;br/&gt;signatures.&lt;br/&gt;&lt;br/&gt;TL;DR: We can get away with just sweeping the second stage outputs. Sweeping&lt;br/&gt;each in a distinct txn avoids combinatoric blowup of trying to batch the&lt;br/&gt;sweeps. The&lt;br/&gt;storage is linear in the number of HTLC outputs, and also reduces the data&lt;br/&gt;required&lt;br/&gt;to reconstruct the individual redeem scripts.&lt;br/&gt;&lt;br/&gt;Any feedback or additional insights would be greatly appreciated! Let me&lt;br/&gt;know if&lt;br/&gt;I&amp;#39;ve overlooked anything critical :)&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev&lt;/a&gt;&lt;br/&gt;/2016-August/000565.html&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Mon, Apr 16, 2018 at 11:30 PM ZmnSCPxj via Lightning-dev &amp;lt;&lt;br/&gt;lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Laolu,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; It seems to me, that the only safe way to implement a trustless&lt;br/&gt;&amp;gt; WatchTower,&lt;br/&gt;&amp;gt; &amp;gt; is for the node to generate a fully-signed justice transaction,&lt;br/&gt;&amp;gt; IMMEDIATELY&lt;br/&gt;&amp;gt; &amp;gt; after every commitment transaction is revoked, and transmit it to the&lt;br/&gt;&amp;gt; &amp;gt; WatchTower.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; No, one doesn&amp;#39;t need to transmit the entire justice transaction. Instead,&lt;br/&gt;&amp;gt; the client simply sends out the latest items in the script template, and a&lt;br/&gt;&amp;gt; series of _signatures_ for the various breach outputs. The pre-generated&lt;br/&gt;&amp;gt; signature means that the server is *forced* to reproduce the justice&lt;br/&gt;&amp;gt; transaction that satisfies the latest template and signature. Upfront, free&lt;br/&gt;&amp;gt; parameters such as breach bonus (or w/e else) can be negotiated.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thank you, I understand.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As a result of these downside, our current implementation goes back to the&lt;br/&gt;&amp;gt; ol&amp;#39; &amp;#34;encrypted blob&amp;#34; approach. One immediate benefit with this approach is&lt;br/&gt;&amp;gt; that the outsourcing protocol isn&amp;#39;t so coupled with the current _commitment&lt;br/&gt;&amp;gt; protocol_. Instead, the internal payload can be typed, allowing the server&lt;br/&gt;&amp;gt; to dispatch the proper breach protocol based on the commitment type. The&lt;br/&gt;&amp;gt; blob approach can also support a &amp;#34;swap&amp;#34; protocol which is required for&lt;br/&gt;&amp;gt; commitment designs that allow for O(1) outsourcer state per-client, like&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; scheme I presented at the last Scaling Bitcoin.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Can you describe the &amp;#34;encrypted blob&amp;#34; approach to me? Or point me to&lt;br/&gt;&amp;gt; materials?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I imagine that in this case, the protected node hands a (txid, blob) pair&lt;br/&gt;&amp;gt; to the WatchTower.  If the WatchTower sees a transaction that matches the&lt;br/&gt;&amp;gt; given txid, it gets some information from the actual transaction to decrypt&lt;br/&gt;&amp;gt; the blob (e.g. use the encrypted commitment index in `nLockTime` and&lt;br/&gt;&amp;gt; `nSequence` as a decryption key); the blob is the justice transaction (or&lt;br/&gt;&amp;gt; just a template type and its signatures as you describe above).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Do you have a description of the WatchTower protocol used in lnd? It may&lt;br/&gt;&amp;gt; be useful to be intercompatible.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180417/0da51a71/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180417/0da51a71/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:50:08Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvxp47ghtsx8czyy757el6rjx33najra34zjkxr9hdz3zrh0s57eczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv6cjtes</id>
    
      <title type="html">📅 Original date posted:2018-02-13 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvxp47ghtsx8czyy757el6rjx33najra34zjkxr9hdz3zrh0s57eczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv6cjtes" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgzpaumz2d0plh4lxuckute23j6zcx7mc0h26xv8g00emwfstxjgcwdhu6m&#39;&gt;nevent1q…hu6m&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-02-13&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi everyone,&lt;br/&gt;&lt;br/&gt;I&amp;#39;ve seen some discussions over losing proofs of payment in the AMP setting,&lt;br/&gt;and wanted to address some lingering concerns I have regarding the&lt;br/&gt;soundness of using the current invoicing system to prove payments.&lt;br/&gt;&lt;br/&gt;In general, I think we are ascribing too much weight to simply having a&lt;br/&gt;preimage and BOLT 11 invoice. The structure of non-interactive payments&lt;br/&gt;definitely poses some interesting challenges in adapting the existing&lt;br/&gt;invoicing&lt;br/&gt;scheme. However, I believe there exist stronger and better means of doing&lt;br/&gt;proofs of payment, and would prefer not to tie our hands by assuming&lt;br/&gt;this is the best way to approach the problem.&lt;br/&gt;&lt;br/&gt;IMHO, the current signed invoice &#43; preimage is a very weak proof of payment.&lt;br/&gt;It&amp;#39;s the hash equivalent to proving you own a public key by publishing the&lt;br/&gt;secret key. There is an assumption that the only way someone could get that&lt;br/&gt;preimage is by having made a payment, but this assumption is broken most&lt;br/&gt;directly by the proving mechanism. Similarly, any intermediary who acquires&lt;br/&gt;an invoice with the appropriate hash could also make this claim since they&lt;br/&gt;also have the preimage.&lt;br/&gt;&lt;br/&gt;Further, I think it&amp;#39;s a mistake to conflate&lt;br/&gt;  1) me being able to present a valid preimage/invoice pair, with&lt;br/&gt;  2) me having received the correct preimage in response to an onion packet&lt;br/&gt;    that I personally crafted for the receiving node in the invoice.&lt;br/&gt;&lt;br/&gt;The main issue is that the proof does not bind a specific sender,&lt;br/&gt;making statement 1 producible by multiple individuals. I think it would be&lt;br/&gt;potentially worthwhile to explore proofs of stronger statements, such as 2,&lt;br/&gt;that could utilize the ephemeral keys in the onion packets, or even the&lt;br/&gt;onion as a witness, which is more rigidly coupled to having actually&lt;br/&gt;completed a payment.&lt;br/&gt;&lt;br/&gt;Without any modification to the spec, we can always use something like&lt;br/&gt;ZKBoo to prove (w/o trusted setup) knowledge of a preimage without&lt;br/&gt;totally revealing it to the verifier. This isn&amp;#39;t perfect, but at least&lt;br/&gt;gives the&lt;br/&gt;sender the option to prove the statement without necessarily giving up&lt;br/&gt;the preimage.&lt;br/&gt;&lt;br/&gt;TL;DR: I&amp;#39;m not convinced the signed invoice &#43; hash is really a good&lt;br/&gt;yardstick&lt;br/&gt;by which to measure provability, and I think doing some research into proofs&lt;br/&gt;of payment on stronger statements would be incredibly valuable. Therefore,&lt;br/&gt;I&amp;#39;m not sure if AMPs really lose this, so much as force us to reconsider&lt;br/&gt;what it actually requires to soundly prove a payment to an external&lt;br/&gt;verifier.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Conner&lt;br/&gt;&lt;br/&gt;On Mon, Feb 12, 2018 at 6:56 PM ZmnSCPxj via Lightning-dev &amp;lt;&lt;br/&gt;lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Christian and Corne,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Another idea to consider, is techniques like ZKCP and ZKCSP, which provide&lt;br/&gt;&amp;gt; atomic access to information in exchange for monetary compensation.&lt;br/&gt;&amp;gt; Ensuring atomicity of the exchange can be done by providing the information&lt;br/&gt;&amp;gt; encrypted, a hash of the encryption key, and proofs that the encrypted data&lt;br/&gt;&amp;gt; is the one desired and that the data was encrypted with the given key; the&lt;br/&gt;&amp;gt; proof-of-payment is the encryption key, and possession of the encryption&lt;br/&gt;&amp;gt; key is sufficient to gain access to the information, with no need to bring&lt;br/&gt;&amp;gt; in legal structures.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (admittedly, ZKCP and ZKCSP are dependent on new cryptography...)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (also, AMP currently cannot provide a proof-of-payment, unlike current&lt;br/&gt;&amp;gt; payment routing that has proof-of-payment, but that is an eventual design&lt;br/&gt;&amp;gt; goal that would enable use of ZKC(S)P on-Lightning, assuming we eventually&lt;br/&gt;&amp;gt; find out that zk-SNARKs and so on are something we can trust)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ​&lt;br/&gt;&amp;gt; Sent with ProtonMail Secure Email.&lt;br/&gt;&amp;gt; ​&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -------- Original Message --------&lt;br/&gt;&amp;gt;  On February 13, 2018 2:05 AM, Christian Decker &amp;lt;&lt;br/&gt;&amp;gt; decker.christian at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;Honestly I don&amp;#39;t get why we are complicating this so much. We have a&lt;br/&gt;&amp;gt; &amp;gt; system that allows atomic multipath payments using a single secret, and&lt;br/&gt;&amp;gt; &amp;gt; future decorrelation mechanisms allow us to vary the secret in such a&lt;br/&gt;&amp;gt; &amp;gt; way that multiple paths cannot be collated, why introduce a whole set of&lt;br/&gt;&amp;gt; &amp;gt; problems by giving away the atomicity? The same goes for the overpaying&lt;br/&gt;&amp;gt; &amp;gt; and trusting the recipient to only claim the owed amount, there is no&lt;br/&gt;&amp;gt; &amp;gt; need for this. Just pay the exact amount, by deriving secrets from the&lt;br/&gt;&amp;gt; &amp;gt; main secret and make the derivation reproducible by intermediate hops.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Having proof-of-payment be presentable in a court is a nice feature, but&lt;br/&gt;&amp;gt; &amp;gt; it doesn&amp;#39;t mean we need to abandon all guarantees we have worked so hard&lt;br/&gt;&amp;gt; &amp;gt; to establish in LN.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Corné Plooy via Lightning-dev lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt;writes:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;I was thinking that, for that use case, a different signed invoice could&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; be formulated, stating&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - several payment hashes with their corresponding amounts&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - the obligation of signer to deliver Z if all corresponding payment&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; keys are shown&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - some terms to handle the case where only a part of the payments was&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; successful, e.g. an obligation to refund&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;The third item is a bit problematic: in order to distinguish this case&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; from a complete success, the payee would have to prove absence of&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; successful transactions, which is hard. Absence of successful&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; transactions can only be declared by the payer, so in order to reliably&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; settle without going to court first, the payer should sign a&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; declaration stating that certain transactions were canceled and that the&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; other ones should be refunded. This can be another invoice.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;So, the original invoice states:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - several payment hashes with their corresponding amounts&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - if all corresponding payment keys are shown: the obligation of &amp;lt;payee&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; to deliver Z, UNLESS stated otherwise by an invoice signed by &amp;lt;payer&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;-- signed by &amp;lt;payee&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;But if a payment partially fails, it can be refunded cooperatively with&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; an invoice created by payer:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - declares which of the original payments were successful (with payment&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; keys) and which were not&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - replaces the obligation of &amp;lt;payee&amp;gt; to deliver Z with an obligation to&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; refund the successful transactions&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - several payment hashes with their corresponding amounts&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - if all corresponding payment keys are shown: cancel the obligation of&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; &amp;lt;payee&amp;gt; to refund&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;-- signed by &amp;lt;payer&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;Maybe this can be repeated iteratively if necessary; hopefully the&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; not-yet-settled amount will converge to zero.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;Important advantage: this only requires changes to the invoice format,&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; not to the network protocol.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;The point is: in this use case, the court is apparently the final point&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; of settlement for invoices, just like the blockchain is for the other&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; channels in the route. IANAL, but I think the &amp;#34;scripting language&amp;#34;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; accepted by courts is quite flexible, and you can use that to enforce&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; atomicity. With the construction described above, you can either refund&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; cooperatively (and collect evidence that refund has happened), or, if&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; that fails, go to court to enforce settlement there.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;CJP&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;Op 12-02-18 om 10:23 schreef Christian Decker:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;CJP cjp at ultimatestunts.nl writes:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;Can you give a use case for this?&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;Usually, especially in the common case that a payment is done in&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; exchange for some non-cryptographic asset (e.g. physical goods), there&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; already is some kind of trust between payer and payee. So, if a&lt;br/&gt;&amp;gt; payment&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; is split non-atomically into smaller transactions, and only a part&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; succeeds, presumably they can cooperatively figure out some way to&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; settle the situation.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; The scenario that is commonly used in these cases is a merchant that&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; provides a signed invoice &amp;#34;if you pay me X with payment_hash Y I will&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; deliver Z&amp;#34;. Now the user performs the payment, learns the payment_key&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; matching the payment_hash, but the merchant refuses to deliver,&lt;br/&gt;&amp;gt; claiming&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; it didn&amp;#39;t get the payment. Now the user can go to a court, present the&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; invoice signed by the merchant, and the proof-of-payment, and force&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; merchant to honor its commitment.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;Lightning-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;Lightning-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;Lightning-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt;Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt;&lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180213/361f3c65/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180213/361f3c65/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:49:05Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrt38aws57jttgf563zh0lthppqdca3s3mc8k9uv4scf6cv5mnlzczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvyjvecx</id>
    
      <title type="html">📅 Original date posted:2018-02-07 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrt38aws57jttgf563zh0lthppqdca3s3mc8k9uv4scf6cv5mnlzczyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvyjvecx" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxv8625qkp90jffppqaysyqj3lw793p32rzpg8rapga05urx8k4fckw7pfg&#39;&gt;nevent1q…7pfg&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-02-07&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi ZmnSCPxj and Laolu,&lt;br/&gt;&lt;br/&gt;&amp;gt;  Indeed, the existence of per-hop fees (`fee_base_msat`) means, splitting&lt;br/&gt;the&lt;br/&gt;&amp;gt;  payment over multiple flows will be, very likely, more expensive,&lt;br/&gt;compared to&lt;br/&gt;&amp;gt;  using a single flow.&lt;br/&gt;&lt;br/&gt;As Laolu pointed out, we have yet to see how fees evolve on mainnet or what&lt;br/&gt;will&lt;br/&gt;emerge as a sane, default fee schedules. I agree that if the same&lt;br/&gt;proportional&lt;br/&gt;fee is used across all partial payments, then it could certainly be more&lt;br/&gt;expensive.&lt;br/&gt;&lt;br/&gt;However, it could also be the case that you were paying a needlessly high&lt;br/&gt;proportional fee to begin with, because paths of sufficient capacity to the&lt;br/&gt;destination were scarce. In an AMP world, there will be an abundance of&lt;br/&gt;channels&lt;br/&gt;that can route small, partial payments, which may itself drive down the&lt;br/&gt;competitive fee rate for smaller payments. Just a hypothesis, we shall see&lt;br/&gt;where&lt;br/&gt;supply meets demand!&lt;br/&gt;&lt;br/&gt;At the end of the day, the user can always fall back to regular payment if&lt;br/&gt;they&lt;br/&gt;expect to end up paying more fees using an AMP.&lt;br/&gt;&lt;br/&gt;&amp;gt; (If we want to support multiple routes converging to an intermediate node,&lt;br/&gt;&amp;gt; then continue routing to a different final node after routes have merged&lt;br/&gt;(i.e.&lt;br/&gt;&amp;gt; A-&amp;gt;B-&amp;gt;C-&amp;gt;D, and A-&amp;gt;E-&amp;gt;C-&amp;gt;D, with the payment being merged by C, who&lt;br/&gt;forwards&lt;br/&gt;&amp;gt; the combination to D), then we need to follow the current hop data&lt;br/&gt;format, but&lt;br/&gt;&amp;gt; I think supporting AMP at final payees is actually enough...&lt;br/&gt;&lt;br/&gt;I think this is an interesting idea, sounds maybe like a&lt;br/&gt;recursive/hierarchical&lt;br/&gt;AMP? The ability to merge the payments seems like it would result in a&lt;br/&gt;decent privacy&lt;br/&gt;leak, as I believe an intermediary would have enough evidence to prove that&lt;br/&gt;two&lt;br/&gt;payments were merged/correlated. Simple traffic analysis would also reveal a&lt;br/&gt;discrepancy in the number of incoming and outgoing packets, and possibly&lt;br/&gt;other&lt;br/&gt;observable differences in routing (some) AMPs vs regular payments.&lt;br/&gt;&lt;br/&gt;FWIW the current proposal allows the paths of partial payments to overlap,&lt;br/&gt;in such a scenario C would just forward the HTLCs independently. One could&lt;br/&gt;send&lt;br/&gt;them all along the same path if they desired! I&amp;#39;m assuming the intent here&lt;br/&gt;is to&lt;br/&gt;try and reduce total fees?&lt;br/&gt;&lt;br/&gt;Minor correction^2:&lt;br/&gt;&lt;br/&gt;&amp;gt; This should actually be (H(s_0 || s_1 || ...), s_i).&lt;br/&gt;&lt;br/&gt;This assumes the receiver knows the indexes of each share. Without this&lt;br/&gt;knowledge they would have to brute force all orderings to check the&lt;br/&gt;fingerprint.&lt;br/&gt;&lt;br/&gt;To maintain order invariance on the receiving end, I would propose sending&lt;br/&gt;(0, s_i) for the first n-1 partial payments, and then (n, s_i) on the final&lt;br/&gt;one.&lt;br/&gt;As in the description of the basic AMP scheme, the receiver maintains a&lt;br/&gt;persistent count of how many partial payments have been received for ID. If&lt;br/&gt;the&lt;br/&gt;receiver does not get the last payment last, the receiver just waits until&lt;br/&gt;all n&lt;br/&gt;have been received before deciding that its reconstructed value is BP.&lt;br/&gt;&lt;br/&gt;The receiver can verify they&amp;#39;ve received the correct BP and n by rederiving&lt;br/&gt;the&lt;br/&gt;partial preimages r_i = H(BP || i) and checking that there are n outstanding&lt;br/&gt;payments, one for each h_i = H(r_i). This also saves the receiving node n&lt;br/&gt;additional hash invocations.&lt;br/&gt;&lt;br/&gt;-Conner&lt;br/&gt;&lt;br/&gt;On Tue, Feb 6, 2018 at 4:04 PM Olaoluwa Osuntokun &amp;lt;laolu32 at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This is excellent work!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I think, a `globalfeatures` odd bit could be used for this.  As it is&lt;br/&gt;&amp;gt; &amp;gt; end-ot-end, `localfeatures` is not appropriate.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yep, it would need to be a global feature bit. In the case that we&amp;#39;re&lt;br/&gt;&amp;gt; sending to a destination which isn&amp;#39;t publicly advertised, then perhaps an&lt;br/&gt;&amp;gt; extension to BOLT-11 could be made to signal receiver support.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I believe, currently, fees have not this super-linear component&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yep they don&amp;#39;t. Arguably, we should also have a component that scales&lt;br/&gt;&amp;gt; according to the proposed CLTV value of the outgoing HTLC. At Scaling&lt;br/&gt;&amp;gt; Bitcoin Stanford, Aviv Zohar gave a talked titled &amp;#34;How to Charge Lightning&amp;#34;&lt;br/&gt;&amp;gt; where the authors analyzed the possible evolution of fees on the network&lt;br/&gt;&amp;gt; (and also suggested adding this super-linear component to extend the&lt;br/&gt;&amp;gt; lifetime of channels).  However, the talk itself focused on a very simple&lt;br/&gt;&amp;gt; &amp;#34;mega super duper hub&amp;#34; topology. Towards the end he alluded to a&lt;br/&gt;&amp;gt; forthcoming&lt;br/&gt;&amp;gt; paper that had more comprehensive analysis of more complex topologies. I&lt;br/&gt;&amp;gt; look forward to the publication of their finalized work.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Indeed, the existence of per-hop fees (`fee_base_msat`) means, splitting&lt;br/&gt;&amp;gt; &amp;gt; the payment over multiple flows will be, very likely, more expensive,&lt;br/&gt;&amp;gt; &amp;gt; compared to using a single flow.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Well it&amp;#39;s still to be seen how the fee structure on mainnet emerges once&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; network is still fully bootstrapped. AFAIK, most running on mainnet atm are&lt;br/&gt;&amp;gt; using the default fee schedules for their respective implementations. For&lt;br/&gt;&amp;gt; example, the default fee_base_msat for lnd is 1000 msat (1 satoshi).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I believe the `realm` byte is intended for this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The realm byte is meant to signal &amp;#34;forward this to the dogecoin channel&amp;#34;.&lt;br/&gt;&amp;gt; ATM, we just default to 0 as &amp;#34;Bitcoin&amp;#34;. However, the byte itself only&lt;br/&gt;&amp;gt; really&lt;br/&gt;&amp;gt; need significance between the sender and the intermediate node. So there&lt;br/&gt;&amp;gt; isn&amp;#39;t necessarily pressure to have a globally synchronized set of realm&lt;br/&gt;&amp;gt; bytes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Thus, you can route over nodes that are unaware of AMP, and only provide&lt;br/&gt;&amp;gt; &amp;gt; an AMP realm byte to the destination node, who, is able to reconstruct&lt;br/&gt;&amp;gt; this&lt;br/&gt;&amp;gt; &amp;gt; your AMP data as per your algorithm.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, the intermediate nodes don&amp;#39;t need to be aware of the end-to-end&lt;br/&gt;&amp;gt; protocol. For the final hop, there are actually 53 free bytes (before one&lt;br/&gt;&amp;gt; needs to signal the existence of EOBs):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   * 1 byte realm&lt;br/&gt;&amp;gt;   * 8 bytes next addr (all zeroes to signal final dest)&lt;br/&gt;&amp;gt;   * 32 bytes hmac (also all zeroes for the final dest)&lt;br/&gt;&amp;gt;   * 12 bytes padding&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So any combo of these bytes can be used to signal more advanced protocols&lt;br/&gt;&amp;gt; to&lt;br/&gt;&amp;gt; the final destination.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A correction from the prior email description:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; We can further modify our usage of the per-hop payloads to send&lt;br/&gt;&amp;gt; &amp;gt; (H(BP), s_i) to consume most of the EOB sent from sender to receiver.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This should actually be (H(s_0 || s_1 || ...), s_i). So we still allow them&lt;br/&gt;&amp;gt; to check this finger print to see if they have all the final shares, but&lt;br/&gt;&amp;gt; don&amp;#39;t allow them to preemptively pull all the payments.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -- Laolu&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Mon, Feb 5, 2018 at 11:12 PM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Good morning Laolu,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This is excellent work!&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Some minor comments...&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; (Atomic Multi-path Payments). It can be experimented with on Lightning&lt;br/&gt;&amp;gt;&amp;gt; *today* with the addition of a new feature bit to gate this new&lt;br/&gt;&amp;gt;&amp;gt; feature. The beauty of the scheme is that it requires no fundamental&lt;br/&gt;&amp;gt;&amp;gt; changes&lt;br/&gt;&amp;gt;&amp;gt; to the protocol as is now, as the negotiation is strictly *end-to-end*&lt;br/&gt;&amp;gt;&amp;gt; between sender and receiver.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think, a `globalfeatures` odd bit could be used for this.  As it is&lt;br/&gt;&amp;gt;&amp;gt; end-ot-end, `localfeatures` is not appropriate.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   - Potential fee savings for larger payments, contingent on there being a&lt;br/&gt;&amp;gt;&amp;gt;     super-linear component to routed fees. It&amp;#39;s possible that with&lt;br/&gt;&amp;gt;&amp;gt;     modifications to the fee schedule, it&amp;#39;s actually *cheaper* to send&lt;br/&gt;&amp;gt;&amp;gt;     payments over multiple flows rather than one giant flow.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I believe, currently, fees have not this super-linear component.  Indeed,&lt;br/&gt;&amp;gt;&amp;gt; the existence of per-hop fees (`fee_base_msat`) means, splitting the&lt;br/&gt;&amp;gt;&amp;gt; payment over multiple flows will be, very likely, more expensive, compared&lt;br/&gt;&amp;gt;&amp;gt; to using a single flow.  Tiny roundoffs in computing the proportional fees&lt;br/&gt;&amp;gt;&amp;gt; (`fee_proportional_millionths`) may make smaller flows give a slight fee&lt;br/&gt;&amp;gt;&amp;gt; advantage, but I think the multiplication of per-hop fees will dominate.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   - Using smaller payments increases the set of possible paths a partial&lt;br/&gt;&amp;gt;&amp;gt;     payment could have taken, which reduces the effectiveness of static&lt;br/&gt;&amp;gt;&amp;gt;     analysis techniques involving channel capacities and the plaintext&lt;br/&gt;&amp;gt;&amp;gt;     values being forwarded.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Strongly agree!&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In order to include the three tuple within the per-hop payload for the&lt;br/&gt;&amp;gt;&amp;gt; final&lt;br/&gt;&amp;gt;&amp;gt; destination, we repurpose the _first_ byte of the un-used padding bytes in&lt;br/&gt;&amp;gt;&amp;gt; the payload to signal version 0x01 of the AMP protocol (note this is a PoC&lt;br/&gt;&amp;gt;&amp;gt; outline, we would need to standardize signalling of these 12 bytes to&lt;br/&gt;&amp;gt;&amp;gt; support other protocols).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I believe the `realm` byte is intended for this.  Intermediate nodes do&lt;br/&gt;&amp;gt;&amp;gt; not need to understand realm bytes that are understood by other nodes in&lt;br/&gt;&amp;gt;&amp;gt; the route, including the realm bytes understood by the final destination,&lt;br/&gt;&amp;gt;&amp;gt; as intermediate nodes cannot, indeed, read the hop data of other nodes.&lt;br/&gt;&amp;gt;&amp;gt; Thus, you can route over nodes that are unaware of AMP, and only provide an&lt;br/&gt;&amp;gt;&amp;gt; AMP realm byte to the destination node, who, is able to reconstruct this&lt;br/&gt;&amp;gt;&amp;gt; your AMP data as per your algorithm.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Indeed, the `realm` byte controls the interpretation of the rest of the&lt;br/&gt;&amp;gt;&amp;gt; 65-byte packet.  If you define, instead, a separate `realm` that is&lt;br/&gt;&amp;gt;&amp;gt; understood by the destination node, you can redefine the entire 64 bytes of&lt;br/&gt;&amp;gt;&amp;gt; the final hop data as you wish.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If we support AMP only at final payees, we can completely redefine the 64&lt;br/&gt;&amp;gt;&amp;gt; bytes in the final hop data for the new AMP `realm`, and not consume the&lt;br/&gt;&amp;gt;&amp;gt; next hop (which would reduce route length by 1).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; (If we want to support multiple routes converging to an intermediate&lt;br/&gt;&amp;gt;&amp;gt; node, then continue routing to a different final node after routes have&lt;br/&gt;&amp;gt;&amp;gt; merged (i.e. A-&amp;gt;B-&amp;gt;C-&amp;gt;D, and A-&amp;gt;E-&amp;gt;C-&amp;gt;D, with the payment being merged by&lt;br/&gt;&amp;gt;&amp;gt; C, who forwards the combination to D), then we need to follow the current&lt;br/&gt;&amp;gt;&amp;gt; hop data format, but I think supporting AMP at final payees is actually&lt;br/&gt;&amp;gt;&amp;gt; enough... AMP at intermediate nodes might not be used often enough by&lt;br/&gt;&amp;gt;&amp;gt; senders for it to matter, as taking advantage of that seems more complex&lt;br/&gt;&amp;gt;&amp;gt; than just asking your routing algo to provide you multiple routes to a&lt;br/&gt;&amp;gt;&amp;gt; destination, which you are probably already doing)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ----&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Overall, good work I think.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180207/686a561b/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180207/686a561b/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:48:58Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsye2vh2mxr2zv3l4kxxy4ht8lly7gu5td67krvjdx5wty39hkpelqzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv97evfg</id>
    
      <title type="html">📅 Original date posted:2018-02-03 📝 Original message: Hello ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsye2vh2mxr2zv3l4kxxy4ht8lly7gu5td67krvjdx5wty39hkpelqzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv97evfg" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0yq6lj2ntjx0ndsw7744ne6c2zekaag4g9t3dxmz05nw7vsatyscczhed3&#39;&gt;nevent1q…hed3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-02-03&lt;br/&gt;📝 Original message:&lt;br/&gt;Hello everyone,&lt;br/&gt;&lt;br/&gt;While working on some upgrades to our lightning-onion repo [1],&lt;br/&gt;roasbeef pointed&lt;br/&gt;out that all of our implementations use a quadratic algorithm to&lt;br/&gt;iteratively apply the intermediate blinding factors.&lt;br/&gt;&lt;br/&gt;I spent some time working on a linear algorithm that reduces the total&lt;br/&gt;number of scalar multiplications. Overall, our packet construction&lt;br/&gt;benchmarks showed an 8x speedup, from 37ms to 4.5ms, and now uses ~70% less&lt;br/&gt;memory. The diff is only ~15 LOC, and thought this would be a&lt;br/&gt;useful optimization for our implementations to have. I can make a PR that&lt;br/&gt;updates the example source in lightning-rfc if there is interest.&lt;br/&gt;&lt;br/&gt;A description, along with the modified source, can be found in my PR to&lt;br/&gt;lightning-onion [2]. The correctness of the output has been verified&lt;br/&gt;against the (updated) BOLT 4 test vector [3].&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://github.com/lightningnetwork/lightning-onion&#34;&gt;https://github.com/lightningnetwork/lightning-onion&lt;/a&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://github.com/lightningnetwork/lightning-onion/pull/18&#34;&gt;https://github.com/lightningnetwork/lightning-onion/pull/18&lt;/a&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://github.com/lightningnetwork/lightning-rfc/pull/372&#34;&gt;https://github.com/lightningnetwork/lightning-rfc/pull/372&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180203/e0a57a15/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180203/e0a57a15/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:48:47Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsg36hjl3dpkld62pcauzxm3qmjlqjm4q7g9u4x49nyf3vv5qd72egzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvr2vuj6</id>
    
      <title type="html">📅 Original date posted:2018-05-23 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsg36hjl3dpkld62pcauzxm3qmjlqjm4q7g9u4x49nyf3vv5qd72egzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyvr2vuj6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsy5c3xzdpxx3hwn7r0jtsuv4fx3yg92fajxflt4heqj9cfautt09sprz8l9&#39;&gt;nevent1q…z8l9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-23&lt;br/&gt;📝 Original message:Hi all,&lt;br/&gt;&lt;br/&gt;Jimpo, thanks for looking into those stats! I had always imagined that there&lt;br/&gt;would be a more significant savings in having all filters in one bundle, as&lt;br/&gt;opposed to separate. These results are interesting, to say the least, and&lt;br/&gt;definitely offer us some flexibility in options for filter sharding.&lt;br/&gt;&lt;br/&gt;So far, the bulk of this discussion has centered around bandwidth. I am&lt;br/&gt;concerned, however, that splitting up the filters is at odds with the other&lt;br/&gt;goal of the proposal in offering improved privacy.&lt;br/&gt;&lt;br/&gt;Allowing clients to choose individual filter sets trivially exposes the&lt;br/&gt;type of&lt;br/&gt;data that client is interested in. This alone might be enough to&lt;br/&gt;fingerprint the&lt;br/&gt;function of a peer and reduce anonymity set justifying their potential&lt;br/&gt;behavior.&lt;br/&gt;&lt;br/&gt;Furthermore, if a match is encountered, and block requested, full nodes have&lt;br/&gt;more targeted insight into what caused a particular match. They could infer&lt;br/&gt;that&lt;br/&gt;the client received funds in a particular block, e.g., if they are only&lt;br/&gt;requesting&lt;br/&gt;output scripts.&lt;br/&gt;&lt;br/&gt;This is above and beyond the additional complexity of now syncing,&lt;br/&gt;validating,&lt;br/&gt;and managing five or six distinct header/filter-header/filter/block chains.&lt;br/&gt;&lt;br/&gt;I agree that saving on bandwidth is an important goal, but bandwidth and&lt;br/&gt;privacy&lt;br/&gt;are always seemingly at odds. Strictly comparing the bandwidth requirements&lt;br/&gt;of&lt;br/&gt;a system that heavily weighs privacy to existing ones, e.g. BIP39, that&lt;br/&gt;don&amp;#39;t is a&lt;br/&gt;losing battle IMO.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not fundamentally opposed to splitting the filters, I certainly see the&lt;br/&gt;arguments for flexibility. However, I also want to ensure we are&lt;br/&gt;considering the&lt;br/&gt;second order effects that fall out of optimizing for one metric when others&lt;br/&gt;exist.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Conner&lt;br/&gt;On Wed, May 23, 2018 at 10:29 Gregory Maxwell via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Any chance you could add a graph of input-scripts  (instead of input&lt;br/&gt;&amp;gt; outpoints)?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Wed, May 23, 2018 at 7:38 AM, Jim Posen via bitcoin-dev&lt;br/&gt;&amp;gt; &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt; So I checked filter sizes (as a proportion of block size) for each of the&lt;br/&gt;&amp;gt; &amp;gt; sub-filters. The graph is attached.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; As interpretation, the first ~120,000 blocks are so small that the&lt;br/&gt;&amp;gt; &amp;gt; Golomb-Rice coding can&amp;#39;t compress the filters that well, which is why the&lt;br/&gt;&amp;gt; &amp;gt; filter sizes are so high proportional to the block size. Except for the&lt;br/&gt;&amp;gt; &amp;gt; input filter, because the coinbase input is skipped, so many of them&lt;br/&gt;&amp;gt; have 0&lt;br/&gt;&amp;gt; &amp;gt; elements. But after block 120,000 or so, the filter compression converges&lt;br/&gt;&amp;gt; &amp;gt; pretty quickly to near the optimal value. The encouraging thing here is&lt;br/&gt;&amp;gt; that&lt;br/&gt;&amp;gt; &amp;gt; if you look at the ratio of the combined size of the separated filters vs&lt;br/&gt;&amp;gt; &amp;gt; the size of a filter containing all of them (currently known as the basic&lt;br/&gt;&amp;gt; &amp;gt; filter), they are pretty much the same size. The mean of the ratio&lt;br/&gt;&amp;gt; between&lt;br/&gt;&amp;gt; &amp;gt; them after block 150,000 is 99.4%. So basically, not much compression&lt;br/&gt;&amp;gt; &amp;gt; efficiently is lost by separating the basic filter into sub-filters.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On Tue, May 22, 2018 at 5:42 PM, Jim Posen &amp;lt;jim.posen at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; My suggestion was to advertise a bitfield for each filter type the node&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; serves,&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; where the bitfield indicates what elements are part of the filters.&lt;br/&gt;&amp;gt; This&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; essentially&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; removes the notion of decided filter types and instead leaves the&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; decision to&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; full-nodes.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; I think it makes more sense to construct entirely separate filters for&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; different types of elements and allow clients to download only the ones&lt;br/&gt;&amp;gt; they&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; care about. If there are enough elements per filter, the compression&lt;br/&gt;&amp;gt; ratio&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; shouldn&amp;#39;t be much worse by splitting them up. This prevents the&lt;br/&gt;&amp;gt; exponential&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; blowup in the number of filters that you mention, Johan, and it works&lt;br/&gt;&amp;gt; nicely&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; with service bits for advertising different filter types independently.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; So if we created three separate filter types, one for output scripts,&lt;br/&gt;&amp;gt; one&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; for input outpoints, and one for TXIDs, each signaled with a separate&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; service bit, are people good with that? Or do you think there shouldn&amp;#39;t&lt;br/&gt;&amp;gt; be a&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; TXID filter at all, Matt? I didn&amp;#39;t include the option of a prev output&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; script filter or rolling that into the block output script filter&lt;br/&gt;&amp;gt; because it&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; changes the security model (cannot be proven to be correct/incorrect&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; succinctly).&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Then there&amp;#39;s the question of whether to separate or combine the headers.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; I&amp;#39;d lean towards keeping them separate because it&amp;#39;s simpler that way.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; &amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/b7412db9/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/b7412db9/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:12:15Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszspe7m9hfwsuy35l8pr6t7kj25jl007ckhwwgw3mf94fejk2dgyqzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv8rqctm</id>
    
      <title type="html">📅 Original date posted:2017-06-08 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszspe7m9hfwsuy35l8pr6t7kj25jl007ckhwwgw3mf94fejk2dgyqzyqt4l5h4yjtmnw389n4aksmwaxrk7ygmd232704fhsp70n05k3fyv8rqctm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfm2mlg92js4df8u4xrjvsyxvlkv704kkh7t6we2sum992lxrauaqnfp9mn&#39;&gt;nevent1q…p9mn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-06-08&lt;br/&gt;📝 Original message:I don&amp;#39;t normally post here, but I&amp;#39;m sorry, if you don&amp;#39;t see those two as&lt;br/&gt;equal, then I think you have misunderstood the *entire* value proposition&lt;br/&gt;of cryptocurrencies.&lt;br/&gt;&lt;br/&gt;The state of any cryptocurrency should entirely (and only) be defined by&lt;br/&gt;its ledger. If the state of the system can be altered outside of the rules&lt;br/&gt;governing its ledger, then the system isn&amp;#39;t secure. It doesn&amp;#39;t matter&lt;br/&gt;whether the people making those changes are the ones that are leading the&lt;br/&gt;project or not. An &amp;#34;irregular state change&amp;#34; is a fancy term for a bailout.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m sure I speak for more than myself in saying that an &amp;#34;irregular state&lt;br/&gt;change&amp;#34; is equivalent to modifying the underlying ledger. Let&amp;#39;s not let&lt;br/&gt;semantics keep us from recognizing what actually took place.&lt;br/&gt;&lt;br/&gt;-Conner&lt;br/&gt;&lt;br/&gt;On Wed, Jun 7, 2017 at 14:14 Nick Johnson via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Wed, Jun 7, 2017 at 5:27 PM Tao Effect &amp;lt;contact at taoeffect.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Nick,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Please don&amp;#39;t spread misinformation. Whatever you think of the DAO hard&lt;br/&gt;&amp;gt;&amp;gt; fork, it&amp;#39;s a simple fact that the Ethereum ledger was not edited.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This sort of email is unhelpful to this conversation, and it certainly&lt;br/&gt;&amp;gt;&amp;gt; doesn&amp;#39;t help with the perception that Ethereum is nothing but a bunch of&lt;br/&gt;&amp;gt;&amp;gt; hypocritical Bankers 2.0.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Everyone knows you didn&amp;#39;t edit Ethereum Classic, but the the hard fork,&lt;br/&gt;&amp;gt;&amp;gt; which was re-branded as Ethereum, was edited.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That&amp;#39;s not what I was suggesting. My point is that the ledger was never&lt;br/&gt;&amp;gt; edited. An &amp;#39;irregular state change&amp;#39; was added at a specific block height,&lt;br/&gt;&amp;gt; but the ledger remains inviolate.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m sure I don&amp;#39;t have to explain the difference between the ledger and the&lt;br/&gt;&amp;gt; state to you, or why it&amp;#39;s significant that the ledger wasn&amp;#39;t (and can&amp;#39;t be,&lt;br/&gt;&amp;gt; practically) modified.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -Nick&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; - Greg&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt; Please do not email me anything that you are not comfortable also sharing with&lt;br/&gt;&amp;gt;&amp;gt; the NSA.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Jun 7, 2017, at 6:25 AM, Nick Johnson &amp;lt;nick at ethereum.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Wed, Jun 7, 2017 at 12:02 AM Gregory Maxwell via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; On Tue, Jun 6, 2017 at 10:39 PM, Tao Effect via bitcoin-dev&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; I believe the severity of replay attacks is going unvoiced and is not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; understood within the bitcoin community because of their lack of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; experience&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; with them.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Please don&amp;#39;t insult our community-- the issues with replay were&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; pointed out by us to Ethereum in advance and were cited specifically&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; in prior hardfork discussions long before Ethereum started editing&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; their ledger for the economic benefit of its centralized&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; administrators.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Please don&amp;#39;t spread misinformation. Whatever you think of the DAO hard&lt;br/&gt;&amp;gt;&amp;gt; fork, it&amp;#39;s a simple fact that the Ethereum ledger was not edited.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; -Nick Johnson&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20170608/4a1844b0/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20170608/4a1844b0/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:02:25Z</updated>
  </entry>

</feed>