WEBVTT - Automatic transcript; recognition may contain errors. Reviewed for technical wording and speaker labels. Times match the published episode.

00:00:18.100 --> 00:00:20.260
<v Aaron van Wirdum>Live from Utrecht, this is Bitcoin.

00:00:21.040 --> 00:00:21.640
<v Sjors Provoost>Explained.

00:00:22.340 --> 00:00:23.620
<v Aaron van Wirdum>Sjors, I have a problem.

00:00:24.600 --> 00:00:25.200
<v Sjors Provoost>You have a problem?

00:00:25.340 --> 00:00:30.040
<v Aaron van Wirdum>I have Bitcoins laying around everywhere. Bitcoins on exchanges, Bitcoins in hot

00:00:30.040 --> 00:00:32.320
<v Aaron van Wirdum>wallets, Bitcoins in paper wallets,

00:00:32.460 --> 00:00:33.580
<v Sjors Provoost>Bitcoins in ETFs.

00:00:33.980 --> 00:00:37.120
<v Aaron van Wirdum>Is there a safe place to store my Bitcoin, Sjors?

00:00:37.320 --> 00:00:41.480
<v Sjors Provoost>There might be, because we have a sponsor, and they're called Coinkite.

00:00:42.320 --> 00:00:44.900
<v Aaron van Wirdum>And they produce the COLDCARD, I heard.

00:00:45.060 --> 00:00:45.460
<v Sjors Provoost>That's right.

00:00:45.660 --> 00:00:47.980
<v Aaron van Wirdum>A hardware wallet for your Bitcoins.

00:00:48.300 --> 00:00:53.210
<v Sjors Provoost>And it supports PSBT, partially signed Bitcoin transactions.

00:00:54.200 --> 00:00:59.620
<v Aaron van Wirdum>Great. Okay, Sjors and dear listener. So we've been getting

00:00:59.620 --> 00:01:05.320
<v Aaron van Wirdum>requests over the past years, basically to sometimes make more

00:01:05.320 --> 00:01:06.820
<v Aaron van Wirdum>Lightning-specific episodes.

00:01:07.220 --> 00:01:10.280
<v Sjors Provoost>Indeed. Although we know that Lightning is dead.

00:01:11.280 --> 00:01:12.080
<v Aaron van Wirdum>Is it?

00:01:12.480 --> 00:01:13.700
<v Sjors Provoost>That's what Twitter says.

00:01:14.360 --> 00:01:16.240
<v Aaron van Wirdum>What do they say? Why is it that?

00:01:16.580 --> 00:01:17.240
<v Sjors Provoost>I don't know.

00:01:19.160 --> 00:01:22.180
<v Aaron van Wirdum>I used it today. It worked. It worked for me.

00:01:23.360 --> 00:01:23.840
<v Sjors Provoost>Okay.

00:01:24.620 --> 00:01:30.320
<v Aaron van Wirdum>Good. So the request is to make Lightning-specific episodes sometimes.

00:01:30.660 --> 00:01:36.560
<v Aaron van Wirdum>However, Sjors and I both kind of feel out of our depth when it comes to at

00:01:36.560 --> 00:01:41.440
<v Aaron van Wirdum>least more advanced Lightning topics. We've discussed this in the episode before

00:01:41.440 --> 00:01:46.000
<v Aaron van Wirdum>where you can really sort of see that the development communities of Bitcoin and

00:01:46.000 --> 00:01:50.740
<v Aaron van Wirdum>Lightning are kind of starting to separate a bit, specialize a bit. There's

00:01:50.740 --> 00:01:56.460
<v Aaron van Wirdum>overlap, obviously, but there's definitely sort of more. Bitcoin-focused, you

00:01:56.460 --> 00:02:00.140
<v Aaron van Wirdum>know, technological experts and developers and those that focus more on

00:02:00.140 --> 00:02:04.970
<v Aaron van Wirdum>Lightning. But we do want to incorporate more Lightning topics in our episodes.

00:02:05.530 --> 00:02:10.700
<v Aaron van Wirdum>So we're happy that today we have a special guest. Jesse.

00:02:11.360 --> 00:02:12.300
<v Jesse de Wit>Good to be here.

00:02:12.420 --> 00:02:13.100
<v Aaron van Wirdum>How are you, Jesse?

00:02:13.890 --> 00:02:15.110
<v Jesse de Wit>Good, good.

00:02:15.310 --> 00:02:16.030
<v Aaron van Wirdum>Now, who are you?

00:02:16.270 --> 00:02:22.330
<v Jesse de Wit>Who am I? I'm a Lightning developer, and I work for Breez. My name is Jesse de Wit.

00:02:22.990 --> 00:02:23.770
<v Aaron van Wirdum>Jesse de Wit.

00:02:23.870 --> 00:02:28.280
<v Jesse de Wit>Jesse de Wit. It's an impossible name to pronounce in English.

00:02:29.480 --> 00:02:33.810
<v Aaron van Wirdum>I just did pronounce it in English. Anyways, never mind. Move on.

00:02:34.150 --> 00:02:39.990
<v Jesse de Wit>Okay. Yeah, so I work on Lightning for Breez, mostly working on

00:02:39.990 --> 00:02:45.830
<v Jesse de Wit>Lightning service provider stuff and also Breez SDK. And yeah, I'm quite well

00:02:45.830 --> 00:02:48.390
<v Jesse de Wit>read into the Lightning specifics these days.

00:02:48.670 --> 00:02:53.970
<v Aaron van Wirdum>Awesome. Yeah. So thanks a lot for coming on. So yeah, we had sort of a list of

00:02:53.970 --> 00:02:58.810
<v Aaron van Wirdum>Lightning topics that we wanted to cover at some point. And earlier this week, we

00:02:58.810 --> 00:03:03.610
<v Aaron van Wirdum>read this list to you. And the one that sort of sprung out for you to cover is

00:03:03.610 --> 00:03:05.150
<v Aaron van Wirdum>asynchronous payments.

00:03:05.570 --> 00:03:05.850
<v Jesse de Wit>Exactly.

00:03:06.210 --> 00:03:11.760
<v Aaron van Wirdum>And the nice thing about that is you mentioned if we... cover asynchronous

00:03:11.760 --> 00:03:15.720
<v Aaron van Wirdum>payments, then we sort of at the same time also tackle two other topics that were

00:03:15.720 --> 00:03:20.620
<v Aaron van Wirdum>already on our list that we can sort of all wrap into one episode, basically,

00:03:20.840 --> 00:03:23.000
<v Aaron van Wirdum>because it sort of supports each other, right?

00:03:24.140 --> 00:03:29.060
<v Jesse de Wit>Yes. Yeah, and we'll touch on the topics later on, I suppose, when we cover async

00:03:29.060 --> 00:03:29.460
<v Jesse de Wit>payments.

00:03:30.060 --> 00:03:33.380
<v Aaron van Wirdum>Yeah, well, I'll spoil this. So the other two that we're sort of going to touch

00:03:33.380 --> 00:03:37.450
<v Aaron van Wirdum>on are PTLCs, and trampoline payments are also gonna…

00:03:37.450 --> 00:03:42.130
<v Jesse de Wit>Yes, we'll touch on them, uh briefly. We'll not go into depth, like exactly how

00:03:42.130 --> 00:03:45.750
<v Jesse de Wit>they work, but uh yeah, they definitely are necessary for asynchronous payments.

00:03:45.750 --> 00:03:51.710
<v Aaron van Wirdum>Okay, awesome. So asynchronous payments I guess the first the

00:03:51.710 --> 00:03:56.690
<v Aaron van Wirdum>starting point is what is it or maybe why is it needed like what are we talking about?

00:03:56.690 --> 00:04:02.100
<v Jesse de Wit>Yeah, so in the Lightning network um if Alice is trying to pay Bob

00:04:02.870 --> 00:04:06.510
<v Jesse de Wit>They both have to be online at the same time in order for a Lightning payment to

00:04:06.510 --> 00:04:12.070
<v Jesse de Wit>settle. And users are just not used to that these days anymore, right? People use

00:04:12.070 --> 00:04:17.770
<v Jesse de Wit>texts and every communication now happens asynchronously. So in Lightning

00:04:17.770 --> 00:04:21.510
<v Jesse de Wit>payments, users just expect it to work asynchronously as well.

00:04:21.770 --> 00:04:25.790
<v Sjors Provoost>And in Bitcoin, they're also used to... payments being asynchronous, right? You

00:04:25.790 --> 00:04:28.670
<v Sjors Provoost>have an address, you send money to it whenever you want.

00:04:28.950 --> 00:04:32.630
<v Jesse de Wit>Exactly, yeah. So you don't have to be online at the same time for that.

00:04:32.990 --> 00:04:36.690
<v Aaron van Wirdum>Yeah, so to give a very concrete example of something that happened to me this

00:04:36.690 --> 00:04:40.290
<v Aaron van Wirdum>week and also allows me one more option to show my book.

00:04:40.830 --> 00:04:41.450
<v Sjors Provoost>That's all right.

00:04:41.890 --> 00:04:45.490
<v Aaron van Wirdum>Yeah, so someone wanted to buy the Genesis book from me, like an autographed

00:04:45.490 --> 00:04:49.330
<v Aaron van Wirdum>version, and then he emailed me and he wanted to pay in Lightning. And I said,

00:04:49.390 --> 00:04:53.420
<v Aaron van Wirdum>yeah, sure, that's fine. And then I sent him back, using the Breez wallet

00:04:53.420 --> 00:04:58.000
<v Aaron van Wirdum>actually, a Lightning address. But obviously then I have to keep my wallet open

00:04:58.000 --> 00:05:02.400
<v Aaron van Wirdum>and I don't know for how long before he's going to make the payment. So that kind

00:05:02.400 --> 00:05:05.700
<v Aaron van Wirdum>of stuff is just very complicated with Lightning. So in the end, I sent him an

00:05:05.700 --> 00:05:10.160
<v Aaron van Wirdum>on-chain address because that way he can just send whenever he wants. So

00:05:10.160 --> 00:05:16.040
<v Aaron van Wirdum>essentially that is what we, you Lightning developers, are trying to achieve

00:05:18.180 --> 00:05:23.380
<v Aaron van Wirdum>With Lightning as well, you can send an invoice that can be paid at any point. Is

00:05:23.380 --> 00:05:24.760
<v Aaron van Wirdum>that even the right way of framing it?

00:05:24.800 --> 00:05:29.640
<v Jesse de Wit>Yeah, so maybe you can walk into the problem that you had first because, well,

00:05:29.700 --> 00:05:35.220
<v Jesse de Wit>first of all, your app has to be running. It needs CPU time in order to sign

00:05:35.220 --> 00:05:37.860
<v Jesse de Wit>messages for receiving the Lightning payment.

00:05:38.580 --> 00:05:40.340
<v Sjors Provoost>And it needs to receive data, right?

00:05:40.640 --> 00:05:44.340
<v Jesse de Wit>Yeah, it needs to receive data and it needs to sign messages, exactly.

00:05:46.350 --> 00:05:49.810
<v Jesse de Wit>So if you're not online, well, you won't be able to do that, and so you won't be

00:05:49.810 --> 00:05:55.530
<v Jesse de Wit>able to receive the payment. But if, let's say, Alice

00:05:55.530 --> 00:06:01.430
<v Jesse de Wit>is trying to send a payment and she's sending it to you, then Alice is

00:06:01.430 --> 00:06:05.910
<v Jesse de Wit>going to find a route over the Lightning Network. And a naive thing you could try

00:06:05.910 --> 00:06:11.870
<v Jesse de Wit>to do is just the last hop, which for you was the Breez LSP, Breez Lightning

00:06:11.870 --> 00:06:15.130
<v Jesse de Wit>Service Provider, which is the node that you are connected to.

00:06:16.980 --> 00:06:22.620
<v Jesse de Wit>could hold the payment until you come online and then forward the payment to you.

00:06:23.720 --> 00:06:28.680
<v Jesse de Wit>That would be a naive approach in trying to solve that Alice and you don't have

00:06:28.680 --> 00:06:29.900
<v Jesse de Wit>to be online at the same time.

00:06:30.120 --> 00:06:34.280
<v Aaron van Wirdum>And it's naive, I would assume, because in that case, Breez can steal my money?

00:06:34.540 --> 00:06:38.180
<v Jesse de Wit>No, it definitely [unclear] steal your money. But the problem is we're locking

00:06:38.180 --> 00:06:44.090
<v Jesse de Wit>liquidity in the network right now if we do this. So because Alice

00:06:44.090 --> 00:06:48.910
<v Jesse de Wit>is her payment, maybe we can explain a little bit what a Lightning payment is

00:06:48.910 --> 00:06:54.630
<v Jesse de Wit>first. So first you allocate, you find a route through the network. So you go,

00:06:55.390 --> 00:07:00.510
<v Jesse de Wit>yeah, you find a path over different nodes, over different channels.

00:07:00.850 --> 00:07:06.170
<v Jesse de Wit>And then when sending a payment, first you're going to allocate liquidity in each

00:07:06.170 --> 00:07:11.440
<v Jesse de Wit>of these channels that's sort of locked.

00:07:13.340 --> 00:07:19.290
<v Jesse de Wit>until you get the pre-image back that comes from you whenever you settle

00:07:19.290 --> 00:07:23.630
<v Jesse de Wit>the payment. Pre-image comes back to Alice, and only then are the funds released.

00:07:24.260 --> 00:07:28.740
<v Sjors Provoost>Yeah, so I guess another way to describe it is there's a secret at the end of the

00:07:28.740 --> 00:07:34.600
<v Sjors Provoost>tunnel, essentially. So the payee, the person receiving the payment, has a

00:07:34.600 --> 00:07:40.580
<v Sjors Provoost>secret. and the person making the payment has to allocate

00:07:40.580 --> 00:07:44.940
<v Sjors Provoost>liquidity, and then every hop does the same thing, and then the last hop gets the

00:07:44.940 --> 00:07:49.860
<v Sjors Provoost>secret, and then sends it back to the payer. So there's information that goes

00:07:49.860 --> 00:07:54.440
<v Sjors Provoost>from the sender to the recipient, and then this information has to go back from

00:07:54.440 --> 00:07:59.290
<v Sjors Provoost>the recipient to the sender. And as long as that information has not made the

00:07:59.290 --> 00:08:03.190
<v Sjors Provoost>full return trip, the liquidity is locked up all over the channel.

00:08:03.530 --> 00:08:08.950
<v Jesse de Wit>Yeah, so all over the network, the liquidity will be locked. And well, that's

00:08:08.950 --> 00:08:12.410
<v Jesse de Wit>something we don't want in the Lightning Network. Usually when a payment is

00:08:12.410 --> 00:08:18.310
<v Jesse de Wit>happy, in a happy flow, these payments settle within a second, right? But if

00:08:18.310 --> 00:08:23.190
<v Jesse de Wit>you just turn your phone off for a day, then liquidity is suddenly locked for an

00:08:23.190 --> 00:08:23.710
<v Jesse de Wit>entire day.

00:08:24.350 --> 00:08:25.850
<v Aaron van Wirdum>Why is this a problem?

00:08:26.380 --> 00:08:31.640
<v Jesse de Wit>Yeah, it's a problem because of that feature I just described. Yeah, you would

00:08:31.640 --> 00:08:36.880
<v Jesse de Wit>expect the liquidity to settle very quickly over the Lightning Network. So if you

00:08:36.880 --> 00:08:42.240
<v Jesse de Wit>lock this liquidity for a long time, you're locking it in multiple channels as

00:08:42.240 --> 00:08:48.120
<v Jesse de Wit>well. So the amount of your payment is locked over multiple channels. you

00:08:48.120 --> 00:08:53.380
<v Jesse de Wit>exponentially degrade the ability of the Lightning Network to be able to forward

00:08:53.380 --> 00:08:54.140
<v Jesse de Wit>payments this way.

00:08:54.240 --> 00:08:58.960
<v Sjors Provoost>It basically means you need bigger channels, right? Because if you're only using

00:08:58.960 --> 00:09:04.710
<v Sjors Provoost>channels one second at a time, then maybe a one Bitcoin channel is enough. But if

00:09:04.710 --> 00:09:09.450
<v Sjors Provoost>that one Bitcoin is just locked up for two weeks, then you need a much bigger channel.

00:09:09.990 --> 00:09:14.230
<v Aaron van Wirdum>Okay, and just from my understanding, is this the only problem we're trying to

00:09:14.230 --> 00:09:18.590
<v Aaron van Wirdum>solve? Let's say we would all use bigger channels. Would that just sort of also

00:09:18.590 --> 00:09:19.950
<v Aaron van Wirdum>solve the problem in that sense?

00:09:20.230 --> 00:09:25.110
<v Jesse de Wit>No, if people start sending more payments, then bigger channels are no longer an

00:09:25.110 --> 00:09:28.410
<v Jesse de Wit>option anymore. Or no longer work.

00:09:28.790 --> 00:09:34.140
<v Aaron van Wirdum>Okay, and is this... Is this the problem we're trying to solve or are there other

00:09:34.140 --> 00:09:35.640
<v Aaron van Wirdum>problems involved as well?

00:09:36.100 --> 00:09:41.660
<v Jesse de Wit>Yeah, so there's two aspects of this. One of them is that we don't want to lock

00:09:41.660 --> 00:09:45.780
<v Jesse de Wit>this liquidity in the network while the payment is in flight. And the other one

00:09:45.780 --> 00:09:49.880
<v Jesse de Wit>also has to do with the invoice generation.

00:09:51.600 --> 00:09:56.580
<v Jesse de Wit>Because Alice and Bob presumably are not online at the same time, they maybe

00:09:56.580 --> 00:10:02.580
<v Jesse de Wit>won't exchange an invoice. So Alice needs a way to statically create an invoice.

00:10:03.120 --> 00:10:07.860
<v Sjors Provoost>Right, because an example of your book, you created an invoice, but only once you

00:10:07.860 --> 00:10:12.620
<v Sjors Provoost>saw the email. So whoever wanted to buy the book had to wait for you to do that.

00:10:12.820 --> 00:10:16.440
<v Sjors Provoost>And it'd be better if the person who wants to buy the book does not have to wait

00:10:16.440 --> 00:10:20.000
<v Sjors Provoost>for you to make an invoice. But then the problem is that standard Lightning

00:10:20.000 --> 00:10:25.480
<v Sjors Provoost>invoices, the BOLT 11 format, you can pay them once. So

00:10:25.480 --> 00:10:28.980
<v Sjors Provoost>you can make an invoice and say, well, whoever is the first person to buy my book

00:10:28.980 --> 00:10:32.640
<v Sjors Provoost>paid this invoice. But now if you want to scale that and you want to sell

00:10:32.640 --> 00:10:36.300
<v Sjors Provoost>multiple books, well, you probably have to make multiple invoices and put them on

00:10:36.300 --> 00:10:40.120
<v Sjors Provoost>your website and tell people to pick which one. I don't know.

00:10:40.400 --> 00:10:45.300
<v Aaron van Wirdum>Okay, so let's cover that problem first. I need a way to sort of automatically

00:10:45.300 --> 00:10:48.400
<v Aaron van Wirdum>generate invoices even though my phone is switched off, I guess.

00:10:48.800 --> 00:10:54.350
<v Jesse de Wit>Yeah, so if you would currently create a BOLT 11

00:10:54.350 --> 00:10:57.350
<v Jesse de Wit>invoice, which is the invoice format we use on the Lightning Network today,

00:10:58.670 --> 00:11:03.090
<v Jesse de Wit>If you get that invoice paid, then you release the pre-image, which is your

00:11:03.090 --> 00:11:09.080
<v Jesse de Wit>secret, which is the payment secret. And so nobody else

00:11:09.080 --> 00:11:12.800
<v Jesse de Wit>will be able to pay that again because an intermediate node would be able to

00:11:12.800 --> 00:11:17.340
<v Jesse de Wit>intercept. your payment and settle the payment without the payment ever arriving

00:11:17.340 --> 00:11:19.780
<v Jesse de Wit>to you because he already knows the secret.

00:11:20.060 --> 00:11:24.420
<v Aaron van Wirdum>Yeah, the secret can only be used once for one payment flow, essentially.

00:11:24.760 --> 00:11:28.220
<v Jesse de Wit>Yeah, so the secret can only be used once, which means the invoice can only be used.

00:11:28.300 --> 00:11:32.660
<v Aaron van Wirdum>And this is a secret that I'm generating on my Breez wallet app.

00:11:32.760 --> 00:11:33.880
<v Jesse de Wit>Yeah, basically a random number.

00:11:34.100 --> 00:11:34.480
<v Aaron van Wirdum>Yeah.

00:11:36.740 --> 00:11:41.260
<v Jesse de Wit>So first we need to tackle that. And the best way to do that is to create an

00:11:41.260 --> 00:11:44.120
<v Jesse de Wit>actually a static invoice, which would be reusable.

00:11:45.580 --> 00:11:50.420
<v Jesse de Wit>So you could just post that on your website, say, well, a book costs this and

00:11:50.420 --> 00:11:55.780
<v Jesse de Wit>this much money. And senders would be able to pay to this invoice an infinite

00:11:55.780 --> 00:12:01.720
<v Jesse de Wit>amount of times. And for that we... We need a different model, and this

00:12:01.720 --> 00:12:07.620
<v Jesse de Wit>different model works with PTLCs. So currently, the way we described, you've

00:12:07.620 --> 00:12:11.960
<v Jesse de Wit>got a secret, and this secret is hashed into the invoice,

00:12:12.670 --> 00:12:18.390
<v Jesse de Wit>and then HTLCs are sent over the Lightning Network. I think you've covered this

00:12:18.390 --> 00:12:19.350
<v Jesse de Wit>in Lightning episodes.

00:12:19.970 --> 00:12:25.830
<v Sjors Provoost>We have previously tried to explain, but we generally also explained what hashes are.

00:12:27.320 --> 00:12:32.340
<v Aaron van Wirdum>We definitely had a basic Lightning explainer episode at one point, and I'm sure

00:12:32.340 --> 00:12:35.460
<v Aaron van Wirdum>we must have covered this, yeah. It was a couple of years ago, so I don't

00:12:35.460 --> 00:12:37.360
<v Aaron van Wirdum>remember exactly, but presumably, yes.

00:12:37.660 --> 00:12:41.620
<v Sjors Provoost>But the hash of the secret, that's what you're sending to the other side, and the

00:12:41.620 --> 00:12:45.060
<v Sjors Provoost>other side says, please give me the secret that belongs to this hash, and that's

00:12:45.060 --> 00:12:47.300
<v Sjors Provoost>really the message you're forwarding along all these channels.

00:12:48.880 --> 00:12:52.380
<v Aaron van Wirdum>Right, so that's called an HTLC. So what is a PTLC?

00:12:52.800 --> 00:12:57.800
<v Jesse de Wit>Yeah, it's basically sort of the same construct, only instead of having a

00:12:57.800 --> 00:13:02.980
<v Jesse de Wit>pre-image and a hash, you have a private key and a public key, which is called a

00:13:02.980 --> 00:13:07.480
<v Jesse de Wit>payment point. And that's why it's called a point time lock contract. So it's not

00:13:07.480 --> 00:13:12.340
<v Jesse de Wit>a hash time lock contract, but a point time lock contract. And the trick with

00:13:12.340 --> 00:13:15.500
<v Jesse de Wit>these public keys is that you can tweak them.

00:13:18.010 --> 00:13:23.410
<v Jesse de Wit>And you can basically derive as much keys as you want from a single public key,

00:13:23.670 --> 00:13:27.910
<v Jesse de Wit>which you can make an infinite amount of secrets from.

00:13:28.150 --> 00:13:32.330
<v Sjors Provoost>Yeah, one of our very first episodes talked about Taproot and why Taproot is so

00:13:32.330 --> 00:13:37.990
<v Sjors Provoost>cool. And one of the aspects of it is that it's very easy to add a number to a

00:13:37.990 --> 00:13:42.410
<v Sjors Provoost>private key and then add essentially the same number to the public key.

00:13:43.230 --> 00:13:44.750
<v Aaron van Wirdum>Well, that's Schnorr, basically, right?

00:13:44.930 --> 00:13:49.750
<v Sjors Provoost>Yes, and that's already possible with the CDH, but it's just much, much easier

00:13:49.750 --> 00:13:55.690
<v Sjors Provoost>with Schnorr. And this PTLC construct makes use of that. The ability to

00:13:55.690 --> 00:14:01.630
<v Sjors Provoost>add some random number to a private key, and the other side can do that to

00:14:01.630 --> 00:14:04.530
<v Sjors Provoost>the public key. So even if you don't have the public key, you know how to tweak

00:14:04.530 --> 00:14:08.530
<v Sjors Provoost>it. And you cannot do that with hashes. Because if it hashes, if you take the

00:14:08.530 --> 00:14:13.710
<v Sjors Provoost>letter A, For example, when you hash it, you get some large number. Then if you

00:14:13.710 --> 00:14:17.890
<v Sjors Provoost>say, oh, I'm just going to change A to B, well, the other side has no idea. You

00:14:17.890 --> 00:14:21.090
<v Sjors Provoost>cannot just take the hash of A and then take the hash of B and add them together.

00:14:21.090 --> 00:14:23.210
<v Sjors Provoost>That's not going to give you the same result.

00:14:24.160 --> 00:14:29.800
<v Jesse de Wit>Yeah, so it does work with points, with payment points.

00:14:30.000 --> 00:14:35.870
<v Jesse de Wit>And so what a sender can do is it's going to, for each intermediate hop, generate

00:14:35.870 --> 00:14:40.810
<v Jesse de Wit>a different secret, basically. So each intermediate hop is going to think that

00:14:40.810 --> 00:14:45.970
<v Jesse de Wit>it's a different secret than the one the recipient actually created.

00:14:46.490 --> 00:14:51.770
<v Jesse de Wit>So each intermediate hop won't ever learn the actual secret

00:14:51.770 --> 00:14:54.410
<v Jesse de Wit>from the payee.

00:14:54.610 --> 00:14:59.150
<v Sjors Provoost>But how does that work if you're making two payments through the same route?

00:14:59.550 --> 00:15:03.270
<v Sjors Provoost>Because what is it that makes the second payment different from the first payment?

00:15:03.930 --> 00:15:09.910
<v Jesse de Wit>So the trick is that Alice, which is the sender, she generates

00:15:09.910 --> 00:15:14.630
<v Jesse de Wit>a random number as well, which tweaks the public key.

00:15:16.450 --> 00:15:20.930
<v Jesse de Wit>And the intermediate nodes, they use this tweaked public key

00:15:20.930 --> 00:15:26.890
<v Jesse de Wit>in order to learn the secret, basically.

00:15:27.410 --> 00:15:29.190
<v Sjors Provoost>Yeah, so it's never the same secret.

00:15:29.270 --> 00:15:32.230
<v Jesse de Wit>It's never the same secret, and not for any intermediate hop as well.

00:15:32.490 --> 00:15:37.580
<v Sjors Provoost>Yeah. So even if two different people make a payment, the sender picks the random

00:15:37.580 --> 00:15:41.520
<v Sjors Provoost>number, so the recipient doesn't have to do anything. As long as each sender

00:15:41.520 --> 00:15:43.880
<v Sjors Provoost>picks a random number, they cannot reuse the same secret.

00:15:44.760 --> 00:15:48.600
<v Jesse de Wit>Yeah, and it's in the best interest of the sender to pick a random number then,

00:15:48.780 --> 00:15:51.960
<v Jesse de Wit>because it's his payment that will be stolen otherwise.

00:15:53.160 --> 00:15:58.860
<v Aaron van Wirdum>Okay, so in this case, I'm trying to sell the Genesis book to

00:15:58.860 --> 00:16:04.010
<v Aaron van Wirdum>someone, so I got to generate an invoice. who's generating,

00:16:04.390 --> 00:16:07.650
<v Aaron van Wirdum>where does this generation happen? What happens exactly?

00:16:07.750 --> 00:16:12.990
<v Jesse de Wit>Yeah, so you create an invoice and it's got a payment point inside of your

00:16:12.990 --> 00:16:17.330
<v Jesse de Wit>invoice and you just put that up on your website. I'm a sender, I scan your

00:16:17.330 --> 00:16:22.490
<v Jesse de Wit>invoice and I'm going to tweak your payment points with random numbers

00:16:22.490 --> 00:16:28.310
<v Jesse de Wit>along the route so nobody learns about the actual secret when the secret

00:16:28.310 --> 00:16:30.310
<v Jesse de Wit>comes back to the sender.

00:16:30.470 --> 00:16:33.730
<v Aaron van Wirdum>Right. Okay, got it. That part makes sense to me.

00:16:34.190 --> 00:16:39.110
<v Sjors Provoost>So that removes the interactivity from you having to make an invoice. But in this

00:16:39.110 --> 00:16:44.610
<v Sjors Provoost>scenario, you're still online because you are clearly receiving the payment and

00:16:44.610 --> 00:16:46.730
<v Sjors Provoost>sending back the secret every time somebody makes a payment.

00:16:46.990 --> 00:16:50.390
<v Aaron van Wirdum>Yeah, so that was the second part of the problem I think we're trying to solve,

00:16:50.510 --> 00:16:54.710
<v Aaron van Wirdum>right? Now my phone is, you know, I emailed this guy back or whatever. My phone

00:16:54.710 --> 00:16:58.500
<v Aaron van Wirdum>is switched off and now I still need to receive. the payment without locking

00:16:58.500 --> 00:17:01.880
<v Aaron van Wirdum>these funds along all these channels because that screws up.

00:17:02.040 --> 00:17:04.780
<v Sjors Provoost>So your friend has downloaded the invoice from your website instead of having to

00:17:04.780 --> 00:17:09.560
<v Sjors Provoost>send you an email. But in this, so far, we've still reached the point where,

00:17:09.600 --> 00:17:12.720
<v Sjors Provoost>okay, they don't have to email you anymore. They just make the payment, but your

00:17:12.720 --> 00:17:14.480
<v Sjors Provoost>wallet still needs to be online to receive the payment.

00:17:14.720 --> 00:17:17.480
<v Aaron van Wirdum>Yes. Okay, so how do we solve this problem, Jesse?

00:17:17.680 --> 00:17:22.980
<v Jesse de Wit>Okay, let's go over how async payments works then. So Alice is going to pay Bob

00:17:22.980 --> 00:17:28.970
<v Jesse de Wit>and Alice is going to be connected to the Lightning Network through

00:17:28.970 --> 00:17:33.650
<v Jesse de Wit>a Lightning service provider. And Bob is going to be connected to the Lightning

00:17:33.650 --> 00:17:38.730
<v Jesse de Wit>network through a Lightning service provider. Where a Lightning service provider

00:17:38.730 --> 00:17:44.570
<v Jesse de Wit>is basically just a node that you're connected to the Lightning network.

00:17:46.090 --> 00:17:48.490
<v Jesse de Wit>And this node is well connected to the Lightning network.

00:17:48.850 --> 00:17:52.490
<v Aaron van Wirdum>Yeah, so the concrete example here would be, for example, Breez I think, right?

00:17:52.630 --> 00:17:57.930
<v Aaron van Wirdum>Like my wallet is not a full node. It just connects to Breez's full node.

00:17:58.190 --> 00:18:04.150
<v Jesse de Wit>Yeah. And Breez's full node is tolerant of you being offline a

00:18:04.150 --> 00:18:07.490
<v Jesse de Wit>lot, which is why we call this a Lightning service provider. But it could

00:18:07.490 --> 00:18:09.590
<v Jesse de Wit>basically be any node that's tolerant to that.

00:18:11.560 --> 00:18:16.960
<v Jesse de Wit>And what Alice is going to do, it's going to

00:18:17.500 --> 00:18:23.250
<v Jesse de Wit>send the payment to Bob, but it's going to tell

00:18:23.250 --> 00:18:26.730
<v Jesse de Wit>her LSP, please hold this payment.

00:18:28.230 --> 00:18:30.670
<v Jesse de Wit>until you receive a message that you can release it.

00:18:31.090 --> 00:18:32.750
<v Aaron van Wirdum>She's telling her own LSP that.

00:18:32.830 --> 00:18:36.870
<v Jesse de Wit>She's telling her own LSP that. And the reason she does that...

00:18:36.870 --> 00:18:41.750
<v Aaron van Wirdum>Otherwise, it's a regular Lightning payment with a PTLC then. It's normal. She

00:18:41.750 --> 00:18:45.230
<v Aaron van Wirdum>just says to her own service provider, don't send this yet.

00:18:45.630 --> 00:18:48.370
<v Jesse de Wit>Yeah, exactly. And this message is inside the payment itself.

00:18:49.610 --> 00:18:51.770
<v Jesse de Wit>So basically, it's a regular Lightning payment.

00:18:52.220 --> 00:18:56.540
<v Sjors Provoost>And so at this point, Alice's LSP cannot steal the money, right? It's not that

00:18:56.540 --> 00:19:01.440
<v Sjors Provoost>she's making a payment to her LSP. She is doing the first step of the payment,

00:19:01.680 --> 00:19:06.480
<v Sjors Provoost>which is giving the pre-image. No, not the pre-image, giving the point.

00:19:07.580 --> 00:19:13.460
<v Sjors Provoost>basically the public thing of the secret to her payment

00:19:13.460 --> 00:19:18.100
<v Sjors Provoost>provider who cannot take the money unless they get the secret. And in order to

00:19:18.100 --> 00:19:21.580
<v Sjors Provoost>get the secret, they have to forward it. But all Alice is doing is saying, oh,

00:19:21.720 --> 00:19:25.040
<v Sjors Provoost>wait a minute, don't forward it just yet because Bob might not be online.

00:19:25.480 --> 00:19:30.160
<v Jesse de Wit>Exactly. So we know the reason why she— why the LSP is not forwarding it.

00:19:31.290 --> 00:19:36.920
<v Jesse de Wit>And what Alice is going to do as well... She's going to send an onion message

00:19:36.920 --> 00:19:42.810
<v Jesse de Wit>to Bob saying, hey, there's a pending payment here. If you

00:19:42.810 --> 00:19:48.530
<v Jesse de Wit>want to release that whenever you're online, send a message back along this

00:19:48.530 --> 00:19:52.230
<v Jesse de Wit>path over here. And there's an encrypted path inside this message as well.

00:19:52.410 --> 00:19:55.010
<v Aaron van Wirdum>When you say onion message, what do you mean by that?

00:19:55.210 --> 00:20:01.130
<v Jesse de Wit>An onion message is, so over the Lightning Network, we route payments over onions

00:20:01.130 --> 00:20:03.530
<v Jesse de Wit>as well, basically meaning that every hop,

00:20:05.110 --> 00:20:11.110
<v Jesse de Wit>where this message is routed over, is encrypted. So it sort of becomes an onion

00:20:11.110 --> 00:20:13.850
<v Jesse de Wit>of encryption, where onions have layers.

00:20:14.170 --> 00:20:19.550
<v Sjors Provoost>So every point in a route can only see which point is coming next or which

00:20:19.550 --> 00:20:24.480
<v Sjors Provoost>node is coming next and which node came before it, but cannot see further. In

00:20:24.480 --> 00:20:28.300
<v Sjors Provoost>either direction. Which we explained a bit in our episode about BOLT 12.

00:20:28.900 --> 00:20:33.500
<v Jesse de Wit>Yeah, and you can basically send arbitrary messages over this construction, over

00:20:33.500 --> 00:20:35.020
<v Jesse de Wit>the Lightning Network then. Right.

00:20:36.380 --> 00:20:41.040
<v Jesse de Wit>And she's going to send this to Bob and with a reply path then to her LSP.

00:20:42.480 --> 00:20:48.000
<v Jesse de Wit>So Bob will be able to unlock the payment so it actually becomes forwarded.

00:20:48.180 --> 00:20:53.610
<v Jesse de Wit>But Bob is offline, of course. So the LSP of Bob will hold this Onion message

00:20:53.610 --> 00:20:58.330
<v Jesse de Wit>until Bob is online. Right? Because the LSP knows, well, I have to forward this

00:20:58.330 --> 00:21:02.210
<v Jesse de Wit>to Bob. Bob is not there. So I'm just going to wait until Bob is online.

00:21:02.430 --> 00:21:02.670
<v Aaron van Wirdum>Right.

00:21:03.030 --> 00:21:06.330
<v Sjors Provoost>And the LSP cannot read what is in the message. Just knows, like, I have a

00:21:06.330 --> 00:21:09.350
<v Sjors Provoost>message for Bob. I don't know where it came from, but I'll give it to Bob when

00:21:09.350 --> 00:21:09.930
<v Sjors Provoost>Bob is online.

00:21:10.590 --> 00:21:13.990
<v Aaron van Wirdum>Yeah, and in this case, it's obviously not a problem because no funds are being

00:21:13.990 --> 00:21:15.310
<v Aaron van Wirdum>locked up. It's just a message.

00:21:15.670 --> 00:21:15.810
<v Jesse de Wit>Yeah.

00:21:16.190 --> 00:21:16.270
<v Sjors Provoost>Yeah.

00:21:16.870 --> 00:21:22.230
<v Aaron van Wirdum>Okay, so that's the onion message. Goes first to Bob's service provider, and he

00:21:22.230 --> 00:21:26.110
<v Aaron van Wirdum>will forward that to Bob. Bob's gone online. Bob comes online, turns his phone

00:21:26.110 --> 00:21:31.530
<v Aaron van Wirdum>on. or Breez app or whatever Lightning app he has sees this message, or probably

00:21:31.530 --> 00:21:33.750
<v Aaron van Wirdum>his wallet just responds to the message, I would assume.

00:21:33.970 --> 00:21:34.350
<v Jesse de Wit>Yeah, yeah, yeah.

00:21:34.370 --> 00:21:35.970
<v Aaron van Wirdum>He doesn't have to actually see it.

00:21:36.090 --> 00:21:40.370
<v Jesse de Wit>Yeah, this all goes automatic, but we will say that his wallet sees the message

00:21:40.370 --> 00:21:44.430
<v Jesse de Wit>and then is going to reply over that reply path. So he doesn't really know where

00:21:44.430 --> 00:21:48.710
<v Jesse de Wit>the message is coming from. He just knows that he has to send an onion message

00:21:48.710 --> 00:21:49.910
<v Jesse de Wit>there in order to unlock it.

00:21:51.570 --> 00:21:56.950
<v Jesse de Wit>And then, so Alice's LSP, who's still holding that payment right now,

00:21:58.110 --> 00:22:04.010
<v Jesse de Wit>By the way, Alice, after she sent the onion message to Bob, was able to go

00:22:04.010 --> 00:22:08.810
<v Jesse de Wit>offline. She could put her phone back in your pocket. It's an important part that

00:22:08.810 --> 00:22:10.290
<v Jesse de Wit>they don't have to be online at the same time.

00:22:11.790 --> 00:22:16.470
<v Aaron van Wirdum>Yeah, because Alice's LSP now has the money in a way.

00:22:16.790 --> 00:22:21.550
<v Jesse de Wit>Yeah, has the money in a way. And now, so we're now at the point where Alice's

00:22:21.550 --> 00:22:26.670
<v Jesse de Wit>LSP received the onion message from Bob saying, please forward this payment. Then

00:22:26.670 --> 00:22:31.290
<v Jesse de Wit>the LSP forwards the payment to Bob, and Bob is online now. So he's able to

00:22:31.290 --> 00:22:36.290
<v Jesse de Wit>settle the payment. So he's going to release the pre-image.

00:22:37.130 --> 00:22:42.190
<v Jesse de Wit>The pre-image goes back all the way to Alice's LSP.

00:22:43.800 --> 00:22:48.700
<v Jesse de Wit>And Alice's LSP, whenever Alice comes online, is able to settle the last piece

00:22:48.700 --> 00:22:53.960
<v Jesse de Wit>between her and Alice. Because only her channel with Alice is now still in a

00:22:53.960 --> 00:22:56.250
<v Jesse de Wit>state where funds are... In Limbo.

00:22:56.510 --> 00:22:56.870
<v Aaron van Wirdum>Right.

00:22:57.050 --> 00:23:01.590
<v Sjors Provoost>Yeah, so I guess the only player in this story that needs to hold funds in Limbo

00:23:01.590 --> 00:23:05.970
<v Sjors Provoost>in a channel longer than you'd normally want to do is the channel between Alice

00:23:05.970 --> 00:23:09.990
<v Sjors Provoost>and her Lightning service provider. So obviously the Lightning service provider

00:23:09.990 --> 00:23:15.390
<v Sjors Provoost>will want to be compensated for that in a way. But if Alice is a mobile node,

00:23:15.670 --> 00:23:19.550
<v Sjors Provoost>then that money is probably going to be stuck, kind of stuck anyway, because if

00:23:19.550 --> 00:23:23.130
<v Sjors Provoost>she's not online, they can't route through it and she probably doesn't have any

00:23:23.130 --> 00:23:25.920
<v Sjors Provoost>other channels. It's not a routing node anyway.

00:23:26.140 --> 00:23:30.400
<v Jesse de Wit>And LSP will already allocate liquidity towards these users.

00:23:31.940 --> 00:23:35.980
<v Jesse de Wit>So I don't think there will be any specific compensation for this, just probably

00:23:35.980 --> 00:23:39.200
<v Jesse de Wit>for the fact of being a Lightning service provider and allocating liquidity.

00:23:39.660 --> 00:23:41.080
<v Jesse de Wit>Maybe you'll pay something for that.

00:23:42.240 --> 00:23:46.640
<v Aaron van Wirdum>We promised, or I promised, that we would also cover trampoline payments. Where

00:23:46.640 --> 00:23:47.460
<v Aaron van Wirdum>does this come in?

00:23:48.220 --> 00:23:51.060
<v Sjors Provoost>In some situations, it would just work this way, right?

00:23:51.280 --> 00:23:55.580
<v Jesse de Wit>In some situations, it would just work. But there is actually a problem, because

00:23:55.580 --> 00:24:00.340
<v Jesse de Wit>if Alice finds a route for this payment over the Lightning network to Bob,

00:24:01.810 --> 00:24:06.290
<v Jesse de Wit>Usually in Lightning, what happens is you find a route, you try the route, and

00:24:06.290 --> 00:24:10.440
<v Jesse de Wit>then somewhere along the route, Either a node is offline or doesn't have enough

00:24:10.440 --> 00:24:10.860
<v Jesse de Wit>liquidity.

00:24:12.200 --> 00:24:16.240
<v Jesse de Wit>And this route fails. And what your node is going to do is going to find another route.

00:24:16.420 --> 00:24:20.220
<v Sjors Provoost>And this is also, by the way, where I'd like to shill the episode with Rene

00:24:20.220 --> 00:24:21.760
<v Sjors Provoost>Pickhardt we did a few years ago.

00:24:23.680 --> 00:24:29.680
<v Sjors Provoost>Explaining sort of his pathfinding optimal way of making payments.

00:24:29.800 --> 00:24:31.640
<v Sjors Provoost>But it also involves lots of attempts.

00:24:33.380 --> 00:24:37.580
<v Sjors Provoost>Yeah, quite a few attempts to get a payment through. It's by design, there's some

00:24:37.580 --> 00:24:41.960
<v Sjors Provoost>privacy in the Lightning Protocol, so you don't know exactly how much room there

00:24:41.960 --> 00:24:47.060
<v Sjors Provoost>is in all the channels along the route. You know how big the channel is, but you

00:24:47.060 --> 00:24:50.040
<v Sjors Provoost>don't know where the money is in that channel, so you don't know how much you can

00:24:50.040 --> 00:24:52.820
<v Sjors Provoost>actually send through it. And this changes every time as well.

00:24:53.640 --> 00:24:56.460
<v Aaron van Wirdum>That was a short special, I believe, right?

00:24:56.900 --> 00:24:57.260
<v Sjors Provoost>Yes.

00:24:58.250 --> 00:24:59.870
<v Aaron van Wirdum>But you don't know the episode, I'm sure?

00:25:00.090 --> 00:25:00.310
<v Sjors Provoost>No.

00:25:00.670 --> 00:25:00.850
<v Aaron van Wirdum>Okay.

00:25:01.470 --> 00:25:07.370
<v Jesse de Wit>Okay. Yeah, so Alice, if she created this first route and this route fails, that

00:25:07.370 --> 00:25:10.970
<v Jesse de Wit>would mean that she would only retry whenever she comes back online again. You

00:25:10.970 --> 00:25:16.490
<v Jesse de Wit>don't know when that is. So what Alice can do is she can delegate the pathfinding

00:25:16.490 --> 00:25:22.100
<v Jesse de Wit>to another node. And this is a feature in the Lightning Network that's

00:25:22.100 --> 00:25:27.880
<v Jesse de Wit>being implemented in several node implementations. ACINQ already

00:25:27.880 --> 00:25:32.830
<v Jesse de Wit>uses it, and it's called Trampoline Payments. So basically, Alice is going to ask

00:25:32.830 --> 00:25:38.510
<v Jesse de Wit>her LSP, please, I want to forward this payment to this direction.

00:25:39.200 --> 00:25:43.180
<v Jesse de Wit>Please, do you find the best path over the Lightning Network? And I'm just going

00:25:43.180 --> 00:25:44.840
<v Jesse de Wit>to chill and go offline now.

00:25:45.170 --> 00:25:49.770
<v Sjors Provoost>Yeah, and so this works by providing a carte blanche in terms of fees, right?

00:25:49.910 --> 00:25:53.850
<v Sjors Provoost>Because normally when you establish the route, you know exactly how much fees you

00:25:53.850 --> 00:25:57.310
<v Sjors Provoost>need to pay at every hop. But because you're not establishing the route, you're

00:25:57.310 --> 00:26:01.530
<v Sjors Provoost>just going to say, well, here's 100 sats. You figure it out. And if you find a

00:26:01.530 --> 00:26:03.430
<v Sjors Provoost>cheaper route, you keep the change.

00:26:04.010 --> 00:26:08.870
<v Jesse de Wit>Exactly, yeah. So you give them some kind of margin. And it could be a

00:26:08.870 --> 00:26:14.270
<v Jesse de Wit>competition for trampoline nodes as well to say, well, I'm the cheapest because I

00:26:14.270 --> 00:26:16.110
<v Jesse de Wit>know how to find the best routes in the network.

00:26:16.310 --> 00:26:21.070
<v Sjors Provoost>Exactly, like the London taxi drivers that have the knowledge and they can find

00:26:21.070 --> 00:26:24.990
<v Sjors Provoost>the shortest route through London without a GPS and they usually are actually

00:26:24.990 --> 00:26:28.990
<v Sjors Provoost>faster than the Uber drivers that just follow Google Maps, according to legend.

00:26:31.800 --> 00:26:37.560
<v Jesse de Wit>So Alice's LSP is now able to retry this payment whenever it

00:26:37.560 --> 00:26:43.560
<v Jesse de Wit>fails, and so would be able to reach Bob, hopefully in a timely manner, before

00:26:43.560 --> 00:26:44.740
<v Jesse de Wit>Bob goes offline again.

00:26:44.980 --> 00:26:48.600
<v Sjors Provoost>And so this ingredient is useful, like we said, because the Lightning network

00:26:48.600 --> 00:26:52.880
<v Sjors Provoost>changes all the time, you need to do multiple attempts, and so this trampoline

00:26:52.880 --> 00:26:58.840
<v Sjors Provoost>router can just try it multiple times, basically. The

00:26:58.840 --> 00:27:02.660
<v Sjors Provoost>downside, of course, is privacy. Because the trampoline now knows where the

00:27:02.660 --> 00:27:03.320
<v Sjors Provoost>payment is going.

00:27:04.180 --> 00:27:10.130
<v Jesse de Wit>Yes. So the first part of this is Bob in his invoice

00:27:10.130 --> 00:27:12.830
<v Jesse de Wit>could have created a blinded path.

00:27:14.250 --> 00:27:19.850
<v Jesse de Wit>So that's one part of this where the intermediate node would not actually find

00:27:19.850 --> 00:27:22.710
<v Jesse de Wit>the destination, right? The trampoline node would not find the destination.

00:27:24.090 --> 00:27:30.030
<v Jesse de Wit>And another way to deal with this is to select multiple trampoline

00:27:30.030 --> 00:27:36.000
<v Jesse de Wit>hops. in your route so we're now using one trampoline

00:27:36.000 --> 00:27:41.880
<v Jesse de Wit>node So Alice's LSP is going to find different routes, but you could tell Alice's

00:27:41.880 --> 00:27:47.140
<v Jesse de Wit>LSP, so first find a route to this random trampoline node, then find a route,

00:27:47.300 --> 00:27:51.680
<v Jesse de Wit>then that trampoline node has to find a route to that random trampoline node. So

00:27:51.680 --> 00:27:57.620
<v Jesse de Wit>you could, if you value your privacy, you could diffuse the pathfinding a little

00:27:57.620 --> 00:27:58.520
<v Jesse de Wit>bit that way.

00:27:59.240 --> 00:28:04.740
<v Aaron van Wirdum>Okay, I guess one maybe concern that sort of comes to my mind.

00:28:05.100 --> 00:28:10.260
<v Aaron van Wirdum>but I'll let you address that, is it sort of sounds like this would make

00:28:10.260 --> 00:28:15.420
<v Aaron van Wirdum>Lightning users very dependent on service providers.

00:28:16.320 --> 00:28:21.990
<v Aaron van Wirdum>Sjors mentioned that they're also more general risk, and I'm asking if

00:28:22.120 --> 00:28:27.280
<v Aaron van Wirdum>it works for a Lightning service provider, but is this a reasonable concern in

00:28:27.280 --> 00:28:30.820
<v Aaron van Wirdum>your view, or in Sjors's view maybe? But let's hear from Jesse first.

00:28:31.380 --> 00:28:33.740
<v Sjors Provoost>Yeah, from my point of view, it depends on how...

00:28:34.030 --> 00:28:37.190
<v Aaron van Wirdum>Sjors. I said, let's hear from Jesse first.

00:28:38.450 --> 00:28:38.630
<v Sjors Provoost>Okay.

00:28:39.010 --> 00:28:42.500
<v Jesse de Wit>Well, okay. So there's a user that apparently…

00:28:45.250 --> 00:28:49.370
<v Jesse de Wit>online Lightning node, right? So he wants to run a Lightning node in his pocket.

00:28:50.350 --> 00:28:56.280
<v Jesse de Wit>So that means there's no other way in network through nodes that are

00:28:56.280 --> 00:28:57.280
<v Jesse de Wit>willing to accept that.

00:28:59.930 --> 00:29:05.370
<v Sjors Provoost>And as a reminder, why [unclear]? If you have a channel,

00:29:06.360 --> 00:29:12.350
<v Sjors Provoost>But you're offline all the time. Now, if you channel and all the money in

00:29:12.350 --> 00:29:16.350
<v Sjors Provoost>the channel is on your own side then the other side is not going to care but if

00:29:16.350 --> 00:29:20.690
<v Sjors Provoost>you have made like lots and lots of payments to the channel, now the money is on

00:29:20.690 --> 00:29:25.470
<v Sjors Provoost>the other side. The other side is going to be annoyed by this because when you're

00:29:25.470 --> 00:29:30.750
<v Sjors Provoost>offline, they cannot access that money at all. They can't it— but they have to

00:29:30.750 --> 00:29:34.230
<v Sjors Provoost>force close it which is expensive. They can't route anything through it because

00:29:34.230 --> 00:29:38.350
<v Sjors Provoost>you're offline. You're not a routing node so that money is just they own it, but

00:29:38.350 --> 00:29:43.330
<v Sjors Provoost>they're forced HODLing it essentially. And so not everybody's going to be willing

00:29:43.330 --> 00:29:47.950
<v Sjors Provoost>to just allow you to open a channel and behave like that. I think right now many

00:29:47.950 --> 00:29:52.090
<v Sjors Provoost>nodes don't care, but they might close the channel on you saying, hey, this is

00:29:52.090 --> 00:29:55.290
<v Sjors Provoost>not making me enough money. So a Lightning service provider in the very broad

00:29:55.290 --> 00:30:00.090
<v Sjors Provoost>sense is anyone who's willing to just put up with a peer that's not online all

00:30:00.090 --> 00:30:02.030
<v Sjors Provoost>the time, probably by charging.

00:30:02.690 --> 00:30:05.370
<v Aaron van Wirdum>Yeah. How far is this?

00:30:06.850 --> 00:30:08.690
<v Jesse de Wit>So there's a lot of prerequisites.

00:30:10.950 --> 00:30:15.950
<v Jesse de Wit>So first of all, we need Taproot channels in order to...

00:30:17.420 --> 00:30:23.040
<v Jesse de Wit>Taproot channels are an LND-implemented simple Taproot channels

00:30:23.040 --> 00:30:27.300
<v Jesse de Wit>protocol, which sort of works with private channels right now, but not with

00:30:27.300 --> 00:30:27.820
<v Jesse de Wit>public channels.

00:30:32.840 --> 00:30:38.380
<v Jesse de Wit>It's basically the, so Lightning channels are basically just commitment

00:30:38.380 --> 00:30:43.560
<v Jesse de Wit>transactions on chain, right? But you update them locally and you broadcast,

00:30:43.740 --> 00:30:48.360
<v Jesse de Wit>don't broadcast many of these that you sign in between in your channel. And these

00:30:48.360 --> 00:30:53.170
<v Jesse de Wit>transactions are tap transactions. So that's basically what a Taproot channel is.

00:30:53.270 --> 00:30:56.820
<v Aaron van Wirdum>Okay. So it's pretty much what it sounds like.

00:30:56.980 --> 00:31:01.320
<v Sjors Provoost>And that's just the main transaction, but then there's the HTLCs, the things that

00:31:01.320 --> 00:31:06.580
<v Sjors Provoost>fly over the channel when you're making a payment, to make those PTLC. Another

00:31:06.580 --> 00:31:11.690
<v Sjors Provoost>change, right? You can have Taproot channels that still use locks for the payments.

00:31:12.110 --> 00:31:17.790
<v Jesse de Wit>Yeah, and also if you use Taproot channels, you need to gossip your channel, so

00:31:17.790 --> 00:31:20.790
<v Jesse de Wit>you need to tell the rest of the network, like, these are the channels that I

00:31:20.790 --> 00:31:21.430
<v Jesse de Wit>have.

00:31:25.990 --> 00:31:28.330
<v Jesse de Wit>This also does not exist yet.

00:31:29.770 --> 00:31:33.650
<v Jesse de Wit>So there are some prerequisites there on the side.

00:31:35.150 --> 00:31:41.030
<v Jesse de Wit>And then there is a proposal now for holding the payment,

00:31:41.190 --> 00:31:47.110
<v Jesse de Wit>which is one part of async payments, where the LSP holds the payment until a

00:31:47.110 --> 00:31:49.190
<v Jesse de Wit>message is sent when it's released.

00:31:49.470 --> 00:31:53.490
<v Sjors Provoost>And this standard is within the protocol itself. So it's not like some custom API

00:31:53.490 --> 00:31:56.490
<v Sjors Provoost>of the Lightning service provider. It's really just part of the Lightning

00:31:56.490 --> 00:32:00.410
<v Sjors Provoost>protocol. Anybody who speaks to Lightning Protocol could hold a payment.

00:32:00.890 --> 00:32:06.400
<v Jesse de Wit>Yeah, so it would be the question where this ends up exactly. BOLTs, which is

00:32:08.670 --> 00:32:14.470
<v Jesse de Wit>a Lightning improvement proposal, but bLIPs, can also be

00:32:14.470 --> 00:32:16.150
<v Jesse de Wit>implemented by any node, basically.

00:32:17.530 --> 00:32:22.430
<v Jesse de Wit>So there's that part, which are

00:32:26.300 --> 00:32:30.220
<v Jesse de Wit>currently only supported by CLN in

00:32:33.480 --> 00:32:34.840
<v Jesse de Wit>order to be able...

00:32:35.000 --> 00:32:40.580
<v Sjors Provoost>Because onion messages [unclear] BOLT 12, right? We just made— we did a whole

00:32:40.580 --> 00:32:44.920
<v Sjors Provoost>episode about BOLT 12, but we explained how onion messages are kind of useful in

00:32:44.920 --> 00:32:50.700
<v Sjors Provoost>that scheme, but BOLT 12 is mostly being pushed by Core Lightning and I

00:32:50.700 --> 00:32:55.320
<v Sjors Provoost>guess LDK now, and so you have to wait for— I guess you just need two

00:32:55.320 --> 00:32:58.560
<v Sjors Provoost>implementations, but in order for it to be useful it's nice if LND supports it

00:32:58.560 --> 00:33:03.870
<v Sjors Provoost>because like a whole bunch of nodes are running LND, in— the onion message needs

00:33:03.870 --> 00:33:05.750
<v Sjors Provoost>to go from A to B through all these hops.

00:33:07.110 --> 00:33:12.190
<v Sjors Provoost>I think onion messages can follow any route you like, right? They don't have to

00:33:12.190 --> 00:33:16.410
<v Sjors Provoost>follow any channels that exist. They can just go through any way through the network.

00:33:16.710 --> 00:33:21.050
<v Jesse de Wit>Yeah, I guess they sort of could, but you only know that people are connected

00:33:21.050 --> 00:33:22.410
<v Jesse de Wit>through their channels usually.

00:33:23.100 --> 00:33:27.540
<v Sjors Provoost>Right, yeah, yeah, yeah. So it has to follow some bunch of channels, and if all

00:33:27.540 --> 00:33:31.380
<v Sjors Provoost>these nodes are running LND in the middle, then you just don't have a way to get

00:33:31.380 --> 00:33:32.420
<v Sjors Provoost>your message to the other side.

00:33:33.520 --> 00:33:33.920
<v Jesse de Wit>Yeah.

00:33:35.170 --> 00:33:38.990
<v Jesse de Wit>So I think we probably talked about most of the prerequisitions.

00:33:39.270 --> 00:33:39.450
<v Sjors Provoost>Trampoline?

00:33:39.850 --> 00:33:41.470
<v Jesse de Wit>Yeah, so trampoline. Yeah, exactly.

00:33:41.730 --> 00:33:46.430
<v Sjors Provoost>That's done by the ACINQ people. That's used by Phoenix. Yeah, by the ACINQ people.

00:33:46.990 --> 00:33:52.750
<v Jesse de Wit>And there's so LDK also implemented parts of it. I don't think they

00:33:52.750 --> 00:33:56.610
<v Jesse de Wit>completed trampoline payments completely. Please correct me if I'm wrong there.

00:33:58.140 --> 00:34:02.160
<v Jesse de Wit>So that's also not part of the BOLT spec yet. It's not merged into the spec yet.

00:34:02.480 --> 00:34:06.200
<v Aaron van Wirdum>Okay, so basically there's still a bunch of building blocks that need to be in

00:34:06.200 --> 00:34:10.840
<v Aaron van Wirdum>place before this can work. And different implementations are in different stages

00:34:10.840 --> 00:34:12.760
<v Aaron van Wirdum>of completing these building blocks.

00:34:12.980 --> 00:34:17.140
<v Jesse de Wit>Yeah, so it's basically almost every improvement to the Lightning Network that we

00:34:17.140 --> 00:34:20.380
<v Jesse de Wit>want to have is sort of a prerequisite for async payments.

00:34:21.230 --> 00:34:22.430
<v Sjors Provoost>Sounds easy. Two weeks.

00:34:22.950 --> 00:34:27.510
<v Jesse de Wit>Yeah. No, it's not going to be two weeks, but more like several, several years.

00:34:27.670 --> 00:34:29.350
<v Aaron van Wirdum>Is anyone against this?

00:34:31.890 --> 00:34:33.990
<v Jesse de Wit>Is John [unclear] against async payments?

00:34:34.530 --> 00:34:36.510
<v Aaron van Wirdum>He's against everything, so I'm assuming.

00:34:37.790 --> 00:34:43.470
<v Aaron van Wirdum>Are there people against this? Is this like in any way controversial

00:34:43.470 --> 00:34:48.590
<v Aaron van Wirdum>or are there concerns about this? Or maybe there are people that have, you know,

00:34:48.630 --> 00:34:50.830
<v Aaron van Wirdum>developers that have different preferences or is there?

00:34:51.980 --> 00:34:56.140
<v Jesse de Wit>The people may be against some parts of the upgrades.

00:35:02.560 --> 00:35:07.500
<v Jesse de Wit>I'm not exactly sure about their reasoning, but one reason I can come up with is

00:35:07.500 --> 00:35:11.900
<v Jesse de Wit>that Onion messages, they can also be a DoS factor.

00:35:13.680 --> 00:35:18.480
<v Aaron van Wirdum>I thought Laolu basically came up with that. Am I misremembering that?

00:35:19.410 --> 00:35:21.330
<v Jesse de Wit>I don't know about this exactly.

00:35:21.350 --> 00:35:27.010
<v Aaron van Wirdum>Okay, well, never mind. Okay, so they might be against onion

00:35:27.010 --> 00:35:30.570
<v Aaron van Wirdum>messages, or are they against onion messages? Yeah, you think so.

00:35:30.650 --> 00:35:35.150
<v Jesse de Wit>Well, they're not implementing it. They do have LNDK,

00:35:38.760 --> 00:35:42.700
<v Jesse de Wit>which is sort of like an extension to LND, which does support onion messages.

00:35:43.260 --> 00:35:47.440
<v Sjors Provoost>I mean, sometimes, most of the time when somebody doesn't implement something,

00:35:47.480 --> 00:35:50.240
<v Sjors Provoost>it's just because they don't have time for it, because they're working on 6,000

00:35:50.240 --> 00:35:53.140
<v Sjors Provoost>other things that have that priority. It's not that they're opposed to it.

00:35:54.150 --> 00:35:57.930
<v Aaron van Wirdum>Right. Okay, so as far as you know, there's not necessarily any opposition to

00:35:57.930 --> 00:35:59.610
<v Aaron van Wirdum>asynchronous payments.

00:35:59.930 --> 00:36:03.290
<v Jesse de Wit>No, I don't believe so. No, I think this is just a great...

00:36:03.290 --> 00:36:08.070
<v Sjors Provoost>Yeah, and it's also a bit of a harm [unclear] thing because people like this

00:36:08.070 --> 00:36:12.750
<v Sjors Provoost>ability to pay to a mobile client, and so there are already solutions out there

00:36:12.750 --> 00:36:14.810
<v Sjors Provoost>that will just lock up all the liquidity.

00:36:15.970 --> 00:36:17.050
<v Jesse de Wit>Yeah, and that's evil.

00:36:17.230 --> 00:36:20.890
<v Sjors Provoost>Lots of problems, so it's one of those things where it might be better to

00:36:20.890 --> 00:36:22.910
<v Sjors Provoost>implement it because the alternative is worse.

00:36:24.430 --> 00:36:26.830
<v Aaron van Wirdum>Right. Okay. Does that cover it?

00:36:27.050 --> 00:36:27.910
<v Sjors Provoost>I think so. You got it.

00:36:29.940 --> 00:36:30.900
<v Aaron van Wirdum>Anything you want to [unclear]?

00:36:31.980 --> 00:36:33.200
<v Sjors Provoost>Where should people find you?

00:36:33.320 --> 00:36:33.900
<v Aaron van Wirdum>Yeah, that's a good one.

00:36:33.920 --> 00:36:34.700
<v Sjors Provoost>Should people find you?

00:36:35.200 --> 00:36:38.680
<v Jesse de Wit>People can find me on Twitter at @WitDeJesse.

00:36:41.420 --> 00:36:42.360
<v Sjors Provoost>In that case,

00:36:45.820 --> 00:36:46.800
<v Aaron van Wirdum>[unclear],

00:36:47.020 --> 00:36:48.800
<v Sjors Provoost>indeed, thank you for listening to Bitcoin,

00:36:49.220 --> 00:36:49.660
<v Aaron van Wirdum>Explained.

