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

00:00:17.490 --> 00:00:22.190
<v Aaron van Wirdum>Live from Utrecht, this is Bitcoin Explained. Hey, Sjors.

00:00:22.590 --> 00:00:22.850
<v Sjors Provoost>Hello.

00:00:23.450 --> 00:00:29.410
<v Aaron van Wirdum>First of all, I want to... thank Coinkite, the sponsor

00:00:29.410 --> 00:00:35.310
<v Aaron van Wirdum>of our show, for producing a beautiful COLDCARD Q, which Sjors just passed

00:00:35.310 --> 00:00:41.050
<v Aaron van Wirdum>me in my hands. Sjors, what is this? I see it has a full QWERTY keyboard. I see

00:00:41.050 --> 00:00:42.830
<v Aaron van Wirdum>it's an ECC calculator.

00:00:43.110 --> 00:00:45.170
<v Sjors Provoost>An elliptic curve cryptography calculator.

00:00:45.370 --> 00:00:49.530
<v Aaron van Wirdum>It is a beautiful device. It's unfortunate we don't have a video for our podcast.

00:00:49.670 --> 00:00:51.790
<v Sjors Provoost>It essentially looks like a Nintendo, I guess.

00:00:53.210 --> 00:00:54.450
<v Aaron van Wirdum>You mean a Game Boy?

00:00:54.890 --> 00:00:58.490
<v Sjors Provoost>Game Boy. See, I did not play that many computer games.

00:00:58.630 --> 00:00:58.850
<v Aaron van Wirdum>Clearly.

00:00:59.130 --> 00:01:01.310
<v Sjors Provoost>Well, I played PC games. Anyhow.

00:01:01.650 --> 00:01:03.010
<v Aaron van Wirdum>So this is a hardware wallet?

00:01:03.310 --> 00:01:08.710
<v Sjors Provoost>Yeah, I believe it's essentially the same as their other COLDCARD wallets. It's

00:01:08.710 --> 00:01:09.450
<v Sjors Provoost>just bigger.

00:01:09.770 --> 00:01:11.450
<v Aaron van Wirdum>Yeah, bigger screen, bigger everything.

00:01:11.830 --> 00:01:15.730
<v Sjors Provoost>Yeah, but my understanding is that fundamentally it's very similar. So it's not

00:01:15.730 --> 00:01:19.110
<v Sjors Provoost>like they're introducing completely new security assumptions.

00:01:19.870 --> 00:01:21.710
<v Aaron van Wirdum>Right. Did you buy this or did you get this?

00:01:21.660 --> 00:01:25.070
<v Sjors Provoost>No, I got this one for free. I don't think we got it because we're sponsored. I

00:01:25.070 --> 00:01:27.410
<v Sjors Provoost>always get them because I test them as a developer.

00:01:28.210 --> 00:01:32.870
<v Aaron van Wirdum>Fair enough. All right. Well, that's our sponsor, COLDCARD. They got a Q device.

00:01:33.110 --> 00:01:36.610
<v Aaron van Wirdum>You can buy this, right? Online, go to coldcard.com, coincoin.com.

00:01:36.750 --> 00:01:37.010
<v Sjors Provoost>Probably.

00:01:37.550 --> 00:01:43.130
<v Aaron van Wirdum>Something like that. All right. So today, actually, we have another guest.

00:01:43.880 --> 00:01:44.440
<v Jesse de Wit>Hello.

00:01:44.760 --> 00:01:46.900
<v Aaron van Wirdum>Jesse de Wit. He's back.

00:01:47.240 --> 00:01:48.020
<v Jesse de Wit>Here I am again.

00:01:48.520 --> 00:01:54.260
<v Aaron van Wirdum>Maybe for those that didn't listen to the previous episode, you can repeat a

00:01:54.260 --> 00:01:55.420
<v Aaron van Wirdum>small introduction of yourself.

00:01:55.840 --> 00:02:00.480
<v Jesse de Wit>Yeah, a small introduction. Jesse de Wit, I'm a Lightning developer working for Breez.

00:02:01.000 --> 00:02:06.640
<v Aaron van Wirdum>Right. So we got you in last episode because we've been getting some requests

00:02:06.640 --> 00:02:10.960
<v Aaron van Wirdum>to do Lightning episodes and Sjors and I are sort of getting out of our depth

00:02:10.960 --> 00:02:15.400
<v Aaron van Wirdum>with like advanced Lightning topics. So very thankful that you came back. We're

00:02:15.400 --> 00:02:20.880
<v Aaron van Wirdum>going to do another Lightning episode. This time we're going to discuss splicing.

00:02:21.560 --> 00:02:24.040
<v Sjors Provoost>But before we get carried away by the wind...

00:02:24.040 --> 00:02:26.920
<v Aaron van Wirdum>Yeah, yeah, there's something else we want to discuss real quick, right, Sjors?

00:02:27.140 --> 00:02:27.600
<v Sjors Provoost>That's right.

00:02:27.840 --> 00:02:32.940
<v Aaron van Wirdum>We made an episode on the Tornado Cash trial at some point. This was episode 69,

00:02:33.280 --> 00:02:38.540
<v Aaron van Wirdum>and the trial... Well, the trial actually happened this week. Prior...

00:02:38.540 --> 00:02:38.720
<v Sjors Provoost>That's right.

00:02:38.980 --> 00:02:42.480
<v Aaron van Wirdum>In previous, there were, like, hearings. There were, I don't know...

00:02:42.480 --> 00:02:46.120
<v Sjors Provoost>Yeah, previously, there were just, like, five or so over the last two years, meta

00:02:46.020 --> 00:02:51.600
<v Sjors Provoost>hearings. So they were about his pretrial detention, about which documents the

00:02:51.600 --> 00:02:57.500
<v Sjors Provoost>defense wants, that sort of stuff. And today, no, sorry, this week there was two

00:02:57.500 --> 00:03:03.340
<v Sjors Provoost>days of the actual trial in Den Bosch with extremely uncomfortable seats. Well, I

00:03:03.340 --> 00:03:06.160
<v Sjors Provoost>mean, the seats are fine. They have little pillows, but if you have to sit on

00:03:06.160 --> 00:03:07.960
<v Sjors Provoost>them for eight hours, it's very uncomfortable.

00:03:09.820 --> 00:03:14.800
<v Sjors Provoost>There was quite a few people in attendance, like multiple journalists, even from

00:03:14.800 --> 00:03:15.940
<v Sjors Provoost>the mainstream media.

00:03:18.000 --> 00:03:23.980
<v Sjors Provoost>And lots of, you know, some of his supporters, probably also half the FBI, I

00:03:23.980 --> 00:03:26.000
<v Sjors Provoost>wouldn't know, but some people in suits.

00:03:26.700 --> 00:03:28.060
<v Aaron van Wirdum>That spoke American?

00:03:29.260 --> 00:03:30.640
<v Sjors Provoost>Maybe, at least they, you know.

00:03:32.160 --> 00:03:37.760
<v Aaron van Wirdum>So you attended, and so what I recall, I mean, I was at the hearings, and I was

00:03:37.760 --> 00:03:43.300
<v Aaron van Wirdum>at the trial briefly, but not for the full two days like you. And

00:03:43.300 --> 00:03:48.320
<v Aaron van Wirdum>what I recall from the hearings at least was that they revealed it really seemed

00:03:48.320 --> 00:03:53.710
<v Aaron van Wirdum>like the case was going to boil down to should a DAO be considered

00:03:53.710 --> 00:03:56.530
<v Aaron van Wirdum>like a company? No,

00:03:57.070 --> 00:04:01.490
<v Sjors Provoost>it goes beyond that. They're basically saying the whole DAO is just a little

00:04:01.490 --> 00:04:05.970
<v Sjors Provoost>fantasy and really the three people were in control of everything.

00:04:06.210 --> 00:04:10.950
<v Aaron van Wirdum>I mean, that's kind of what I mean. It's not really decentralized in any meaningful way.

00:04:10.950 --> 00:04:14.850
<v Sjors Provoost>They don't really care what the company is. They're saying that Tornado Cash,

00:04:14.990 --> 00:04:18.230
<v Sjors Provoost>whatever that is, whether that's a company or an entity or just a group of

00:04:18.230 --> 00:04:23.580
<v Sjors Provoost>people, is like a business in the way it's operated, you know,

00:04:24.140 --> 00:04:27.360
<v Sjors Provoost>as they would, like if they were prosecuting, say, a criminal organization, they

00:04:27.360 --> 00:04:30.440
<v Sjors Provoost>don't care that it's, you know, Mafia Incorporated doesn't exist, right?

00:04:30.460 --> 00:04:30.640
<v Aaron van Wirdum>Yeah.

00:04:30.940 --> 00:04:34.440
<v Sjors Provoost>So in that sense, they're arguing it's just a business and they're doing things

00:04:34.440 --> 00:04:39.090
<v Sjors Provoost>for profit and the profit came from pumping the token, if I translate it.

00:04:39.270 --> 00:04:40.750
<v Aaron van Wirdum>Yeah, the tornado token.

00:04:40.910 --> 00:04:44.870
<v Sjors Provoost>Because it's very clear that there was no money coming directly from the

00:04:44.870 --> 00:04:49.510
<v Sjors Provoost>transactions on the mixer in the way it's designed. We explained that in episode

00:04:49.510 --> 00:04:49.970
<v Sjors Provoost>69.

00:04:51.370 --> 00:04:54.410
<v Sjors Provoost>But they said even though there's no direct flow of money, they're still

00:04:54.410 --> 00:04:58.510
<v Sjors Provoost>profiting from it. But I guess even if they weren't profiting from it, they're

00:04:58.510 --> 00:05:04.240
<v Sjors Provoost>still allowing mixing to happen, and that itself is enough. So it's a pretty

00:05:04.240 --> 00:05:07.880
<v Sjors Provoost>fundamental case, I would say. In the beginning, we didn't know if maybe there

00:05:07.880 --> 00:05:13.640
<v Sjors Provoost>was some gotcha, like something really different that would have made the case.

00:05:14.570 --> 00:05:19.090
<v Sjors Provoost>For example, they were not running relayers themselves, any of that stuff.

00:05:19.230 --> 00:05:24.210
<v Aaron van Wirdum>The original concern, at least, was writing open source code should not be

00:05:24.210 --> 00:05:27.270
<v Aaron van Wirdum>illegal, basically whatever people use it for.

00:05:27.530 --> 00:05:32.310
<v Sjors Provoost>Yeah, so the prosecutor keeps saying that writing open source is fine, it's

00:05:32.310 --> 00:05:38.180
<v Sjors Provoost>great, we love it, but... If you want to make money with it in any way,

00:05:38.300 --> 00:05:43.360
<v Sjors Provoost>I guess, then you can't do it. So it's like privacy is legal, but if you make any

00:05:43.360 --> 00:05:47.380
<v Sjors Provoost>money offering it, it's not legal. That's sort of my takeaway from it. And

00:05:47.380 --> 00:05:52.140
<v Sjors Provoost>they're trying to make the distinction between VPN privacy, which is like

00:05:52.140 --> 00:05:58.090
<v Sjors Provoost>communications, and money privacy, which are... objects or money which is treated differently.

00:05:58.630 --> 00:06:04.630
<v Aaron van Wirdum>Were there any new insights this week as far as you could say

00:06:04.630 --> 00:06:08.770
<v Aaron van Wirdum>or compared to the hearings that I attended? Or was it kind of the same thing,

00:06:08.870 --> 00:06:09.410
<v Aaron van Wirdum>just a bit more?

00:06:09.550 --> 00:06:12.570
<v Sjors Provoost>Well, the hearings you attended were not supposed to be about the case itself at all.

00:06:12.570 --> 00:06:13.670
<v Aaron van Wirdum>I mean, I know, but they kind of were.

00:06:13.810 --> 00:06:16.370
<v Sjors Provoost>Yeah, they were exactly because there's lots of media present.

00:06:18.560 --> 00:06:22.320
<v Sjors Provoost>I don't know. I don't really think so. It felt to me like it was roughly just,

00:06:22.400 --> 00:06:26.380
<v Sjors Provoost>you know, going into more detail, explaining which law articles, you know, the

00:06:26.380 --> 00:06:29.560
<v Sjors Provoost>prosecution would explain, okay, you know, there's this money laundering,

00:06:29.880 --> 00:06:32.820
<v Sjors Provoost>different articles, and we're not talking about Article A, but we're talking

00:06:32.820 --> 00:06:36.940
<v Sjors Provoost>about Article B, that sort of clarification. So I took a lot of notes, but I

00:06:36.940 --> 00:06:42.360
<v Sjors Provoost>really have to take my notes and go talk to an actual legal expert to understand

00:06:42.360 --> 00:06:42.800
<v Sjors Provoost>the meaning.

00:06:43.310 --> 00:06:43.670
<v Aaron van Wirdum>Right.

00:06:43.850 --> 00:06:47.030
<v Sjors Provoost>Exactly what it said. And then the prosecution always has the advantage they can

00:06:47.030 --> 00:06:52.930
<v Sjors Provoost>paint a very nice narrative, a story, but the defense does not have that.

00:06:53.150 --> 00:06:57.110
<v Sjors Provoost>It's not so easy. I mean, of course, they try to explain how open source works

00:06:57.110 --> 00:07:00.770
<v Sjors Provoost>and that decentralization is a good thing and that privacy is important, that

00:07:00.770 --> 00:07:06.190
<v Sjors Provoost>sort of stuff. But a lot of the time they just have to spend shooting holes at

00:07:06.190 --> 00:07:09.890
<v Sjors Provoost>individual arguments of the prosecution. So they have to say, well, if you look

00:07:09.890 --> 00:07:15.630
<v Sjors Provoost>at Article 64B, you know, the word holding means this and it doesn't mean that.

00:07:15.810 --> 00:07:21.190
<v Sjors Provoost>And they also have to try 15 different arguments just to see if one of the 15

00:07:21.190 --> 00:07:24.590
<v Sjors Provoost>works. And that makes it, as the audience, makes it more difficult to understand.

00:07:25.010 --> 00:07:28.950
<v Sjors Provoost>And especially if you're not a lawyer yourself, it's hard to estimate whether

00:07:28.950 --> 00:07:33.930
<v Sjors Provoost>just because he says it with conviction doesn't mean it works. And it's important

00:07:33.930 --> 00:07:39.560
<v Sjors Provoost>to know that we don't have jury trials. So the goal is not to explain things and

00:07:39.560 --> 00:07:45.500
<v Sjors Provoost>to convince a jury of non-legal people, like in the US. It is merely

00:07:45.500 --> 00:07:49.580
<v Sjors Provoost>to convince the judges. And the judges have already received, I don't know, a

00:07:49.580 --> 00:07:54.580
<v Sjors Provoost>million pages of documents and reports and they've all read it. So they also

00:07:54.580 --> 00:07:57.820
<v Sjors Provoost>already know the arguments that both sides are going to make. So it's kind of a

00:07:57.820 --> 00:08:01.780
<v Sjors Provoost>performative thing almost, where you have to say it out loud so people can...

00:08:01.650 --> 00:08:05.390
<v Sjors Provoost>listen to it, but the judges are kind of like, you know, behind the screen, and

00:08:05.390 --> 00:08:06.110
<v Sjors Provoost>they're listening and they…

00:08:06.110 --> 00:08:11.070
<v Aaron van Wirdum>Yeah, and, uh, the verdicts will come in

00:08:11.070 --> 00:08:12.810
<v Sjors Provoost>May 14th.

00:08:12.810 --> 00:08:16.650
<v Aaron van Wirdum>May 14th. All right, last question, so what's…

00:08:17.960 --> 00:08:21.700
<v Aaron van Wirdum>I guess we discussed this in the actual episode, episode 69, so we don't have to

00:08:21.700 --> 00:08:26.340
<v Aaron van Wirdum>get into it. But the reason you attended is it could have relevance for Bitcoin

00:08:26.340 --> 00:08:27.460
<v Aaron van Wirdum>development as well, potentially.

00:08:27.780 --> 00:08:31.040
<v Sjors Provoost>In the long run, it will. I'm pretty sure about that because it's kind of a

00:08:31.040 --> 00:08:35.920
<v Sjors Provoost>moving game where the front line is moving and maybe you could say, oh, the front

00:08:35.920 --> 00:08:39.340
<v Sjors Provoost>line is in shitcoin land. But if you read some of the arguments that the

00:08:39.340 --> 00:08:43.680
<v Sjors Provoost>prosecutor is making, the really generic arguments like if you make something,

00:08:43.950 --> 00:08:47.710
<v Sjors Provoost>that is decentralized, the fact that you could have made it centralized, but you

00:08:47.710 --> 00:08:52.270
<v Sjors Provoost>made it decentralized already means you deliberately did something to aid money

00:08:52.270 --> 00:08:57.090
<v Sjors Provoost>laundering. So if that argument stands, then, you know, basically Satoshi would

00:08:57.090 --> 00:08:57.850
<v Sjors Provoost>be screwed.

00:08:58.330 --> 00:08:58.490
<v Aaron van Wirdum>Right.

00:08:59.990 --> 00:09:03.350
<v Sjors Provoost>Because Satoshi could have made a centralized system, right? And he didn't. And

00:09:03.350 --> 00:09:06.030
<v Sjors Provoost>he made money. Arguably. We don't know if he has any money.

00:09:08.370 --> 00:09:10.650
<v Aaron van Wirdum>I mean, he still had to earn it as well, right?

00:09:12.620 --> 00:09:13.740
<v Aaron van Wirdum>He still had to mine it.

00:09:15.140 --> 00:09:19.340
<v Sjors Provoost>Yeah, but he wouldn't have been able to mine it if it didn't exist. I don't know

00:09:19.340 --> 00:09:20.940
<v Sjors Provoost>what kind of argument would be made there.

00:09:21.320 --> 00:09:22.720
<v Aaron van Wirdum>Anyways, thanks for your sacrifice.

00:09:24.340 --> 00:09:28.760
<v Aaron van Wirdum>I'm impressed to hear about the cushion situation and that you pulled through

00:09:28.760 --> 00:09:29.180
<v Aaron van Wirdum>anyways.

00:09:29.420 --> 00:09:33.000
<v Sjors Provoost>I found that if you pile some jackets and stuff, then it's a little bit more comfortable.

00:09:33.180 --> 00:09:37.100
<v Aaron van Wirdum>You got it all figured out. All right, one more quick note before we actually get

00:09:37.100 --> 00:09:42.160
<v Aaron van Wirdum>to splicing. You wanted to mention something about MARA Pool. MARA did this thing

00:09:42.160 --> 00:09:42.980
<v Aaron van Wirdum>with the block.

00:09:44.200 --> 00:09:46.960
<v Aaron van Wirdum>Which you could see on mempool.space, that's what this is about, right?

00:09:47.040 --> 00:09:51.700
<v Sjors Provoost>Yeah, if you are into nonsense, then you may have noticed that MARA Pool mined a

00:09:51.700 --> 00:09:56.320
<v Sjors Provoost>block that if you look at it on mempool.space, it looks like a picture of an M

00:09:56.320 --> 00:09:59.920
<v Sjors Provoost>just because of the way mempool.space visualizes it.

00:09:59.960 --> 00:10:00.440
<v Aaron van Wirdum>It's their logo, yeah.

00:10:00.520 --> 00:10:02.560
<v Sjors Provoost>If you go to any other website, it won't look like that.

00:10:03.980 --> 00:10:09.020
<v Sjors Provoost>Point is, they achieve this by putting transactions in a very specific order. All

00:10:09.020 --> 00:10:11.020
<v Sjors Provoost>these transactions are nonsensical OP_RETURN transactions.

00:10:11.800 --> 00:10:13.380
<v Aaron van Wirdum>All of them? Not all of them, right?

00:10:13.380 --> 00:10:14.540
<v Sjors Provoost>As far as I know, the whole block.

00:10:14.680 --> 00:10:16.160
<v Aaron van Wirdum>The whole block was nonsense?

00:10:16.420 --> 00:10:16.560
<v Sjors Provoost>Yep.

00:10:17.760 --> 00:10:23.380
<v Sjors Provoost>I'll get to that. So basically, we had episode 84, where we talked about

00:10:23.380 --> 00:10:27.660
<v Sjors Provoost>about six months ago, MARA Pool mined an invalid block. And the reason they mined

00:10:27.660 --> 00:10:31.340
<v Sjors Provoost>an invalid block was because they were putting transactions in the wrong order.

00:10:31.560 --> 00:10:37.280
<v Sjors Provoost>So if transaction A is created and transaction B spends transaction A, they

00:10:37.280 --> 00:10:41.300
<v Sjors Provoost>must appear in that block in that order. So transaction A first, transaction B

00:10:41.300 --> 00:10:45.280
<v Sjors Provoost>next. And they just sorted them all by, I don't know, by name or something crazy.

00:10:45.860 --> 00:10:49.180
<v Sjors Provoost>And so the order was wrong and the block was invalid, and they lost a couple

00:10:49.180 --> 00:10:53.900
<v Sjors Provoost>hundred thousand dollars. But now, looking back, that they have created this

00:10:53.900 --> 00:10:58.940
<v Sjors Provoost>graffiti block, I guess, where the order of the transaction is used as a feature,

00:10:59.160 --> 00:11:03.420
<v Sjors Provoost>my guess is that's what they were sort of trying to get to. That still does not

00:11:03.420 --> 00:11:06.160
<v Sjors Provoost>explain why they tested that on Mainnet instead of on Testnet.

00:11:08.000 --> 00:11:10.040
<v Aaron van Wirdum>They were experimenting back then.

00:11:10.340 --> 00:11:13.540
<v Sjors Provoost>But the reason, I guess, why they picked OP_RETURN transactions this time is

00:11:13.540 --> 00:11:19.460
<v Sjors Provoost>because you can just make them all independent and the order doesn't matter. You

00:11:19.460 --> 00:11:23.880
<v Sjors Provoost>don't get an invalid order. But it would be more, if they want to continue this

00:11:23.880 --> 00:11:28.980
<v Sjors Provoost>artistic career of theirs, I think it would be better to mine real transactions

00:11:28.980 --> 00:11:32.920
<v Sjors Provoost>that are actually paying roughly the maximum fee that you would mine, maybe

00:11:32.920 --> 00:11:37.470
<v Sjors Provoost>slightly less and then order those in a visual pattern. So you do not know in

00:11:37.470 --> 00:11:40.190
<v Sjors Provoost>advance what the block is going to look like. Your algorithm just has to figure

00:11:40.190 --> 00:11:45.210
<v Sjors Provoost>out how to take whatever is in the mempool and write copyright Sjors

00:11:45.210 --> 00:11:46.590
<v Sjors Provoost>on it.

00:11:46.590 --> 00:11:49.850
<v Aaron van Wirdum>Yeah, you just got to make sure that the order is still not invalid.

00:11:49.970 --> 00:11:53.630
<v Sjors Provoost>Exactly. So you have to, exactly. So it's much more, it would require

00:11:53.630 --> 00:11:57.670
<v Sjors Provoost>significantly more skill. I do not believe it is a good use of anyone's time, but

00:11:57.670 --> 00:11:59.370
<v Sjors Provoost>if you are into this, please do it well.

00:12:00.390 --> 00:12:05.810
<v Aaron van Wirdum>Right, okay. So that sort of explains what was maybe, probably, possibly going on

00:12:05.810 --> 00:12:10.430
<v Aaron van Wirdum>in episode 84. So that was a second callback to an earlier episode. Now let's

00:12:10.430 --> 00:12:11.550
<v Aaron van Wirdum>make a new episode, Sjors.

00:12:12.250 --> 00:12:12.950
<v Sjors Provoost>Yes, good idea.

00:12:13.150 --> 00:12:15.930
<v Aaron van Wirdum>Yes, sir. You're down to make a new episode?

00:12:16.130 --> 00:12:16.990
<v Jesse de Wit>Let's make a new episode.

00:12:17.130 --> 00:12:18.590
<v Aaron van Wirdum>Let's make one about splicing.

00:12:20.120 --> 00:12:26.060
<v Aaron van Wirdum>Okay, so splicing is a concept that exists in Lightning. First, what is

00:12:26.060 --> 00:12:30.380
<v Aaron van Wirdum>it? Let's start with a very basic one-sentence explanation. What is splicing?

00:12:30.980 --> 00:12:35.660
<v Jesse de Wit>Splicing is basically giving you the capability to change the capacity of an

00:12:35.660 --> 00:12:36.420
<v Jesse de Wit>existing channel.

00:12:37.300 --> 00:12:42.200
<v Aaron van Wirdum>Okay, so I have a channel with Sjors, say. There's, I don't know, let's say one

00:12:42.200 --> 00:12:46.860
<v Aaron van Wirdum>Bitcoin in that channel. And we can increase that to two Bitcoin or half a

00:12:46.860 --> 00:12:47.980
<v Aaron van Wirdum>Bitcoin, increase or decrease.

00:12:48.140 --> 00:12:49.000
<v Jesse de Wit>Increase or decrease, yeah.

00:12:49.120 --> 00:12:54.720
<v Aaron van Wirdum>Yeah, that's what splicing is. And why would

00:12:54.720 --> 00:12:58.980
<v Aaron van Wirdum>anyone want to do this? Maybe that's a good follow-up. What's the actual benefit

00:12:58.980 --> 00:13:04.840
<v Aaron van Wirdum>here? Why not just open a new channel or why not, I don't know, receive coins in

00:13:04.840 --> 00:13:05.480
<v Aaron van Wirdum>the channel?

00:13:06.020 --> 00:13:11.700
<v Jesse de Wit>Yeah, so a Lightning channel, you basically want the lifetime of a Lightning

00:13:11.700 --> 00:13:17.300
<v Jesse de Wit>channel to be very long. And during the lifetime of the channel, you want it to

00:13:17.300 --> 00:13:22.030
<v Jesse de Wit>be operational. And definitely as a routing node, for example, if you want to

00:13:22.030 --> 00:13:26.190
<v Jesse de Wit>increase the capacity of your channel as a routing node, you want your channel to

00:13:26.190 --> 00:13:30.690
<v Jesse de Wit>always be available. because otherwise people won't be able to route payments

00:13:30.690 --> 00:13:32.170
<v Jesse de Wit>over it and you won't make any fees.

00:13:33.950 --> 00:13:39.230
<v Jesse de Wit>The alternative would be closing and opening a channel or opening an additional

00:13:39.230 --> 00:13:40.130
<v Jesse de Wit>channel, for example.

00:13:42.470 --> 00:13:46.730
<v Jesse de Wit>But yeah, it saves a lot in chain fees in the end, basically, as well.

00:13:47.050 --> 00:13:51.950
<v Aaron van Wirdum>Why does it save in chain fees versus opening an additional channel?

00:13:52.870 --> 00:13:53.970
<v Aaron van Wirdum>What's the benefit?

00:13:53.970 --> 00:13:57.430
<v Jesse de Wit>It's basically the closing cost that you don't have.

00:13:59.470 --> 00:14:00.270
<v Jesse de Wit>Because...

00:14:02.500 --> 00:14:07.940
<v Jesse de Wit>Well, you splice in this channel, so that means maybe we should talk a little bit

00:14:07.940 --> 00:14:09.500
<v Jesse de Wit>about how splicing works.

00:14:10.040 --> 00:14:13.440
<v Aaron van Wirdum>Well, hang on, it makes sense. I mean, eventually you're going to want to close

00:14:13.440 --> 00:14:17.380
<v Aaron van Wirdum>the channels, and if you keep opening new channels, that means you have to close

00:14:17.380 --> 00:14:21.440
<v Aaron van Wirdum>all the channels, while if you replace the same channel, then you only have to

00:14:21.440 --> 00:14:24.140
<v Aaron van Wirdum>close one channel. So that's what you're saving, essentially, right?

00:14:24.280 --> 00:14:24.820
<v Jesse de Wit>Yeah, that's what you're saving.

00:14:24.820 --> 00:14:28.680
<v Sjors Provoost>And it's half the transactions in the long run, right? Because closing is one

00:14:28.680 --> 00:14:30.080
<v Sjors Provoost>transaction, opening is one transaction.

00:14:30.350 --> 00:14:30.830
<v Jesse de Wit>Right, yeah.

00:14:31.570 --> 00:14:33.650
<v Sjors Provoost>Though I guess you theoretically could combine them.

00:14:36.620 --> 00:14:39.480
<v Sjors Provoost>I think you mentioned another reason why this was good.

00:14:40.650 --> 00:14:46.470
<v Aaron van Wirdum>Or you want it to always work and the fees are, there's less fees,

00:14:46.650 --> 00:14:47.750
<v Aaron van Wirdum>less on-chain transactions.

00:14:47.750 --> 00:14:50.530
<v Sjors Provoost>Yeah, we covered the part that it always works. Because if you close the channel,

00:14:50.830 --> 00:14:54.530
<v Sjors Provoost>then nothing works until you've reopened it and waited six blocks.

00:14:54.830 --> 00:14:59.050
<v Jesse de Wit>Yeah, exactly. Yeah, so if you would close and reopen the channel, yeah, your

00:14:59.050 --> 00:15:04.150
<v Jesse de Wit>channel is temporarily unavailable. So nobody will be able to route over it. With

00:15:04.150 --> 00:15:10.130
<v Jesse de Wit>splicing, we'll get into that. You'll be able to keep using the channel while

00:15:10.130 --> 00:15:15.530
<v Jesse de Wit>you've spent your previous channel, basically. During the splice, you can...

00:15:15.530 --> 00:15:21.430
<v Aaron van Wirdum>Okay, why is this like a challenge at all? Why is this a problem? What

00:15:21.430 --> 00:15:22.370
<v Aaron van Wirdum>is the challenge here?

00:15:22.450 --> 00:15:26.190
<v Sjors Provoost>Why wasn't this finished in 2017 like the white paper promised?

00:15:27.870 --> 00:15:31.690
<v Aaron van Wirdum>Yeah, or just why isn't this standard? What's even the problem that we're trying

00:15:31.690 --> 00:15:32.210
<v Aaron van Wirdum>to solve?

00:15:33.450 --> 00:15:38.990
<v Jesse de Wit>Um, so there were many design decisions on how to do splicing, like, how do you

00:15:38.990 --> 00:15:42.370
<v Jesse de Wit>increase the capacity of a channel? Because what a channel, a Lightning channel

00:15:42.370 --> 00:15:45.750
<v Jesse de Wit>is, it is basically a UTXO on chain.

00:15:46.950 --> 00:15:48.810
<v Jesse de Wit>So that has a certain capacity.

00:15:49.150 --> 00:15:53.090
<v Aaron van Wirdum>Right. It has a fixed capacity. There's no way to add something to an existing

00:15:53.090 --> 00:15:53.690
<v Aaron van Wirdum>UTXO.

00:15:53.790 --> 00:15:54.110
<v Jesse de Wit>No, no.

00:15:54.410 --> 00:15:57.190
<v Aaron van Wirdum>Yeah, exactly. So that's the challenge we're trying to solve.

00:15:57.250 --> 00:16:01.430
<v Jesse de Wit>So that's the challenge we're trying to solve and multiple ways people are trying

00:16:01.430 --> 00:16:06.670
<v Jesse de Wit>to do that. For example, Rene Pickhardt, he mentioned, maybe we could have like

00:16:06.670 --> 00:16:12.310
<v Jesse de Wit>two UTXOs in the same channel or there are other design decisions.

00:16:12.310 --> 00:16:14.870
<v Aaron van Wirdum>And then replace one at a time, something like that.

00:16:15.440 --> 00:16:15.840
<v Jesse de Wit>Yeah.

00:16:16.160 --> 00:16:20.060
<v Aaron van Wirdum>I mean, this is obviously not what we don't have to get into, but that would be

00:16:20.060 --> 00:16:24.280
<v Aaron van Wirdum>the general sort of idea there. Yeah, okay. But that's not what splicing is.

00:16:24.300 --> 00:16:30.200
<v Jesse de Wit>That's not what splicing is. Because with splicing, what you do is you spend the

00:16:30.200 --> 00:16:31.180
<v Jesse de Wit>funding transaction.

00:16:33.480 --> 00:16:38.220
<v Jesse de Wit>So the funding transaction is your channel on-chain, right? And then off-chain,

00:16:38.240 --> 00:16:44.160
<v Jesse de Wit>you have a bunch of commitment transactions, which are the previous states of

00:16:44.160 --> 00:16:44.960
<v Jesse de Wit>your Lightning channel.

00:16:45.140 --> 00:16:48.800
<v Aaron van Wirdum>Yeah, every time Sjors and I update our channel, we're getting a new off-chain

00:16:48.800 --> 00:16:52.820
<v Aaron van Wirdum>transaction that spends from the UTXO, basically. And we're not broadcasting that initially.

00:16:53.080 --> 00:16:56.800
<v Jesse de Wit>Yeah, and all these transactions are valid transactions, and you would be able to

00:16:56.800 --> 00:17:00.420
<v Jesse de Wit>broadcast them at any time, but only one of them is the latest, and you will, um,

00:17:00.420 --> 00:17:05.820
<v Jesse de Wit>yeah… but with splicing, what you do is you spend the funding

00:17:05.820 --> 00:17:07.640
<v Jesse de Wit>transaction. And...

00:17:09.770 --> 00:17:15.370
<v Jesse de Wit>With the transaction that spends a funding transaction, you add an input to that

00:17:15.370 --> 00:17:21.150
<v Jesse de Wit>if you want to increase the channel capacity, or you add an output to that if you

00:17:21.150 --> 00:17:24.170
<v Jesse de Wit>want to decrease the channel capacity, basically.

00:17:24.490 --> 00:17:29.370
<v Aaron van Wirdum>Okay, so we're spending basically all the funds from the channel, from the UTXO,

00:17:29.430 --> 00:17:35.150
<v Aaron van Wirdum>to a new UTXO, which then becomes the channel, I would assume, right?

00:17:35.270 --> 00:17:37.020
<v Jesse de Wit>Yeah. That then becomes the channel, yeah.

00:17:37.160 --> 00:17:40.200
<v Sjors Provoost>Okay, so from the outside, this would look, but we'll get to that, I guess,

00:17:40.240 --> 00:17:43.180
<v Sjors Provoost>towards the end. It looks like you're closing the channel and you're just opening

00:17:43.180 --> 00:17:47.260
<v Sjors Provoost>another channel, but there is magic involved, which means that the existing

00:17:47.260 --> 00:17:48.060
<v Sjors Provoost>channel continues.

00:17:48.460 --> 00:17:48.900
<v Jesse de Wit>Yes.

00:17:49.200 --> 00:17:53.940
<v Aaron van Wirdum>Yeah, so let's get there, because for now, it would sound like you can't use the

00:17:53.940 --> 00:17:59.780
<v Aaron van Wirdum>new channel until the new channel would confirm, or... Kind of, right?

00:18:00.060 --> 00:18:03.500
<v Aaron van Wirdum>That's sort of at least where my mind is going to when I hear this.

00:18:04.460 --> 00:18:06.120
<v Jesse de Wit>Yeah, and you're sort of right.

00:18:06.260 --> 00:18:06.480
<v Aaron van Wirdum>Okay.

00:18:07.920 --> 00:18:10.840
<v Jesse de Wit>Because when we're spending this funding transaction...

00:18:12.910 --> 00:18:18.830
<v Jesse de Wit>We have to update the states. Every time a new payment will come in after that,

00:18:18.970 --> 00:18:22.770
<v Jesse de Wit>we'll have to update the states on both of our channels, like our old channel and

00:18:22.770 --> 00:18:26.290
<v Jesse de Wit>our new channel. We have to update the states on both of them.

00:18:26.570 --> 00:18:31.970
<v Aaron van Wirdum>Wait, that's a small note. Of course, I would assume, but please just confirm. So

00:18:31.970 --> 00:18:36.370
<v Aaron van Wirdum>when you are splicing, this has to be cooperative between both parties, right?

00:18:36.550 --> 00:18:36.750
<v Jesse de Wit>Yeah.

00:18:37.130 --> 00:18:41.250
<v Aaron van Wirdum>Yeah, okay. So that's the only way you can do it. You have to both agree, we're

00:18:41.250 --> 00:18:45.350
<v Aaron van Wirdum>going to update this channel. And that's how you spend the coins from the UTXO to

00:18:45.350 --> 00:18:46.150
<v Aaron van Wirdum>the new UTXO.

00:18:46.250 --> 00:18:50.290
<v Sjors Provoost>And then you have to do duplicate bookkeeping. Because I guess the question is,

00:18:50.530 --> 00:18:54.270
<v Sjors Provoost>you just made a transaction, but it's in the mempool, and it may or may not

00:18:54.270 --> 00:18:58.610
<v Sjors Provoost>confirm. If it doesn't confirm, then the splice never happened. So you'd better

00:18:58.610 --> 00:19:02.690
<v Sjors Provoost>have all the transactions that keep happening while your channel is in this

00:19:02.690 --> 00:19:06.930
<v Sjors Provoost>phase. You'd better remember all those transactions as if the channel was never

00:19:06.930 --> 00:19:12.420
<v Sjors Provoost>spliced in. But if it does confirm, well, then the original things didn't happen.

00:19:12.940 --> 00:19:17.400
<v Sjors Provoost>So somebody could cheat you that way. So you really have to pretend that you have

00:19:17.400 --> 00:19:20.860
<v Sjors Provoost>two identical channels and update them both at the same time.

00:19:21.000 --> 00:19:25.200
<v Aaron van Wirdum>Hang on. I mean, I am following, but I also think you're skipping ahead.

00:19:25.400 --> 00:19:25.580
<v Sjors Provoost>Okay.

00:19:25.920 --> 00:19:29.480
<v Aaron van Wirdum>So let's, I mean, I think what you say sounds right.

00:19:31.050 --> 00:19:35.670
<v Aaron van Wirdum>But let's go back to the challenge. The challenge is it's not confirmed yet. So

00:19:35.670 --> 00:19:40.610
<v Aaron van Wirdum>how can you use an unconfirmed UTXO as a channel when it's not confirmed? Isn't

00:19:40.610 --> 00:19:41.610
<v Aaron van Wirdum>that like a risk, right?

00:19:41.930 --> 00:19:46.630
<v Jesse de Wit>If we hook into what Sjors was saying, then you had an old channel on chain,

00:19:46.750 --> 00:19:50.810
<v Jesse de Wit>right? And this channel is on chain and it has these off-chain commitment

00:19:50.810 --> 00:19:56.530
<v Jesse de Wit>transactions. So these... Off-chain commitment transactions can be broadcast at

00:19:56.530 --> 00:20:01.870
<v Jesse de Wit>any time and spend our channel. And if that ever happens, then our new

00:20:01.870 --> 00:20:06.330
<v Jesse de Wit>spliced-in channel that's in the mempool will never be the truth.

00:20:06.870 --> 00:20:11.410
<v Aaron van Wirdum>Right, that could become a double spend, essentially. So that could be rejected

00:20:11.410 --> 00:20:15.930
<v Aaron van Wirdum>if one of the channel states is broadcast before the splicing transaction is

00:20:15.930 --> 00:20:16.790
<v Aaron van Wirdum>confirmed, right?

00:20:16.970 --> 00:20:17.150
<v Jesse de Wit>Yeah.

00:20:17.290 --> 00:20:19.210
<v Aaron van Wirdum>That's what you say. Yeah, okay, I get that.

00:20:19.390 --> 00:20:20.230
<v Jesse de Wit>Yeah, that's what I'm saying.

00:20:20.530 --> 00:20:20.730
<v Aaron van Wirdum>Right.

00:20:21.630 --> 00:20:26.630
<v Jesse de Wit>So that's one of the scenarios. And the other scenario would be that eventually

00:20:26.630 --> 00:20:29.610
<v Jesse de Wit>our splicing transaction confirms.

00:20:31.370 --> 00:20:36.590
<v Jesse de Wit>And maybe that's closed later as well, but let's just assume that the

00:20:36.590 --> 00:20:39.210
<v Jesse de Wit>splice transaction confirms.

00:20:42.960 --> 00:20:45.580
<v Jesse de Wit>What you have to do during this period...

00:20:45.580 --> 00:20:46.940
<v Aaron van Wirdum>The problem with that...

00:20:46.940 --> 00:20:51.940
<v Sjors Provoost>Now let's say I have... Before the splice, all the money was on my side. A while

00:20:51.940 --> 00:20:55.900
<v Sjors Provoost>before the splice, all the money was on my side. But then it moved to your side.

00:20:56.360 --> 00:21:01.950
<v Sjors Provoost>And then we do the splice. And if the splice then happens, now could I just cheat

00:21:01.950 --> 00:21:06.210
<v Sjors Provoost>and try to cheat with the original transaction? Because all these punishments

00:21:06.210 --> 00:21:10.210
<v Sjors Provoost>transactions that you have won't work anymore because we have just created a new

00:21:10.210 --> 00:21:14.170
<v Sjors Provoost>on-chain transaction. So all these old penalty transactions don't work anymore.

00:21:14.270 --> 00:21:15.690
<v Sjors Provoost>So that needs to be solved.

00:21:17.640 --> 00:21:20.620
<v Jesse de Wit>So in the old, you're talking about the old channel?

00:21:20.900 --> 00:21:26.060
<v Sjors Provoost>Yeah, so I would, you know, can I still cheat with the transactions from before

00:21:26.060 --> 00:21:28.960
<v Sjors Provoost>the old channel was closed? I know the answer, but I'm asking it.

00:21:29.040 --> 00:21:33.620
<v Jesse de Wit>You can still cheat with those. Yes, absolutely. But because your peer has the

00:21:33.620 --> 00:21:39.300
<v Jesse de Wit>revocation key for these transactions, he can then steal all your money in that

00:21:39.300 --> 00:21:44.380
<v Jesse de Wit>channel. So in that case, if you are stealing from like the old channel, right?

00:21:48.380 --> 00:21:53.060
<v Jesse de Wit>then your commitment transaction will confirm. And then because you were

00:21:53.060 --> 00:21:57.270
<v Jesse de Wit>cheating, I can then spend the funds in that channel all for myself.

00:21:57.390 --> 00:22:01.230
<v Sjors Provoost>But if I understand correctly, after the splice is confirmed, then I can no

00:22:01.230 --> 00:22:04.530
<v Sjors Provoost>longer cheat with the old transactions, right? Because those old cheat

00:22:04.530 --> 00:22:05.690
<v Sjors Provoost>transactions won't work anymore.

00:22:06.130 --> 00:22:10.870
<v Jesse de Wit>Yeah, exactly. Those won't work anymore because UTXO is spent.

00:22:11.750 --> 00:22:14.690
<v Sjors Provoost>So it's like you have a blank slate basically every time you do this.

00:22:14.930 --> 00:22:20.040
<v Jesse de Wit>Yeah, so once the splice transaction confirms, you can actually drop all the old

00:22:20.040 --> 00:22:21.220
<v Jesse de Wit>states that you had.

00:22:22.000 --> 00:22:23.380
<v Aaron van Wirdum>Once it confirms, yeah.

00:22:23.640 --> 00:22:26.360
<v Jesse de Wit>Yeah, once it's deeply confirmed, basically, and you're sure that it won't be

00:22:26.360 --> 00:22:27.100
<v Jesse de Wit>reorged out.

00:22:27.420 --> 00:22:30.640
<v Aaron van Wirdum>But I think the question we were still getting at, or the answer we were still

00:22:30.640 --> 00:22:35.780
<v Aaron van Wirdum>getting at, is how can you safely use a channel before it's confirmed? That's the

00:22:35.780 --> 00:22:37.340
<v Aaron van Wirdum>key question here, right?

00:22:37.640 --> 00:22:41.820
<v Jesse de Wit>Yeah, and that's, I guess, the key question. And the trick, how we're doing that,

00:22:41.940 --> 00:22:47.240
<v Jesse de Wit>is that we're actually using both channels at the same time. We're using... every

00:22:47.240 --> 00:22:52.080
<v Jesse de Wit>state update that we do to the channel, we're doing them on the old channel and

00:22:52.080 --> 00:22:52.880
<v Jesse de Wit>on the new channel.

00:22:53.100 --> 00:22:53.520
<v Aaron van Wirdum>Right.

00:22:53.780 --> 00:22:56.880
<v Sjors Provoost>So then what happens if I try to spend more than is in the old channel?

00:22:57.220 --> 00:23:02.340
<v Jesse de Wit>Yeah, so that won't work during this period. You will only be able to spend... So

00:23:02.340 --> 00:23:08.300
<v Jesse de Wit>if you added funds to the channel, you will only be able to spend the additional

00:23:08.300 --> 00:23:12.020
<v Jesse de Wit>funds after the transaction is deeply confirmed.

00:23:12.400 --> 00:23:18.240
<v Aaron van Wirdum>Okay, so basically for a while we have like a quantum channel. It could still

00:23:18.240 --> 00:23:23.200
<v Aaron van Wirdum>go either way and therefore we're updating both to keep track of each other, keep

00:23:23.200 --> 00:23:24.000
<v Aaron van Wirdum>them in balance.

00:23:24.240 --> 00:23:27.380
<v Sjors Provoost>Yeah, or to scare the regulators, it's a shadow bookkeeping.

00:23:28.620 --> 00:23:32.200
<v Jesse de Wit>No, no, no, it's not shadow bookkeeping people.

00:23:33.960 --> 00:23:38.020
<v Aaron van Wirdum>Anyway, so Sjors and I, if we're updating, if we're splicing and then we keep

00:23:38.020 --> 00:23:40.820
<v Aaron van Wirdum>transaction or forwarding transactions, blah, blah, blah, we'll keep using

00:23:40.820 --> 00:23:44.440
<v Aaron van Wirdum>Lightning, then we're doing everything double. We're just updating the old

00:23:44.440 --> 00:23:49.700
<v Aaron van Wirdum>channel and the new channel until the new channel is confirmed on the chain. Now

00:23:49.700 --> 00:23:52.380
<v Aaron van Wirdum>we can forget about the old channel. Now we just have the new channel.

00:23:52.380 --> 00:23:55.960
<v Sjors Provoost>And while we're waiting, we cannot use the extra capacity that was added because

00:23:55.960 --> 00:23:58.100
<v Sjors Provoost>we have to take into account the smallest of the two.

00:23:58.360 --> 00:24:00.940
<v Jesse de Wit>Right. The smallest of the two. Yeah, exactly. Because you could also have

00:24:00.940 --> 00:24:06.220
<v Jesse de Wit>removed funds and then it's basically the new lower balance that's the limit there.

00:24:06.460 --> 00:24:10.760
<v Aaron van Wirdum>Okay. Well, that sounds actually kind of straightforward to me. But I would

00:24:10.760 --> 00:24:15.420
<v Aaron van Wirdum>imagine there's a lot more sort of nitty-gritty to, like, how does the rest of

00:24:15.420 --> 00:24:19.640
<v Aaron van Wirdum>the network, for example, know that this is the same channel rather than a

00:24:19.640 --> 00:24:23.380
<v Aaron van Wirdum>completely new channel? Do they need to know? They need to have the routing

00:24:23.380 --> 00:24:25.280
<v Aaron van Wirdum>information, for example, I would say.

00:24:25.340 --> 00:24:29.560
<v Jesse de Wit>They need to have the routing information, but they won't know that this is the

00:24:29.560 --> 00:24:30.140
<v Jesse de Wit>same channel.

00:24:30.980 --> 00:24:34.280
<v Aaron van Wirdum>Okay. They'll consider it a different channel.

00:24:34.650 --> 00:24:36.110
<v Jesse de Wit>They'll consider it a different channel.

00:24:36.230 --> 00:24:36.350
<v Aaron van Wirdum>Okay.

00:24:36.610 --> 00:24:41.230
<v Jesse de Wit>But there is a little thing there, and maybe we can skip to that now, because

00:24:41.230 --> 00:24:46.590
<v Jesse de Wit>your old channel was gossiped through the gossip network,

00:24:46.810 --> 00:24:51.210
<v Jesse de Wit>and it's a sender that wants to route through your channel.

00:24:53.170 --> 00:24:58.190
<v Jesse de Wit>He has a graph of the Lightning Network on his local node, and he had that

00:24:58.190 --> 00:25:03.170
<v Jesse de Wit>channel inside his graph, right? And as soon as you spend that channel on chain,

00:25:03.710 --> 00:25:09.610
<v Jesse de Wit>he would consider that channel closed. So now the

00:25:09.610 --> 00:25:13.730
<v Jesse de Wit>sender wouldn't be able to know, wouldn't be able to use your channel because he

00:25:13.730 --> 00:25:19.030
<v Jesse de Wit>thinks it's closed and the splice transaction hadn't confirmed yet. So in the

00:25:19.030 --> 00:25:21.050
<v Jesse de Wit>BOLTs, there is a...

00:25:21.050 --> 00:25:24.140
<v Sjors Provoost>BOLTs means improvement for Lightning.

00:25:24.720 --> 00:25:26.560
<v Aaron van Wirdum>Yes, basics of Lightning.

00:25:26.780 --> 00:25:28.820
<v Jesse de Wit>Basics of Lightning technology.

00:25:29.080 --> 00:25:30.460
<v Sjors Provoost>Yeah, basically a BIP for Lightning.

00:25:31.120 --> 00:25:37.060
<v Jesse de Wit>Yeah. And there they say that once the channel closes on chain, you should wait

00:25:37.060 --> 00:25:41.840
<v Jesse de Wit>now for 12 blocks before you actually remove this channel from your channel

00:25:41.840 --> 00:25:47.840
<v Jesse de Wit>graph. And because we're doing this, now for these 12 blocks, we would

00:25:47.840 --> 00:25:51.140
<v Jesse de Wit>still be able to be trying the old channel.

00:25:52.680 --> 00:25:56.700
<v Jesse de Wit>And after the splice transaction confirms,

00:25:58.040 --> 00:26:04.000
<v Jesse de Wit>gossip will probably reach us in time to make us learn about the new channel.

00:26:04.490 --> 00:26:09.110
<v Sjors Provoost>It probably will happen almost immediately, right? Because the moment the splice

00:26:09.110 --> 00:26:13.010
<v Sjors Provoost>confirms is the moment that other nodes, when they see that block, they all think

00:26:13.010 --> 00:26:18.640
<v Sjors Provoost>that channel is gone. But at that point, the gossip is being

00:26:18.640 --> 00:26:23.400
<v Sjors Provoost>spread that there is a new channel in town. And so there might be a few seconds

00:26:23.400 --> 00:26:26.920
<v Sjors Provoost>in between those two moments, but for those seconds, you don't want to think that

00:26:26.920 --> 00:26:27.620
<v Sjors Provoost>the channel is gone.

00:26:28.080 --> 00:26:33.860
<v Aaron van Wirdum>But what's the benefit of keeping the old channel in memory for 12 blocks?

00:26:34.040 --> 00:26:39.900
<v Aaron van Wirdum>If you try to use it, will these peers themselves just figure, oh, well,

00:26:39.980 --> 00:26:43.100
<v Aaron van Wirdum>that channel doesn't exist, but we have a new one. We updated it. They'll just

00:26:43.100 --> 00:26:43.560
<v Aaron van Wirdum>figure it out.

00:26:43.580 --> 00:26:47.160
<v Sjors Provoost>That's where the double bookkeeping comes in, right? They see a transaction for

00:26:47.160 --> 00:26:51.240
<v Sjors Provoost>the old channel, but they'll honor it for the new channel. Well, I guess this is

00:26:51.240 --> 00:26:54.300
<v Sjors Provoost>after confirmation, so there's another trick for that then.

00:26:54.890 --> 00:26:55.510
<v Jesse de Wit>Yes.

00:26:55.870 --> 00:26:57.610
<v Aaron van Wirdum>We're talking after confirmation, yes.

00:26:58.010 --> 00:26:59.290
<v Jesse de Wit>So we're talking after confirmation.

00:26:59.670 --> 00:27:02.670
<v Aaron van Wirdum>So it appears smart enough to just forward it anyways.

00:27:03.880 --> 00:27:05.720
<v Jesse de Wit>Which peer are you talking about right now?

00:27:05.780 --> 00:27:11.610
<v Aaron van Wirdum>So I'm trying to pay you, Jesse. Yeah, and I see that you

00:27:11.610 --> 00:27:15.790
<v Aaron van Wirdum>have a channel with Sjors. Yeah, and you guys just spliced and it's confirmed,

00:27:15.790 --> 00:27:19.890
<v Aaron van Wirdum>and I have a channel with Sjors. So now it's still in my memory that you had the

00:27:19.890 --> 00:27:24.490
<v Aaron van Wirdum>old one. So now I'm trying to send it to you through Sjors. Yeah, is Sjors smart…

00:27:24.490 --> 00:27:29.690
<v Aaron van Wirdum>Is Sjors smart enough to figure out that he has this channel with you still, even

00:27:29.690 --> 00:27:30.790
<v Aaron van Wirdum>though I was not…

00:27:30.850 --> 00:27:32.696
<v Jesse de Wit>Yeah, Sjors is smart enough to do that.

00:27:31.350 --> 00:27:32.930
<v Sjors Provoost>We stopped the double bookkeeping, right?

00:27:32.930 --> 00:27:36.260
<v Jesse de Wit>Yeah. Yeah, Sjors will be smart enough to do that.

00:27:36.300 --> 00:27:39.840
<v Aaron van Wirdum>I could have known that Sjors was smart enough for that. Well done, Sjors.

00:27:40.320 --> 00:27:41.100
<v Sjors Provoost>Thank you, thank you.

00:27:42.200 --> 00:27:47.220
<v Aaron van Wirdum>Okay, that answers that question. Okay, so that's why it sticks in memory for

00:27:47.220 --> 00:27:50.100
<v Aaron van Wirdum>essentially 12 confirmations.

00:27:50.460 --> 00:27:50.560
<v Sjors Provoost>Yeah.

00:27:51.280 --> 00:27:51.520
<v Aaron van Wirdum>Right.

00:27:51.800 --> 00:27:55.980
<v Sjors Provoost>Now I think we need to go back a little bit to talk about something fundamental.

00:27:59.290 --> 00:28:04.770
<v Jesse de Wit>Yeah, something in the fundamentals is underway. So the way a splice begins, we

00:28:04.770 --> 00:28:08.730
<v Jesse de Wit>want to make sure that there's no funky stuff going on in our channel while we're

00:28:08.730 --> 00:28:12.370
<v Jesse de Wit>doing all this complicated business initiating a new splice.

00:28:12.470 --> 00:28:16.530
<v Sjors Provoost>Yeah, so it's not this time that it's confirming in the mempool. It's really the

00:28:16.530 --> 00:28:21.630
<v Sjors Provoost>time between we like to splice and the moment we submit a transaction to the rest

00:28:21.630 --> 00:28:26.170
<v Sjors Provoost>of the network. And that period of time is like a second. To the outside world,

00:28:26.290 --> 00:28:30.530
<v Sjors Provoost>but to computers, that is an eternity in which many, many things can go wrong in

00:28:30.530 --> 00:28:31.910
<v Sjors Provoost>that one very second.

00:28:32.030 --> 00:28:36.850
<v Jesse de Wit>Yeah, like the funky stuff I meant adding HTLCs basically to your channel or

00:28:36.850 --> 00:28:37.890
<v Jesse de Wit>removing HTLCs.

00:28:37.910 --> 00:28:41.250
<v Sjors Provoost>So we're in the middle of a conversation about building a splice. It's a very

00:28:41.250 --> 00:28:44.390
<v Sjors Provoost>intense conversation. And then Aaron comes in and is like, please forward this

00:28:44.390 --> 00:28:47.670
<v Sjors Provoost>for me. And we're like, no, no, no, not right now.

00:28:48.490 --> 00:28:50.490
<v Jesse de Wit>This is complicated enough as it is.

00:28:50.590 --> 00:28:53.240
<v Sjors Provoost>Come back in one million microseconds. Yeah.

00:28:53.580 --> 00:28:58.920
<v Aaron van Wirdum>I've come back in 0.6 seconds. I don't have that type of time Sjors.

00:28:59.140 --> 00:29:01.620
<v Sjors Provoost>No, so you would see your transaction fail, basically.

00:29:01.960 --> 00:29:05.840
<v Aaron van Wirdum>Oh, right. I'll go somewhere else if you don't want to help me within 0.6

00:29:05.840 --> 00:29:06.240
<v Aaron van Wirdum>seconds.

00:29:06.380 --> 00:29:06.480
<v Sjors Provoost>Yeah.

00:29:07.080 --> 00:29:13.060
<v Aaron van Wirdum>All right, got it. Okay, so the actual time that it takes to say, hey,

00:29:13.140 --> 00:29:17.080
<v Aaron van Wirdum>do you want to splice? Yeah, I want to splice. Let's splice. In that time, you

00:29:17.080 --> 00:29:20.500
<v Aaron van Wirdum>can't route. The computers can't route in that time.

00:29:20.700 --> 00:29:25.800
<v Jesse de Wit>Yeah, the computer [unclear] route. And that's because we initiated quiescence.

00:29:27.280 --> 00:29:28.300
<v Aaron van Wirdum>How do you pronounce that?

00:29:28.420 --> 00:29:33.610
<v Sjors Provoost>We Googled it and we believe it is quiescence. Quiescence. Or quiescence, I

00:29:33.610 --> 00:29:34.510
<v Sjors Provoost>guess, if you're American.

00:29:35.110 --> 00:29:39.550
<v Jesse de Wit>When I read it, I thought it was quiescence. But yeah, internet says quiescence.

00:29:41.130 --> 00:29:44.230
<v Jesse de Wit>So you send a STFU message to your peer.

00:29:46.320 --> 00:29:47.580
<v Aaron van Wirdum>Is this an actual term?

00:29:47.680 --> 00:29:51.600
<v Jesse de Wit>This is the actual term. It stands for something fundamental is underway.

00:29:52.060 --> 00:29:54.580
<v Sjors Provoost>Yes. Dear children listening, do not Google these letters.

00:29:56.140 --> 00:29:58.720
<v Jesse de Wit>And then your peer sends back.

00:29:58.780 --> 00:30:03.180
<v Aaron van Wirdum>No, that doesn't add up. You said S-F-T-U and it stands for what?

00:30:03.640 --> 00:30:07.280
<v Sjors Provoost>Something fundamental is underway.

00:30:07.600 --> 00:30:08.100
<v Aaron van Wirdum>Oh my God.

00:30:08.760 --> 00:30:09.140
<v Jesse de Wit>Something.

00:30:10.740 --> 00:30:12.540
<v Aaron van Wirdum>Anyways, enough.

00:30:14.280 --> 00:30:14.980
<v Jesse de Wit>Keep it straight.

00:30:15.200 --> 00:30:17.540
<v Aaron van Wirdum>What were you saying? Something fundamental is underway.

00:30:17.800 --> 00:30:21.920
<v Jesse de Wit>Yeah, so what we're saying is now we're going to quiescent mode and now we're not

00:30:21.920 --> 00:30:26.880
<v Jesse de Wit>going to update our channel until we're finished negotiating the splice.

00:30:27.080 --> 00:30:27.440
<v Aaron van Wirdum>Okay.

00:30:28.200 --> 00:30:32.220
<v Jesse de Wit>Then we're going to say to the peer like, okay, I want to do a splice for this

00:30:32.220 --> 00:30:37.330
<v Jesse de Wit>extra amount and for this fee rate. And what we're then going to do is we're

00:30:37.330 --> 00:30:41.870
<v Jesse de Wit>going to start the interactive transaction construction protocol. And that's,

00:30:41.990 --> 00:30:46.990
<v Jesse de Wit>yeah, that's a new protocol that's been merged into the BOLT spec

00:30:46.990 --> 00:30:48.330
<v Jesse de Wit>last month.

00:30:48.650 --> 00:30:49.710
<v Aaron van Wirdum>Oh, very new.

00:30:50.470 --> 00:30:56.110
<v Jesse de Wit>Yeah, very new. So because it's merged in the BOLT spec, that means that at least

00:30:56.110 --> 00:30:59.190
<v Jesse de Wit>two implementations implemented that already.

00:31:01.450 --> 00:31:07.280
<v Jesse de Wit>And with this, basically, what it does is you say, like, add an output to

00:31:07.280 --> 00:31:11.100
<v Jesse de Wit>this transaction, add an input to this transaction, remove an output, remove an

00:31:11.100 --> 00:31:15.300
<v Jesse de Wit>input, and you're going to negotiate what the new funding transaction will look like.

00:31:15.890 --> 00:31:20.350
<v Sjors Provoost>Right. And I guess this is different from how things worked before, where one

00:31:20.350 --> 00:31:24.730
<v Sjors Provoost>side would just say, this is going to be the transaction, like it or don't like

00:31:24.730 --> 00:31:28.920
<v Sjors Provoost>it, just sign it. And now this is a more sophisticated conversation.

00:31:29.200 --> 00:31:29.440
<v Jesse de Wit>Yes.

00:31:30.570 --> 00:31:32.310
<v Sjors Provoost>Does it use PSBT?

00:31:32.650 --> 00:31:33.910
<v Jesse de Wit>It uses PSBT, yeah.

00:31:34.090 --> 00:31:35.470
<v Sjors Provoost>Cool. We did an episode about that.

00:31:36.280 --> 00:31:37.360
<v Aaron van Wirdum>A long time ago.

00:31:38.700 --> 00:31:44.300
<v Jesse de Wit>And so this Interactive Transaction Construction Protocol is also used in a new

00:31:44.300 --> 00:31:50.280
<v Jesse de Wit>protocol in the BOLTs called Open Channel V2. And that's a version 2

00:31:50.280 --> 00:31:55.280
<v Jesse de Wit>of the Opening Channel Protocol. And that also allows for RBF,

00:31:56.930 --> 00:32:00.850
<v Jesse de Wit>which means that splices also allow for RBF.

00:32:01.090 --> 00:32:04.470
<v Sjors Provoost>And so does anybody who would use this for opening a new channel, because in

00:32:04.470 --> 00:32:07.510
<v Sjors Provoost>theory you could use it for that too, could now also use RBF, right?

00:32:07.910 --> 00:32:08.110
<v Jesse de Wit>Yeah.

00:32:08.630 --> 00:32:10.950
<v Sjors Provoost>I think you said nobody's implemented it?

00:32:11.070 --> 00:32:14.950
<v Jesse de Wit>Yeah, so I think nobody's implemented it for normal channel opens yet.

00:32:15.130 --> 00:32:18.270
<v Sjors Provoost>But I can imagine it's very useful for a zero confirmation channel, for example,

00:32:18.430 --> 00:32:21.090
<v Sjors Provoost>where a service provider opens a channel to you.

00:32:22.330 --> 00:32:25.170
<v Sjors Provoost>You know, there's some wallets that will give you a zero confirmation channel briefly.

00:32:26.430 --> 00:32:28.910
<v Sjors Provoost>That's a risk you're taking as the recipient.

00:32:30.270 --> 00:32:34.630
<v Sjors Provoost>And then they might say, well, we're just going to pay one Satoshi per vbyte. And

00:32:34.630 --> 00:32:39.300
<v Sjors Provoost>then if we start worrying as a service provider... then we'll just increase the

00:32:39.300 --> 00:32:40.460
<v Sjors Provoost>fee to make sure that it confirms.

00:32:40.800 --> 00:32:45.020
<v Jesse de Wit>Right, yeah. And it makes sense in any situation to be able to RBF a transaction.

00:32:45.240 --> 00:32:51.100
<v Jesse de Wit>And you've seen that in the last periods where the fee rates were changing a lot,

00:32:51.180 --> 00:32:54.900
<v Jesse de Wit>right? So if the fee rates are increasing a lot, then you definitely run into

00:32:54.900 --> 00:33:00.300
<v Jesse de Wit>problems of channels not confirming. And after two weeks, then your peer

00:33:00.300 --> 00:33:06.360
<v Jesse de Wit>forgets about the channel altogether. And so your funding transaction will be worthless.

00:33:06.780 --> 00:33:07.260
<v Aaron van Wirdum>Right.

00:33:07.780 --> 00:33:11.220
<v Jesse de Wit>So that's cool features in the BOLT spec as well.

00:33:11.500 --> 00:33:11.960
<v Aaron van Wirdum>Okay.

00:33:13.190 --> 00:33:15.450
<v Jesse de Wit>So now that we've negotiated the transaction.

00:33:15.850 --> 00:33:16.430
<v Aaron van Wirdum>Uh-huh.

00:33:17.700 --> 00:33:21.940
<v Jesse de Wit>And after negotiating transaction, we exchange signatures for this transaction.

00:33:22.200 --> 00:33:28.440
<v Jesse de Wit>And once we've negotiated signatures, then we're out of quiescence mode.

00:33:28.680 --> 00:33:32.320
<v Aaron van Wirdum>Yeah, and then the double bookkeeping starts, basically. And then the splice in

00:33:32.320 --> 00:33:33.280
<v Aaron van Wirdum>which we discussed starts.

00:33:33.460 --> 00:33:33.780
<v Jesse de Wit>Yes.

00:33:34.060 --> 00:33:36.800
<v Aaron van Wirdum>Until the new transaction is confirmed.

00:33:37.040 --> 00:33:41.880
<v Jesse de Wit>Yes, until the new transaction is confirmed. Or if it's like a zero conf channel,

00:33:42.220 --> 00:33:46.620
<v Jesse de Wit>so a channel that doesn't need any confirmations. Basically, you will instantly

00:33:46.620 --> 00:33:47.780
<v Jesse de Wit>be able to use the...

00:33:47.780 --> 00:33:48.700
<v Aaron van Wirdum>Oh, that's also possible.

00:33:48.940 --> 00:33:54.830
<v Jesse de Wit>Yeah, that's possible. If you have a channel with Sjors, and you

00:33:54.830 --> 00:34:00.950
<v Jesse de Wit>trust Sjors that he won't double spend your channel, you could do a zero-conf channel.

00:34:01.150 --> 00:34:06.470
<v Aaron van Wirdum>Right, right, right, Sjors. Okay, does this cover splicing? I want to

00:34:06.660 --> 00:34:12.520
<v Aaron van Wirdum>ask you who's implemented, unless there's something more to say about the

00:34:12.520 --> 00:34:13.980
<v Aaron van Wirdum>technical details.

00:34:14.620 --> 00:34:17.740
<v Jesse de Wit>Yeah, I think it covers most of the technical details, yeah.

00:34:17.980 --> 00:34:24.140
<v Aaron van Wirdum>Okay, yeah. So splicing was not in Lightning since day one, obviously, right?

00:34:25.880 --> 00:34:30.740
<v Aaron van Wirdum>But still now it's not like a standard thing, right? It's still a work in

00:34:30.740 --> 00:34:34.720
<v Aaron van Wirdum>progress, but there are implementations that have this? What's the status of

00:34:34.720 --> 00:34:35.120
<v Aaron van Wirdum>splicing?

00:34:35.420 --> 00:34:39.180
<v Jesse de Wit>Yeah, so the spec is still a work in progress and it's still being negotiated

00:34:39.180 --> 00:34:41.820
<v Jesse de Wit>exactly how the spec should look like.

00:34:41.860 --> 00:34:44.290
<v Aaron van Wirdum>Oh, even the spec is still... Open for discussion?

00:34:44.290 --> 00:34:47.950
<v Jesse de Wit>Yeah, there's a few things in the spec, like, uh, how many confirmations the

00:34:47.950 --> 00:34:52.410
<v Jesse de Wit>splice has, like, you should be able to negotiate the, uh, confirmations before

00:34:52.410 --> 00:34:58.130
<v Jesse de Wit>the splice is locked. Um, there's also, for the gossip protocol, maybe

00:34:58.130 --> 00:35:03.250
<v Jesse de Wit>they want to add a feature bit to the gossip messages saying, oh, this channel is

00:35:03.250 --> 00:35:08.970
<v Jesse de Wit>a splice channel, and, yeah, there's a few, like, uh, bit more minor things. And

00:35:08.970 --> 00:35:14.630
<v Jesse de Wit>one of the bigger things is, um, um, in a channel, you have a channel

00:35:14.630 --> 00:35:19.850
<v Jesse de Wit>reserve, uh, so one percent of your… Of each side of the channel has…

00:35:19.850 --> 00:35:25.720
<v Jesse de Wit>Each side of the channel has, uh, one percent of the channel capacity as reserve,

00:35:25.720 --> 00:35:31.260
<v Jesse de Wit>and you're not allowed to spend this one percent in in the channel. Um,

00:35:31.260 --> 00:35:34.200
<v Jesse de Wit>and so that was, um, because…

00:35:35.400 --> 00:35:41.570
<v Jesse de Wit>You always want your peer to have something to lose.

00:35:42.490 --> 00:35:45.870
<v Aaron van Wirdum>You always want to be able to punish your peer.

00:35:45.990 --> 00:35:47.030
<v Jesse de Wit>You want to be able to punish your peer.

00:35:47.030 --> 00:35:48.890
<v Aaron van Wirdum>You want to inflict pain on your peer potentially.

00:35:49.090 --> 00:35:49.290
<v Jesse de Wit>Yes.

00:35:49.610 --> 00:35:53.210
<v Aaron van Wirdum>Okay. So this is true for all Lightning channels?

00:35:53.930 --> 00:35:59.670
<v Jesse de Wit>Yeah, basically all Lightning channels. I work for Breez, but

00:35:59.670 --> 00:36:05.510
<v Jesse de Wit>with Breez, the clients don't have a channel reserve. Because with Breez, we know

00:36:05.510 --> 00:36:11.430
<v Jesse de Wit>we are always online. So you basically wouldn't be able to cheat us, even if you

00:36:11.430 --> 00:36:15.350
<v Jesse de Wit>tried, because we have a two-week period in which we can broadcast a transaction

00:36:15.350 --> 00:36:19.810
<v Jesse de Wit>on chain. So we're all right with that. So you could configure that.

00:36:20.210 --> 00:36:25.410
<v Aaron van Wirdum>But generally speaking, every Lightning channel needs at least 1% for each peer.

00:36:25.630 --> 00:36:25.930
<v Jesse de Wit>Yeah.

00:36:26.270 --> 00:36:30.490
<v Aaron van Wirdum>But you can open a channel with 100% on one side, right?

00:36:30.730 --> 00:36:34.550
<v Jesse de Wit>Yeah, so this is an exception to the rule. Like once you've opened the channel,

00:36:35.010 --> 00:36:39.310
<v Jesse de Wit>all the funds are on your side, so your peer won't have the 1% yet. But as soon

00:36:39.310 --> 00:36:43.470
<v Jesse de Wit>as you send something to the other side, then they won't be able to spend that

00:36:43.470 --> 00:36:43.870
<v Jesse de Wit>1%.

00:36:43.870 --> 00:36:47.730
<v Aaron van Wirdum>As soon as the other peer has 1%, that… Needs to be stuck there, essentially.

00:36:47.730 --> 00:36:52.670
<v Jesse de Wit>Yeah, okay. Yeah, but there's a… So now there's an issue with splicing, because,

00:36:52.670 --> 00:36:58.650
<v Jesse de Wit>um, let's say, uh, Aaron, we have, uh, we have Lightning channel, and and now

00:36:58.650 --> 00:37:02.710
<v Jesse de Wit>I decide to add a huge amount of funds on my side of the channel.

00:37:04.030 --> 00:37:09.550
<v Jesse de Wit>Now your part of the channel dips below that 1%. So

00:37:09.550 --> 00:37:12.770
<v Jesse de Wit>they're still discussing, like, how should we handle this?

00:37:13.050 --> 00:37:17.610
<v Aaron van Wirdum>Okay, this is still part of the discussion of the spec, and there's no real... So

00:37:17.610 --> 00:37:21.850
<v Aaron van Wirdum>if the spec is still being discussed, then I would think there's no

00:37:21.850 --> 00:37:25.030
<v Aaron van Wirdum>implementation that has splicing yet, or are there...

00:37:25.340 --> 00:37:29.440
<v Jesse de Wit>Yeah, there are implementations that have splicing. You've got the ACINQ team.

00:37:29.600 --> 00:37:33.580
<v Jesse de Wit>They've implemented splicing in Eclair and in Phoenix.

00:37:33.880 --> 00:37:34.400
<v Aaron van Wirdum>Okay.

00:37:35.100 --> 00:37:40.820
<v Jesse de Wit>You've got the LDK. LDK has splicing support, and Core Lightning

00:37:40.820 --> 00:37:43.920
<v Jesse de Wit>has splicing support as an experimental feature.

00:37:44.340 --> 00:37:46.500
<v Aaron van Wirdum>Okay, and are these all compatible with each other?

00:37:47.040 --> 00:37:52.900
<v Jesse de Wit>Compatibility is sort of happening now. This is the period that people will start

00:37:54.530 --> 00:37:55.410
<v Jesse de Wit>compatibility testing.

00:37:55.670 --> 00:37:56.570
<v Aaron van Wirdum>Right. What about Breez?

00:37:57.450 --> 00:37:58.410
<v Jesse de Wit>We're working on this.

00:37:58.630 --> 00:38:04.110
<v Sjors Provoost>So the rule is that once two different implementations are compatible,

00:38:04.350 --> 00:38:08.760
<v Sjors Provoost>that's when a spec is final or can be made final.

00:38:09.220 --> 00:38:09.320
<v Jesse de Wit>Yeah.

00:38:09.520 --> 00:38:12.940
<v Sjors Provoost>But there needs to be at least two different implementations that are compatible

00:38:12.940 --> 00:38:15.840
<v Sjors Provoost>and the only way to find out if things are compatible is to actually build it

00:38:15.840 --> 00:38:19.780
<v Sjors Provoost>because that's how you run into the things you did not think about in the design.

00:38:20.280 --> 00:38:23.760
<v Sjors Provoost>So I think that's a sane strategy, but the problem is, and I think we've talked

00:38:23.760 --> 00:38:28.920
<v Sjors Provoost>about that in earlier episodes, different Lightning projects like

00:38:28.920 --> 00:38:34.920
<v Sjors Provoost>LND or Core Lightning or whoever, they all have their own priorities. And so if

00:38:34.920 --> 00:38:38.540
<v Sjors Provoost>they all have their, if they all literally have just one pet project and they

00:38:38.540 --> 00:38:42.080
<v Sjors Provoost>don't pay attention to any of the other projects, then nothing happens because

00:38:42.080 --> 00:38:45.740
<v Sjors Provoost>there's never two different implementations. And this is one reason why things

00:38:45.740 --> 00:38:50.010
<v Sjors Provoost>can take a while. You need to have two, at least two that happen to have the same

00:38:50.010 --> 00:38:53.290
<v Sjors Provoost>priority, but there's no Lightning CEO out there.

00:38:53.290 --> 00:38:58.750
<v Jesse de Wit>No, exactly. And, yeah, by the way, LND also has it on the roadmap for somewhere

00:38:58.750 --> 00:38:59.230
<v Jesse de Wit>in the future.

00:39:00.750 --> 00:39:04.510
<v Aaron van Wirdum>Yeah, I thought they had it years ago, but apparently I'm just wrong about that.

00:39:04.730 --> 00:39:08.730
<v Aaron van Wirdum>I remember writing an article, but maybe it was like one of these articles about

00:39:08.730 --> 00:39:12.650
<v Aaron van Wirdum>what's in store for the future of Lightning that I wrote like five years ago.

00:39:12.990 --> 00:39:16.290
<v Jesse de Wit>Yeah, eventually it's still the same things in store.

00:39:17.650 --> 00:39:21.830
<v Aaron van Wirdum>They seem to stick in production for a while.

00:39:22.050 --> 00:39:26.870
<v Sjors Provoost>Yeah, and I guess one observation I can make is that the reason why Phoenix can

00:39:26.870 --> 00:39:31.200
<v Sjors Provoost>use Lightning in the wild... because they really are shipping it as part of their

00:39:31.200 --> 00:39:37.080
<v Sjors Provoost>tap swap. Is it tap swap? Swaproot? Oh yeah,

00:39:37.240 --> 00:39:42.220
<v Sjors Provoost>Swaproot protocol, which is swapping and using Taproot and using MuSig and other

00:39:42.220 --> 00:39:47.560
<v Sjors Provoost>cool stuff. They can use that in the wild because their wallets

00:39:47.560 --> 00:39:53.400
<v Sjors Provoost>only connect to the Eclair node. And so even though the spec

00:39:53.400 --> 00:39:56.280
<v Sjors Provoost>is not completely fleshed out, they have control over which nodes you're

00:39:56.280 --> 00:40:00.720
<v Sjors Provoost>connecting to, so the app is not going to break, even if it's not completely

00:40:00.720 --> 00:40:05.620
<v Sjors Provoost>following the spec yet, because the spec is still being changed. Now, I assume

00:40:05.620 --> 00:40:10.660
<v Sjors Provoost>they have thought about safety, because everybody can, you know, it's open

00:40:10.660 --> 00:40:14.100
<v Sjors Provoost>source, the Phoenix app, so you can look at it and see how it works, and you can

00:40:14.100 --> 00:40:19.140
<v Sjors Provoost>change it and make it misbehave. And presumably they've made it strong enough

00:40:19.140 --> 00:40:24.140
<v Sjors Provoost>that it will survive abuse, but it may not be compatible yet with other nodes.

00:40:25.110 --> 00:40:26.150
<v Jesse de Wit>Exactly that, yeah.

00:40:26.830 --> 00:40:28.330
<v Aaron van Wirdum>Can you splice from a splice?

00:40:28.830 --> 00:40:30.510
<v Jesse de Wit>Yeah, you can splice from a splice.

00:40:30.750 --> 00:40:31.750
<v Aaron van Wirdum>You can update.

00:40:32.470 --> 00:40:38.470
<v Jesse de Wit>You can have a chain of unconfirmed splices. And yeah, so what happens

00:40:38.470 --> 00:40:41.990
<v Jesse de Wit>then is then you have a transaction that spends a transaction, that spends a

00:40:41.990 --> 00:40:43.430
<v Jesse de Wit>transaction, that spends a transaction.

00:40:43.650 --> 00:40:45.550
<v Aaron van Wirdum>But they have to all confirm on chain.

00:40:47.500 --> 00:40:50.300
<v Jesse de Wit>Yeah, basically they should eventually confirm on chain.

00:40:50.520 --> 00:40:54.500
<v Sjors Provoost>Because I think one question we hoped you would be able to answer is, can you

00:40:54.500 --> 00:40:58.780
<v Sjors Provoost>change the splice? Can you place a splice that is in progress but not confirmed?

00:40:58.840 --> 00:41:02.880
<v Sjors Provoost>We know we can RBF it, so we can increase the fee of the splice, but could we

00:41:02.880 --> 00:41:04.440
<v Sjors Provoost>also change the size of the splice?

00:41:04.500 --> 00:41:08.840
<v Aaron van Wirdum>That should work, right? That would be better. It sounds like the spec

00:41:08.840 --> 00:41:09.840
<v Sjors Provoost>would be even more complicated.

00:41:09.920 --> 00:41:14.840
<v Jesse de Wit>I think that should work in some circumstances, but yeah, you do fall into issues

00:41:14.840 --> 00:41:20.780
<v Jesse de Wit>with will the mempool accept my new RBF splice.

00:41:21.780 --> 00:41:25.520
<v Jesse de Wit>I'm not sure how implementations do this, where the restrictions are.

00:41:26.480 --> 00:41:28.780
<v Aaron van Wirdum>Okay, well, that's getting a bit into the weeds.

00:41:29.040 --> 00:41:33.060
<v Jesse de Wit>But the one thing I wanted to say about these chains of unconfirmed splices is

00:41:33.060 --> 00:41:39.030
<v Jesse de Wit>that yeah, well, then you have to, for every channel update, you have to

00:41:39.030 --> 00:41:40.150
<v Jesse de Wit>update all of these.

00:41:40.410 --> 00:41:43.350
<v Sjors Provoost>And the same goes for RBF, right? Every time you RBF, you have to update

00:41:43.350 --> 00:41:45.070
<v Sjors Provoost>everything? Or is RBF done more efficiently?

00:41:45.570 --> 00:41:49.450
<v Jesse de Wit>Yeah, with the RBF, exactly, that's the same. Yeah, so every time you RBF, it's

00:41:49.450 --> 00:41:53.450
<v Jesse de Wit>basically like a new... a new splice. So you have to, yeah.

00:41:53.810 --> 00:41:57.930
<v Sjors Provoost>You have to have 10 times the number of, you have to, every transaction you make,

00:41:57.950 --> 00:42:01.450
<v Sjors Provoost>every HTLC you forward, you have to keep track of it in 10 different ways.

00:42:01.870 --> 00:42:02.130
<v Jesse de Wit>Yes.

00:42:02.490 --> 00:42:02.690
<v Sjors Provoost>Yep.

00:42:03.150 --> 00:42:07.390
<v Aaron van Wirdum>Right. Okay. I think that kind of covers it because we're getting into weird

00:42:07.390 --> 00:42:11.710
<v Aaron van Wirdum>weeds now. So I would assume that the main splicing topic has been covered now,

00:42:11.830 --> 00:42:12.750
<v Aaron van Wirdum>right? Did we miss anything?

00:42:13.010 --> 00:42:14.330
<v Jesse de Wit>No, we got it all.

00:42:14.840 --> 00:42:19.320
<v Aaron van Wirdum>Okay, awesome. Well, yes, thanks for coming back. Do you want to pitch where

00:42:19.320 --> 00:42:20.880
<v Aaron van Wirdum>people can find you or something like that?

00:42:21.100 --> 00:42:25.380
<v Jesse de Wit>People can find me on Twitter and on Nostr. I bet it's going to be in the show notes.

00:42:25.500 --> 00:42:25.920
<v Sjors Provoost>It will be.

00:42:26.080 --> 00:42:27.600
<v Aaron van Wirdum>I will put it in the show notes, yeah.

00:42:27.720 --> 00:42:29.980
<v Sjors Provoost>All right, then. Aaron, do you have anything to add?

00:42:31.340 --> 00:42:33.440
<v Aaron van Wirdum>No, I'll see you soon, Sjors.

00:42:33.680 --> 00:42:36.060
<v Sjors Provoost>All right, then. Thank you for listening to Bitcoin,

00:42:36.640 --> 00:42:37.000
<v Aaron van Wirdum>Explained.

