<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated></updated>
  <generator>https://nostr.ae</generator>

  <title>Nostr notes by </title>
  <author>
    <name></name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://nostr.ae/npub13fccestrh5xf26m53n73xn5yly9z040a4n9vq30mernkj0cqszuq9tgaqs.rss" />
  <link href="https://nostr.ae/npub13fccestrh5xf26m53n73xn5yly9z040a4n9vq30mernkj0cqszuq9tgaqs" />
  <id>https://nostr.ae/npub13fccestrh5xf26m53n73xn5yly9z040a4n9vq30mernkj0cqszuq9tgaqs</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqstna0p3nxx3lt2lyay965xfmenwlhd3uf58agt39retgfjjfz2krszyz98rrxpvw7se9ttwjx06y6wsnus5f74lkkv4sz9l0yww6flqzqts7penlv</id>
    
      <title type="html">📅 Original date posted:2022-03-14 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqstna0p3nxx3lt2lyay965xfmenwlhd3uf58agt39retgfjjfz2krszyz98rrxpvw7se9ttwjx06y6wsnus5f74lkkv4sz9l0yww6flqzqts7penlv" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqrnxqprrafjc66hyz34du0uqp3pjqlex5ewv5mzquy4tznjyjyys79nfcc&#39;&gt;nevent1q…nfcc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-03-14&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Rene,&lt;br/&gt;&lt;br/&gt;On Mon, Mar 14, 2022 at 12:56:24PM &#43;0100, René Pickhardt via Lightning-dev wrote:&lt;br/&gt;&amp;gt; &amp;gt; 1) What&amp;#39;s the reasoning behind combining parallel channels?&lt;br/&gt;&amp;gt; I think that should work and especially when including fees to the&lt;br/&gt;&amp;gt; cost function and considering how nodes handle routing requests on&lt;br/&gt;&amp;gt; parallel channels we might have to do so anyway.&lt;br/&gt;&lt;br/&gt;I think lnd accepts the minimum fee of all parallel channels, even if&lt;br/&gt;a higher fee rate is configured for the channel that is actually used.&lt;br/&gt;I&amp;#39;m not too sure about this, though. Having parallel channels with&lt;br/&gt;different fee settings seems weird to me, anyway.&lt;br/&gt;&lt;br/&gt;&amp;gt; 1.1) A payment of size 2 needs to be split into 1&#43;1 to fit through&lt;br/&gt;&amp;gt; However I believe in practice one cannot just send a 2 satoshi onion and&lt;br/&gt;&amp;gt; expect the routing node to split the amount  correctly / accordingly&lt;br/&gt;&amp;gt; between the two parallel channels. (I might be wrong here).&lt;br/&gt;&lt;br/&gt;Exactly. This kind of split could be possible in theory, but at least&lt;br/&gt;lnd doesn&amp;#39;t do it. I guess there are lots of interesting questions to&lt;br/&gt;answer before this becomes reality (channel jamming?).&lt;br/&gt;&lt;br/&gt;&amp;gt; So in that case&lt;br/&gt;&amp;gt; modelling and computing probabilities for parallel channels might be&lt;br/&gt;&amp;gt; necessary anyway though the math indicates that splitting liquidity in&lt;br/&gt;&amp;gt; parallel channels will get you selected less frequently for routing.&lt;br/&gt;&lt;br/&gt;Which is OK, as in reality it IS less likely to succeed.&lt;br/&gt;&lt;br/&gt;&amp;gt; 1.2) The Mission Control information provided by lnd [...]&lt;br/&gt;&amp;gt; I think you talk a about a maximum available balance of a channel (and not&lt;br/&gt;&amp;gt; min available balance)?&lt;br/&gt;&lt;br/&gt;Yes, although MC also has information about &amp;#34;known&amp;#34; amounts (due to&lt;br/&gt;failures that only happened further down the road).&lt;br/&gt;&lt;br/&gt;&amp;gt; In the case of parallel channels I am not even sure if such information is&lt;br/&gt;&amp;gt; accurate as it is my understanding that the routing node may decide to use&lt;br/&gt;&amp;gt; the parallel channel to forward the amount even though the other channel&lt;br/&gt;&amp;gt; was specified in the onion.&lt;br/&gt;&lt;br/&gt;The routing node is free to pick any of the parallel channels, yes. The&lt;br/&gt;MC data only reasons about pairs of nodes, though, not individual&lt;br/&gt;channels.&lt;br/&gt;&lt;br/&gt;&amp;gt; Assuming that routing nodes indeed do so we would have learnt that neither&lt;br/&gt;&amp;gt; channel has an effective capacity of N. So the combined virtual channel&lt;br/&gt;&amp;gt; could be seen as 2N-1.&lt;br/&gt;&lt;br/&gt;You mean 2(N-1) = 2N-2?&lt;br/&gt;&lt;br/&gt;&amp;gt; However if routing nodes don&amp;#39;t locally split a&lt;br/&gt;&amp;gt; forwarding request across both channels we would know that calaculating&lt;br/&gt;&amp;gt; with 2N-1 is bad as a request of N could not be fulfilled.&lt;br/&gt;&lt;br/&gt;Exactly, also for 2N-2. Only N-1 would be a reasonable assumption.&lt;br/&gt;&lt;br/&gt;Based on your responses I&amp;#39;ll treat parallel channels individually, and&lt;br/&gt;see how it works out.&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; 3) Size of Piecewise Linearization&lt;br/&gt;&amp;gt; The main difference here is that a channel of 1 BTC is highly preferable&lt;br/&gt;&amp;gt; from a probabilistic payment delivery perspective over a channel of 0.01&lt;br/&gt;&amp;gt; BTC. Even approximating the 1 BTC channel with 1000 intervalls of 0.001 BTC&lt;br/&gt;&amp;gt; should still have a lower unit cost in all pieces of the first 0.01 BTC of&lt;br/&gt;&amp;gt; the liquidity than the first piece of the 0.01 BTC channel. So I think&lt;br/&gt;&amp;gt; splitting all channels in the equal number of pieces is pretty well&lt;br/&gt;&amp;gt; motivated but let me elaborate on this:&lt;br/&gt;&lt;br/&gt;OK great, got it.&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; 4) Leftovers after Piecewise Linearization&lt;br/&gt;&amp;gt; I am not sure if I understand your question / issue here. The splitting&lt;br/&gt;&amp;gt; works by selecting N points on the domain of the function and splitting the&lt;br/&gt;&amp;gt; domain into segments at those points. This should never leave sats over.&lt;br/&gt;&lt;br/&gt;With quantization of 10,000 a channel of size 123,456 ends up as an arc&lt;br/&gt;with a capacity of 12 units. Cutting this into 5 pieces gives us&lt;br/&gt;5*2 with 2 units not ending up in any of those pieces. Or am I missing&lt;br/&gt;something here, and we should split into 5 pieces of size 2.4 = 12/5?&lt;br/&gt;&lt;br/&gt;&amp;gt; If the quantization however makes a channel so small  that we cannot&lt;br/&gt;&amp;gt; even create 5 (or N) disjoint segments then I guess the likelihood for&lt;br/&gt;&amp;gt; being included into the final result is too small anyway.&lt;br/&gt;&lt;br/&gt;It may not be very likely, but flat-out ignoring 20k sat (in my&lt;br/&gt;contrived example above) or up to 4*quantization sats (which is the case&lt;br/&gt;you described) doesn&amp;#39;t feel right.&lt;br/&gt;&lt;br/&gt;&amp;gt; Again this yield interesting pruning opportunities to reduce the seize of&lt;br/&gt;&amp;gt; the network before doing the expensive min cost flow computation. For&lt;br/&gt;&amp;gt; example I could prune channels with high unit costs on the first segment.&lt;br/&gt;&amp;gt; Especially if they are further away from the source and destination node.&lt;br/&gt;&amp;gt; This would overall reduce the size of the graph and improve runtime.&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s talk about optimizations later :)&lt;br/&gt;&lt;br/&gt;&amp;gt; 5) Fees (and other properties?)&lt;br/&gt;&amp;gt;      arcs.append((src,dest,int(cap/(N*QUANTIZATION)),(i&#43;1)*unit_cost &#43;&lt;br/&gt;&amp;gt; mu*fee_rate_ppm))&lt;br/&gt;&lt;br/&gt;Great, that helps! Thanks alot!&lt;br/&gt;&lt;br/&gt;&amp;gt; Note two things:&lt;br/&gt;&amp;gt; 1. the only requirement for the solver to work is that \mu*fee_rate_ppm&lt;br/&gt;&amp;gt; needs to be an integer. So in case \mu was smaller than 1 we could also&lt;br/&gt;&amp;gt; scale the term from the linearized log probabilities by putting a larger mu&lt;br/&gt;&amp;gt; to the feature arising from the cost of the uncertainty.&lt;br/&gt;&lt;br/&gt;Good to know!&lt;br/&gt;&lt;br/&gt;Bye,&lt;br/&gt;Carsten&lt;br/&gt;-- &lt;br/&gt;Dr. Carsten Otto&lt;br/&gt;carsten at c-otto.de&lt;br/&gt;&lt;a href=&#34;https://c-otto.de&#34;&gt;https://c-otto.de&lt;/a&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;A non-text attachment was scrubbed...&lt;br/&gt;Name: signature.asc&lt;br/&gt;Type: application/pgp-signature&lt;br/&gt;Size: 195 bytes&lt;br/&gt;Desc: not available&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220314/2418fb43/attachment.sig&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220314/2418fb43/attachment.sig&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:05:31&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqgflkx6fwtqqzyxctcr2vg3ettgw6pm4ye9tulh34cguagnxgsvgzyz98rrxpvw7se9ttwjx06y6wsnus5f74lkkv4sz9l0yww6flqzqtsv42g3f</id>
    
      <title type="html">📅 Original date posted:2022-03-13 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqgflkx6fwtqqzyxctcr2vg3ettgw6pm4ye9tulh34cguagnxgsvgzyz98rrxpvw7se9ttwjx06y6wsnus5f74lkkv4sz9l0yww6flqzqtsv42g3f" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg0m8l9sfdgxhqvpv2fv8wyz4f5v63e58fa3k4mxg92f8mc2q9v3cz9wkj2&#39;&gt;nevent1q…wkj2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-03-13&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Rene,&lt;br/&gt;&lt;br/&gt;thanks a lot for your contribution! This is exactly what I needed to&lt;br/&gt;start coding again :) I intend to release a somewhat usable version of&lt;br/&gt;your approach in lnd-manageJ [1] soon. Preliminary results indicate that&lt;br/&gt;results (i.e. MPPs to try) can be computed in less than a second, which&lt;br/&gt;is great!&lt;br/&gt;&lt;br/&gt;Important remark: my code can only be used for real MPPs once a usable&lt;br/&gt;MPP gRPC call is made available, see lnd issue #5746 [2].&lt;br/&gt;&lt;br/&gt;While working on my implementation, a few questions came to mind:&lt;br/&gt;&lt;br/&gt;1) What&amp;#39;s the reasoning behind combining parallel channels?&lt;br/&gt;&lt;br/&gt;I agree that parallel channels make things a lot more complicated, but I&lt;br/&gt;also see the benefit from a node operator&amp;#39;s point of view. That being&lt;br/&gt;said, wouldn&amp;#39;t it suffice to treat parallel channels individually?&lt;br/&gt;&lt;br/&gt;1.1) A payment of size 2 needs to be split into 1&#43;1 to fit through&lt;br/&gt;parallel channels of size 1&#43;1. Combining the 1&#43;1 channels into a virtual&lt;br/&gt;channel of size 2 only complicates the code that has to do come up with&lt;br/&gt;a MPP that doesn&amp;#39;t over-saturate the actual channels. On the other hand,&lt;br/&gt;I don&amp;#39;t think the probability for the virtual channel of size 2 is more&lt;br/&gt;realistic than reasoning about two individual channels and their&lt;br/&gt;probabilities - but I didn&amp;#39;t even try to see the math behind that.&lt;br/&gt;Please prove me wrong? :)&lt;br/&gt;&lt;br/&gt;1.2) The Mission Control information provided by lnd can be used to&lt;br/&gt;place a minimum available balance on each of the parallel channels. If&lt;br/&gt;we know that node A isn&amp;#39;t able to forward N sats to node B, we can treat&lt;br/&gt;all parallel channels between A and B (in that direction) to have a&lt;br/&gt;capacity of at most N-1 sats. How would this look like if we combined&lt;br/&gt;the parallel channels into a virtual one? Note that it may still be&lt;br/&gt;possible to route two individual payments/onions of size N-1 sats from A&lt;br/&gt;to B, given two parallel channels with that many sats on A&amp;#39;s side.&lt;br/&gt;&lt;br/&gt;2) Optimal Piecewise Linearization&lt;br/&gt;&lt;br/&gt;See Twitter [3].&lt;br/&gt;&lt;br/&gt;Is it worth it cutting a channel into pieces of different sizes, instead&lt;br/&gt;of just having (as per your example) 5 pieces of the same size? If it&lt;br/&gt;makes a noticeable difference, adding some complexity to the code might&lt;br/&gt;be worth it.&lt;br/&gt;&lt;br/&gt;3) Size of Piecewise Linearization&lt;br/&gt;&lt;br/&gt;My gut feeling is that cutting a 1 BTC channel into 5 pieces is&lt;br/&gt;different from cutting a 0.01 BTC channel into 5 pieces. Would it make&lt;br/&gt;sense to use different values of N depending on the channel size?&lt;br/&gt;&lt;br/&gt;4) Leftovers after Piecewise Linearization&lt;br/&gt;&lt;br/&gt;If I cut some channel into N pieces, I might end up with up to N-1 sats&lt;br/&gt;that don&amp;#39;t end up in any of the N pieces, effectively making the channel&lt;br/&gt;look smaller than it is. For smaller values of N that&amp;#39;s obviously not an&lt;br/&gt;issue (given the uncertainty we&amp;#39;re dealing with), but it might be more&lt;br/&gt;problematic if quantization is used with larger values. Any thoughts on&lt;br/&gt;this?&lt;br/&gt;&lt;br/&gt;5) Fees (and other properties?)&lt;br/&gt;&lt;br/&gt;How can we integrate fees into the function? I must admit, I haven&amp;#39;t&lt;br/&gt;even thought about that, yet. A copy-paste answer would be great,&lt;br/&gt;though! :) Maybe it&amp;#39;s also a good idea to punish channels based on their&lt;br/&gt;CLTV delta? Ratio of enabled channels? Age? Manual punishment score? ...&lt;br/&gt;&lt;br/&gt;6) Non-Zero Base Fee&lt;br/&gt;&lt;br/&gt;See Twitter [4].&lt;br/&gt;&lt;br/&gt;According to Stefan [5] it should be possible to integrate ZmnSCPxj&amp;#39;s ideas&lt;br/&gt;to make this work with non-zero base fees. How?&lt;br/&gt;Simpler approach: Twitter [6].&lt;br/&gt;&lt;br/&gt;7) Private Channels&lt;br/&gt;&lt;br/&gt;[very niche topic, not really that interesting nor urgent]&lt;br/&gt;&lt;br/&gt;I&amp;#39;m a fan of adding private channels to provide more outbound liquidity,&lt;br/&gt;mainly to reduce gossip and hide my intentions. If my total liquidity to&lt;br/&gt;some peer is below the amount announced in public channels, I don&amp;#39;t see&lt;br/&gt;any meaningful complication. However, I might have a public channel of&lt;br/&gt;size N and several private channels bringing my local liquidity to some&lt;br/&gt;value &amp;gt;N. It&amp;#39;s rather obvious that not announcing this fact is a bad&lt;br/&gt;idea, as any #pickhardtpayments implementation would think I have 0-N on&lt;br/&gt;my side of the channel(s). Assuming I&amp;#39;m willing to accept this tradeoff,&lt;br/&gt;do you see other complications or issues with hidden liquidity?&lt;br/&gt;&lt;br/&gt;My gut feeling is that this isn&amp;#39;t an issue, at all, as channel balances&lt;br/&gt;change all the time, which is something the algorithm already has to&lt;br/&gt;deal with.&lt;br/&gt;&lt;br/&gt;8) Quality of Approximation&lt;br/&gt;&lt;br/&gt;There are some problems in computer science that are hard/impossible to&lt;br/&gt;approximate, in the sense that any kind of deviation from the optimum&lt;br/&gt;could cause the computed results to be extremely bad. Do you have some&lt;br/&gt;idea (or proof) that your kind of approximation isn&amp;#39;t causing a major&lt;br/&gt;issue? I guess a piece-wise linearization with an infinite number of&lt;br/&gt;pieces corresponds to the optimal result. Given a finite number of&lt;br/&gt;pieces, how large is the difference to the optimum?&lt;br/&gt;&lt;br/&gt;Bye,&lt;br/&gt;Carsten&lt;br/&gt;&lt;br/&gt;1: &lt;a href=&#34;https://github.com/C-Otto/lnd-manageJ/issues/6&#34;&gt;https://github.com/C-Otto/lnd-manageJ/issues/6&lt;/a&gt;&lt;br/&gt;2: &lt;a href=&#34;https://github.com/lightningnetwork/lnd/issues/5746&#34;&gt;https://github.com/lightningnetwork/lnd/issues/5746&lt;/a&gt;&lt;br/&gt;3: &lt;a href=&#34;https://twitter.com/c_otto83/status/1502329970349248521&#34;&gt;https://twitter.com/c_otto83/status/1502329970349248521&lt;/a&gt;&lt;br/&gt;4: &lt;a href=&#34;https://twitter.com/c_otto83/status/1502329271964033027&#34;&gt;https://twitter.com/c_otto83/status/1502329271964033027&lt;/a&gt;&lt;br/&gt;5: &lt;a href=&#34;https://twitter.com/stefanwouldgo/status/1502681455918473217&#34;&gt;https://twitter.com/stefanwouldgo/status/1502681455918473217&lt;/a&gt;&lt;br/&gt;6: &lt;a href=&#34;https://twitter.com/c_otto83/status/1502330558793363464&#34;&gt;https://twitter.com/c_otto83/status/1502330558793363464&lt;/a&gt;&lt;br/&gt;-- &lt;br/&gt;Dr. Carsten Otto&lt;br/&gt;carsten at c-otto.de&lt;br/&gt;&lt;a href=&#34;https://c-otto.de&#34;&gt;https://c-otto.de&lt;/a&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;A non-text attachment was scrubbed...&lt;br/&gt;Name: signature.asc&lt;br/&gt;Type: application/pgp-signature&lt;br/&gt;Size: 195 bytes&lt;br/&gt;Desc: not available&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220313/1437e67a/attachment.sig&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220313/1437e67a/attachment.sig&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:05:30&#43;02:00</updated>
  </entry>

</feed>