<oembed><type>rich</type><version>1.0</version><author_name>npub19helcfnqgk2jrwzjex2aflq6jwfc8zd9uzzkwlgwhve7lykv23mq5zkvn4</author_name><author_url>https://nostr.ae/npub19helcfnqgk2jrwzjex2aflq6jwfc8zd9uzzkwlgwhve7lykv23mq5zkvn4</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2022-06-07&#xA;📝 Original message:&#xA;Hi y&#39;all,&#xA;&#xA;Last week nearly 30 (!) Lightning developers and researchers gathered in&#xA;Oakland, California for three day to discuss a number of matters related to&#xA;the current state and evolution of the protocol.  This time around, we had&#xA;much better representation for all the major Lightning Node implementations&#xA;compared to the last LN Dev Summit (Zurich, Oct 2021).&#xA;&#xA;Similar to the prior LN Dev Summit, notes were kept throughout the day that&#xA;attempted on a best effort basis to capture the relevant discussions,&#xA;decisions, and new relevant research or follow up areas to circle back on.&#xA;Last time around, I sent out an email that summarized some key takeaways&#xA;(from my PoV) of the last multi-day dev summit [1]. What follows in this&#xA;email is a similar summary/recap of the three day summit. Just like last&#xA;time: if you attended and felt I missed out on a key point, or inadvertently&#xA;misrepresented a statement/idea, please feel free to reply, correcting or&#xA;adding additional detail.&#xA;&#xA;The meeting notes in full can be found here:&#xA;https://docs.google.com/document/d/1KHocBjlvg-XOFH5oG_HwWdvNBIvQgxwAok3ZQ6bnCW0/edit?usp=sharing&#xA;&#xA;# Simple Taproot Channels&#xA;&#xA;During the last summit, Taproot was a major discussion topic as though the&#xA;soft fork had been deployed, we we&#39;re all still watching the 🟩 &#39;s stack up&#xA;on the road to ultimately activation. Fast forward several months later and&#xA;Taproot has now been fully activated, with ecosystem starting to&#xA;progressively deploy more and more advanced systems/applications that take&#xA;advantage of the new features.&#xA;&#xA;One key deployment model that came out of the last LN Dev summit was the&#xA;concept of an iterative roadmap that progressively revamped the system to&#xA;use more taprooty features, instead of a &#34;big bang&#34; approach that would&#xA;attempt to package up as many things as possible into one larger update. At&#xA;a high level the iterative roadmap proposed that we unroll an existing&#xA;larger proposal [2] into more bite sized pieces that can be incrementally&#xA;reviewed, implemented, and ultimately deployed (see my post on the LN Dev&#xA;Summit 2021 for more details).&#xA;&#xA;## Extension BOLTs&#xA;&#xA;Riiight before we started on the first day, I wrote up a minimal proposal&#xA;that attempted to tackle the first two items of the Taproot iterative&#xA;deployment schedule (musig2 funding outputs and simple tapscript mapping)&#xA;[3]. I called the proposal &#34;Simple Taproot Channels&#34; as it set out to do a&#xA;mechanical mapping of the current commitment and script structure to a more&#xA;taprooty domain. Rather than edit 4 or 5 different BOLTs with a series of&#xA;&#34;if this feature bit applies&#34; nested clauses, I instead opted to create a&#xA;new standalone &#34;extension bolt&#34; that defines _new_ behavior on top of the&#xA;existing BOLTs, referring to the BOLTs when necessary. The style of the&#xA;document was inspired by the &#34;proposals&#34; proposal (very meta), which was&#xA;popularized by cdecker and adopted by t-bast with his documents on&#xA;Trampoline and Blinded Paths.&#xA;&#xA;If the concept catches on, extension BOLTs provide us with a new way to&#xA;extend the spec: rather than insert everything in-line, we could instead&#xA;create new standalone documents for larger features. Having a single self&#xA;contained document makes the proposal easier to review, and also gives the&#xA;author more room to provide any background knowledge, primaries, and also&#xA;rationale. Overtime, as the new extensions become widespread (eg: taproot is&#xA;the default channel type), we can fold in the extensions back to the main&#xA;set of &#34;core&#34; BOLTs (or make new ones as relevant).&#xA;&#xA;Smaller changes to the spec like deprecating an old field or tightening up&#xA;some language will likely still follow the old approach of mutating the&#xA;existing BOLTs, but larger overhauls like the planned PTLC update may find&#xA;the extension BOLTs to be a better tool.&#xA;&#xA;## Tapscript, Musig2, and Lightning&#xA;&#xA;As mentioned above the Simple Taproot Channels proposal does two main&#xA;things:&#xA;  1. Move the existing 2-of-2 p2wsh segwit v0 funding output to a _single&#xA;  key_ p2tr output, with the single key actually being an aggregated musig2&#xA;  key.&#xA;&#xA;  2. Map all our existing scripts to the tapscript domain, using the&#xA;  internal key (keyspend path) for things like revocations, which an&#xA;  potentially allow nodes to store less state for HTLCs.&#xA;&#xA;Of the two components #1 is by far the trickiest. Musig2 is a very elegant&#xA;protocol (not to mention the spec which y&#39;all should totally check out) but&#xA;as the signatures aren&#39;t deterministic (like RFC 6979 [5]), both signers&#xA;need to &#34;protect themselves at all times&#34; to ensure they don&#39;t ever re-use&#xA;nonces, which can lead to a private key leak (!!).&#xA;&#xA;Rather than try to create some sort of psuedo-deterministic nonces scheme&#xA;(which maaybe works until the Blockstream Research team squints vaguely in&#xA;its direction), I opted to just make all nonces 100% ephemeral and tied to&#xA;the lifetime of a connection. Musig2 defines something called a public&#xA;nonces, which is actually two individual 33-byte nonces. This value needs to&#xA;be exchanged before signing can begin (but can be sent before sides know&#xA;they&#39;re aggregated keys). One important thing to note is that given that the&#xA;channels today have _asymmetric_ state, we actually need a _pair_ of public&#xA;nonces: one that I&#39;ll use to sign my commitment, and one I&#39;ll use to sign&#xA;yours. Lightning channels w/ symmetric state like eltoo can get by w/ only&#xA;exchange a single set of nonces, as there&#39;s only one message per state.&#xA;&#xA;Nonce exchange takes place in a few places:&#xA;&#xA;  * During initial funding: I send my public nonce in the open_channel&#xA;    message, you send yours in the accept_channel message. After this&#xA;    exchange we can both generate signatures for the refund commitment&#xA;    transactions.&#xA;&#xA;  * After the channel is &#34;ready&#34; we send another set of nonces, so we can&#xA;    sign the next state. This is similar to the existing revocation key&#xA;    exchange: I need your next nonce/key before I can sign a new state.&#xA;&#xA;  * Upon channel re-establishment a _new_ set of nonces is sent, as they&#39;re&#xA;    100% ephemeral. The current draft also requires that if you were&#xA;    re-transmitting a sig, then you use the _new_ nonces to sign again, as&#xA;    it&#39;s possible you went to retransmit but left off an expired/trimmed&#xA;    HLTC (could lead to nonce re-use and also needing to remember nonces).&#xA;&#xA;  * Each time I revoke my channel, I send to you a single nonce, my &#34;local&#xA;    nonce&#34; (naming needs some work here), which lets you sign for a new&#xA;    state.&#xA;&#xA;  * Each time I send a new sig, I also send you another nonce, my &#34;remote&#34;&#xA;    nonce&#34;, which&#xA;&#xA;  * When I send a shutdown (co-op close) I send a single public nonce so we&#xA;    can sign the next co-opc close offer.&#xA;&#xA;  * When I send a closing_signed I send another nonce so once you send your&#xA;    offer, we sign another set.&#xA;&#xA;The final flows aren&#39;t 100% yet finalized, as we&#39;ll need some&#xA;implementations drafted to make sure the nonce handling and script mapping&#xA;works out properly.&#xA;&#xA;### Lightning Channels &amp; Recursive Musig2&#xA;&#xA;One other cool topic that came up is the concept of leveraging recursive&#xA;musig2 (so musig2 within musig2) to make channels even _more_ multi-sigy.&#xA;The benefit here is that Bob &amp; Carol can each have their individual keys&#xA;(which might actually be aggregated keys themselves) and make a channel w/&#xA;Alice, who only knows of them as Barol, and doesn&#39;t know there&#39;re actually&#xA;another pair of keys at play. This is _really_ cool as it allows node&#xA;operators, wallets, and lightning platforms to experiment with various&#xA;key/signing trees that may add more security, redundancy, or flexibility.&#xA;&#xA;When this first came up, someone brought up the fact that while the scheme&#xA;is &#34;known&#34; the initial paper as they weren&#39;t sure how to actually write a&#xA;proof for it. During the session, someone emailed one of the musig2 authors&#xA;asking for more details, and if it&#39;s safe to implement and roll out.&#xA;Thankfully they quickly replied and explained that the proof recursive musig&#xA;(pls someone correct me again here if I&#39;m wrong) wasn&#39;t left out due to&#xA;impossibility, but that a proof in the existing Random Oracle Model (which&#xA;was used to derive a bound for the number of nonces needed) would lead to a&#xA;blow up in the number of nonces required. Attempting to write the proof in&#xA;some other model would likely lead to better results (proved w/ two nonces&#xA;as base musig2), but would end up being pretty complicated, so hard to read&#xA;and even review for correctness.&#xA;&#xA;Assuming everything checks out, then a useful mental model explained by the&#xA;musig2 BIP author is a sort of tree structure. Assuming I&#39;m a signer, and we&#xA;assemble the other signer as a sibling leaf in a binary tree, then I just&#xA;need to wait for the sibling nonce/key, before I can aggregate that into&#xA;the final value. So if there&#39;re 3 signers, I wait for the regular public&#xA;nonce, but the other signers sum their respective nonces into a single&#xA;nonce, then send that to me. A similar operation is carried out for key&#xA;aggregation, with the rest of the protocol being mostly the same.&#xA;&#xA;Ultimately, even if wallets/nodes aren&#39;t ready to roll something like this&#xA;out today, we at least want to make sure the proposed flow is compatible&#xA;with Simple Taproot Channels, and ideally we&#39;d have a toy implementation to&#xA;verify out understanding and show it&#39;s possible/sound. I volunteered to hack&#xA;up a simple recursive musig2 demo, as there doesn&#39;t seem to be any code in&#xA;the wild that implements it.&#xA;&#xA;## Lightning Gossip&#xA;&#xA;# Gossip V2: Now Or Later?&#xA;&#xA;Another big topic related to Taproot was the question of how we should&#xA;update the gossip network: the gossip protocol today has all channels&#xA;validated by node, which requires that the nodes understand how to&#xA;reconstruct the funding output based on the set of advertised keys. The&#xA;protocol today assumes a segwit v0 p2wsh multi-sig is used. Assuming we had&#xA;everything implemented today, a node wouldn&#39;t be able to advertise its new&#xA;taproot channels to the rest of the public graph as they wouldn&#39;t understand&#xA;how to validate it.&#xA;&#xA;This presents a new opportunity: we already need to rework gossip for&#xA;taproot, so should we go ahead and re-design the entire thing with an eye&#xA;for better privacy and future extensibility?&#xA;&#xA;A proposal for the &#34;re-design the entire thing&#34; was floated in the past by&#xA;Rusty [6]. It does away with the strict coupling of channels to channel&#xA;announcements, and instead moves them to the _node_ level. Each node would&#xA;then advertise the set of &#34;outputs&#34; they have control of, which would then&#xA;be mapped to the total capacity of a node, without requiring that these&#xA;outputs self identify themselves on-chain as Lightning Channels. This also&#xA;opens up the door to different, potentially more privacy preserving&#xA;proofs-of-channel-ownership (something something zkp).&#xA;&#xA;On the other hand, we could just follow the path of Simple Taproot Channels&#xA;and map musig2+schnorr onto the existing gossip network. This is less&#xA;changes in total, with the main benefit being the ability to only send 1 sig&#xA;(aggregated musig2 sig of keys) instead of 4 individual sigs. I made a very&#xA;lofty proposal in this direction here [7].&#xA;&#xA;Ultimately we decided to take the &#34;just musig2 aspects&#34; from gossip v1.5&#xA;(not the real name), and the &#34;let&#39;s refresh all the messages w/ TLV&#xA;goodness&#34; from the gossip v2 proposal. This gives us a smaller package to&#xA;implement, and lets us potentially rejigger the messages to be more&#xA;extensible and remove cruft like the node color that almost nothing uses,&#xA;but we all validate/store.&#xA;&#xA;The follow up work in this area is a more concrete proposal that updates the&#xA;relevant gossip messages to be taproot aware and TLV&#39;d and also update the&#xA;set of requirements w.r.t _how_ to validate the channels in the first place&#xA;(so given two keys verify that applying the keyagg method of musig2 lead to&#xA;what&#39; in the funding output).&#xA;&#xA;Gossip v2 will likely happen &#34;eventually&#34;, but the rather large design space&#xA;needs to be explored a bit more so we can properly analyze exactly what&#xA;privacy and extensibility properties we&#39;ll get out of it.&#xA;&#xA;# Applying Mini Sketch to LN Gossip&#xA;&#xA;One issue we have today, is that other than the initial scid query mechanism&#xA;added to the protocol, there isn&#39;t a great way to ensure you have all the&#xA;latest updates your peer has. These days, many nodes pretty aggressively&#xA;rate limit other nodes, so you might even have trouble sending out your&#xA;update in the first place. A recent paper (that I haven&#39;t actually fully&#xA;read yet) [8] analyzes the gossip network today to work out things like:&#xA;exactly how long it takes things to propagate, total bandwidth usage, etc.&#xA;&#xA;Minisketch [9] (the grandchild of IBLTs ;)), is an efficient set&#xA;reconciliation protocol that was designed for Bitcoin p2p mempool syncing,&#xA;but can be applied to other protocols. An attendee has been working on&#xA;brushing off some older work to try to see how we could apply it to the LN&#xA;protocol to give nodes a more bandwidth efficient way to sync channel&#xA;updates, and also achieve better update propagation. This supplements some&#xA;existing investigative work done by Alex Meyers [10], with more concrete&#xA;designs w.r.t: what goes into the sketch, and the various size parameters&#xA;that need to be chosen.&#xA;&#xA;# Channel Jamming&#xA;&#xA;An attendee gave a talk on the various proposed solutions to channel&#xA;jamming, evaluating them on several axis including: punishment/monetary,&#xA;local vs global reputation, feasibility of mechanism design, UX&#xA;implications, and implementation complexity. The presenter didn&#39;t present a&#xA;new concrete proposal, but instead went through the various trade-offs,&#xA;ultimately concluding that they factor monetary penalties wherein the funds&#xA;are distributed across the route, rather than being provably burnt to&#xA;miners. However they alluded to some future upcoming work that attempts a&#xA;more rigorous analysis of the proposed solutions, their tradeoffs, and&#xA;potential ways we can parametrize solutions to be more effective (how much&#xA;should they pay, etc).&#xA;&#xA;For those looking to brush up on the latest state of research/mitigations in&#xA;this area, I recommend this blog post by Bitmex research [11].&#xA;&#xA;# Onion Messages &amp; DoS&#xA;&#xA;The topic of DoS concerns related to onion messages (in isolation, so not&#xA;necessarily related to things like bolt12 that take advantage of them came&#xA;up.  During a white boarding session some argued that DoS isn&#39;t actually&#xA;much of an issue, as nodes can leverage &#34;back propagation congestion&#xA;control&#34; to inform the source (who may not actually be the sender) that&#xA;they&#39;ll start to drop or limit their packets, with each node doing this&#xA;iteratively until the actual source of the spam has been clamped. A few&#xA;lofty designs were thrown around, but more work needs to be done to&#xA;concretely specify something so it can be properly analyzed.&#xA;&#xA;On the other side of the spectrum, rather than attempt to rate limit at the&#xA;node level (which each node having their own policy), nodes could opt&#xA;instead to forward _anything_ as long as the sender pays them enough. I&#xA;proposed a lofty approach that combined AMP and Onion Messages earlier this&#xA;year [12]. At a high level I make an AMP payment, which pushes extra coins&#xA;to all nodes on a route, and also drops off a special identifier to them.&#xA;When I send an onion message I include this identifier, with each node&#xA;performing their own account w.r.t the amount of bandwidth an ID has&#xA;remaining.&#xA;&#xA;Ultimately a few implementations are pretty close to deploying their&#xA;implementation of onion messages, so no matter the intended use case, it&#xA;would be good to have code deployed along side to either rate limit or price&#xA;resource consumption accordingly. Otherwise, we might end up in a scenario&#xA;where DoS concerns were brushed aside, but end up being a huge issue later.&#xA;&#xA;# Blinded Paths, QR Codes &amp; Invoices&#xA;&#xA;Blinded paths [13] is a new-er proposal to solve the &#34;last mile&#34; privacy&#xA;issue when receiving payments on LN. Today invoices to unadvertised channels&#xA;contain a set of hop hints, which are anchored at public nodes in the graph,&#xA;and also leak the scid of the unadvertised channel (points on-chain to the&#xA;channel receiving payments). A solution for the on-chain leak, SCID channel&#xA;aliases [15] are in the process of being widely rolled out. Channel aliases&#xA;instead use a random value in the invoice, allowing receiving nodes to break&#xA;that on-chain link and even rotate out the value periodically. With the&#xA;on-chain leak addressed, it&#39;s still the case that you give away your&#xA;&#34;position&#34; in the network, since as a sender I know that you&#39;re connected to&#xA;node N with a private channel.&#xA;&#xA;Blinded paths address this node-level last mile privacy leak by replacing&#xA;hop hints with a new cryptographically blinded path. At a high level, the&#xA;receiver can construct a &#34;hop hint&#34; of length greater than 1, gather the&#xA;public keys of each of the nodes, then blinded them such that: the sender&#xA;can use them for path finding, but doesn&#39;t actually now exactly _which_&#xA;nodes they actually are.&#xA;&#xA;There&#39;re two type of blinded paths: those in onion messages and those used&#xA;for actual payments. The latter variant was only formalized earlier this&#xA;year, as before people were mainly interested in using them to fetch BOLT 12&#xA;invoice via onion messages. One issue that pops up when attempting to use&#xA;blinded paths for normal payments is: the size of the resulting invoice. As&#xA;blinded paths are actually fragments of publicly known paths, as a receiver,&#xA;you want to stuff as many of them into the invoice as possible, since they&#xA;MUST be taken in order to route towards you. Invoices are typically&#xA;communicated via QR codes, which have a hard limit w.r.t the amount of&#xA;information that can be packed in. On the other hand for invoice fetching,&#xA;all that matters is that a path exists, so you can get by with stuffing less&#xA;of then in a QR code.&#xA;&#xA;As a result, blinded paths aren&#39;t necessarily compatible with the widely&#xA;deployed BOLT 11 based QR codes. Instead a way to fetch invoice on demand is&#xA;required. Both BOLT-12 and LN-URL provide standardized ways for nodes to&#xA;fetch invoices, though their transport/signalling medium of choice differs.&#xA;Blinded routes are technically compatible with BOLT 11 invoices, but may be&#xA;hampered by the fact that you can only include so many routes.&#xA;&#xA;Another consideration is that unlike hop hints, blinded paths require more&#xA;maintain once, as since they traverse public route, policy changes like a&#xA;fee update may invalidate an entire set set of routes. One proposed solution&#xA;is that forwarding nodes should observe their older policy for a period of&#xA;time (so a grace period), and also that blinded paths should have an&#xA;explicit expiry (similar to the existing invoice expiry).&#xA;&#xA;One other implication is that the set of routes the receiver includes&#xA;matters&#xA;more: if they don&#39;t send enough or select them poorly, the sender may never&#xA;be&#xA;able to reach them even though a path exists in theory. More hands on&#xA;experience is needed so the spec authors can better guide implementations&#xA;and&#xA;wallets w.r.t best practices.&#xA;&#xA;# Friend-of-a-friend Balance Sharing &amp; Probing&#xA;&#xA;A presentation was given on friend-of-a-friend balance sharing [16]. The&#xA;high level idea is that if we share _some_ information within a local&#xA;radius, then this gives the sender more information to choose a path that&#39;s&#xA;potentially more reliable. The tradeoff here ofc is that nodes will be&#xA;giving away more information that can potentially be used to ascertain&#xA;payment flows. In an attempt to minimize the amount of information shared,&#xA;the presenter proposed that just 2 bits of information be shared. Some&#xA;initial simulations showed that sharing local information actually performed&#xA;better than sharing global information (?). Some were puzzled w.r.t how&#xA;that&#39;s possible, but assuming the slides+methods are published others can&#xA;dig further into the model/parameter used to signal the inclusion.&#xA;&#xA;Arguably, information like this is already available via probing, so one&#xA;line of thinking is something like: &#34;why not just share _some_ of it&#34; that&#xA;may actually lead to less internal failures? This is related to a sort of&#xA;tension between probing as a tool to increase payment reliability and also&#xA;as a tool to degrade privacy in the network. On the other hand, others&#xA;argued that probing provides natural cover traffic, since they actually&#xA;_are_ payments, though they may not be intended to succeed.&#xA;&#xA;On the topic of channel probing, a sort of makeshift protocol was devised to&#xA;make it harder in practice, sacrificing too much on the axis of payment&#xA;reliability.  At a high level it proposes that:&#xA;&#xA;  * nodes more diligently set both their max_htlc amount, as well as the&#xA;    max_htlc_value_in_flight amount&#xA;&#xA;  * a 50ms (or select other value) timer should be used when sending out&#xA;    commitment signatures, independent of HTLC arrival&#xA;&#xA;  * nodes leverage the max_htlc value to set a false ceiling on the max in&#xA;    flight parameter&#xA;&#xA;  * for each HTLC sent/forwarded, select 2 other channels at random and&#xA;    reduce the &#34;fake&#34; in-flight ceiling for a period of time&#xA;&#xA;Some more details still need to be worked out, but some felt that this would&#xA;kick start more research into this area, and also make balance mapping&#xA;_slightly_ more difficult. From afar, it may be the case that achieving&#xA;balance privacy while also achieving acceptable levels of payment&#xA;reliability might be at odds with each other.&#xA;&#xA;# Eltoo &amp; ANYPREVOUT&#xA;&#xA;One of the attendees is currently working on both fully implementing eltoo,&#xA;as well as specifying the exact channel funding+update interaction were it&#xA;to be rolled out align side the existing penalty based channels in the&#xA;protocol. As this version of eltoo is based on Taproot, we were able to&#xA;compare notes a bit to find the overlapping set of changes (nonce handling,&#xA;etc), which permits cross review of the proposals. This type of work is&#xA;cool, as only by fully implementing something end to end can you reaaally&#xA;work out all the edge cases and nuances.&#xA;&#xA;ANYPREVOUT as hasn&#39;t changed significantly as of late. An attendee shared&#xA;plans to create a sort of mega all-future-feasible-soft-forks fork of&#xA;bitcoind, that would package up various unmerged (from bitcoind&#39;s) proposal&#xA;soft fork packages into an easy to run+install binary/project attached to a&#xA;signet. The hop is that by giving developers an easy way to interact with&#xA;proposed soft fork proposals (vs debasing some ancient pull request), wider&#xA;participation in testing/implementation/review can be facilitated.&#xA;&#xA;# Trampoline Routing&#xA;&#xA;There was a presentation on Trampoline routing explaining the motivation,&#xA;history, and current state of the proposal. The two main cases we&#39;ve&#xA;narrowed down on are:&#xA;&#xA;  1. A mobile user doesn&#39;t necessarily want to sync the _entire_ graph, so&#xA;  they can use trampoline to maintain a subset and still be able to send&#xA;  payments.&#xA;&#xA;  2. A mobile user wants to be able to instate a payment, go offline, and&#xA;  return at a later time to learn about the final state of the payment.&#xA;&#xA;Use case #2 seems to be the most promising when combined with other&#xA;proposals for holding HTLCs at an origin node (call it an &#34;LSP&#34;) [13].&#xA;Combined together, this would allow a mobile node to send a payment, then go&#xA;offline, with the LSP being able to retry the payment either continuously or&#xA;only when it knows the receiver is online to accept the payment. This may&#xA;potentially dramatically improve the UX for LN on mobile, as things suddenly&#xA;become a lot more asynchronous: I do something go offline, and the LSP node&#xA;can fulfil the payment in the background, then wait for me to come online to&#xA;settle the final.  hop.&#xA;&#xA;Trampoline can also be composed well with blinded routes (blinded route from&#xA;last trampoline to receiver) and also MPP (internal nodes can split&#xA;themselves with local information).&#xA;&#xA;One added trade-off is that since the sender doesn&#39;t know the entire route,&#xA;they need to sort of overshoot w.r.t fees and CTLVs. This is something&#xA;we&#39;ve known for a while, but until Trampoline is more widely rolled out, we&#xA;won&#39;t have a very good feel w.r.t how much extra senders will need to&#xA;allocate.&#xA;&#xA;# Node Fee Optimization &amp; Fee Rate Cards&#xA;&#xA;Over the past few years, a common thread we&#39;ve seen across successful&#xA;routing nodes is dynamic fee setting as a way to encourage/discourage&#xA;traffic. A routing nodes can utilize the set of fees of a channel to either&#xA;make it too expensive for other nodes to route through (it&#39;s already&#xA;depleted don&#39;t try unless you&#39;ll give be 10 mil sats, which no one would) or&#xA;very cheap, which&#39;ll incentivize flows in the other direction. If all nodes&#xA;are constantly sending out updates of this nature, then it can generate a&#xA;lot of traffic, and also sort of leak more balance information overtime&#xA;(which some nodes are already doing: using fees/max_htlc to communicate&#xA;available balances).&#xA;&#xA;One attendee proposed allowing nodes to express a sort of fee gradient via a&#xA;static curve/bucket/function, instead of dynamically communicating what the&#xA;latest state of the fee+liquidity distribution looks like. A possible&#xA;manifestation could be a series of buckets, each of which with varying fee&#xA;rates. If your payment consumes 50% of channel balance, then you pay this&#xA;rate, otherwise if it&#39;s 5% you pay this rate, etc, etc. This might allow for&#xA;nodes to capture the same dynamics as they do with more dynamic fee updates,&#xA;but in a way that leaks less information and also consumes less gossip&#xA;bandwidth.&#xA;&#xA;# The Return of Splicing&#xA;&#xA;Splicing is one of those things that was discussed a long time ago, but was&#xA;never really fully implemented and rolled out. A few attendees have started&#xA;to take a closer look at the problem, building off of the interactive-tx&#xA;scheme that the dual-funding protocol extension uses. The main intricacy&#xA;discussed was if concurrent splices should be allowed or not, and if so, how&#xA;we would handle the various edge cases. As an example, if I propose a splice&#xA;to add more funds via my input, but that turns out to already be spent, then&#xA;the splicing transaction we created is invalid and can never be confirmed.&#xA;However if we allow _another_ splice to take place, and another one, and&#xA;another one, then ideally _one_ of them will confirm and serve as the new&#xA;anchor for the channel.&#xA;&#xA;In a world of concurrent splices, the question of &#34;what is my Lightning&#xA;balance&#34; becomes even more murky. Wallet and implementations will likely&#xA;want to show the most pessimistic value, while also ensuring that the user&#xA;is able to effectively account for where all their funds and what they can&#xA;spend on/off chain.&#xA;&#xA;# LN-URL + BOLT 12&#xA;&#xA;LN-URL and BOLT 12 are both standardized ways that answer the question of:&#xA;how can I fetch an invoice from Bob? LN-URL differs from BOLT 12 in that it&#xA;uses the existing BOLT 11 invoice format, and uses an HTTP based protocol&#xA;for the negotiation process. BOLT 12 on the other hand is a suite of&#xA;protocol additions that includes (amongst other things) a new invoice format&#xA;(yay TLV!) and also a way to use onion messages to fetch an invoice _via_&#xA;the network.&#xA;&#xA;Assuming blinded paths is widely rolled out, then the question of how&#xA;invoices are obtained becomes more important as blinded paths means that you&#xA;can&#39;t fit much in the traditional QR encoding. As a result, fetching&#xA;invoices on demand may become a more common place flow, with all its&#xA;trade-offs.  There was a group discussion on how we could sort of unifying&#xA;everything either by allowing BOLT 12 to be used over LN-URL or the other&#xA;way around.&#xA;&#xA;One proposal was to add a new query parameter to the normal LN-URL QR code&#xA;contents. This would mean that when a wallet goes to scan an LN-URL QR code,&#xA;if they know of the extra param, and what BOLT 12, they can just use the&#xA;enclosed offer to fetch the invoice.&#xA;&#xA;An alternative proposal was to instead extract the BOLT 12 _invoice_ format&#xA;from the greater BOLT 12 &#34;Offers&#34; proposal. Assuming blinded paths is only&#xA;specified w.r.t BOLT 12 _invoices_, then this would mean an LN-URL extension&#xA;could be rolled out that allowed returning BOLT 12 invoice rather than BOLT&#xA;11 invoices. This would allow the ecosystem to slowly transition to a shared&#xA;invoice format, even if there may be fundamental disagreements w.r.t _how_&#xA;the invoices should be fetched in the first place.&#xA;&#xA;It&#39;s worth noting that both of these proposals can be combined:&#xA;&#xA;  * If a wallet knows how to BOLT 12 Offers, they can take the enclosed&#xA;    offer and run w/ it.&#xA;&#xA;  * If they don&#39;t know about Offers, but can send w/ the BOLT _invoice_&#xA;    format, then they can fetch that and complete the payment.&#xA;&#xA;This might be a nice middle ground as it would tend all&#xA;wallets/implementations to being able to decode and send w/ a BOLT 12&#xA;_invoice_, and leave the question of _how_ it should be fetched up to the&#xA;application/wallet/service. In the end, if paths never quite intersect, then&#xA;it&#39;s still possible to add route blinding to BOLT 11, with LN-URL sticking&#xA;with that invoice format to take advantage of the new privacy enhancements&#xA;&#xA;&#xA;[1]:&#xA;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-November/003336.html&#xA;[2]:&#xA;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-October/003278.html&#xA;[3]: https://github.com/lightning/bolts/pull/995&#xA;[4]: https://github.com/jonasnick/bips/blob/musig2/bip-musig2.mediawiki&#xA;[5]: https://datatracker.ietf.org/doc/html/rfc6979&#xA;[6]:&#xA;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-February/003470.html&#xA;[7]:&#xA;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-March/003526.html&#xA;[8]: https://arxiv.org/abs/2205.12737&#xA;[9]: https://bitcoinops.org/en/topics/minisketch/&#xA;[10]:&#xA;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-April/003551.html&#xA;[11]: https://blog.bitmex.com/preventing-channel-jamming/&#xA;[12]:&#xA;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-February/003498.html&#xA;[13]: https://github.com/lightning/bolts/pull/765&#xA;[14]:&#xA;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-October/003307.html&#xA;[15]: https://github.com/lightning/bolts/pull/910&#xA;[16]: https://github.com/lightning/bolts/pull/780&#xA;&#xA;-- Laolu&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220607/eb9e8d17/attachment-0001.html&gt;</html></oembed>