{"type":"rich","version":"1.0","author_name":"npub19helcfnqgk2jrwzjex2aflq6jwfc8zd9uzzkwlgwhve7lykv23mq5zkvn4","author_url":"https://nostr.ae/npub19helcfnqgk2jrwzjex2aflq6jwfc8zd9uzzkwlgwhve7lykv23mq5zkvn4","provider_name":"njump","provider_url":"https://nostr.ae","html":"📅 Original date posted:2022-06-07\n📝 Original message:\nHi y'all,\n\nLast week nearly 30 (!) Lightning developers and researchers gathered in\nOakland, California for three day to discuss a number of matters related to\nthe current state and evolution of the protocol.  This time around, we had\nmuch better representation for all the major Lightning Node implementations\ncompared to the last LN Dev Summit (Zurich, Oct 2021).\n\nSimilar to the prior LN Dev Summit, notes were kept throughout the day that\nattempted on a best effort basis to capture the relevant discussions,\ndecisions, and new relevant research or follow up areas to circle back on.\nLast time around, I sent out an email that summarized some key takeaways\n(from my PoV) of the last multi-day dev summit [1]. What follows in this\nemail is a similar summary/recap of the three day summit. Just like last\ntime: if you attended and felt I missed out on a key point, or inadvertently\nmisrepresented a statement/idea, please feel free to reply, correcting or\nadding additional detail.\n\nThe meeting notes in full can be found here:\nhttps://docs.google.com/document/d/1KHocBjlvg-XOFH5oG_HwWdvNBIvQgxwAok3ZQ6bnCW0/edit?usp=sharing\n\n# Simple Taproot Channels\n\nDuring the last summit, Taproot was a major discussion topic as though the\nsoft fork had been deployed, we we're all still watching the 🟩 's stack up\non the road to ultimately activation. Fast forward several months later and\nTaproot has now been fully activated, with ecosystem starting to\nprogressively deploy more and more advanced systems/applications that take\nadvantage of the new features.\n\nOne key deployment model that came out of the last LN Dev summit was the\nconcept of an iterative roadmap that progressively revamped the system to\nuse more taprooty features, instead of a \"big bang\" approach that would\nattempt to package up as many things as possible into one larger update. At\na high level the iterative roadmap proposed that we unroll an existing\nlarger proposal [2] into more bite sized pieces that can be incrementally\nreviewed, implemented, and ultimately deployed (see my post on the LN Dev\nSummit 2021 for more details).\n\n## Extension BOLTs\n\nRiiight before we started on the first day, I wrote up a minimal proposal\nthat attempted to tackle the first two items of the Taproot iterative\ndeployment schedule (musig2 funding outputs and simple tapscript mapping)\n[3]. I called the proposal \"Simple Taproot Channels\" as it set out to do a\nmechanical mapping of the current commitment and script structure to a more\ntaprooty domain. Rather than edit 4 or 5 different BOLTs with a series of\n\"if this feature bit applies\" nested clauses, I instead opted to create a\nnew standalone \"extension bolt\" that defines _new_ behavior on top of the\nexisting BOLTs, referring to the BOLTs when necessary. The style of the\ndocument was inspired by the \"proposals\" proposal (very meta), which was\npopularized by cdecker and adopted by t-bast with his documents on\nTrampoline and Blinded Paths.\n\nIf the concept catches on, extension BOLTs provide us with a new way to\nextend the spec: rather than insert everything in-line, we could instead\ncreate new standalone documents for larger features. Having a single self\ncontained document makes the proposal easier to review, and also gives the\nauthor more room to provide any background knowledge, primaries, and also\nrationale. Overtime, as the new extensions become widespread (eg: taproot is\nthe default channel type), we can fold in the extensions back to the main\nset of \"core\" BOLTs (or make new ones as relevant).\n\nSmaller changes to the spec like deprecating an old field or tightening up\nsome language will likely still follow the old approach of mutating the\nexisting BOLTs, but larger overhauls like the planned PTLC update may find\nthe extension BOLTs to be a better tool.\n\n## Tapscript, Musig2, and Lightning\n\nAs mentioned above the Simple Taproot Channels proposal does two main\nthings:\n  1. Move the existing 2-of-2 p2wsh segwit v0 funding output to a _single\n  key_ p2tr output, with the single key actually being an aggregated musig2\n  key.\n\n  2. Map all our existing scripts to the tapscript domain, using the\n  internal key (keyspend path) for things like revocations, which an\n  potentially allow nodes to store less state for HTLCs.\n\nOf the two components #1 is by far the trickiest. Musig2 is a very elegant\nprotocol (not to mention the spec which y'all should totally check out) but\nas the signatures aren't deterministic (like RFC 6979 [5]), both signers\nneed to \"protect themselves at all times\" to ensure they don't ever re-use\nnonces, which can lead to a private key leak (!!).\n\nRather than try to create some sort of psuedo-deterministic nonces scheme\n(which maaybe works until the Blockstream Research team squints vaguely in\nits direction), I opted to just make all nonces 100% ephemeral and tied to\nthe lifetime of a connection. Musig2 defines something called a public\nnonces, which is actually two individual 33-byte nonces. This value needs to\nbe exchanged before signing can begin (but can be sent before sides know\nthey're aggregated keys). One important thing to note is that given that the\nchannels today have _asymmetric_ state, we actually need a _pair_ of public\nnonces: one that I'll use to sign my commitment, and one I'll use to sign\nyours. Lightning channels w/ symmetric state like eltoo can get by w/ only\nexchange a single set of nonces, as there's only one message per state.\n\nNonce exchange takes place in a few places:\n\n  * During initial funding: I send my public nonce in the open_channel\n    message, you send yours in the accept_channel message. After this\n    exchange we can both generate signatures for the refund commitment\n    transactions.\n\n  * After the channel is \"ready\" we send another set of nonces, so we can\n    sign the next state. This is similar to the existing revocation key\n    exchange: I need your next nonce/key before I can sign a new state.\n\n  * Upon channel re-establishment a _new_ set of nonces is sent, as they're\n    100% ephemeral. The current draft also requires that if you were\n    re-transmitting a sig, then you use the _new_ nonces to sign again, as\n    it's possible you went to retransmit but left off an expired/trimmed\n    HLTC (could lead to nonce re-use and also needing to remember nonces).\n\n  * Each time I revoke my channel, I send to you a single nonce, my \"local\n    nonce\" (naming needs some work here), which lets you sign for a new\n    state.\n\n  * Each time I send a new sig, I also send you another nonce, my \"remote\"\n    nonce\", which\n\n  * When I send a shutdown (co-op close) I send a single public nonce so we\n    can sign the next co-opc close offer.\n\n  * When I send a closing_signed I send another nonce so once you send your\n    offer, we sign another set.\n\nThe final flows aren't 100% yet finalized, as we'll need some\nimplementations drafted to make sure the nonce handling and script mapping\nworks out properly.\n\n### Lightning Channels \u0026 Recursive Musig2\n\nOne other cool topic that came up is the concept of leveraging recursive\nmusig2 (so musig2 within musig2) to make channels even _more_ multi-sigy.\nThe benefit here is that Bob \u0026 Carol can each have their individual keys\n(which might actually be aggregated keys themselves) and make a channel w/\nAlice, who only knows of them as Barol, and doesn't know there're actually\nanother pair of keys at play. This is _really_ cool as it allows node\noperators, wallets, and lightning platforms to experiment with various\nkey/signing trees that may add more security, redundancy, or flexibility.\n\nWhen this first came up, someone brought up the fact that while the scheme\nis \"known\" the initial paper as they weren't sure how to actually write a\nproof for it. During the session, someone emailed one of the musig2 authors\nasking for more details, and if it's safe to implement and roll out.\nThankfully they quickly replied and explained that the proof recursive musig\n(pls someone correct me again here if I'm wrong) wasn't left out due to\nimpossibility, but that a proof in the existing Random Oracle Model (which\nwas used to derive a bound for the number of nonces needed) would lead to a\nblow up in the number of nonces required. Attempting to write the proof in\nsome other model would likely lead to better results (proved w/ two nonces\nas base musig2), but would end up being pretty complicated, so hard to read\nand even review for correctness.\n\nAssuming everything checks out, then a useful mental model explained by the\nmusig2 BIP author is a sort of tree structure. Assuming I'm a signer, and we\nassemble the other signer as a sibling leaf in a binary tree, then I just\nneed to wait for the sibling nonce/key, before I can aggregate that into\nthe final value. So if there're 3 signers, I wait for the regular public\nnonce, but the other signers sum their respective nonces into a single\nnonce, then send that to me. A similar operation is carried out for key\naggregation, with the rest of the protocol being mostly the same.\n\nUltimately, even if wallets/nodes aren't ready to roll something like this\nout today, we at least want to make sure the proposed flow is compatible\nwith Simple Taproot Channels, and ideally we'd have a toy implementation to\nverify out understanding and show it's possible/sound. I volunteered to hack\nup a simple recursive musig2 demo, as there doesn't seem to be any code in\nthe wild that implements it.\n\n## Lightning Gossip\n\n# Gossip V2: Now Or Later?\n\nAnother big topic related to Taproot was the question of how we should\nupdate the gossip network: the gossip protocol today has all channels\nvalidated by node, which requires that the nodes understand how to\nreconstruct the funding output based on the set of advertised keys. The\nprotocol today assumes a segwit v0 p2wsh multi-sig is used. Assuming we had\neverything implemented today, a node wouldn't be able to advertise its new\ntaproot channels to the rest of the public graph as they wouldn't understand\nhow to validate it.\n\nThis presents a new opportunity: we already need to rework gossip for\ntaproot, so should we go ahead and re-design the entire thing with an eye\nfor better privacy and future extensibility?\n\nA proposal for the \"re-design the entire thing\" was floated in the past by\nRusty [6]. It does away with the strict coupling of channels to channel\nannouncements, and instead moves them to the _node_ level. Each node would\nthen advertise the set of \"outputs\" they have control of, which would then\nbe mapped to the total capacity of a node, without requiring that these\noutputs self identify themselves on-chain as Lightning Channels. This also\nopens up the door to different, potentially more privacy preserving\nproofs-of-channel-ownership (something something zkp).\n\nOn the other hand, we could just follow the path of Simple Taproot Channels\nand map musig2+schnorr onto the existing gossip network. This is less\nchanges in total, with the main benefit being the ability to only send 1 sig\n(aggregated musig2 sig of keys) instead of 4 individual sigs. I made a very\nlofty proposal in this direction here [7].\n\nUltimately we decided to take the \"just musig2 aspects\" from gossip v1.5\n(not the real name), and the \"let's refresh all the messages w/ TLV\ngoodness\" from the gossip v2 proposal. This gives us a smaller package to\nimplement, and lets us potentially rejigger the messages to be more\nextensible and remove cruft like the node color that almost nothing uses,\nbut we all validate/store.\n\nThe follow up work in this area is a more concrete proposal that updates the\nrelevant gossip messages to be taproot aware and TLV'd and also update the\nset of requirements w.r.t _how_ to validate the channels in the first place\n(so given two keys verify that applying the keyagg method of musig2 lead to\nwhat' in the funding output).\n\nGossip v2 will likely happen \"eventually\", but the rather large design space\nneeds to be explored a bit more so we can properly analyze exactly what\nprivacy and extensibility properties we'll get out of it.\n\n# Applying Mini Sketch to LN Gossip\n\nOne issue we have today, is that other than the initial scid query mechanism\nadded to the protocol, there isn't a great way to ensure you have all the\nlatest updates your peer has. These days, many nodes pretty aggressively\nrate limit other nodes, so you might even have trouble sending out your\nupdate in the first place. A recent paper (that I haven't actually fully\nread yet) [8] analyzes the gossip network today to work out things like:\nexactly how long it takes things to propagate, total bandwidth usage, etc.\n\nMinisketch [9] (the grandchild of IBLTs ;)), is an efficient set\nreconciliation protocol that was designed for Bitcoin p2p mempool syncing,\nbut can be applied to other protocols. An attendee has been working on\nbrushing off some older work to try to see how we could apply it to the LN\nprotocol to give nodes a more bandwidth efficient way to sync channel\nupdates, and also achieve better update propagation. This supplements some\nexisting investigative work done by Alex Meyers [10], with more concrete\ndesigns w.r.t: what goes into the sketch, and the various size parameters\nthat need to be chosen.\n\n# Channel Jamming\n\nAn attendee gave a talk on the various proposed solutions to channel\njamming, evaluating them on several axis including: punishment/monetary,\nlocal vs global reputation, feasibility of mechanism design, UX\nimplications, and implementation complexity. The presenter didn't present a\nnew concrete proposal, but instead went through the various trade-offs,\nultimately concluding that they factor monetary penalties wherein the funds\nare distributed across the route, rather than being provably burnt to\nminers. However they alluded to some future upcoming work that attempts a\nmore rigorous analysis of the proposed solutions, their tradeoffs, and\npotential ways we can parametrize solutions to be more effective (how much\nshould they pay, etc).\n\nFor those looking to brush up on the latest state of research/mitigations in\nthis area, I recommend this blog post by Bitmex research [11].\n\n# Onion Messages \u0026 DoS\n\nThe topic of DoS concerns related to onion messages (in isolation, so not\nnecessarily related to things like bolt12 that take advantage of them came\nup.  During a white boarding session some argued that DoS isn't actually\nmuch of an issue, as nodes can leverage \"back propagation congestion\ncontrol\" to inform the source (who may not actually be the sender) that\nthey'll start to drop or limit their packets, with each node doing this\niteratively until the actual source of the spam has been clamped. A few\nlofty designs were thrown around, but more work needs to be done to\nconcretely specify something so it can be properly analyzed.\n\nOn the other side of the spectrum, rather than attempt to rate limit at the\nnode level (which each node having their own policy), nodes could opt\ninstead to forward _anything_ as long as the sender pays them enough. I\nproposed a lofty approach that combined AMP and Onion Messages earlier this\nyear [12]. At a high level I make an AMP payment, which pushes extra coins\nto all nodes on a route, and also drops off a special identifier to them.\nWhen I send an onion message I include this identifier, with each node\nperforming their own account w.r.t the amount of bandwidth an ID has\nremaining.\n\nUltimately a few implementations are pretty close to deploying their\nimplementation of onion messages, so no matter the intended use case, it\nwould be good to have code deployed along side to either rate limit or price\nresource consumption accordingly. Otherwise, we might end up in a scenario\nwhere DoS concerns were brushed aside, but end up being a huge issue later.\n\n# Blinded Paths, QR Codes \u0026 Invoices\n\nBlinded paths [13] is a new-er proposal to solve the \"last mile\" privacy\nissue when receiving payments on LN. Today invoices to unadvertised channels\ncontain a set of hop hints, which are anchored at public nodes in the graph,\nand also leak the scid of the unadvertised channel (points on-chain to the\nchannel receiving payments). A solution for the on-chain leak, SCID channel\naliases [15] are in the process of being widely rolled out. Channel aliases\ninstead use a random value in the invoice, allowing receiving nodes to break\nthat on-chain link and even rotate out the value periodically. With the\non-chain leak addressed, it's still the case that you give away your\n\"position\" in the network, since as a sender I know that you're connected to\nnode N with a private channel.\n\nBlinded paths address this node-level last mile privacy leak by replacing\nhop hints with a new cryptographically blinded path. At a high level, the\nreceiver can construct a \"hop hint\" of length greater than 1, gather the\npublic keys of each of the nodes, then blinded them such that: the sender\ncan use them for path finding, but doesn't actually now exactly _which_\nnodes they actually are.\n\nThere're two type of blinded paths: those in onion messages and those used\nfor actual payments. The latter variant was only formalized earlier this\nyear, as before people were mainly interested in using them to fetch BOLT 12\ninvoice via onion messages. One issue that pops up when attempting to use\nblinded paths for normal payments is: the size of the resulting invoice. As\nblinded paths are actually fragments of publicly known paths, as a receiver,\nyou want to stuff as many of them into the invoice as possible, since they\nMUST be taken in order to route towards you. Invoices are typically\ncommunicated via QR codes, which have a hard limit w.r.t the amount of\ninformation that can be packed in. On the other hand for invoice fetching,\nall that matters is that a path exists, so you can get by with stuffing less\nof then in a QR code.\n\nAs a result, blinded paths aren't necessarily compatible with the widely\ndeployed BOLT 11 based QR codes. Instead a way to fetch invoice on demand is\nrequired. Both BOLT-12 and LN-URL provide standardized ways for nodes to\nfetch invoices, though their transport/signalling medium of choice differs.\nBlinded routes are technically compatible with BOLT 11 invoices, but may be\nhampered by the fact that you can only include so many routes.\n\nAnother consideration is that unlike hop hints, blinded paths require more\nmaintain once, as since they traverse public route, policy changes like a\nfee update may invalidate an entire set set of routes. One proposed solution\nis that forwarding nodes should observe their older policy for a period of\ntime (so a grace period), and also that blinded paths should have an\nexplicit expiry (similar to the existing invoice expiry).\n\nOne other implication is that the set of routes the receiver includes\nmatters\nmore: if they don't send enough or select them poorly, the sender may never\nbe\nable to reach them even though a path exists in theory. More hands on\nexperience is needed so the spec authors can better guide implementations\nand\nwallets w.r.t best practices.\n\n# Friend-of-a-friend Balance Sharing \u0026 Probing\n\nA presentation was given on friend-of-a-friend balance sharing [16]. The\nhigh level idea is that if we share _some_ information within a local\nradius, then this gives the sender more information to choose a path that's\npotentially more reliable. The tradeoff here ofc is that nodes will be\ngiving away more information that can potentially be used to ascertain\npayment flows. In an attempt to minimize the amount of information shared,\nthe presenter proposed that just 2 bits of information be shared. Some\ninitial simulations showed that sharing local information actually performed\nbetter than sharing global information (?). Some were puzzled w.r.t how\nthat's possible, but assuming the slides+methods are published others can\ndig further into the model/parameter used to signal the inclusion.\n\nArguably, information like this is already available via probing, so one\nline of thinking is something like: \"why not just share _some_ of it\" that\nmay actually lead to less internal failures? This is related to a sort of\ntension between probing as a tool to increase payment reliability and also\nas a tool to degrade privacy in the network. On the other hand, others\nargued that probing provides natural cover traffic, since they actually\n_are_ payments, though they may not be intended to succeed.\n\nOn the topic of channel probing, a sort of makeshift protocol was devised to\nmake it harder in practice, sacrificing too much on the axis of payment\nreliability.  At a high level it proposes that:\n\n  * nodes more diligently set both their max_htlc amount, as well as the\n    max_htlc_value_in_flight amount\n\n  * a 50ms (or select other value) timer should be used when sending out\n    commitment signatures, independent of HTLC arrival\n\n  * nodes leverage the max_htlc value to set a false ceiling on the max in\n    flight parameter\n\n  * for each HTLC sent/forwarded, select 2 other channels at random and\n    reduce the \"fake\" in-flight ceiling for a period of time\n\nSome more details still need to be worked out, but some felt that this would\nkick start more research into this area, and also make balance mapping\n_slightly_ more difficult. From afar, it may be the case that achieving\nbalance privacy while also achieving acceptable levels of payment\nreliability might be at odds with each other.\n\n# Eltoo \u0026 ANYPREVOUT\n\nOne of the attendees is currently working on both fully implementing eltoo,\nas well as specifying the exact channel funding+update interaction were it\nto be rolled out align side the existing penalty based channels in the\nprotocol. As this version of eltoo is based on Taproot, we were able to\ncompare notes a bit to find the overlapping set of changes (nonce handling,\netc), which permits cross review of the proposals. This type of work is\ncool, as only by fully implementing something end to end can you reaaally\nwork out all the edge cases and nuances.\n\nANYPREVOUT as hasn't changed significantly as of late. An attendee shared\nplans to create a sort of mega all-future-feasible-soft-forks fork of\nbitcoind, that would package up various unmerged (from bitcoind's) proposal\nsoft fork packages into an easy to run+install binary/project attached to a\nsignet. The hop is that by giving developers an easy way to interact with\nproposed soft fork proposals (vs debasing some ancient pull request), wider\nparticipation in testing/implementation/review can be facilitated.\n\n# Trampoline Routing\n\nThere was a presentation on Trampoline routing explaining the motivation,\nhistory, and current state of the proposal. The two main cases we've\nnarrowed down on are:\n\n  1. A mobile user doesn't necessarily want to sync the _entire_ graph, so\n  they can use trampoline to maintain a subset and still be able to send\n  payments.\n\n  2. A mobile user wants to be able to instate a payment, go offline, and\n  return at a later time to learn about the final state of the payment.\n\nUse case #2 seems to be the most promising when combined with other\nproposals for holding HTLCs at an origin node (call it an \"LSP\") [13].\nCombined together, this would allow a mobile node to send a payment, then go\noffline, with the LSP being able to retry the payment either continuously or\nonly when it knows the receiver is online to accept the payment. This may\npotentially dramatically improve the UX for LN on mobile, as things suddenly\nbecome a lot more asynchronous: I do something go offline, and the LSP node\ncan fulfil the payment in the background, then wait for me to come online to\nsettle the final.  hop.\n\nTrampoline can also be composed well with blinded routes (blinded route from\nlast trampoline to receiver) and also MPP (internal nodes can split\nthemselves with local information).\n\nOne added trade-off is that since the sender doesn't know the entire route,\nthey need to sort of overshoot w.r.t fees and CTLVs. This is something\nwe've known for a while, but until Trampoline is more widely rolled out, we\nwon't have a very good feel w.r.t how much extra senders will need to\nallocate.\n\n# Node Fee Optimization \u0026 Fee Rate Cards\n\nOver the past few years, a common thread we've seen across successful\nrouting nodes is dynamic fee setting as a way to encourage/discourage\ntraffic. A routing nodes can utilize the set of fees of a channel to either\nmake it too expensive for other nodes to route through (it's already\ndepleted don't try unless you'll give be 10 mil sats, which no one would) or\nvery cheap, which'll incentivize flows in the other direction. If all nodes\nare constantly sending out updates of this nature, then it can generate a\nlot of traffic, and also sort of leak more balance information overtime\n(which some nodes are already doing: using fees/max_htlc to communicate\navailable balances).\n\nOne attendee proposed allowing nodes to express a sort of fee gradient via a\nstatic curve/bucket/function, instead of dynamically communicating what the\nlatest state of the fee+liquidity distribution looks like. A possible\nmanifestation could be a series of buckets, each of which with varying fee\nrates. If your payment consumes 50% of channel balance, then you pay this\nrate, otherwise if it's 5% you pay this rate, etc, etc. This might allow for\nnodes to capture the same dynamics as they do with more dynamic fee updates,\nbut in a way that leaks less information and also consumes less gossip\nbandwidth.\n\n# The Return of Splicing\n\nSplicing is one of those things that was discussed a long time ago, but was\nnever really fully implemented and rolled out. A few attendees have started\nto take a closer look at the problem, building off of the interactive-tx\nscheme that the dual-funding protocol extension uses. The main intricacy\ndiscussed was if concurrent splices should be allowed or not, and if so, how\nwe would handle the various edge cases. As an example, if I propose a splice\nto add more funds via my input, but that turns out to already be spent, then\nthe splicing transaction we created is invalid and can never be confirmed.\nHowever if we allow _another_ splice to take place, and another one, and\nanother one, then ideally _one_ of them will confirm and serve as the new\nanchor for the channel.\n\nIn a world of concurrent splices, the question of \"what is my Lightning\nbalance\" becomes even more murky. Wallet and implementations will likely\nwant to show the most pessimistic value, while also ensuring that the user\nis able to effectively account for where all their funds and what they can\nspend on/off chain.\n\n# LN-URL + BOLT 12\n\nLN-URL and BOLT 12 are both standardized ways that answer the question of:\nhow can I fetch an invoice from Bob? LN-URL differs from BOLT 12 in that it\nuses the existing BOLT 11 invoice format, and uses an HTTP based protocol\nfor the negotiation process. BOLT 12 on the other hand is a suite of\nprotocol additions that includes (amongst other things) a new invoice format\n(yay TLV!) and also a way to use onion messages to fetch an invoice _via_\nthe network.\n\nAssuming blinded paths is widely rolled out, then the question of how\ninvoices are obtained becomes more important as blinded paths means that you\ncan't fit much in the traditional QR encoding. As a result, fetching\ninvoices on demand may become a more common place flow, with all its\ntrade-offs.  There was a group discussion on how we could sort of unifying\neverything either by allowing BOLT 12 to be used over LN-URL or the other\nway around.\n\nOne proposal was to add a new query parameter to the normal LN-URL QR code\ncontents. This would mean that when a wallet goes to scan an LN-URL QR code,\nif they know of the extra param, and what BOLT 12, they can just use the\nenclosed offer to fetch the invoice.\n\nAn alternative proposal was to instead extract the BOLT 12 _invoice_ format\nfrom the greater BOLT 12 \"Offers\" proposal. Assuming blinded paths is only\nspecified w.r.t BOLT 12 _invoices_, then this would mean an LN-URL extension\ncould be rolled out that allowed returning BOLT 12 invoice rather than BOLT\n11 invoices. This would allow the ecosystem to slowly transition to a shared\ninvoice format, even if there may be fundamental disagreements w.r.t _how_\nthe invoices should be fetched in the first place.\n\nIt's worth noting that both of these proposals can be combined:\n\n  * If a wallet knows how to BOLT 12 Offers, they can take the enclosed\n    offer and run w/ it.\n\n  * If they don't know about Offers, but can send w/ the BOLT _invoice_\n    format, then they can fetch that and complete the payment.\n\nThis might be a nice middle ground as it would tend all\nwallets/implementations to being able to decode and send w/ a BOLT 12\n_invoice_, and leave the question of _how_ it should be fetched up to the\napplication/wallet/service. In the end, if paths never quite intersect, then\nit's still possible to add route blinding to BOLT 11, with LN-URL sticking\nwith that invoice format to take advantage of the new privacy enhancements\n\n\n[1]:\nhttps://lists.linuxfoundation.org/pipermail/lightning-dev/2021-November/003336.html\n[2]:\nhttps://lists.linuxfoundation.org/pipermail/lightning-dev/2021-October/003278.html\n[3]: https://github.com/lightning/bolts/pull/995\n[4]: https://github.com/jonasnick/bips/blob/musig2/bip-musig2.mediawiki\n[5]: https://datatracker.ietf.org/doc/html/rfc6979\n[6]:\nhttps://lists.linuxfoundation.org/pipermail/lightning-dev/2022-February/003470.html\n[7]:\nhttps://lists.linuxfoundation.org/pipermail/lightning-dev/2022-March/003526.html\n[8]: https://arxiv.org/abs/2205.12737\n[9]: https://bitcoinops.org/en/topics/minisketch/\n[10]:\nhttps://lists.linuxfoundation.org/pipermail/lightning-dev/2022-April/003551.html\n[11]: https://blog.bitmex.com/preventing-channel-jamming/\n[12]:\nhttps://lists.linuxfoundation.org/pipermail/lightning-dev/2022-February/003498.html\n[13]: https://github.com/lightning/bolts/pull/765\n[14]:\nhttps://lists.linuxfoundation.org/pipermail/lightning-dev/2021-October/003307.html\n[15]: https://github.com/lightning/bolts/pull/910\n[16]: https://github.com/lightning/bolts/pull/780\n\n-- Laolu\n-------------- next part --------------\nAn HTML attachment was scrubbed...\nURL: \u003chttp://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220607/eb9e8d17/attachment-0001.html\u003e"}
