<oembed><type>rich</type><version>1.0</version><title>Antoine Riard [ARCHIVE] wrote</title><author_name>Antoine Riard [ARCHIVE] (npub1vj…4x8dd)</author_name><author_url>https://yabu.me/npub1vjzmc45k8dgujppapp2ue20h3l9apnsntgv4c0ukncvv549q64gsz4x8dd</author_url><provider_name>njump</provider_name><provider_url>https://yabu.me</provider_url><html>📅 Original date posted:2023-07-20&#xA;🗒️ Summary of this message: The sender thanks the Wolf team for organizing the LN Summit and hopes they become the YC of Bitcoin. Technical observations on package relay and minimum relay fees are discussed.&#xA;📝 Original message:&#xA;Hi Clara,&#xA;&#xA;Thanks for the transcript notes.&#xA;&#xA;I think few technical observations are missing, adding them in-texto to&#xA;avoid confusions.&#xA;&#xA;I&#39;m sharing the thanks to the Wolf team for the hard work they have put in&#xA;organizing the LN Summit since the announcement at the end of January. I&#39;ve&#xA;been impressed by seeing so young a commercial entity catching up with FOSS&#xA;neutrality and decentralization standards in matters of development. I hope&#xA;they will have a long future in the Bitcoin space, and wishing them to be&#xA;the YC of Bitcoin, bridging the hacker scene with builders, without losing&#xA;the ethos.&#xA;&#xA;Looking forward to next year&#39;s LN Summit, with a multi-stakeholder approach&#xA;to transfer operational how-tos across generations of devs. That type of&#xA;moment where every dev is taking time to listen to each other is very&#xA;unique, and an experience to carry forward.&#xA;&#xA;Now the technical bullet points&#xA;&#xA;&gt; - The current proposal for package relay is ancestor package relay:&#xA;&gt; - One child can have up to 24 ancestors.&#xA;&gt;  - Right now, we only score mempool transactions by ancestry anyway, so&#xA;there isn’t much point in other types of packages.&#xA;&gt; - For base package relay, commitment transactions will still need to have&#xA;the minimum relay fee.&#xA;&gt;  - No batch bumping is allowed, because it can open up pinning attacks.&#xA;&gt;  - With one anchor, we can package RBF.&#xA;&#xA;Current state of nversion=3 allows the minimum relay fee exemption:&#xA;https://github.com/bitcoin/bitcoin/pull/25038/files#diff-8fe49384f6ab8be91802eb5d0f528fa521e301440b76508f6911d0dd2ae2cebfR108&#xA;And there is a confusion with current state of package relay code:&#xA;https://github.com/bitcoin/bitcoin/pull/27742#discussion_r1264309536&#xA;&#xA;There are other type of transaction-relay jamming attacks than &#34;pure&#xA;pinnings&#34; that prevent to do batch bumping that were discussed during the&#xA;development of mempool package acceptance:&#xA;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-900352202&#xA;&#xA;&gt; - Once we have package relay, it will be easier to get things into the&#xA;mempool.&#xA;&gt; - Once we have V3 transactions, we can drop minimum relay fees because we&#xA;are restricted to one child pays for one parent transaction:&#xA;&#xA;On the reasonable assumption that default parameters of package relay does&#xA;not introduce tx-relay peers bandwidth blowup, or at the very least&#xA;proportion ar kept with regards to traffic submitted to&#xA;DEFAULT_MIN_RELAY_TX_FEE.&#xA;&#xA;&gt;  - The size of these transactions is limited.&#xA;&gt;  - You can’t arbitrarily attach junk to pin them.&#xA;&gt; - If we want to get rid of 330 sat anchors, we will need ephemeral&#xA;anchors:&#xA;&gt;  - If there is an OP_TRUE output, it can be any value including zero.&#xA;&gt;  - It must be spent by a child in the same package.&#xA;&gt;  - Only one child can spend the anchor (because it’s one output).&#xA;&gt;  - The parent must be zero fee because we never want it in a block on its&#xA;own, or relayed without the child.&#xA;&gt;  - If the child is evicted, we really want the parent to be evicted as&#xA;well (there are some odd edge cases at the bottom of the mempool, so zero&#xA;ensures that we’ll definitely be evicted).&#xA;&#xA;The parent *might* still have pre-signed fee as it&#39;s drawn up from the&#xA;funding input liquidity, which might makes sense to save on spending&#xA;external on-chain inputs, especially for mobile.&#xA;See corresponding years-long issue on the BOLT repository on drawback of&#xA;anchor output fee-bumping reserves.&#xA;&#xA;&gt; - The bigger change is with HLTCs:&#xA;&gt;  - With SIGHASH_ANYONECANPAY, your counterparty can inflate the size of&#xA;your transaction - eg: HTLC success, anyone can attack junk.&#xA;&gt;  - How much do we want to change here?&#xA;&gt; - So, we can get to zero fee commitment transactions and one (ephemeral)&#xA;anchor per transaction.&#xA;&gt;  - With zero fee commitments, where do we put trimmed HTLCs?&#xA;&gt;     - You can just drop it in an OP_TRUE, and reasonably expect the miner&#xA;to take it.&#xA;&gt; - In a commitment with to_self and to_remote and an ephemeral anchor that&#xA;must be spent, you can drop the 1 block CSV in the transaction that does&#xA;not have a revocation path (ie,  you can drop it for to_remote).&#xA;&gt;  - Any spend of this transaction must spend the one anchor in the same&#xA;block.&#xA;&gt;  - No other output is eligible to have a tx attached to it, so we don’t&#xA;need the delay anymore.&#xA;&#xA;The 1 block CSV might be kept as a way to make the chain of transactions&#xA;&#34;discrete&#34; on the transaction-relay network, to avoid interference with&#xA;block-based filters.&#xA;&#xA;Throwing trimmed HTLCs under an OP_TRUE, without timelocks protection opens&#xA;the door to miner harvesting attacks, see&#xA;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-February/002569.html&#xA;&#xA;&gt;     - Theoretically, your counterparty could get hold of your signed&#xA;local copy, but then you can just RBF.&#xA;&gt; - Since these will be V3 transactions, the size of the child must be&#xA;small so you can’t pin it.&#xA;&gt;  - Both parties can RBF the child spending the ephemeral anchor.&#xA;&gt;  - This isn’t specifically tailored to lightning, it’s a more general&#xA;concept.&#xA;&gt;  - Child transactions of V3 are implicitly RBF, so we won’t have to worry&#xA;about it not being replaceable (no inheritance bug).&#xA;&gt; - In general, when we’re changing the mempool policy we want to make the&#xA;minimal relaxation that allows the best improvement.&#xA;&#xA;Still the issue of V3 transactions being used to conduct double-spend on&#xA;zero-conf infrastructure, if they don&#39;t upgrade their software before V3 is&#xA;widely deployed (a lightweight mempoolfullrbf=true)&#xA;&#xA;&gt; - We need “top of block” mempool / cluster mempool:&#xA;&gt;  - The mempool can have clusters of transactions (parents/children&#xA;arranged in various topologies) and the whole mempool could even be a&#xA;single cluster (think a trellis of parents and &gt; children “zigzagging”).&#xA;&gt;  - The mining algorithm will pick one “vertical” using ancestor fee rate.&#xA;&gt;  - There are some situations where you add a single transaction and it&#xA;would completely change the order in which our current selection picks&#xA;things.&#xA;&gt;  - Cluster mempool groups transactions into “clusters” that make this&#xA;easier to sort and reason about.&#xA;&gt;  - It can be expensive (which introduces a risk of denial of service),&#xA;but if we have limits on cluster sizes then we can limit this.&#xA;&#xA;Nota bene - Cluster mempool as a concept as not yet being evaluated for its&#xA;impact on mining block template construction, neither Lightning liquidity&#xA;management algorithms, nor the changes in DoS performance of usual tx-relay&#xA;peers.&#xA;&#xA;See https://github.com/bitcoin/bitcoin/issues/27677, probably gonna need&#xA;the same level of scrutiny than a consensus change.&#xA;&#xA;&gt; - This is the only way to get package RBF.&#xA;&gt; - How far along is all of this?&#xA;&gt;  - BIP331: the P2P part that allows different package types is moving&#xA;along and implementation is happening. This is done in a way that would&#xA;allow us to add different types of&#xA;&gt; packages in future if we need them.&#xA;&gt;     - There are some improvements being made to core’s orphan pool,&#xA;because we need to make sure that peers can’t knock orphans out of your&#xA;pool that you may later need to&#xA;&gt; retrieve as package ancestors.&#xA;&gt;     - We reserve some spots with tokens, and if you have a token we keep&#xA;some space for you.&#xA;&gt;  - V3 transactions: implemented on top of package relay, since they don’t&#xA;really make sense without it. This is an opt-in regime where you make&#xA;things easier to RBF.&#xA;&gt;  - Ephemeral Anchors: on top of package relay and V3.&#xA;&gt;  - Cluster Mempool: This is further out, but there’s been some progress.&#xA;Right now people are working on the linearization algorithm.&#xA;&gt; - If these changes don’t suit lightning’s use case, now is the time to&#xA;speak because it’s all being worked on.&#xA;&#xA;State of the discussion is what part of the lightning flows are granted&#xA;basic pinning protection under package relay and nVersion=3:&#xA;https://github.com/bitcoin/bitcoin/issues/27463&#xA;&#xA;&gt; - In what way does it not fit LN, as it’s currently designed?&#xA;&gt;    - With the V3 paradigm, to stop all pinning vectors, HTLC transactions&#xA;will need to get anchors and you will have to drop ANYONECANPAY (to use&#xA;anchors instead).&#xA;&gt;    - Could we fix this with additional restrictions on V3 (or a V4)?&#xA;&gt;    - You could do something where V4 means that you can have no ancestors&#xA;and no descendants (in the mempool).&#xA;&gt;    - V3 restricts the child, you could also restrict the parent further.&#xA;&gt;    - You could have a heuristic on the number of inputs and outputs, but&#xA;anyone can pay or add inputs.&#xA;&gt;    - You could commit to the whole thing being some size by setting a&#xA;series of bits in sequence to mark maximum size but that would involve&#xA;running script (which is annoying).&#xA;&gt;     - The history of V3 was to allow a parent of any size because&#xA;commitment transactions can be any size.&#xA;&gt; - What about keeping HTLCs the way they are today?&#xA;&gt;  - A lot of other things are less pineapple, maybe that’s ok? It’s a step&#xA;forward.&#xA;&gt;  - The long term solution is to change relay policy to top of mempool. We&#xA;shouldn’t be doing things until the long term solution is clear, and we&#xA;shouldn’t change the protocol in a way&#xA;&gt;  that doesn’t fit with the long term.&#xA;&#xA;Current V3 paradigm and package relay, won&#39;t stop all pinning vectors, as&#xA;you have advanced pinnings due to the distributed nature of network&#xA;mempools, see&#xA;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-June/002758.html&#xA;&#xA;&gt;  - We already do a lot of arbitrary things, if we were starting from day&#xA;one we wouldn’t do HTLCs with anchors (it’s too much bloat), and being&#xA;unable to RBF is more bloat because you &gt; overpay.&#xA;&gt;  - If the remote commitment is broadcast, you can spen the HTLC with V2.&#xA;You can’t add a V3 child (it won’t get in the mempool).&#xA;&gt;  - If you want to be consistent, even when it’s the remote commit you&#xA;need a presigned transaction, we should just use it as designed today.&#xA;&gt; - What is the “top of mempool” assumption?&#xA;&gt;  - If large transactions are at the top of your mempool, you (a miner)&#xA;want transactions with higher fee rates to increase your total revenue.&#xA;&gt;  - Today, you can’t really easily answer or reason about these questions.&#xA;&gt;  - We want to accept transactions in our mempool in a denial of service&#xA;resistant way that will strictly increase our miner fees.&#xA;&gt;  - If a transaction is at the top of your mempool, you may be more&#xA;willing to accept a replacement fee. If it’s way down in the mempool, you&#xA;would probably replace more slowly.&#xA;&gt;  - It’s conceivable that we could get here, but it’s years off.&#xA;&gt;     - Once we have this, pinning only happens with large transactions at&#xA;the bottom of the mempool. If you just slow roll these transactions, you&#xA;can just relay what you’ve got.&#xA;&gt;     - If somebody comes and replaces the bottom with something small&#xA;that’ll be mined in the next two blocks, you clearly want to accept that.&#xA;&gt; - Does cluster mempool fix rule 3?&#xA;&gt;  - No but they help.&#xA;&gt;  - Today when you get a transaction you don’t know which block it’s going&#xA;in - we don’t have a preference ordering.&#xA;&gt;  - Miners don’t make blocks as they go - with cluster mempool you can&#xA;make very fast block templates.&#xA;&#xA;Defining &#34;top of mempool&#34; is function of the source of informations and&#xA;configuration settings, and block template construction strategy of a&#xA;miner, see&#xA;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-February/019846.html&#xA;&#xA;&gt; - When talking about relay, you can ignore block making and just get a&#xA;very good estimate.&#xA;&gt; - The question is: when do we jump?&#xA;&gt;  - Wail until V3? Package Relay?&#xA;&gt;    - Package relay will help. You still negotiate fees but they don’t&#xA;matter as much.&#xA;&gt;    - We’d like to kill upate fee and have a magic number for fees, can we&#xA;do that when we get package relay?&#xA;&gt;    - Package relay is the hard part, V3 should be relatively easier after&#xA;that.&#xA;&gt;    - When we get V3 we can drop to zero fee.&#xA;&gt; - Is there a future where miners don’t care about policy at all?&#xA;&gt;  - Say, the block that I’m mining has V3 transactions. They’re just&#xA;maximizing fees so they’ll accept anything out of band, ignoring these new&#xA;policy rules.&#xA;&#xA;In a world of limited computing resources, miners will always have to care&#xA;about policy, at the very least as a question of transaction ordering&#xA;acceptance.&#xA;&#xA;&gt;  - Accelerators are already starting to emerge today - how are they doing&#xA;it?&#xA;&gt;  - We’re carving out a small space in which mempool rules work, and it’s&#xA;okay to work around it.&#xA;&gt;  - If a miner mines it, great - that’s what we want. The problem is not&#xA;getting mined (ie pinning).&#xA;&gt; - Figuring this out is not simple:&#xA;&gt;  - Today there are times where we accept replacements when we should&#xA;reject them and times where we reject replacements when we should accept&#xA;them.&#xA;&gt;  - There can be situations where miners will mine things that aren’t&#xA;incentive compatible (ie, not the best block template).&#xA;&gt; - What if somebody pays out of band not to mine?&#xA;&#xA;Game of out-of-band payments to not mine LN transactions are already&#xA;considered, see&#xA;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-February/021395.html&#xA;&#xA;&gt; - Ephemeral anchors are interesting, they never enter the UTXO set - if&#xA;the child gets evicted, you get evicted.&#xA;&gt;  - The first transaction being zero is optimal, want to be sure it’ll be&#xA;evicted (there are some mempool quirks).&#xA;&gt;  - It must be zero fee so that it will be evicted.&#xA;&gt; - Should we add trimmed HTLCs to the ephemeral anchor?&#xA;&gt;  - We don’t want to get above min relay fee because then we could hang&#xA;around in the mempool.&#xA;&gt;  - The eltoo implementation currently does this.&#xA;&gt;  - You can’t keep things in OP_TRUE because they’ll be taken.&#xA;&gt;  - You can also just put it in fees as before.&#xA;&gt; - More on cluster mempools:&#xA;&gt;  - It can be used for block selection, but it’s currently focused on&#xA;mempool selection.&#xA;&gt;  - You can simulate template selection with it.&#xA;&gt;  - When you’re mining, you have to pick from an ancestor downwards.&#xA;&gt;  - First we lineralize the transactions to flatten the structure&#xA;intelligently (by topology and fee rate).&#xA;&gt;  - Then we figure out the best ordering of this flat structure.&#xA;&gt;  - Each chunk in a cluster is less than 75 transactions, and a cluster&#xA;has chunks of transactions.&#xA;&gt;  - If you woul include a transaction with the ancestor, it goes in the&#xA;same chunk. Otherwise it goes in the next chunk.&#xA;&gt;  - Miners select the highest fee rate chunks, lower fee rate ones can&#xA;safely be evicted.&#xA;&gt;  - For replacement, you can just check replacement for a single cluster,&#xA;rechunk it and then resort the chunks.&#xA;&gt;     - It must beat the fee rate of the chunks to get in.&#xA;&gt;     - You can check how much it beats the chunk by, whether it would go&#xA;in the next block(s) and then decide.&#xA;&gt;  - Chunk ordering takes into account transaction size, beyond 25&#xA;transactions we just do ancestor set feerate.&#xA;&#xA;With clustering comes the issues of &#34;horizontal&#34; package limits, which is&#xA;not the way of checking package validity than Lightning transaction&#xA;broadcast backend are currently architectured.&#xA;&#xA;&gt; - One of the limits is going away, one is sticking around. We still have&#xA;sibling eviction issues.&#xA;&gt;  - Is one of the issues with chunks is that they’re limited by&#xA;transaction weight, 101 kilo-v-bytes, which is the maximum package size?&#xA;&gt;     - We should be okay, these limits are higher than present.&#xA;&gt;     - You can bound chunk size pretty easily.&#xA;&gt;  - If we get chunk fee rate replacement then you can do batch fee bumping&#xA;(eg, a bunch of ephemeral anchors that are all batched together).&#xA;&gt; - Are there long term policy implications for privacy for ephemeral&#xA;anchors?&#xA;&gt;  - You’re essentially opting into transaction sponsors?&#xA;&gt;  - If everyone uses V3 eventually there’s no issue.&#xA;&gt;  - For right now, it would be nice if V3 is only for unilateral closes.&#xA;&gt;  - It’s also useful in a custodial wallet setting, where you have one&#xA;team creating on chain transactions and the other attaching fees. This is a&#xA;common accounting headache. People can also non-interactively fee bump.&#xA;&#xA;In a world where each V3 policy has its own package limits tailored to&#xA;deter pinnings, and those limits are designed in the function of the&#xA;use-case flow, it is hard to expect uniform deployment of the latest set of&#xA;policy rules.&#xA;&#xA;&gt; ### Taproot&#xA;&gt; - Spec is still in draft right now, and the code is a bit ahead of the&#xA;test vectors.&#xA;&gt; - The biggest change that has been made is around anchors, which become&#xA;more complicated with taproot:&#xA;&gt;  - The revocation path on to_local takes the script path, so now we need&#xA;to reveal data for the anchor.&#xA;&gt;  - The downside is that revocation is more expensive - 32 more bytes in&#xA;the control block.&#xA;&gt; - The to_remote has a NUMS point, previously we just had multisig keys:&#xA;&gt;  - If you’re doing a rescan, you won’t know those keys.&#xA;&gt;  - Now you just need to know the NUMS point and you can always rescan.&#xA;&gt;  - The NUMS point itself is pretty verifiable, you just start with a&#xA;string and hash it.&#xA;&gt;  - It is constant, you just use it randomized with your key.&#xA;&gt; - The internal pubkey is constant on to_remote.&#xA;&#xA;LN wallets might have to support &#34;cold&#34; storage of both old BOLT3 secret&#xA;and the new taproot ones, as long as you have pre-taproot channels opened&#xA;with your counterparties, that might not happen for a while for economic&#xA;reasons, and deal with the differentiated sizes of the witness due to the&#xA;usage of tapscript vs witness script.&#xA;&#xA;&gt; - Co-op close [broke into several different discussions]:&#xA;&gt;  - The idea here is to remove negotiation, since we’ve had disagreement&#xA;issues in the past.&#xA;&gt;  - In this version, the initiator just accepts the fee.&#xA;&gt;  - Do we want negotiation?&#xA;&gt;     - In the past we’ve had bugs with fee rate estimates that won’t&#xA;budge.&#xA;&gt;  - Why don’t we just pick our fees and send two sets of signatures?&#xA;&gt;     - This would no longer be symmetric.&#xA;&gt;     - What if nobody wants to close first? We’d need to work through the&#xA;game theory.&#xA;&gt;     - The person who wants their funds has an incentive.&#xA;&#xA;Fee responsibility assigned on the &#34;first-announcer&#34; can lead to&#xA;game-theory stale.&#xA;&#xA;&gt; - Why is RBF so hard for co-op close?&#xA;&gt;    - Closing should be marked as RBF, there’s no reason not to.&#xA;&gt;    - Just pick your fee rate, pay it and then come back and RBF if you’d&#xA;like. You can bump/broadcast as much as you like.&#xA;&gt;    - If we’re going to have something like that where we iterate, why&#xA;don’t we just do the simple version where we pick a fee and sign?&#xA;&gt;    - If you have to pay the whole fee, you have less incentive to sign.&#xA;&gt;  - Why is this linked to taproot work?&#xA;&gt;    - It needs to change anyway, and we need to add nonces.&#xA;&gt;  - What about, whoever wants to close sends a fee rate (paying the fees)&#xA;and the responder just sends a signature?&#xA; &gt;    - If you don’t have enough balance, you can’t close. But why do you&#xA;care anyway, you have no funds?&#xA;&#xA;Closing old or inactive channels has an impact if you have a limited number&#xA;of peers with opened channels slots.&#xA;&#xA;&gt; - For taproot/musig2 we need nonces:&#xA;&gt;  - Today we store the commitment signature from the remote party. We&#xA;don’t need to store our own signature - we can sign at time of broadcast.&#xA;&gt;  - To be able to sign you need the verification nonce - you could&#xA;remember it, or you could use a counter:&#xA;&gt;    - Counter based:&#xA;&gt;    - We re-use shachain and then just use it to generate nonces.&#xA;&gt;    - Start with a seed, derive from that, use it to generate nonces.&#xA;&gt;    - This way you don’t need to remember state, since it can always be&#xA;generated from what you already have.&#xA;&gt;    - Why is this safe?&#xA;&gt;    - We never re-use nonces.&#xA;&gt;    - The remote party never sees your partial signature.&#xA;&gt;    - The message always stays the same (the dangerous re-use case is&#xA;using the same nonce for different messages).&#xA;&gt;    - If we used the same nonce for different messages we could leak our&#xA;key.&#xA;&gt;    - You can combine the sighash + nonce to make it unique - this also&#xA;binds more.&#xA;&gt;    - Remote party will only see the full signature on chain, never your&#xA;partial one.&#xA;&gt;  - Each party has sign and verify nonces, 4 total.&#xA;&gt;  - Co-op close only has 2 because it’s symmetric.&#xA;&#xA;(I don&#39;t know when mailing list post max size will be reached)&#xA;&#xA;Counter-based nonces versus stateful memorization of them from a user&#xA;perspective depends on the hardware capabilities you have access to.&#xA;&#xA;The taproot schnorr flow could be transparent from the underlying signature&#xA;scheme (FROST, musig2, TAPS in the future maybe).&#xA;&#xA;&gt; ### Gossip V1.5 vs V2&#xA;&gt; - How much do we care about script binding?&#xA;&gt; - It it’s loose, it can be any script - you can advertise any UTXO.&#xA;&gt; - You revel less information, just providing a full signature with the&#xA;full taproot public key.&#xA;&gt; - If it’s tight, you have to provide two keys and then use the BIP 86&#xA;tweak to check that it’s a 2-of-2 multisig.&#xA;&gt; - Should we fully bind to the script, or just allow any taproot output?&#xA;&gt; - Don’t see why we’d want additional overhead.&#xA;&gt; - Any taproot output can be a channel - let people experiment.&#xA;&gt; - We shouldn’t have cared in the first place, so it doesn’t matter what&#xA;it’s bound to.&#xA;&gt; - It’s just there for anti-DOS, just need to prove that you can sign.&#xA;&gt; - Let every taproot output be a lightning channel, amen.&#xA;&#xA;The script binding gone matters in terms of DoS protection in a future&#xA;where different types of channels might not have the same &#34;routing&#xA;reliability&#34; value in scoring algorithms (e.g size of the satisfying&#xA;witness being a function of the off-chain fees in case of probabilistic&#xA;force-close).&#xA;&#xA;At scale, peered by the script gossips authentication can be needed to&#xA;avoid asymmetries in channel value being exploited in routing.&#xA;&#xA;&gt; - We’re going to decouple:&#xA;&gt; - You still need a UTXO but it doesn’t matter what it looks like.&#xA;&gt; - This also allows other channel types in future.&#xA;&gt;  - We send:&#xA;&gt;    - UTXO: unspent and in the UTXO set&#xA;&gt;    - Two node pubkeys&#xA;&gt;    - One signature&#xA;&gt; - How much do we care about amount binding?&#xA;&gt;  - Today it is exact.&#xA;&gt;    - People use it for capacity graphs.&#xA;&gt;    - Graph go up.&#xA;&gt;    - We can watch the chain for spends when we know which UTXO to watch&#xA;per-channel.&#xA;&gt;  - Is there an impact on pathfinding if we over-advertize?&#xA;&gt;    - We use capacity to pathfind.&#xA;&gt;    - What’s the worst case if people lie? We don’t use them.&#xA;&gt;  - If we’ve already agreed that this can be a UTXO that isn’t a channel,&#xA;then it shouldn’t matter.&#xA;&#xA;Over-advertize comes as bandwidth drain on the network, and therefore&#xA;reduces the ability of low-performance clients to be first-class citizens&#xA;of the Lightning routing network, a downside in privacy.&#xA;&#xA;&gt; - If you allow value magnification, we can use a single UTXO to claim for&#xA;multiple channels. Even in the most naive version (say 5x), you’re only&#xA;revealing 20% of your UTXOs.&#xA;&gt; - How much leverage can we allow? The only limit is denial of service.&#xA;&gt; - There’s the potential for a market for UTXOs.&#xA;&gt; - There’s a privacy trade-off:&#xA;&gt; - If you one-to-one map them, then there’s no privacy gain.&#xA;&gt;  - Do we know that you get substantial privacy?&#xA;&gt;    - Even if you have two UTXOs and two channels, those UTXOs are now not&#xA;linked (because you can just use the first one to advertise).&#xA;&gt;    - This is only assuming that somebody implements it/ infrastructure is&#xA;built out.&#xA;&gt;    - People could create more elaborate things over time, even if&#xA;implementations do the “dumb” way.&#xA;&#xA;Privacy of a UTXO in gossip can be abstracted from the attributes one wish&#xA;to reveal, see&#xA;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-May/021686.html&#xA;&#xA;&gt; - Gossip 1.5 (ie, with amount binding) fits in the current flow, V2 (ie,&#xA;without amount binding) has a very different scope.&#xA;&gt; - It’s a big step, and you don’t truly know until you implement it.&#xA;&gt; - What about things like: a very large node and a very small node, whose&#xA;announced UTXO do you use?&#xA;&gt; - We decided not to put UTXOs in node announcement, so we’d put it in&#xA;channel announcement:&#xA;&gt;  - Sometimes there’s a UTXO, sometimes there isn’t.&#xA;&gt; - You look at a node’s previous channels to see if they still have&#xA;“quota”.&#xA;&gt; - If you don’t have “quota” left, you have to include a signature TLV.&#xA;&gt; - With the goal of publicly announcing taproot channels, 1.5 gets us&#xA;there and is a much smaller code change.&#xA;&#xA;Native announcement bandwidth/rate-limit based &#34;quota&#34; might not reflect&#xA;what the end consumer of the gossip is interested for privacy, efficient&#xA;paths, payment reliability, etc.&#xA;&#xA;&gt; - We’ve talked alot about capacity for pathfinding, but we haven’t really&#xA;touched on control valves like max HTLC:&#xA;&gt;  - Currently we don’t use these valves to tune our pathfinding, people&#xA;don’t use it.&#xA;&gt; - If we get better here, we won’t need capacity.&#xA;&gt;  - This value is already &lt; 50% anyway.&#xA;&gt; - If we don’t un-bind amounts now, when will we do it?&#xA;&#xA;Channel policy parameters could be dynamic during channel lifetime to&#xA;enable more fine-grained liquidity adjustment, without compromising&#xA;security risks due to things like &#34;flood&amp;loot&#34;.&#xA;&#xA;&gt; - It’s always a lower priority and everyone is busy.&#xA;&gt;  - If we allow overcommitting by some factor now, it’s not unrealistic&#xA;that it will allow some degree of privacy.&#xA;&gt;  - Between these features, we have opened the door to leasing UTXOs:&#xA;&gt;    - Before we do more over-commitment, let’s see if anybody uses it?&#xA;&gt; - We add channel capacity to the channel announcement with a feature bit:&#xA;&gt; - If we turn the feature off, we are on-to-one mapped.&#xA;&gt; - But a node can’t use the upgraded version until everyone is upgraded?&#xA;&gt;     - Our current “get everyone upgraded” cycle is 18 months (or a CVE).&#xA;&#xA;The Lightning development community as a whole together apologizes for the&#xA;current state of Lightning implementations and has never considered&#xA;safety-critical CVEs as a &#34;trojan horse&#34; to harmonize gossips and other&#xA;minor features across the ecosystem.&#xA;&#xA;&gt;  - If you’re upgrading to 2x multiplier, nobody on 1x will accept that&#xA;gossip.&#xA;&gt;    - People will not pay for privacy (via lost revenue of people not&#xA;seeing their gossip).&#xA;&#xA;People *might* pay for privacy when their services operations and the&#xA;competitive advantage is dependent on it.&#xA;&#xA;&gt; - This is additive to defeating chain analysis.&#xA;&gt;    - Private UTXO management is already complicated, we don’t know the&#xA;ideal that we’re working towards.&#xA;&gt; - What about if we just set it to 2 today?&#xA;&gt; - Is 2 qualitatively better than 1 (without script binding) today?&#xA;&gt; - Will a marketplace magically emerge if we allow over-commitment?&#xA;&gt; - We don’t know the implications of setting a global multiplier for&#xA;routing or denial of service, and we don’t have a clear view of what&#xA;privacy would look like (other than “some”  improvement).&#xA;&gt; - We agree that adding a multiplier doesn’t break the network.&#xA;&gt; - People with a lower value will see a subnet when we upgrade.&#xA;&gt; - We’re going to go with gossip “1.75”:&#xA;&gt; - Bind to amount but not script.&#xA;&gt;  - We include a TLV cut out that paves the way to overcommitment.&#xA;&#xA;The data scope of the gossip (and future cryptosystems to cipher them) has&#xA;an impact on low-bandwidth and performance-constrained mobile clients.&#xA;&#xA;&gt; - There are a few paths we could take to get multi-sig for one channel&#xA;party:&#xA;&gt; - Script: just do it on the script level for the UTXO, but it’s heavy&#xA;handed.&#xA;&gt;  - FROSTy: you end up having to do a bunch of things around fault&#xA;tolerance which require a more intense setup. You also may not want the&#xA;shachain to be known by all of the parties &gt; in the setup (we have an ugly&#xA;solution for this, we think).&#xA;&gt;  - Recursive musig:&#xA;&gt; - Context: you have one key in the party, but you actually want it to be&#xA;multiple keys under the hood. You don’t want any single party to know the&#xA;revocation secrets, so you have to each have a part and combine them&#xA;&gt; - Ugliest solution: just create distinct values and store them.&#xA;&gt; - Less ugly solution uses multiple shachains:&#xA;&gt;  - Right now we have a shachan, and we reveal two leaves of it.&#xA;&gt;  - You have 8 shachains, and you XOR them all together.&#xA;&gt;    - Why do we need 8? That’ll serve a 5-of-7.&#xA;&gt;    - Maybe we need 21? 5 choose 7, we’re not sure.&#xA;&gt; - How does this work with K-of-N?&#xA;&gt;     - Each party has a piece, and you can always combine them in&#xA;different combinations (of K pieces) to get to the secret you’re using.&#xA;&#xA;Sharding of the revocation secret across multiple device signers requires a&#xA;consistent consensus algorithm if fault-tolerance is a design property.&#xA;&#xA;&gt; ### PTLCs&#xA;&gt; - We can do PTLCs in two ways:&#xA;&gt; - Regular musig&#xA;&gt; - Adaptor signatures&#xA;&gt; - Do they work with trampoline as defined today?&#xA;&gt;  - The sender picks all the blinding factors today, so it’s fine.&#xA;&gt; - There’s a paper called: splitting locally while routing&#xA;interdimensionally:&#xA;&gt; - You can let intermediate nodes do splitting because they know all the&#xA;local values.&#xA;&gt; - Then can generate new blinding factors and split out to the next node.&#xA;&gt; - Adaptor signatures could possibly be combined for PTLCs that get fanned&#xA;out then combined.&#xA;&gt; - There are a few options for redundant overpayment (ie, “stuckless”&#xA;payments):&#xA;&gt; - Boomerang:&#xA;&gt;    - Preimages are coefficients of a polynomial, and you commit to the&#xA;polynomial itself.&#xA;&gt;    - If you have a degree P polynomial and you take P+1 shares, then you&#xA;can claim in the other direction.&#xA;&gt;    - Quite complex.&#xA;&gt;    - You have to agree on the number of splits in advance.&#xA;&gt; - Spear:&#xA;&gt;  - H2TLC: there are two payment hashes per-HTLC, one if from the sender&#xA;and one is from the invoice.&#xA; &gt;   - When you send a payment, the sender only reveals the right number of&#xA;sender preimages.&#xA;&gt;   - This also gives us HTLC acknowledgement, which is nice.&#xA;&gt;  - You can concurrently split, and then spray and pray.&#xA;&gt;    - Interaction is required to get preimages.&#xA;&gt; - Do we want to add redundant overpayment with PTLCs?&#xA;&gt; - We’ll introduce a communication requirement.&#xA;&gt; - Do we need to decide that before we do PTLCs?&#xA;&gt;    - Can we go for the simplest possible option first and then add it?&#xA;&gt;    - For spear, yes - the intermediate nodes don’t know that it’s two&#xA;hashes.&#xA;&gt;    - We could build them out without thinking about overpayment, and then&#xA;mix in a sender secret so that we can claim a subset.&#xA;&gt; - We’ll have more round trips, but you also have the ability to ACK HTLCs&#xA;that have arrived.&#xA;&gt; - Spray and pray uses the same about as you would with our current “send&#xA;/ wait / send”, it’s just concurrently not serially.&#xA;&gt; - Is it a problem that HLTCs that aren’t settled don’t pay fees?&#xA;&gt; - You’re paying the fastest routes.&#xA;&gt; - Even if it’s random, you still get a constant factor of what we should&#xA;have gotten otherwise.&#xA;&gt; - It makes sense to use onion messages if it’s available to us.&#xA;&gt; - Are we getting payment acknowledgement? Seems so!&#xA;&#xA;Scripteable PTLCs based on the structure of the elliptic can be advanced by&#xA;verifiable encryption, and other cryptosystems, see&#xA;https://lists.linuxfoundation.org/pipermail/lightning-dev/2019-October/002213.html&#xA;&#xA;Cancellable PTLCs are coming with trade-off in term of interactivity or&#xA;default of the point contributing participant.&#xA;&#xA;&gt; ### Hybrid Approach to Channel Jamming&#xA;&gt; - We’ve been talking about jamming for 8 years, back and forth on the&#xA;mailing list.&#xA;&gt; - We’d like to find a way to move forward so that we can get something&#xA;done.&#xA;&gt; - Generally when we think about jamming, there are three “classes” of&#xA;mitigations:&#xA;&gt;  - Monetary: unconditional fees, implemented in various ways.&#xA;&gt;  - Reputation: locally assessed (global is terrible)&#xA;&gt;  - Scarce Resources: POW, stake, tokens.&#xA;&gt; - The problem is that none of these solutions work in isolation.&#xA;&gt; - Monetary: the cost that will deter an attacker is unreasonable for an&#xA;honest user, and the cost that is reasonable for an honest user is too low&#xA;for an attacker.&#xA;&gt;  - Reputation: any system needs to define some threshold that is&#xA;considered good behavior, and an attacker can aim to fall just under it.&#xA;Eg: if you need a payment to resolve in 1 minute, you can fall just under&#xA;that bar.&#xA;&gt;  - Scarce resources: like with monetary, pricing doesn’t work out.&#xA;&gt;    - Paper: proof of work doesn’t work for email spam, as an example.&#xA;&gt;    - Since scarce resources can be purchased, they could be considered a&#xA;subset of monetary.&#xA;&gt; - There is no silver bullet for jamming mitigation.&#xA;&#xA;This is a good resume of the state of the discussions, It should be noted,&#xA;the Tor project is aiming to solve the DoS issues in a peer-to-peer network&#xA;like LN with proof-of-work.&#xA;&#xA;Mainstain Internet has been working on Privacy Pass, of which some jamming&#xA;mitigation flavors are inspired.&#xA;&#xA;If the Lightning development community solve the jamming issue, a Turing&#xA;Award could be recognized as whole (or maybe a Nobel Prize in economics).&#xA;&#xA;&gt; - Combination of unconditional fees and reputation:&#xA;&gt; - Good behavior grants access to more resources, bad behavior loses it.&#xA;&gt; - If you want to fall just below that threshold, we close the gap with&#xA;unconditional fees.&#xA;&gt; - Looking a these three classes implemented in isolation, are there any&#xA;unresolved questions that people have - “what about this”?&#xA;&gt;  - Doesn’t POW get you around the cold start problem in reputation where&#xA;if you want to put money in to quickly bootstrap you can?&#xA;&gt;    - Since POW can be rented, it’s essentially a monetary solution - just&#xA;extra steps.&#xA;&#xA;BIP154 has been proposed early on and discarded for its drain on mobile&#xA;clients batteries.&#xA;&#xA;&gt;   - We run into the same pricing issues.&#xA;&gt; - Why these combinations?&#xA;&gt;  - Since scarce resources are essentially monetary, we think that&#xA;unconditional fees are the simplest possible monetary solution.&#xA;&gt; - Unconditional Fees:&#xA;&gt; - As a sender, you’re building a route and losing money if it doesn’t go&#xA;through?&#xA;&gt;    - Yes, but they only need to be trivially small compared to success&#xA;case fee budgets.&#xA;&gt;    - You can also eventually succeed so long as you retry enough, even if&#xA;failure rates are very high.&#xA;&gt; - How do you know that these fees will be small? The market could decide&#xA;otherwise.&#xA;&#xA;Static unconditional fees is a limited tool in a world where rational&#xA;economic actors are pricing their liquidity in function of demand.&#xA;&#xA;&gt;   - Routing nodes still need to be competitive. If you put an&#xA;unconditional fee of 100x the success case, senders will choose to not send&#xA;through you because you have no incentive to forward.&#xA;&gt;    - We could also add an in-protocol limit or sender-side advisory.&#xA;&gt; - With unconditional fees, a fast jamming attack is very clearly paid for.&#xA;&gt; - Reputation:&#xA;&gt; - The easiest way to jam somebody today is to send a bunch of HTLCs&#xA;through them and hold them for two weeks. We’re focusing on reputation to&#xA;begin with, because in this case we &gt; can quite easily identify that people&#xA;are doing something wrong (at the extremes).&#xA;&gt;  - If you have a reputation score that blows up on failed attempts,&#xA;doesn’t that fix it without upfront fees?&#xA;&#xA;The local reputation score of the failed attempts entity might be in a&#xA;situation of informational asymmetries, therefore provoking a damage&#xA;superior to the reputation acquisition cost.&#xA;&#xA;&gt;  - We have to allow some natural rate of failure in the network.&#xA;&gt;    - An attacker can still aim to fall just below that failure threshold&#xA;and go through multiple channels to attack an individual channel.&#xA;&gt;    - THere isn’t any way to set a bar that an attacker can’t fall just&#xA;beneath.&#xA;&gt;    - Isn’t this the same for reputation? We have a suggestion for&#xA;reputation but all of them fail because they can be gamed below the bar.&#xA;&gt; - If reputation matches the regular operation of nodes on the network,&#xA;you will naturally build reputation up over time.&#xA;&gt;    - If we do not match reputation accumulation to what normal nodes do,&#xA;then an attacker can take some other action to get more reputation than the&#xA;rest of the network. We don’t want attackers to be able to get ahead of&#xA;regular nodes.&#xA;&gt;    - Let’s say you get one point for success and one for failure, a&#xA;normal node will always have bad reputation. An attacker could then send 1&#xA;say payments all day long, pay a fee for it &gt; and gain reputation.&#xA;&gt; - Can you define jamming? Is it stuck HTLCs or a lot of 1 sat HTLCS&#xA;spamming up your DB?&#xA;&#xA;Jamming is an economic notion, as such relying on the subjectivism of node&#xA;appreciation of local ressources.&#xA;&#xA;&gt; - Jamming is holding HTLCs to or streaming constant failed HTLCs to&#xA;prevent a channel from operating.&#xA;&gt;  - This can be achieved with slots or liquidity.&#xA;&gt; - Does the system still work if users are playing with reputation?&#xA;&gt;  - In the steady state, it doesn’t really matter whether a node has a&#xA;good reputation or not.&#xA;&gt;  - If users start to set reputation in a way that doesn’t reflect normal&#xA;operation of the network, it will only affect their ability to route when&#xA;under attack.&#xA;&gt; - Isn’t reputation monetary as well, as you can buy a whole node?&#xA;&gt;  - There is a connection, and yes in the extreme case you can buy an&#xA;entire identity.&#xA;&gt;  - Even if you do this, the resource bucketing doesn’t give you a “golden&#xA;ticket” to consume all slots/liquidity with good reputation, so you’re&#xA;still limited in what you can do.&#xA;&gt; - Can we learn anything from research elsewhere / the way things are done&#xA;on the internet?&#xA;&gt;  - A lot of our confidence that these solutions don’t work in isolation&#xA;is based on previous work looking at spam on the internet.&#xA;&gt;  - Lightning is also unique because it is a monetary network - we have&#xA;money built in, so we have different tools to use.&#xA;&#xA;Spamming and DoS are not solved on the Internet and one of the reason we&#39;re&#xA;relying on chain of X.509 certificates for modern data communication.&#xA;&#xA;&gt; - To me, it seems like if the scarce resource that we’re trying to&#xA;allocate is HTLC slots and upfront fees you can pay me upfront fees for the&#xA;worst case (say two weeks) and then if it settles if 5 seconds you give it&#xA;back?&#xA;&gt;  - The dream solution is to only pay for the amount of time that a HTLC&#xA;is held in flight.&#xA;&gt;  - The problem here is that there’s no way to prove time when things go&#xA;wrong, and any solution without a universal clock will fall back on&#xA;cooperation which breaks down in the case of &gt; an attack.&#xA;&#xA;There is a universal clock in Bitcoin called the chain height advances.&#xA;&#xA;&gt; - No honest user will be willing to pay the price for the worst case,&#xA;which gets us back to the pricing issue.&#xA;&gt; - There’s also an incentives issue when the “rent” we pay for these two&#xA;weeks worst case is more than the forwarding fee, so a router may be&#xA;incentivized to just hang on to that amount and bank it.&#xA;&gt;  - We’ve talked about forwards and backwards fees extensively on the&#xA;mailing list:&#xA;&gt;    - They’re not large enough to be enforceable, so somebody always has&#xA;to give the money back off chain.&#xA;&gt;    - This means that we rely on cooperation for this refund.&#xA;&gt;    - The complexity of this type of system is very high, and we start to&#xA;open up new “non-cooperation” concerns - can we be attacked using this&#xA;mechanism itself?&#xA;&gt;    - Doesn’t an attacker need to be directly connected to you to steal in&#xA;the non-cooperative case?&#xA;&gt;    - At the end of the day, somebody ends up getting robbed when we can’t&#xA;pull the money from the source (attacker).&#xA;&gt; - Does everybody feel resolved on the statement that we need to take this&#xA;hybrid approach to clamp down on jamming? Are there any “what about&#xA;solution X” questions left for anyone? Nothing came up.&#xA;&#xA;Hybrid approach sounds the best technical compromise in a world where pure&#xA;monetary strategy (i.e pay 100% of worst-liquidity valuation all the time)&#xA;is reducing the economic openess of Lightning marginal users.&#xA;&#xA;&gt; Do any of these assumptions change with trampoline? Don’t think it’s&#xA;related.&#xA;&#xA;Yes, one will have to price on the HTLC carrying risk in the trampoline&#xA;offering service.&#xA;&#xA;&gt; - Your reputation is at stake when you endorse, when do you decide to&#xA;endorse my own payments?&#xA;&gt; - You do the things you were already doing to figure out a good route.&#xA;Paths that you think have good liquidity, and have had success with in the&#xA;past.&#xA;&gt; - What about redundant overpayment, some of your HTLCs are bound to fail?&#xA;&gt;  - Provided that they fail fast, it shouldn’t be a problem.&#xA;&gt; - Is it possible that the case where general slots are perpetually filled&#xA;by attackers becomes the steady state? And we can’t tell the difference&#xA;between a regular user and attacker.&#xA;&gt;  - This is where unconditional fees come in, if somebody wants to&#xA;perpetually fill up the general bucket they have to pay for it.&#xA;&gt; - Is there anything we’d like to see that will help us have move&#xA;confidence here?&#xA;&gt; - What do you think is missing from the information presented?&#xA;&gt;    - We can simulate the steady state / create synthetic data, but can’t&#xA;simulate every attack. Would like to spend more time thinking through the&#xA;ways this could possibly be abused.&#xA;&gt; - Would it help to run this on signet? Or scaling lightning?&#xA;&gt;     - Its a little easier to produce various profiles of activity on&#xA;regtest[.&#xA;&#xA;Generally resource bucketing can be designed with insights from modern&#xA;internet protocol in term of TCP congestion control and other scarce&#xA;network resource (e.g DNS records). Do not reinvent the wheel.&#xA;&#xA;&gt;  - What NACK says is: I’ve ignored all of your updates and I’m&#xA;progressing to the next commitment.&#xA;&#xA;If resource bucketing or link-level liquidity management starts to be&#xA;involved, one can mask behind &#34;NACK&#34; to halt the channel progress, without&#xA;the reputation downgrade. Layer violation issue.&#xA;&#xA;&gt; - How confident are we that we can pull things out? Only things that are&#xA;brand new will be easy to do this with.&#xA;&gt; - Keeping context in your head is hard, and jumping between documents&#xA;breaks up thought.&#xA;&gt; - Should we fully copy the current document and copy it?&#xA;&#xA;In a world where users might be slow to upgrade to the latest channel&#xA;features, including when they have clear privacy or security advantages for&#xA;economic reasons (on-chain fees), old documentation maintenance is&#xA;reasonable, and as such doc versioning is better.&#xA;&#xA;&gt; - For small things, we can just throw out the old stuff.&#xA;&gt; - If it were possible to modularize and have working groups, that would&#xA;be great but it seems like we’d tread on each other’s toes.&#xA;&#xA;IETF has been doing WG for decades, this obviously comes with trade-off to&#xA;avoid broken protocols and modules in all sense, though probably the only&#xA;socially scalable process to move forward. Interface between WG will come&#xA;with time.&#xA;&#xA;&gt; ### Async Payments/ Trampoline&#xA;&gt; - Blinded payments are a nice improvement for trampoline because you&#xA;don’t know where the recipient is.&#xA;&gt; - The high level idea is:&#xA;&gt;  - Light nodes only see a small part of the network that they are close&#xA;to.&#xA;&gt;  - Recipients only give a few trampolines in the network that they can be&#xA;reached via.&#xA;&gt;  - In the onion for the first trampoline, there will be an onion for the&#xA;second trampoline.&#xA;&gt;  - You just need to give a trampoline a blinded path and they can do the&#xA;rest.&#xA;&gt; - If you only have one trampoline, they can probably make a good guess&#xA;where the payment came from (it’s in the reachable neighborhood).&#xA;&gt; - Is there a new sync mode for trampoline gossip?&#xA;&gt;  - We’d now need radius-based gossip rather than block based.&#xA;&gt;  - The trust version is just getting this from a LSP.&#xA;&gt;  - In cold bootstrap, you’re probably going to open a channel so you ask&#xA;them for gossip.&#xA;&gt; - Can you split MPP over trampoline? Yes.&#xA;&gt; - Routing nodes can learn more about the network because they make their&#xA;own attempts.&#xA;&#xA;Onion bandwidth cost ain&#39;t gonna be free.&#xA;&#xA;Best,&#xA;Antoine&#xA;&#xA;Le jeu. 20 juil. 2023 à 01:09, Carla Kirk-Cohen &lt;kirkcohenc at gmail.com&gt; a&#xA;écrit :&#xA;&#xA;&gt; Hi List,&#xA;&gt;&#xA;&gt; At the end of June we got together in NYC for the annual specification&#xA;&gt; meeting. This time around we made an attempt at taking transcript-style&#xA;&gt; notes which are available here:&#xA;&gt; https://docs.google.com/document/d/1MZhAH82YLEXWz4bTnSQcdTQ03FpH4JpukK9Pm7V02bk/edit?usp=sharing&#xA;&gt; .&#xA;&gt; To decrease our dependence on my google drive I&#39;ve also included the&#xA;&gt; full set of notes at the end of this email (no promises about the&#xA;&gt; formatting however).&#xA;&gt;&#xA;&gt; We made a semi-successful attempt at recording larger group topics, so&#xA;&gt; these notes roughly follow the structure of the discussions that we had&#xA;&gt; at the summit (rather than being a summary). Speakers are not&#xA;&gt; attributed, and any mistakes are my own.&#xA;&gt;&#xA;&gt; Thanks to everyone who traveled far, Wolf for hosting us in style in&#xA;&gt; NYC and to Michael Levin for helping out with notes &lt;3&#xA;&gt;&#xA;&gt; # LN Summit - NYC 2023&#xA;&gt;&#xA;&gt; ## Day One&#xA;&gt;&#xA;&gt; ### Package Relay&#xA;&gt; - The current proposal for package relay is ancestor package relay:&#xA;&gt;   - One child can have up to 24 ancestors.&#xA;&gt;   - Right now, we only score mempool transactions by ancestry anyway, so&#xA;&gt; there isn’t much point in other types of packages.&#xA;&gt; - For base package relay, commitment transactions will still need to have&#xA;&gt; the minimum relay fee.&#xA;&gt;   - No batch bumping is allowed, because it can open up pinning attacks.&#xA;&gt;   - With one anchor, we can package RBF.&#xA;&gt; - Once we have package relay, it will be easier to get things into the&#xA;&gt; mempool.&#xA;&gt; - Once we have V3 transactions, we can drop minimum relay fees because we&#xA;&gt; are restricted to one child pays for one parent transaction:&#xA;&gt;   - The size of these transactions is limited.&#xA;&gt;   - You can’t arbitrarily attach junk to pin them.&#xA;&gt; - If we want to get rid of 330 sat anchors, we will need ephemeral&#xA;&gt; anchors:&#xA;&gt;   - If there is an OP_TRUE output, it can be any value including zero.&#xA;&gt;   - It must be spent by a child in the same package.&#xA;&gt;   - Only one child can spend the anchor (because it’s one output).&#xA;&gt;   - The parent must be zero fee because we never want it in a block on its&#xA;&gt; own, or relayed without the child.&#xA;&gt;   - If the child is evicted, we really want the parent to be evicted as&#xA;&gt; well (there are some odd edge cases at the bottom of the mempool, so zero&#xA;&gt; ensures that we’ll definitely be evicted).&#xA;&gt; - The bigger change is with HLTCs:&#xA;&gt;   - With SIGHASH_ANYONECANPAY, your counterparty can inflate the size of&#xA;&gt; your transaction - eg: HTLC success, anyone can attack junk.&#xA;&gt;   - How much do we want to change here?&#xA;&gt; - So, we can get to zero fee commitment transactions and one (ephemeral)&#xA;&gt; anchor per transaction.&#xA;&gt;   - With zero fee commitments, where do we put trimmed HTLCs?&#xA;&gt;      - You can just drop it in an OP_TRUE, and reasonably expect the miner&#xA;&gt; to take it.&#xA;&gt; - In a commitment with to_self and to_remote and an ephemeral anchor that&#xA;&gt; must be spent, you can drop the 1 block CSV in the transaction that does&#xA;&gt; not have a revocation path (ie, you can drop it for to_remote).&#xA;&gt;   - Any spend of this transaction must spend the one anchor in the same&#xA;&gt; block.&#xA;&gt;   - No other output is eligible to have a tx attached to it, so we don’t&#xA;&gt; need the delay anymore.&#xA;&gt;      - Theoretically, your counterparty could get hold of your signed&#xA;&gt; local copy, but then you can just RBF.&#xA;&gt; - Since these will be V3 transactions, the size of the child must be small&#xA;&gt; so you can’t pin it.&#xA;&gt;   - Both parties can RBF the child spending the ephemeral anchor.&#xA;&gt;   - This isn’t specifically tailored to lightning, it’s a more general&#xA;&gt; concept.&#xA;&gt;   - Child transactions of V3 are implicitly RBF, so we won’t have to worry&#xA;&gt; about it not being replaceable (no inheritance bug).&#xA;&gt; - In general, when we’re changing the mempool policy we want to make the&#xA;&gt; minimal relaxation that allows the best improvement.&#xA;&gt; - We need “top of block” mempool / cluster mempool:&#xA;&gt;   - The mempool can have clusters of transactions (parents/children&#xA;&gt; arranged in various topologies) and the whole mempool could even be a&#xA;&gt; single cluster (think a trellis of parents and children “zigzagging”).&#xA;&gt;   - The mining algorithm will pick one “vertical” using ancestor fee rate.&#xA;&gt;   - There are some situations where you add a single transaction and it&#xA;&gt; would completely change the order in which our current selection picks&#xA;&gt; things.&#xA;&gt;   - Cluster mempool groups transactions into “clusters” that make this&#xA;&gt; easier to sort and reason about.&#xA;&gt;   - It can be expensive (which introduces a risk of denial of service),&#xA;&gt; but if we have limits on cluster sizes then we can limit this.&#xA;&gt;   - This is the only way to get package RBF.&#xA;&gt; - How far along is all of this?&#xA;&gt;   - BIP331: the P2P part that allows different package types is moving&#xA;&gt; along and implementation is happening. This is done in a way that would&#xA;&gt; allow us to add different types of packages in future if we need them.&#xA;&gt;      - There are some improvements being made to core’s orphan pool,&#xA;&gt; because we need to make sure that peers can’t knock orphans out of your&#xA;&gt; pool that you may later need to retrieve as package ancestors.&#xA;&gt;      - We reserve some spots with tokens, and if you have a token we keep&#xA;&gt; some space for you.&#xA;&gt;   - V3 transactions: implemented on top of package relay, since they don’t&#xA;&gt; really make sense without it. This is an opt-in regime where you make&#xA;&gt; things easier to RBF.&#xA;&gt;   - Ephemeral Anchors: on top of package relay and V3.&#xA;&gt;   - Cluster Mempool: This is further out, but there’s been some progress.&#xA;&gt; Right now people are working on the linearization algorithm.&#xA;&gt; - If these changes don’t suit lightning’s use case, now is the time to&#xA;&gt; speak because it’s all being worked on.&#xA;&gt;   - In what way does it not fit LN, as it’s currently designed?&#xA;&gt;      - With the V3 paradigm, to stop all pinning vectors, HTLC&#xA;&gt; transactions will need to get anchors and you will have to drop&#xA;&gt; ANYONECANPAY (to use anchors instead).&#xA;&gt;      - Could we fix this with additional restrictions on V3 (or a V4)?&#xA;&gt;      - You could do something where V4 means that you can have no&#xA;&gt; ancestors and no descendants (in the mempool).&#xA;&gt;      - V3 restricts the child, you could also restrict the parent further.&#xA;&gt;      - You could have a heuristic on the number of inputs and outputs, but&#xA;&gt; anyone can pay or add inputs.&#xA;&gt;      - You could commit to the whole thing being some size by setting a&#xA;&gt; series of bits in sequence to mark maximum size but that would involve&#xA;&gt; running script (which is annoying).&#xA;&gt;      - The history of V3 was to allow a parent of any size because&#xA;&gt; commitment transactions can be any size.&#xA;&gt; - What about keeping HTLCs the way they are today?&#xA;&gt;   - A lot of other things are less pineapple, maybe that’s ok? It’s a step&#xA;&gt; forward.&#xA;&gt;   - The long term solution is to change relay policy to top of mempool. We&#xA;&gt; shouldn’t be doing things until the long term solution is clear, and we&#xA;&gt; shouldn’t change the protocol in a way that doesn’t fit with the long term.&#xA;&gt;   - We already do a lot of arbitrary things, if we were starting from day&#xA;&gt; one we wouldn’t do HTLCs with anchors (it’s too much bloat), and being&#xA;&gt; unable to RBF is more bloat because you overpay.&#xA;&gt;   - If the remote commitment is broadcast, you can spen the HTLC with V2.&#xA;&gt; You can’t add a V3 child (it won’t get in the mempool).&#xA;&gt;   - If you want to be consistent, even when it’s the remote commit you&#xA;&gt; need a presigned transaction, we should just use it as designed today.&#xA;&gt; - What is the “top of mempool” assumption?&#xA;&gt;   - If large transactions are at the top of your mempool, you (a miner)&#xA;&gt; want transactions with higher fee rates to increase your total revenue.&#xA;&gt;   - Today, you can’t really easily answer or reason about these questions.&#xA;&gt;   - We want to accept transactions in our mempool in a denial of service&#xA;&gt; resistant way that will strictly increase our miner fees.&#xA;&gt;   - If a transaction is at the top of your mempool, you may be more&#xA;&gt; willing to accept a replacement fee. If it’s way down in the mempool, you&#xA;&gt; would probably replace more slowly.&#xA;&gt;   - It’s conceivable that we could get here, but it’s years off.&#xA;&gt;      - Once we have this, pinning only happens with large transactions at&#xA;&gt; the bottom of the mempool. If you just slow roll these transactions, you&#xA;&gt; can just relay what you’ve got.&#xA;&gt;      - If somebody comes and replaces the bottom with something small&#xA;&gt; that’ll be mined in the next two blocks, you clearly want to accept that.&#xA;&gt; - Does cluster mempool fix rule 3?&#xA;&gt;   - No but they help.&#xA;&gt;   - Today when you get a transaction you don’t know which block it’s going&#xA;&gt; in - we don’t have a preference ordering.&#xA;&gt;   - Miners don’t make blocks as they go - with cluster mempool you can&#xA;&gt; make very fast block templates.&#xA;&gt;   - When talking about relay, you can ignore block making and just get a&#xA;&gt; very good estimate.&#xA;&gt; - The question is: when do we jump?&#xA;&gt;   - Wail until V3? Package Relay?&#xA;&gt;      - Package relay will help. You still negotiate fees but they don’t&#xA;&gt; matter as much.&#xA;&gt;      - We’d like to kill upate fee and have a magic number for fees, can&#xA;&gt; we do that when we get package relay?&#xA;&gt;      - Package relay is the hard part, V3 should be relatively easier&#xA;&gt; after that.&#xA;&gt;      - When we get V3 we can drop to zero fee.&#xA;&gt; - Is there a future where miners don’t care about policy at all?&#xA;&gt;   - Say, the block that I’m mining has V3 transactions. They’re just&#xA;&gt; maximizing fees so they’ll accept anything out of band, ignoring these new&#xA;&gt; policy rules.&#xA;&gt;   - Accelerators are already starting to emerge today - how are they doing&#xA;&gt; it?&#xA;&gt;   - We’re carving out a small space in which mempool rules work, and it’s&#xA;&gt; okay to work around it.&#xA;&gt;   - If a miner mines it, great - that’s what we want. The problem is not&#xA;&gt; getting mined (ie pinning).&#xA;&gt; - Figuring this out is not simple:&#xA;&gt;   - Today there are times where we accept replacements when we should&#xA;&gt; reject them and times where we reject replacements when we should accept&#xA;&gt; them.&#xA;&gt;   - There can be situations where miners will mine things that aren’t&#xA;&gt; incentive compatible (ie, not the best block template).&#xA;&gt; - What if somebody pays out of band not to mine?&#xA;&gt; - Ephemeral anchors are interesting, they never enter the UTXO set - if&#xA;&gt; the child gets evicted, you get evicted.&#xA;&gt;   - The first transaction being zero is optimal, want to be sure it’ll be&#xA;&gt; evicted (there are some mempool quirks).&#xA;&gt;   - It must be zero fee so that it will be evicted.&#xA;&gt; - Should we add trimmed HTLCs to the ephemeral anchor?&#xA;&gt;   - We don’t want to get above min relay fee because then we could hang&#xA;&gt; around in the mempool.&#xA;&gt;   - The eltoo implementation currently does this.&#xA;&gt;   - You can’t keep things in OP_TRUE because they’ll be taken.&#xA;&gt;   - You can also just put it in fees as before.&#xA;&gt; - More on cluster mempools:&#xA;&gt;   - It can be used for block selection, but it’s currently focused on&#xA;&gt; mempool selection.&#xA;&gt;   - You can simulate template selection with it.&#xA;&gt;   - When you’re mining, you have to pick from an ancestor downwards.&#xA;&gt;   - First we lineralize the transactions to flatten the structure&#xA;&gt; intelligently (by topology and fee rate).&#xA;&gt;   - Then we figure out the best ordering of this flat structure.&#xA;&gt;   - Each chunk in a cluster is less than 75 transactions, and a cluster&#xA;&gt; has chunks of transactions.&#xA;&gt;   - If you woul include a transaction with the ancestor, it goes in the&#xA;&gt; same chunk. Otherwise it goes in the next chunk.&#xA;&gt;   - Miners select the highest fee rate chunks, lower fee rate ones can&#xA;&gt; safely be evicted.&#xA;&gt;   - For replacement, you can just check replacement for a single cluster,&#xA;&gt; rechunk it and then resort the chunks.&#xA;&gt;      - It must beat the fee rate of the chunks to get in.&#xA;&gt;      - You can check how much it beats the chunk by, whether it would go&#xA;&gt; in the next block(s) and then decide.&#xA;&gt;   - Chunk ordering takes into account transaction size, beyond 25&#xA;&gt; transactions we just do ancestor set feerate.&#xA;&gt;   - One of the limits is going away, one is sticking around. We still have&#xA;&gt; sibling eviction issues.&#xA;&gt;   - Is one of the issues with chunks is that they’re limited by&#xA;&gt; transaction weight, 101 kilo-v-bytes, which is the maximum package size?&#xA;&gt;      - We should be okay, these limits are higher than present.&#xA;&gt;      - You can bound chunk size pretty easily.&#xA;&gt;   - If we get chunk fee rate replacement then you can do batch fee bumping&#xA;&gt; (eg, a bunch of ephemeral anchors that are all batched together).&#xA;&gt; - Are there long term policy implications for privacy for ephemeral&#xA;&gt; anchors?&#xA;&gt;   - You’re essentially opting into transaction sponsors?&#xA;&gt;   - If everyone uses V3 eventually there’s no issue.&#xA;&gt;   - For right now, it would be nice if V3 is only for unilateral closes.&#xA;&gt;   - It’s also useful in a custodial wallet setting, where you have one&#xA;&gt; team creating on chain transactions and the other attaching fees. This is a&#xA;&gt; common accounting headache. People can also non-interactively fee bump.&#xA;&gt;&#xA;&gt; ### Taproot&#xA;&gt; - Spec is still in draft right now, and the code is a bit ahead of the&#xA;&gt; test vectors.&#xA;&gt; - The biggest change that has been made is around anchors, which become&#xA;&gt; more complicated with taproot:&#xA;&gt;   - The revocation path on to_local takes the script path, so now we need&#xA;&gt; to reveal data for the anchor.&#xA;&gt;   - The downside is that revocation is more expensive - 32 more bytes in&#xA;&gt; the control block.&#xA;&gt; - The to_remote has a NUMS point, previously we just had multisig keys:&#xA;&gt;   - If you’re doing a rescan, you won’t know those keys.&#xA;&gt;   - Now you just need to know the NUMS point and you can always rescan.&#xA;&gt;   - The NUMS point itself is pretty verifiable, you just start with a&#xA;&gt; string and hash it.&#xA;&gt;   - It is constant, you just use it randomized with your key.&#xA;&gt; - The internal pubkey is constant on to_remote.&#xA;&gt; - Co-op close [broke into several different discussions]:&#xA;&gt;   - The idea here is to remove negotiation, since we’ve had disagreement&#xA;&gt; issues in the past.&#xA;&gt;   - In this version, the initiator just accepts the fee.&#xA;&gt;   - Do we want negotiation?&#xA;&gt;      - In the past we’ve had bugs with fee rate estimates that won’t&#xA;&gt; budge.&#xA;&gt;   - Why don’t we just pick our fees and send two sets of signatures?&#xA;&gt;      - This would no longer be symmetric.&#xA;&gt;      - What if nobody wants to close first? We’d need to work through the&#xA;&gt; game theory.&#xA;&gt;      - The person who wants their funds has an incentive.&#xA;&gt;   - Why is RBF so hard for co-op close?&#xA;&gt;      - Closing should be marked as RBF, there’s no reason not to.&#xA;&gt;      - Just pick your fee rate, pay it and then come back and RBF if you’d&#xA;&gt; like. You can bump/broadcast as much as you like.&#xA;&gt;      - If we’re going to have something like that where we iterate, why&#xA;&gt; don’t we just do the simple version where we pick a fee and sign?&#xA;&gt;      - If you have to pay the whole fee, you have less incentive to sign.&#xA;&gt;   - Why is this linked to taproot work?&#xA;&gt;      - It needs to change anyway, and we need to add nonces.&#xA;&gt;   - What about, whoever wants to close sends a fee rate (paying the fees)&#xA;&gt; and the responder just sends a signature?&#xA;&gt;      - If you don’t have enough balance, you can’t close. But why do you&#xA;&gt; care anyway, you have no funds?&#xA;&gt;      - We can do this as many times as we want.&#xA;&gt;   - Shutdown is still useful to clear the air on the channel.&#xA;&gt;   - When you reconnect, you start a new interaction completely.&#xA;&gt;   - TL;DR:&#xA;&gt;      - Shutdown message stays.&#xA;&gt;      - You send a signature with a fee rate.&#xA;&gt;      - The remote party signs it.&#xA;&gt;      - If they disagree, you do it again.&#xA;&gt;      - It’s all RBF-able.&#xA;&gt;      - You must retransmit shutdown, and you must respond with a shutdown.&#xA;&gt;      - You can send nonces at any time:&#xA;&gt;      - In revoke and ack.&#xA;&gt;      - On channel re-establish.&#xA;&gt; - For taproot/musig2 we need nonces:&#xA;&gt;   - Today we store the commitment signature from the remote party. We&#xA;&gt; don’t need to store our own signature - we can sign at time of broadcast.&#xA;&gt;   - To be able to sign you need the verification nonce - you could&#xA;&gt; remember it, or you could use a counter:&#xA;&gt;      - Counter based:&#xA;&gt;      - We re-use shachain and then just use it to generate nonces.&#xA;&gt;      - Start with a seed, derive from that, use it to generate nonces.&#xA;&gt;      - This way you don’t need to remember state, since it can always be&#xA;&gt; generated from what you already have.&#xA;&gt;      - Why is this safe?&#xA;&gt;      - We never re-use nonces.&#xA;&gt;      - The remote party never sees your partial signature.&#xA;&gt;      - The message always stays the same (the dangerous re-use case is&#xA;&gt; using the same nonce for different messages).&#xA;&gt;      - If we used the same nonce for different messages we could leak our&#xA;&gt; key.&#xA;&gt;      - You can combine the sighash + nonce to make it unique - this also&#xA;&gt; binds more.&#xA;&gt;      - Remote party will only see the full signature on chain, never your&#xA;&gt; partial one.&#xA;&gt;   - Each party has sign and verify nonces, 4 total.&#xA;&gt;   - Co-op close only has 2 because it’s symmetric.&#xA;&gt;&#xA;&gt; ### Gossip V1.5 vs V2&#xA;&gt; - How much do we care about script binding?&#xA;&gt;   - It it’s loose, it can be any script - you can advertise any UTXO.&#xA;&gt;   - You revel less information, just providing a full signature with the&#xA;&gt; full taproot public key.&#xA;&gt;   - If it’s tight, you have to provide two keys and then use the BIP 86&#xA;&gt; tweak to check that it’s a 2-of-2 multisig.&#xA;&gt; - Should we fully bind to the script, or just allow any taproot output?&#xA;&gt;   - Don’t see why we’d want additional overhead.&#xA;&gt;   - Any taproot output can be a channel - let people experiment.&#xA;&gt;   - We shouldn’t have cared in the first place, so it doesn’t matter what&#xA;&gt; it’s bound to.&#xA;&gt;   - It’s just there for anti-DOS, just need to prove that you can sign.&#xA;&gt; - Let every taproot output be a lightning channel, amen.&#xA;&gt; - We’re going to decouple:&#xA;&gt;   - You still need a UTXO but it doesn’t matter what it looks like.&#xA;&gt;   - This also allows other channel types in future.&#xA;&gt;   - We send:&#xA;&gt;      - UTXO: unspent and in the UTXO set&#xA;&gt;      - Two node pubkeys&#xA;&gt;      - One signature&#xA;&gt; - How much do we care about amount binding?&#xA;&gt;   - Today it is exact.&#xA;&gt;      - People use it for capacity graphs.&#xA;&gt;      - Graph go up.&#xA;&gt;      - We can watch the chain for spends when we know which UTXO to watch&#xA;&gt; per-channel.&#xA;&gt;   - Is there an impact on pathfinding if we over-advertize?&#xA;&gt;      - We use capacity to pathfind.&#xA;&gt;      - What’s the worst case if people lie? We don’t use them.&#xA;&gt;   - If we’ve already agreed that this can be a UTXO that isn’t a channel,&#xA;&gt; then it shouldn’t matter.&#xA;&gt;   - If you allow value magnification, we can use a single UTXO to claim&#xA;&gt; for multiple channels. Even in the most naive version (say 5x), you’re only&#xA;&gt; revealing 20% of your UTXOs.&#xA;&gt;   - How much leverage can we allow? The only limit is denial of service.&#xA;&gt;   - There’s the potential for a market for UTXOs.&#xA;&gt; - There’s a privacy trade-off:&#xA;&gt;   - If you one-to-one map them, then there’s no privacy gain.&#xA;&gt;   - Do we know that you get substantial privacy?&#xA;&gt;      - Even if you have two UTXOs and two channels, those UTXOs are now&#xA;&gt; not linked (because you can just use the first one to advertise).&#xA;&gt;      - This is only assuming that somebody implements it/ infrastructure&#xA;&gt; is built out.&#xA;&gt;      - People could create more elaborate things over time, even if&#xA;&gt; implementations do the “dumb” way.&#xA;&gt; - Gossip 1.5 (ie, with amount binding) fits in the current flow, V2 (ie,&#xA;&gt; without amount binding) has a very different scope.&#xA;&gt;   - It’s a big step, and you don’t truly know until you implement it.&#xA;&gt;   - What about things like: a very large node and a very small node, whose&#xA;&gt; announced UTXO do you use?&#xA;&gt; - We decided not to put UTXOs in node announcement, so we’d put it in&#xA;&gt; channel announcement:&#xA;&gt;   - Sometimes there’s a UTXO, sometimes there isn’t.&#xA;&gt;   - You look at a node’s previous channels to see if they still have&#xA;&gt; “quota”.&#xA;&gt;   - If you don’t have “quota” left, you have to include a signature TLV.&#xA;&gt; - With the goal of publicly announcing taproot channels, 1.5 gets us there&#xA;&gt; and is a much smaller code change.&#xA;&gt; - We’ve talked alot about capacity for pathfinding, but we haven’t really&#xA;&gt; touched on control valves like max HTLC:&#xA;&gt;   - Currently we don’t use these valves to tune our pathfinding, people&#xA;&gt; don’t use it.&#xA;&gt;   - If we get better here, we won’t need capacity.&#xA;&gt;   - This value is already &lt; 50% anyway.&#xA;&gt; - If we don’t un-bind amounts now, when will we do it?&#xA;&gt;   - It’s always a lower priority and everyone is busy.&#xA;&gt;   - If we allow overcommitting by some factor now, it’s not unrealistic&#xA;&gt; that it will allow some degree of privacy.&#xA;&gt;   - Between these features, we have opened the door to leasing UTXOs:&#xA;&gt;      - Before we do more over-commitment, let’s see if anybody uses it?&#xA;&gt; - We add channel capacity to the channel announcement with a feature bit:&#xA;&gt;   - If we turn the feature off, we are on-to-one mapped.&#xA;&gt;   - But a node can’t use the upgraded version until everyone is upgraded?&#xA;&gt;      - Our current “get everyone upgraded” cycle is 18 months (or a CVE).&#xA;&gt;      - If you’re upgrading to 2x multiplier, nobody on 1x will accept that&#xA;&gt; gossip.&#xA;&gt;      - People will not pay for privacy (via lost revenue of people not&#xA;&gt; seeing their gossip).&#xA;&gt;      - This is additive to defeating chain analysis.&#xA;&gt;      - Private UTXO management is already complicated, we don’t know the&#xA;&gt; ideal that we’re working towards.&#xA;&gt; - What about if we just set it to 2 today?&#xA;&gt;   - Is 2 qualitatively better than 1 (without script binding) today?&#xA;&gt;   - Will a marketplace magically emerge if we allow over-commitment?&#xA;&gt; - We don’t know the implications of setting a global multiplier for&#xA;&gt; routing or denial of service, and we don’t have a clear view of what&#xA;&gt; privacy would look like (other than “some” improvement).&#xA;&gt; - We agree that adding a multiplier doesn’t break the network.&#xA;&gt;   - People with a lower value will see a subnet when we upgrade.&#xA;&gt; - We’re going to go with gossip “1.75”:&#xA;&gt;   - Bind to amount but not script.&#xA;&gt;   - We include a TLV cut out that paves the way to overcommitment.&#xA;&gt;&#xA;&gt; ### Multi-Sig Channel Parties&#xA;&gt; - There are a few paths we could take to get multi-sig for one channel&#xA;&gt; party:&#xA;&gt;   - Script: just do it on the script level for the UTXO, but it’s heavy&#xA;&gt; handed.&#xA;&gt;   - FROSTy: you end up having to do a bunch of things around fault&#xA;&gt; tolerance which require a more intense setup. You also may not want the&#xA;&gt; shachain to be known by all of the parties in the setup (we have an ugly&#xA;&gt; solution for this, we think).&#xA;&gt;   - Recursive musig:&#xA;&gt; - Context: you have one key in the party, but you actually want it to be&#xA;&gt; multiple keys under the hood. You don’t want any single party to know the&#xA;&gt; revocation secrets, so you have to each have a part and combine them.&#xA;&gt; - Ugliest solution: just create distinct values and store them.&#xA;&gt; - Less ugly solution uses multiple shachains:&#xA;&gt;   - Right now we have a shachan, and we reveal two leaves of it.&#xA;&gt;   - You have 8 shachains, and you XOR them all together.&#xA;&gt;      - Why do we need 8? That’ll serve a 5-of-7.&#xA;&gt;      - Maybe we need 21? 5 choose 7, we’re not sure.&#xA;&gt;   - How does this work with K-of-N?&#xA;&gt;      - Each party has a piece, and you can always combine them in&#xA;&gt; different combinations (of K pieces) to get to the secret you’re using.&#xA;&gt;&#xA;&gt; ### PTLCs&#xA;&gt; - We can do PTLCs in two ways:&#xA;&gt;   - Regular musig&#xA;&gt;   - Adaptor signatures&#xA;&gt; - Do they work with trampoline as defined today?&#xA;&gt;   - The sender picks all the blinding factors today, so it’s fine.&#xA;&gt; - There’s a paper called: splitting locally while routing&#xA;&gt; interdimensionally:&#xA;&gt;   - You can let intermediate nodes do splitting because they know all the&#xA;&gt; local values.&#xA;&gt;   - Then can generate new blinding factors and split out to the next node.&#xA;&gt;   - Adaptor signatures could possibly be combined for PTLCs that get&#xA;&gt; fanned out then combined.&#xA;&gt; - There are a few options for redundant overpayment (ie, “stuckless”&#xA;&gt; payments):&#xA;&gt;   - Boomerang:&#xA;&gt;      - Preimages are coefficients of a polynomial, and you commit to the&#xA;&gt; polynomial itself.&#xA;&gt;      - If you have a degree P polynomial and you take P+1 shares, then you&#xA;&gt; can claim in the other direction.&#xA;&gt;      - Quite complex.&#xA;&gt;      - You have to agree on the number of splits in advance.&#xA;&gt;   - Spear:&#xA;&gt;      - H2TLC: there are two payment hashes per-HTLC, one if from the&#xA;&gt; sender and one is from the invoice.&#xA;&gt;      - When you send a payment, the sender only reveals the right number&#xA;&gt; of sender preimages.&#xA;&gt;      - This also gives us HTLC acknowledgement, which is nice.&#xA;&gt;      - You can concurrently split, and then spray and pray.&#xA;&gt;      - Interaction is required to get preimages.&#xA;&gt; - Do we want to add redundant overpayment with PTLCs?&#xA;&gt;   - We’ll introduce a communication requirement.&#xA;&gt;   - Do we need to decide that before we do PTLCs?&#xA;&gt;      - Can we go for the simplest possible option first and then add it?&#xA;&gt;      - For spear, yes - the intermediate nodes don’t know that it’s two&#xA;&gt; hashes.&#xA;&gt;      - We could build them out without thinking about overpayment, and&#xA;&gt; then mix in a sender secret so that we can claim a subset.&#xA;&gt;   - We’ll have more round trips, but you also have the ability to ACK&#xA;&gt; HTLCs that have arrived.&#xA;&gt;   - Spray and pray uses the same about as you would with our current “send&#xA;&gt; / wait / send”, it’s just concurrently not serially.&#xA;&gt; - Is it a problem that HLTCs that aren’t settled don’t pay fees?&#xA;&gt;   - You’re paying the fastest routes.&#xA;&gt;   - Even if it’s random, you still get a constant factor of what we should&#xA;&gt; have gotten otherwise.&#xA;&gt; - It makes sense to use onion messages if it’s available to us.&#xA;&gt; - Are we getting payment acknowledgement? Seems so!&#xA;&gt;&#xA;&gt; ## Day Two&#xA;&gt;&#xA;&gt; ### Hybrid Approach to Channel Jamming&#xA;&gt; - We’ve been talking about jamming for 8 years, back and forth on the&#xA;&gt; mailing list.&#xA;&gt; - We’d like to find a way to move forward so that we can get something&#xA;&gt; done.&#xA;&gt; - Generally when we think about jamming, there are three “classes” of&#xA;&gt; mitigations:&#xA;&gt;   - Monetary: unconditional fees, implemented in various ways.&#xA;&gt;   - Reputation: locally assessed (global is terrible)&#xA;&gt;   - Scarce Resources: POW, stake, tokens.&#xA;&gt; - The problem is that none of these solutions work in isolation.&#xA;&gt;   - Monetary: the cost that will deter an attacker is unreasonable for an&#xA;&gt; honest user, and the cost that is reasonable for an honest user is too low&#xA;&gt; for an attacker.&#xA;&gt;   - Reputation: any system needs to define some threshold that is&#xA;&gt; considered good behavior, and an attacker can aim to fall just under it.&#xA;&gt; Eg: if you need a payment to resolve in 1 minute, you can fall just under&#xA;&gt; that bar.&#xA;&gt;   - Scarce resources: like with monetary, pricing doesn’t work out.&#xA;&gt;      - Paper: proof of work doesn’t work for email spam, as an example.&#xA;&gt;      - Since scarce resources can be purchased, they could be considered a&#xA;&gt; subset of monetary.&#xA;&gt; - There is no silver bullet for jamming mitigation.&#xA;&gt; - Combination of unconditional fees and reputation:&#xA;&gt;   - Good behavior grants access to more resources, bad behavior loses it.&#xA;&gt;   - If you want to fall just below that threshold, we close the gap with&#xA;&gt; unconditional fees.&#xA;&gt; - Looking a these three classes implemented in isolation, are there any&#xA;&gt; unresolved questions that people have - “what about this”?&#xA;&gt;   - Doesn’t POW get you around the cold start problem in reputation where&#xA;&gt; if you want to put money in to quickly bootstrap you can?&#xA;&gt;      - Since POW can be rented, it’s essentially a monetary solution -&#xA;&gt; just extra steps.&#xA;&gt;      - We run into the same pricing issues.&#xA;&gt; - Why these combinations?&#xA;&gt;   - Since scarce resources are essentially monetary, we think that&#xA;&gt; unconditional fees are the simplest possible monetary solution.&#xA;&gt; - Unconditional Fees:&#xA;&gt;   - As a sender, you’re building a route and losing money if it doesn’t go&#xA;&gt; through?&#xA;&gt;      - Yes, but they only need to be trivially small compared to success&#xA;&gt; case fee budgets.&#xA;&gt;      - You can also eventually succeed so long as you retry enough, even&#xA;&gt; if failure rates are very high.&#xA;&gt;   - How do you know that these fees will be small? The market could decide&#xA;&gt; otherwise.&#xA;&gt;      - Routing nodes still need to be competitive. If you put an&#xA;&gt; unconditional fee of 100x the success case, senders will choose to not send&#xA;&gt; through you because you have no incentive to forward.&#xA;&gt;      - We could also add an in-protocol limit or sender-side advisory.&#xA;&gt;   - With unconditional fees, a fast jamming attack is very clearly paid&#xA;&gt; for.&#xA;&gt; - Reputation:&#xA;&gt;   - The easiest way to jam somebody today is to send a bunch of HTLCs&#xA;&gt; through them and hold them for two weeks. We’re focusing on reputation to&#xA;&gt; begin with, because in this case we can quite easily identify that people&#xA;&gt; are doing something wrong (at the extremes).&#xA;&gt;   - If you have a reputation score that blows up on failed attempts,&#xA;&gt; doesn’t that fix it without upfront fees?&#xA;&gt;      - We have to allow some natural rate of failure in the network.&#xA;&gt;      - An attacker can still aim to fall just below that failure threshold&#xA;&gt; and go through multiple channels to attack an individual channel.&#xA;&gt;      - THere isn’t any way to set a bar that an attacker can’t fall just&#xA;&gt; beneath.&#xA;&gt;      - Isn’t this the same for reputation? We have a suggestion for&#xA;&gt; reputation but all of them fail because they can be gamed below the bar.&#xA;&gt;   - If reputation matches the regular operation of nodes on the network,&#xA;&gt; you will naturally build reputation up over time.&#xA;&gt;      - If we do not match reputation accumulation to what normal nodes do,&#xA;&gt; then an attacker can take some other action to get more reputation than the&#xA;&gt; rest of the network. We don’t want attackers to be able to get ahead of&#xA;&gt; regular nodes.&#xA;&gt;      - Let’s say you get one point for success and one for failure, a&#xA;&gt; normal node will always have bad reputation. An attacker could then send 1&#xA;&gt; say payments all day long, pay a fee for it and gain reputation.&#xA;&gt; - Can you define jamming? Is it stuck HTLCs or a lot of 1 sat HTLCS&#xA;&gt; spamming up your DB?&#xA;&gt;   - Jamming is holding HTLCs to or streaming constant failed HTLCs to&#xA;&gt; prevent a channel from operating.&#xA;&gt;   - This can be achieved with slots or liquidity.&#xA;&gt; - Does the system still work if users are playing with reputation?&#xA;&gt;   - In the steady state, it doesn’t really matter whether a node has a&#xA;&gt; good reputation or not.&#xA;&gt;   - If users start to set reputation in a way that doesn’t reflect normal&#xA;&gt; operation of the network, it will only affect their ability to route when&#xA;&gt; under attack.&#xA;&gt; - Isn’t reputation monetary as well, as you can buy a whole node?&#xA;&gt;   - There is a connection, and yes in the extreme case you can buy an&#xA;&gt; entire identity.&#xA;&gt;   - Even if you do this, the resource bucketing doesn’t give you a “golden&#xA;&gt; ticket” to consume all slots/liquidity with good reputation, so you’re&#xA;&gt; still limited in what you can do.&#xA;&gt; - Can we learn anything from research elsewhere / the way things are done&#xA;&gt; on the internet?&#xA;&gt;   - A lot of our confidence that these solutions don’t work in isolation&#xA;&gt; is based on previous work looking at spam on the internet.&#xA;&gt;   - Lightning is also unique because it is a monetary network - we have&#xA;&gt; money built in, so we have different tools to use.&#xA;&gt; - To me, it seems like if the scarce resource that we’re trying to&#xA;&gt; allocate is HTLC slots and upfront fees you can pay me upfront fees for the&#xA;&gt; worst case (say two weeks) and then if it settles if 5 seconds you give it&#xA;&gt; back?&#xA;&gt;   - The dream solution is to only pay for the amount of time that a HTLC&#xA;&gt; is held in flight.&#xA;&gt;   - The problem here is that there’s no way to prove time when things go&#xA;&gt; wrong, and any solution without a universal clock will fall back on&#xA;&gt; cooperation which breaks down in the case of an attack.&#xA;&gt;   - No honest user will be willing to pay the price for the worst case,&#xA;&gt; which gets us back to the pricing issue.&#xA;&gt;   - There’s also an incentives issue when the “rent” we pay for these two&#xA;&gt; weeks worst case is more than the forwarding fee, so a router may be&#xA;&gt; incentivized to just hang on to that amount and bank it.&#xA;&gt;   - We’ve talked about forwards and backwards fees extensively on the&#xA;&gt; mailing list:&#xA;&gt;      - They’re not large enough to be enforceable, so somebody always has&#xA;&gt; to give the money back off chain.&#xA;&gt;      - This means that we rely on cooperation for this refund.&#xA;&gt;      - The complexity of this type of system is very high, and we start to&#xA;&gt; open up new “non-cooperation” concerns - can we be attacked using this&#xA;&gt; mechanism itself?&#xA;&gt;      - Doesn’t an attacker need to be directly connected to you to steal&#xA;&gt; in the non-cooperative case?&#xA;&gt;      - At the end of the day, somebody ends up getting robbed when we&#xA;&gt; can’t pull the money from the source (attacker).&#xA;&gt; - Does everybody feel resolved on the statement that we need to take this&#xA;&gt; hybrid approach to clamp down on jamming? Are there any “what about&#xA;&gt; solution X” questions left for anyone? Nothing came up.&#xA;&gt;&#xA;&gt; ### Reputation for Channel Jamming&#xA;&gt; - Resource bucketing allows us to limit the number of slots and amount of&#xA;&gt; liquidity that are available for nodes that do not have good reputation.&#xA;&gt;   - No reputation system is perfect, and we will always have nodes that&#xA;&gt; have low-to-no activity, or are new to the network that we can’t form&#xA;&gt; reputation scores for.&#xA;&gt;   - It would be a terrible outcome for lightning to just drop these HTLCs,&#xA;&gt; so we reserve some portion of resources for them.&#xA;&gt; - We have two buckets: protected and general (split 50/50 for the purposes&#xA;&gt; of explanation, but we’ll find more intelligent numbers with further&#xA;&gt; research):&#xA;&gt;   - In the normal operation of the network, it doesn’t matter if you get&#xA;&gt; into the protected slots. When everyone is using the network as usual,&#xA;&gt; things clear out quickly so the general bucket won’t fill up.&#xA;&gt;   - When the network comes under attack, an attacker will fill up slots&#xA;&gt; and liquidity in the general bucket. When this happens, only nodes with&#xA;&gt; good reputation will be able to use the protected slots, other HTLCs will&#xA;&gt; be dropped.&#xA;&gt;   - During an attack, nodes that don’t have a good reputation will&#xA;&gt; experience lower quality of service - we’ll gradually degrade.&#xA;&gt; - What do you mean by the steady state?&#xA;&gt;   - Nobody is doing anything malicious, payments are clearing out as usual&#xA;&gt; - not sitting on the channel using all 483 slots.&#xA;&gt; - We decide which bucket the HTLC goes into using two signals:&#xA;&gt;   - Reputation: whether the upstream node had good reputation with our&#xA;&gt; local node.&#xA;&gt;   - Endorsement: whether the upstream node has indicated that the HTLC is&#xA;&gt; expected to be honest (0 if uncertain, 1 if expected to be honest).&#xA;&gt;   - If reputation &amp;&amp; endorsement, then we’ll allow the HTLC into protected&#xA;&gt; slots and forward the HTLC on with endorsed=1.&#xA;&gt;   - We need reputation to add a local viewpoint to this endorsement signal&#xA;&gt; - otherwise we can just trivially be jammed if we just copy what the&#xA;&gt; incoming peer said.&#xA;&gt;   - We need endorsement to be able to propagate this signal over multiple&#xA;&gt; hops - once it drops, it’s dropped for good.&#xA;&gt;   - There’s a privacy questions for when senders set endorsed:&#xA;&gt;      - You can flip a coin or set the endorsed field for your payments at&#xA;&gt; the same proportion as you endorse forwards.&#xA;&gt; - We think about reputation in terms of the maximum amount of damage that&#xA;&gt; can be done by abusing it:&#xA;&gt;   - Longest CLTV that we allow in the future from current height 2016&#xA;&gt; blocks (~2 weeks): this it the longest that we can be slow jammed.&#xA;&gt;   - Total route length ~27 hops: this is the largest amplifying factor an&#xA;&gt; attacker can have.&#xA;&gt; - We use the two week period to calculate the node’s total routing&#xA;&gt; revenue, this is what we have to lose if we are jammed.&#xA;&gt; - We then look at a longer period, 10x the two week period to see what the&#xA;&gt; peer has forwarded us over that longer period.&#xA;&gt; - If they have forwarded us more over that longer period than what we have&#xA;&gt; to loose in the shorter period, then they have good reputation.&#xA;&gt; - This is the damage that is observable to us - there are values outside&#xA;&gt; of the protocol that are also affected by jamming:&#xA;&gt;   - Business reliability, joy of running a node, etc&#xA;&gt;   - We contend that these values are inherently unmeasurable to protocol&#xA;&gt; devs:&#xA;&gt;      - End users can’t easily put a value on them.&#xA;&gt;      - If we try to approximate them, users will likely just run the&#xA;&gt; defaults.&#xA;&gt; - One of the simplest attacks we can expect is an “about turn” where an&#xA;&gt; attacker behaves perfectly and then attacks:&#xA;&gt;   - So, once you have good reputation we can’t just give you full access&#xA;&gt; to protected slots.&#xA;&gt; - We want to reward behavior that we consider to be honest, so we consider&#xA;&gt; “effective” HTLC fees - the fee value that a HTLC has given us relative to&#xA;&gt; how long it took to resolve:&#xA;&gt;   - Resolution period: the amount of time that a HTLC can reasonably take&#xA;&gt; to resolve - based on MPP timeout / 1 minute.&#xA;&gt;   - We calculate opportunity cost for every minute after the first&#xA;&gt; “allowed” minute as the fees that we could have earned with that&#xA;&gt; liquidity/slot.&#xA;&gt;   - Reputation is only negatively affected if you endorsed the HTLC.&#xA;&gt;   - If you did not endorse, then you only gain reputation for fast success&#xA;&gt; (allowing bootstrapping).&#xA;&gt; - When do I get access to protected slots?&#xA;&gt;   - When you get good reputation, you can use protected slots for your&#xA;&gt; endorsed HTLCs but there is a cap on the number of in flight HLTCs that are&#xA;&gt; allowed.&#xA;&gt;   - We treat every HLTC as if it will resolve with the worst possible&#xA;&gt; outcome, and temporarily dock reputation until it resolves:&#xA;&gt;      - In the good case, it resolves quickly and you get your next HLTC&#xA;&gt; endorsed.&#xA;&gt;      - In the bad case, you don’t get any more HTLCs endorsed and you&#xA;&gt; reputation remains docked once it resolves (slowly).&#xA;&gt; - Wouldn’t a decaying average be easier to implement, rather than a&#xA;&gt; sliding window?&#xA;&gt;   - If you’re going to use large windows, then a day here or there doesn’t&#xA;&gt; matter so much.&#xA;&gt; - Have you thought about how to make this more visible to node operators?&#xA;&gt;   - In the steady state we don’t expect this to have any impact on routing&#xA;&gt; operations, so they’ll only need a high level view.&#xA;&gt; - Can you elaborate on slots vs liquidity for these buckets?&#xA;&gt;   - Since we have a proportional fee for HTLCs, this indirectly represents&#xA;&gt; liquidity: larger HTLCs will have larger fees so will be more “expensive”&#xA;&gt; to get endorsed.&#xA;&gt; - Where do we go from here?&#xA;&gt;   - We would like to dry run with an experimental endorsement field, and&#xA;&gt; ask volunteers to gather data for us.&#xA;&gt;   - Are there any objections to an experimental TLV?&#xA;&gt;      - No.&#xA;&gt;      - We could also test multiple endorsement signals / algorithms in&#xA;&gt; parallel.&#xA;&gt; - In your simulations, have you looked at the ability to segment off&#xA;&gt; attacks as they happen? To see how quickly an attacker&#39;s reputation drops&#xA;&gt; off, and that you have a protected path?&#xA;&gt;   - Not yet, but plan to.&#xA;&gt; - Do any of these assumptions change with trampoline? Don’t think it’s&#xA;&gt; related.&#xA;&gt; - Your reputation is at stake when you endorse, when do you decide to&#xA;&gt; endorse my own payments?&#xA;&gt;   - You do the things you were already doing to figure out a good route.&#xA;&gt; Paths that you think have good liquidity, and have had success with in the&#xA;&gt; past.&#xA;&gt; - What about redundant overpayment, some of your HTLCs are bound to fail?&#xA;&gt;   - Provided that they fail fast, it shouldn’t be a problem.&#xA;&gt; - Is it possible that the case where general slots are perpetually filled&#xA;&gt; by attackers becomes the steady state? And we can’t tell the difference&#xA;&gt; between a regular user and attacker.&#xA;&gt;   - This is where unconditional fees come in, if somebody wants to&#xA;&gt; perpetually fill up the general bucket they have to pay for it.&#xA;&gt; - Is there anything we’d like to see that will help us have move&#xA;&gt; confidence here?&#xA;&gt;   - What do you think is missing from the information presented?&#xA;&gt;      - We can simulate the steady state / create synthetic data, but can’t&#xA;&gt; simulate every attack. Would like to spend more time thinking through the&#xA;&gt; ways this could possibly be abused.&#xA;&gt;   - Would it help to run this on signet? Or scaling lightning?&#xA;&gt;      - Its a little easier to produce various profiles of activity on&#xA;&gt; regtest[.&#xA;&gt;&#xA;&gt; ### Simplified Commitments&#xA;&gt; - Simplified commitments makes our state machine easier to think about.&#xA;&gt;   - Advertise option_simplified_commitment: once both peers upgrade, we&#xA;&gt; can just use it.&#xA;&gt;   - Simplify our state machine before we make any more changes to it.&#xA;&gt; - Right now Alice and Bob can have changes in flight at the same time:&#xA;&gt;   - Impossible to debug, though technically optimal.&#xA;&gt;   - Everyone is afraid of touching the state machine.&#xA;&gt; - We can simplify this by introducing turn taking:&#xA;&gt;   - First turn is taken by the lower pubkey.&#xA;&gt;   - Alice: update / commit.&#xA;&gt;   - Bob: revoke and ack.&#xA;&gt;   - If alice wants to go when it’s bob’s turn, she can just send a&#xA;&gt; message.&#xA;&gt;   - Bob can ignore it, or yield and accept it.&#xA;&gt;   - This has been implemented in CLN for LNSymmetry&#xA;&gt; - It’s less code to not have the ignore message, but for real performance&#xA;&gt; we’ll want it. Don’t want to suck up all of that latency.&#xA;&gt; - The easiest way is to re-establish is to upgrade on re-establish.&#xA;&gt;   - If it wasn’t somebody’s turn, you can just do lowest pubkey.&#xA;&gt;   - If it was somebody’s turn, you can just resume it.&#xA;&gt; - We could also add REVOKE and NACK:&#xA;&gt;   - Right now we have no way to refuse updates.&#xA;&gt;   - Why do we want a NACK?&#xA;&gt;      - You currently have to express to the other side what they can put&#xA;&gt; in your channel because you can’t handle it if they give you something you&#xA;&gt; don&#39;t’ like (eg, a HTLC below min_htlc).&#xA;&gt;      - You can likely force a break by trying to send things that aren&#39;t&#xA;&gt; allowed, which is a robustness issue.&#xA;&gt;      - We just force close when we get things we don’t allow.&#xA;&gt;      - Could possibly trigger force closes.&#xA;&gt; - There’s an older proposal called fastball where you send a HTLC and&#xA;&gt; advise that you’re going to fail it.&#xA;&gt;   - If Alice gets it, she can reply with UNADD.&#xA;&gt;   - If you don’t get it in time,you just go through the regular cycle.&#xA;&gt; - When you get commitment signed, you could NACK it. This could mean&#xA;&gt; you’re failing the whole commitment, or just a few HTLCs.&#xA;&gt;   - You can’t fail a HTLC when you’ve sent commitment signed, so you need&#xA;&gt; a new cycle to clear it out.&#xA;&gt;   - What NACK says is: I’ve ignored all of your updates and I’m&#xA;&gt; progressing to the next commitment.&#xA;&gt; - Revoke and NACK is followed by commitment signed where you clear out all&#xA;&gt; the bad HTLCs, ending that set of updates.&#xA;&gt; - You have to NACk and then wait for another commitment signature, signing&#xA;&gt; for the same revocation number.&#xA;&gt; - Bob never has to hold a HTLC that he doesn&#39;t want from Alice on his&#xA;&gt; commitment.&#xA;&gt; - This is bad for latency, good for robustness.&#xA;&gt;   - Alice can send whatever she wants, and Bob has a way to reject it.&#xA;&gt;   - There are a whole lot of protocol violations that Alice can force a&#xA;&gt; force close with, now they can be NACKed.&#xA;&gt; - This is good news for remote signers where policy has been violate&#xA;&gt; because we have cases where policy has been violated and our only way right&#xA;&gt; now is the close the channel.&#xA;&gt; - You still want Alice to know Bob’s limits so that you can avoid endless&#xA;&gt; invalid HTLCs.&#xA;&gt; - Simplified commitment allows us to do things more easily in the protocol.&#xA;&gt;   - When we specced this all out, we didn’t foresee that update fee would&#xA;&gt; be so complicated, with this we know update fee will be correct.&#xA;&gt;  - If we don’t do this, we have to change update fee?&#xA;&gt;      - Sender of the HTLC adds fee.&#xA;&gt;      - Or fixed fee.&#xA;&gt; - Even if we have zero fees, don’t we still have HTLC dust problems?&#xA;&gt;   - You can have a bit on update add that says the HTLC is dust.&#xA;&gt;   - You can’t be totally fee agnostic because you have to be able to&#xA;&gt; understand when to trim HLTCs.&#xA;&gt; - Even update fee aside, shouldn’t things just be simpler?&#xA;&gt; - Would a turn based protocol have implications for musig nonces?&#xA;&gt;   - If you’re taking a turn, it’s a session.&#xA;&gt;   - You’d need to have different nonces for different sessions.&#xA;&gt; - We should probably do this before we make another major change, it&#xA;&gt; simplifies things.&#xA;&gt; - Upgrade on re-establish is pretty neat because you can just tell them&#xA;&gt; what type you’d like.&#xA;&gt;   - This worked very well for CLN getting rid of static remote.&#xA;&gt; - What about parameter exchange?&#xA;&gt;   - There’s a version of splice that allows you to add new inputs and&#xA;&gt; outputs.&#xA;&gt;   - Splice no splice which means that you can only make a new commitment&#xA;&gt; transaction, no on-chain work.&#xA;&gt;   - Seems like you can get something like dynamic commitments with this,&#xA;&gt; and it’s a subset of splicing.&#xA;&gt;&#xA;&gt; ## Day Three&#xA;&gt;&#xA;&gt; ### Meta Spec Process&#xA;&gt; - Do we want to re-evaluate the concept of a “living document”?&#xA;&gt;   - It’s only going to get longer.&#xA;&gt;   - As we continue to update, we have two options:&#xA;&gt;      - Remove old text and replace entirely.&#xA;&gt;      - Do an extension and then one day replace.&#xA;&gt; - If implementing from scratch, what would you want to use?&#xA;&gt;   - Nobody is currently doing this.&#xA;&gt;   - By the time they finished, everything would have move.&#xA;&gt; - The protocol isn’t actually that modular:&#xA;&gt;   - Except for untouched BOLT-08, which can be read in isolation.&#xA;&gt;   - Other things have tentacles.&#xA;&gt;      - We should endeavor for things to be as modular as possible.&#xA;&gt; - Back in Adelaide we have a version with a set of features.&#xA;&gt;   - We have not re-visited that discussion.&#xA;&gt;   - Is it possible for us to come up with versions and hold ourselves&#xA;&gt; accountable to them?&#xA;&gt;   - If we’re going to start having different ideas of what lightning looks&#xA;&gt; like, versioning helps.&#xA;&gt;   - Versioning is not tied one-to-one to the protocol:&#xA;&gt;      - Features make it less clean because you have a grab bag of features&#xA;&gt; on top of any “base” version we decide on.&#xA;&gt;      - Does a version imply that we’re implementing in lock step?&#xA;&gt;   - If we do extraction, remove and cleanup, we could say that we’re on&#xA;&gt; version X with features A/B/C.&#xA;&gt; - How confident are we that we can pull things out? Only things that are&#xA;&gt; brand new will be easy to do this with.&#xA;&gt; - Keeping context in your head is hard, and jumping between documents&#xA;&gt; breaks up thought.&#xA;&gt;   - Should we fully copy the current document and copy it?&#xA;&gt;   - Not everything is a rewrite, some things are optional.&#xA;&gt; - What’s our design goal?&#xA;&gt;   - To be able to more easily speak about compatibility.&#xA;&gt;   - To have a readable document for implementation.&#xA;&gt; - A single living document works when we were all making a unified push,&#xA;&gt; now it makes less sense:&#xA;&gt;   - You can’t be compliant “by commit” because things are implemented in&#xA;&gt; different orders.&#xA;&gt;   - We can’t fix that with extensions, they’re hard to keep up to date?&#xA;&gt;      - RFCs work like this, they have replacement ones.&#xA;&gt; - BOLT 9 can act as a control bolt because it defines features.&#xA;&gt; - Extensions seem helpful:&#xA;&gt;   - Can contain more rationale.&#xA;&gt;   - You can have spaghetti and ravioli code, these could be raviolo&#xA;&gt; extensions.&#xA;&gt;   - If everything is an extension BOLT with minimal references, we avoid&#xA;&gt; the if-else-ey structure we have right now.&#xA;&gt; - For small things, we can just throw out the old stuff.&#xA;&gt; - If it were possible to modularize and have working groups, that would be&#xA;&gt; great but it seems like we’d tread on each other’s toes.&#xA;&gt; - We must avoid scenarios like vfmanprint:&#xA;&gt;   - The return value says “vfprintf returns -1 on error”&#xA;&gt;   - The next sentence says “this was true until version 2”&#xA;&gt;   - But nobody reads the next sentence.&#xA;&gt; - Cleanup PRs won’t be looked at, and need to be maintained as new stuff&#xA;&gt; gets in.&#xA;&gt; - Eg: legacy onion - we just looked at network use and removed when it was&#xA;&gt; unused:&#xA;&gt;   - Rip out how you generate them.&#xA;&gt;   - Rip out how you handle them.&#xA;&gt; - One of the issues with deleting old text is that existing software that&#xA;&gt; delete the old text is annoying when you run into interop issues on the old&#xA;&gt; spec version.&#xA;&gt;   - If there are real things to deal with on the network, we must keep&#xA;&gt; them.&#xA;&gt;   - We must reference old commits so that people at least know what was&#xA;&gt; there and can do git archeology to find out what it used to be.&#xA;&gt; - We can remove some things today!&#xA;&gt;   - Static remote&#xA;&gt;   - Non-zero fee anchors&#xA;&gt;   - ANYSEGWIT is default (/compulsory)&#xA;&gt;   - Payment secrets / basic MPP.&#xA;&gt; - Should we have regular cleanups?&#xA;&gt;   - Even if we do, they need review.&#xA;&gt; - For now, let’s do wholesale replacement to avoid cleanup.&#xA;&gt; - The proposals folder is nice to know what’s touched by what changes.&#xA;&gt; - Rationale sections need improvement: sometimes they’re detailed,&#xA;&gt; sometimes vague.&#xA;&gt; - Once a feature becomes compulsory on the network we can possibly ignore&#xA;&gt; it.&#xA;&gt; - What about things that are neither bolts nor blips - like inbound fees?&#xA;&gt;   - Why does it need to be merged anywhere?&#xA;&gt;   - If it’s an implementation experiment, we can merge it once we’re&#xA;&gt; convinced it works.&#xA;&gt;   - If we reach a stage where we all agree it should be universally done,&#xA;&gt; then it should be a bolt.&#xA;&gt;      - This is a BLIP to BOLT path.&#xA;&gt; - Communication:&#xA;&gt;   - We’re not really using IRC anymore - bring it back!&#xA;&gt;   - We need a canonical medium, recommit to lightning-dev.&#xA;&gt;&#xA;&gt; ### Async Payments/ Trampoline&#xA;&gt; - Blinded payments are a nice improvement for trampoline because you don’t&#xA;&gt; know where the recipient is.&#xA;&gt; - The high level idea is:&#xA;&gt;   - Light nodes only see a small part of the network that they are close&#xA;&gt; to.&#xA;&gt;   - Recipients only give a few trampolines in the network that they can be&#xA;&gt; reached via.&#xA;&gt;   - In the onion for the first trampoline, there will be an onion for the&#xA;&gt; second trampoline.&#xA;&gt;   - You just need to give a trampoline a blinded path and they can do the&#xA;&gt; rest.&#xA;&gt; - If you only have one trampoline, they can probably make a good guess&#xA;&gt; where the payment came from (it’s in the reachable neighborhood).&#xA;&gt; - Is there a new sync mode for trampoline gossip?&#xA;&gt;   - We’d now need radius-based gossip rather than block based.&#xA;&gt;   - The trust version is just getting this from a LSP.&#xA;&gt;   - In cold bootstrap, you’re probably going to open a channel so you ask&#xA;&gt; them for gossip.&#xA;&gt; - Can you split MPP over trampoline? Yes.&#xA;&gt; - Routing nodes can learn more about the network because they make their&#xA;&gt; own attempts.&#xA;&gt; _______________________________________________&#xA;&gt; Lightning-dev mailing list&#xA;&gt; Lightning-dev at lists.linuxfoundation.org&#xA;&gt; https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#xA;&gt;&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230720/bb6138a8/attachment-0001.html&gt;</html></oembed>