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

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

00:00:21.680 --> 00:00:22.120
<v Sjors Provoost>Hello.

00:00:22.540 --> 00:00:23.100
<v Aaron van Wirdum>How have you been?

00:00:23.640 --> 00:00:25.040
<v Sjors Provoost>Not bad. It's only been three months.

00:00:26.700 --> 00:00:30.320
<v Aaron van Wirdum>Was our last episode also a Bitcoin Core release episode, perhaps?

00:00:30.480 --> 00:00:32.140
<v Sjors Provoost>No, no, no. We talked about silent payments.

00:00:32.540 --> 00:00:37.980
<v Aaron van Wirdum>Oh, that's right. Yes, that is right. Well, this time we're going to discuss the

00:00:37.980 --> 00:00:40.480
<v Aaron van Wirdum>new Bitcoin Core release because there is one.

00:00:40.640 --> 00:00:42.320
<v Sjors Provoost>Version 28.0.

00:00:43.040 --> 00:00:48.820
<v Aaron van Wirdum>First, here's a message from our sponsor, Coinkite. [unclear] put a bunch of

00:00:48.820 --> 00:00:50.180
<v Aaron van Wirdum>presents here for me to look at.

00:00:50.380 --> 00:00:50.980
<v Sjors Provoost>That's right.

00:00:52.370 --> 00:00:53.990
<v Aaron van Wirdum>This looks like a battery.

00:00:54.290 --> 00:00:59.510
<v Sjors Provoost>Yeah, this is a 9-volt battery. You know, the square-shaped battery for people

00:00:59.510 --> 00:01:00.870
<v Sjors Provoost>who don't know what they look like.

00:01:01.070 --> 00:01:01.970
<v Aaron van Wirdum>A Duracell battery.

00:01:02.170 --> 00:01:05.840
<v Sjors Provoost>And then there's a little device next to it. Um, that is I believe called

00:01:05.840 --> 00:01:09.940
<v Sjors Provoost>COLDPOWER which you can connect to the nine volt battery and then it can power

00:01:09.940 --> 00:01:14.840
<v Sjors Provoost>any USB device, but you know probably the USB device you want to power with it

00:01:15.160 --> 00:01:16.700
<v Sjors Provoost>is the COLDCARD

00:01:16.700 --> 00:01:22.540
<v Aaron van Wirdum>Um, I yes, wait, so this is a Coinkite product

00:01:22.540 --> 00:01:23.640
<v Aaron van Wirdum>that I'm holding right now?

00:01:23.640 --> 00:01:24.060
<v Sjors Provoost>Yes.

00:01:24.060 --> 00:01:29.940
<v Aaron van Wirdum>And oh, I see. I can… Wait, I have to maybe so what? Okay,

00:01:29.940 --> 00:01:34.900
<v Aaron van Wirdum>yes. It's very unfortunate in moments like these that we don't have any video

00:01:34.900 --> 00:01:40.580
<v Aaron van Wirdum>with our podcast. Okay, so I'm now attaching this little USB

00:01:40.580 --> 00:01:41.400
<v Aaron van Wirdum>device.

00:01:41.520 --> 00:01:45.540
<v Sjors Provoost>You should do it closer to the mic and then we can play the game that they do in

00:01:47.200 --> 00:01:50.700
<v Sjors Provoost>Qmusic called Het Geluid, the sound, and then you have to guess what sound it is.

00:01:50.740 --> 00:01:55.240
<v Aaron van Wirdum>This is a very Dutch in-joke. Okay, so now I connected the battery to the thingy,

00:01:55.380 --> 00:01:56.400
<v Aaron van Wirdum>and now what? Now it's charging?

00:01:56.760 --> 00:02:01.420
<v Sjors Provoost>No, no, that's just a USB port. Now you can connect a USB cable to that and then

00:02:01.420 --> 00:02:05.680
<v Sjors Provoost>the COLDCARD to it, and then you have your hardware wallet getting power. Not so

00:02:05.680 --> 00:02:10.580
<v Sjors Provoost>much charging, because I don't think it has a battery, but just it has power, so

00:02:10.580 --> 00:02:14.260
<v Sjors Provoost>you can turn it on and you can move your files from the hardware wallet to the

00:02:14.260 --> 00:02:18.970
<v Sjors Provoost>computer without... having this device connected to a USB port

00:02:19.540 --> 00:02:20.920
<v Sjors Provoost>of the computer.

00:02:22.620 --> 00:02:28.140
<v Aaron van Wirdum>I have absolutely no idea what's going on here. But I also don't want to linger

00:02:28.140 --> 00:02:32.840
<v Aaron van Wirdum>on it for 10 minutes. They're not paying us enough for that. It's a very cool

00:02:32.840 --> 00:02:35.820
<v Aaron van Wirdum>device, though. It's called the COLDPOWER.

00:02:35.940 --> 00:02:40.240
<v Sjors Provoost>But I think they primarily want to sell more COLDCARDs, their hardware wallets.

00:02:40.380 --> 00:02:44.940
<v Aaron van Wirdum>Okay, COLDCARDs. Wait, but I got something else as well. Here is the TAPSIGNER.

00:02:45.460 --> 00:02:46.880
<v Aaron van Wirdum>What is this, Sjors?

00:02:47.760 --> 00:02:52.140
<v Sjors Provoost>You can tap it and then it signs things. I think it's just kind of like an extra key.

00:02:52.140 --> 00:02:53.220
<v Aaron van Wirdum>It just has your private key on it?

00:02:53.340 --> 00:02:57.620
<v Sjors Provoost>Yeah, that wouldn't be your savings private key, obviously. It could be just one

00:02:57.620 --> 00:02:58.280
<v Sjors Provoost>of many keys.

00:02:59.620 --> 00:03:03.320
<v Aaron van Wirdum>And this is another Coinkite product. Coinkite's making all sorts of stuff

00:03:03.320 --> 00:03:06.660
<v Aaron van Wirdum>nowadays, Sjors. I remember when they were just making hardware wallets.

00:03:06.860 --> 00:03:07.560
<v Sjors Provoost>They're the Opendimes.

00:03:08.860 --> 00:03:09.300
<v Aaron van Wirdum>Yeah.

00:03:11.240 --> 00:03:13.480
<v Aaron van Wirdum>I mean, they've been at it for a long time, actually.

00:03:14.940 --> 00:03:18.300
<v Aaron van Wirdum>Rodolfo was at the 2014 conference in Amsterdam.

00:03:18.700 --> 00:03:19.900
<v Sjors Provoost>Oh, that's 10 years ago.

00:03:20.060 --> 00:03:24.100
<v Aaron van Wirdum>Yeah, I don't remember what he was like. He was already selling stuff and

00:03:24.100 --> 00:03:29.000
<v Aaron van Wirdum>building thingies and gadgets and who knows what. I don't think it was

00:03:29.000 --> 00:03:31.980
<v Aaron van Wirdum>hardware wallets. Maybe it was actually back then. I don't know. And then here we

00:03:31.980 --> 00:03:36.980
<v Aaron van Wirdum>got the calculator looking. Hardware Wallet as well.

00:03:37.200 --> 00:03:37.540
<v Sjors Provoost>The Q.

00:03:37.860 --> 00:03:43.160
<v Aaron van Wirdum>The Q. Okay. This is way more than they paid for. Let's get to

00:03:43.160 --> 00:03:44.680
<v Aaron van Wirdum>the actual episode here.

00:03:44.800 --> 00:03:49.740
<v Sjors Provoost>Well, there's another fun news, which is that how do I say this? Aaron stacks

00:03:49.740 --> 00:03:51.780
<v Sjors Provoost>sats. Aaron stacks sats.

00:03:52.020 --> 00:03:53.840
<v Aaron van Wirdum>Aaron stacks sats.

00:03:54.180 --> 00:04:00.000
<v Sjors Provoost>Because we have connected you in Fountain so that the

00:04:00.000 --> 00:04:04.500
<v Sjors Provoost>sats that are streamed now also go to you. So you didn't have to set up your own node.

00:04:04.660 --> 00:04:09.240
<v Aaron van Wirdum>I think we need to make more episodes for that to actually return some dividends.

00:04:09.600 --> 00:04:11.320
<v Aaron van Wirdum>I haven't seen anything come in, I think.

00:04:11.560 --> 00:04:13.280
<v Sjors Provoost>No, because we haven't done an episode since.

00:04:13.280 --> 00:04:13.840
<v Aaron van Wirdum>Okay, there we go.

00:04:13.980 --> 00:04:14.840
<v Sjors Provoost>And they're not a sponsor.

00:04:15.300 --> 00:04:17.340
<v Aaron van Wirdum>Apparently people aren't paying us for doing nothing.

00:04:17.620 --> 00:04:18.640
<v Sjors Provoost>The podcasting 2.0 stuff.

00:04:18.700 --> 00:04:20.580
<v Aaron van Wirdum>So let's get to the actual episode here, Sjors.

00:04:20.740 --> 00:04:21.140
<v Sjors Provoost>Yes, sir.

00:04:22.960 --> 00:04:23.300
<v Aaron van Wirdum>Bitcoin Core 28.

00:04:24.890 --> 00:04:30.250
<v Aaron van Wirdum>We've mentioned in basically every other Bitcoin Core new release episode that

00:04:30.250 --> 00:04:34.090
<v Aaron van Wirdum>there is a new Bitcoin Core release every half year. People know that by now,

00:04:34.310 --> 00:04:39.110
<v Aaron van Wirdum>which means that whatever is done... at a certain time goes in. If it's not done

00:04:39.110 --> 00:04:42.450
<v Aaron van Wirdum>yet, then it doesn't go in. You know, this is kind of different with some other

00:04:42.450 --> 00:04:46.390
<v Aaron van Wirdum>software products: you will release a new version when some sort of new feature

00:04:46.390 --> 00:04:49.730
<v Aaron van Wirdum>is done. Bitcoin Core, nope, every half year, there's just whatever is done is in

00:04:49.730 --> 00:04:54.110
<v Aaron van Wirdum>there. So we're going to discuss what's in there this time. There is, uh, there

00:04:54.110 --> 00:04:56.850
<v Aaron van Wirdum>are some at least slightly interesting things in there.

00:04:57.450 --> 00:04:57.890
<v Sjors Provoost>Yes.

00:04:58.150 --> 00:04:58.550
<v Aaron van Wirdum>I would say.

00:04:59.090 --> 00:05:00.850
<v Sjors Provoost>I'd say it's quite a lot of interesting things.

00:05:01.030 --> 00:05:05.330
<v Aaron van Wirdum>Yeah, it's like an actual upgrade. Sometimes it seems sort of like a maintenance

00:05:05.330 --> 00:05:10.810
<v Aaron van Wirdum>upgrade. Now there's some actual new stuff here. We'll start off with what is, at

00:05:10.810 --> 00:05:15.050
<v Aaron van Wirdum>least in my personal opinion, the least interesting one. I don't know why we're

00:05:15.050 --> 00:05:15.830
<v Aaron van Wirdum>even discussing this.

00:05:15.850 --> 00:05:16.870
<v Sjors Provoost>I think it's one of my favorites.

00:05:17.130 --> 00:05:17.930
<v Aaron van Wirdum>The testnet one.

00:05:18.200 --> 00:05:20.400
<v Sjors Provoost>Testnet 4. That's right, ladies and gentlemen.

00:05:20.620 --> 00:05:24.460
<v Aaron van Wirdum>Why are we talking about Testnet? Testnet is not Bitcoin. Anyway, so there's a

00:05:24.460 --> 00:05:27.780
<v Aaron van Wirdum>new Testnet. Sjors wants to talk about the new Testnet. What's new with the new

00:05:27.780 --> 00:05:28.180
<v Aaron van Wirdum>Testnet?

00:05:28.360 --> 00:05:34.300
<v Sjors Provoost>Well, there's two things in there. One is there were recently block storms, also

00:05:34.300 --> 00:05:36.500
<v Sjors Provoost>known as the Lopocalypse.

00:05:38.120 --> 00:05:40.100
<v Sjors Provoost>It's hard to pronounce, actually. It's easier to write.

00:05:41.560 --> 00:05:44.440
<v Aaron van Wirdum>That is harder to pronounce than you would think.

00:05:45.690 --> 00:05:49.530
<v Sjors Provoost>Jameson Lopp was just trolling everyone with just a single laptop producing

00:05:49.530 --> 00:05:55.170
<v Sjors Provoost>hundreds of thousands of blocks, making Testnet 3 unusable for people with bad

00:05:55.170 --> 00:06:01.090
<v Sjors Provoost>software, but also generally not easy to use. And it was exploiting a

00:06:01.090 --> 00:06:06.270
<v Sjors Provoost>bunch of well-known vulnerabilities in Testnet 3 specifically. The problem with

00:06:06.270 --> 00:06:10.790
<v Sjors Provoost>Testnet fundamentally, and we'll never be able to fix that, is that it cannot

00:06:10.790 --> 00:06:15.810
<v Sjors Provoost>fully rely on proof of work the way Bitcoin does because all the proof of work is

00:06:15.810 --> 00:06:21.130
<v Sjors Provoost>on Bitcoin. And if it was the same as Bitcoin, it would be a shitcoin and it

00:06:21.130 --> 00:06:21.790
<v Sjors Provoost>would be attacked.

00:06:23.450 --> 00:06:28.330
<v Aaron van Wirdum>I mean, the problem, of course, is that performing proof of work actually costs,

00:06:28.710 --> 00:06:33.250
<v Aaron van Wirdum>requires you to perform proof of work. There's actual energy you have to expend.

00:06:33.610 --> 00:06:36.890
<v Aaron van Wirdum>And the reason miners do that on Bitcoin is because they get paid for it in

00:06:36.890 --> 00:06:42.250
<v Aaron van Wirdum>Bitcoin. While testnet, which is designed to not be worth anything, and if it

00:06:42.250 --> 00:06:47.850
<v Aaron van Wirdum>does get worth, you know, if people start valuing it, they reset it, you know,

00:06:47.950 --> 00:06:51.250
<v Aaron van Wirdum>they being the developer. So it's like designed to not have any value, so

00:06:51.250 --> 00:06:55.470
<v Aaron van Wirdum>therefore there's actually no... incentive to perform proof of work.

00:06:55.590 --> 00:07:00.610
<v Sjors Provoost>Yeah, and even if there was, which indeed, you know, sort of the rule is that if

00:07:00.610 --> 00:07:06.590
<v Sjors Provoost>that happens, if people start valuing testnet coins, then it gets reset. There's

00:07:06.590 --> 00:07:09.950
<v Sjors Provoost>just a new testnet, which is what's happening, and part of the reason is because

00:07:09.950 --> 00:07:14.930
<v Sjors Provoost>people started selling testnet 3 coins. But it was also just becoming harder and

00:07:14.930 --> 00:07:19.470
<v Sjors Provoost>harder to use, and one of the weaknesses in the testnet 3, so in order to deal

00:07:19.470 --> 00:07:21.310
<v Sjors Provoost>with this lack of incentives,

00:07:23.420 --> 00:07:28.460
<v Sjors Provoost>Testnet has a few extra rules that keep it somewhat workable in the face of

00:07:28.460 --> 00:07:34.180
<v Sjors Provoost>miners messing with the network. In particular, what could happen without these

00:07:34.180 --> 00:07:39.520
<v Sjors Provoost>rules is a miner decides to put a giant ASIC farm on Testnet 3,

00:07:39.940 --> 00:07:43.720
<v Sjors Provoost>increase the difficulty to some really, really high difficulty, and then

00:07:43.720 --> 00:07:48.410
<v Sjors Provoost>disappear. And then if you're just at home trying to test something with your

00:07:48.410 --> 00:07:53.370
<v Sjors Provoost>CPU, you just cannot mine a block anymore. And so Testnet had a rule that after

00:07:53.370 --> 00:07:58.250
<v Sjors Provoost>20 minutes, you could do it anyway at a very low difficulty.

00:07:59.410 --> 00:08:03.570
<v Sjors Provoost>And it was a bunch of these rules. And they were such that they were creating a

00:08:03.570 --> 00:08:08.190
<v Sjors Provoost>mess because it was too easy to mine hundreds of thousands of blocks very

00:08:08.190 --> 00:08:13.440
<v Sjors Provoost>quickly. And Testnet 4 fixes that. At least fixes it somewhat because

00:08:13.440 --> 00:08:14.860
<v Sjors Provoost>fundamentally you can't really fix it.

00:08:16.160 --> 00:08:18.560
<v Aaron van Wirdum>Yeah, okay. So how does testnet4 fix it?

00:08:19.690 --> 00:08:25.340
<v Sjors Provoost>I don't know. I forgot. It basically adds a few more constraints to the

00:08:25.340 --> 00:08:31.240
<v Sjors Provoost>timestamp. I think one of the problems was that you would... So after 20

00:08:31.240 --> 00:08:34.440
<v Sjors Provoost>minutes, you were able to mine a block at difficulty 1, which is the lowest

00:08:34.440 --> 00:08:39.660
<v Sjors Provoost>difficulty. And then what you would do is the last block in the difficulty period

00:08:39.660 --> 00:08:43.910
<v Sjors Provoost>would also be 1. And then... you would keep doing that, then the difficulty would

00:08:43.910 --> 00:08:47.510
<v Sjors Provoost>permanently be 1. So it wouldn't be temporary for 20 minutes, it would just be

00:08:47.510 --> 00:08:51.950
<v Sjors Provoost>permanent. And so I think the new rule is that the block at the edge of the

00:08:51.950 --> 00:08:57.460
<v Sjors Provoost>difficulty period has to be the normal difficulty. So the downside is that if

00:08:57.460 --> 00:09:03.360
<v Sjors Provoost>some ASIC drives up the difficulty, you can mine blocks. after 20 minutes,

00:09:03.580 --> 00:09:07.660
<v Sjors Provoost>but not the first block of the difficulty period. So some ASIC will have to come

00:09:07.660 --> 00:09:12.880
<v Sjors Provoost>around once every two weeks to produce one block if this happens, but they can't

00:09:12.880 --> 00:09:14.360
<v Sjors Provoost>then lower the difficulty permanently.

00:09:16.330 --> 00:09:16.810
<v Aaron van Wirdum>Okay.

00:09:17.110 --> 00:09:18.590
<v Sjors Provoost>Because the problem is once the difficulty...

00:09:18.590 --> 00:09:22.510
<v Aaron van Wirdum>I hope you can excuse me for kind of not being very interested in all the

00:09:22.510 --> 00:09:27.170
<v Aaron van Wirdum>adversarial ways that testnet can be abused. I want to just move on to actual

00:09:27.170 --> 00:09:27.830
<v Aaron van Wirdum>Bitcoin here.

00:09:28.150 --> 00:09:29.750
<v Sjors Provoost>Yeah. This is fundamental.

00:09:29.870 --> 00:09:33.190
<v Aaron van Wirdum>I mean, if you think there's something to add for our listener that might find

00:09:33.190 --> 00:09:37.080
<v Aaron van Wirdum>this interesting, go ahead. But I'm done with the testnet stuff, Sjors.

00:09:37.550 --> 00:09:39.290
<v Sjors Provoost>Well, then you want to talk about the time warp fix?

00:09:39.290 --> 00:09:41.770
<v Aaron van Wirdum>Yes, let's go to the... Oh, no, that is still testnet.

00:09:42.010 --> 00:09:44.170
<v Sjors Provoost>Yeah. But it’s a bit [unclear]…

00:09:43.300 --> 00:09:46.060
<v Aaron van Wirdum>Okay, I thought we were already there. Go for it.

00:09:46.420 --> 00:09:49.600
<v Sjors Provoost>Well, the time warp fix is something we talked about in the great consensus

00:09:49.600 --> 00:09:50.540
<v Sjors Provoost>cleanup episode.

00:09:50.900 --> 00:09:51.360
<v Aaron van Wirdum>Yes.

00:09:51.560 --> 00:09:56.440
<v Sjors Provoost>So it's useful to try that on testnet, simply because maybe one day we want to

00:09:56.440 --> 00:09:58.800
<v Sjors Provoost>use it on mainnet, but that's not the immediate plan here.

00:10:00.440 --> 00:10:04.580
<v Sjors Provoost>And one practical reason why it's being deployed on testnet is because the time

00:10:04.580 --> 00:10:07.940
<v Sjors Provoost>warp attack is another way to very quickly mine all the coins,

00:10:09.370 --> 00:10:13.200
<v Sjors Provoost>like mine the whole subsidy. So you want to prevent that. We definitely want to

00:10:13.200 --> 00:10:17.720
<v Sjors Provoost>prevent that on mainnet, because that's just bad. But on testnet, it's also

00:10:17.720 --> 00:10:21.140
<v Sjors Provoost>important to prevent it, because otherwise someone's going to mine all 21 million

00:10:21.140 --> 00:10:24.560
<v Sjors Provoost>coins on testnet, and then we have to make another testnet.

00:10:28.550 --> 00:10:29.950
<v Aaron van Wirdum>Which is totally fine.

00:10:30.900 --> 00:10:35.120
<v Sjors Provoost>For you, yeah, but it's a pain in the butt to make a new testnet. There's actual

00:10:35.120 --> 00:10:36.160
<v Sjors Provoost>work involved.

00:10:36.400 --> 00:10:42.240
<v Aaron van Wirdum>Okay. So there is a time warp fix that is part of the Great Consensus Cleanup,

00:10:42.260 --> 00:10:47.560
<v Aaron van Wirdum>which we discussed just two episodes ago. So everyone

00:10:47.560 --> 00:10:53.380
<v Aaron van Wirdum>still has that fresh in their memory. Exactly. You know, January 2022 or

00:10:53.380 --> 00:10:54.660
<v Aaron van Wirdum>whenever the last episode was.

00:10:54.760 --> 00:10:55.300
<v Sjors Provoost>Two weeks ago.

00:10:56.740 --> 00:11:00.600
<v Aaron van Wirdum>But that has been rolled out on testnet. So in a way, it's also being tested now,

00:11:00.620 --> 00:11:02.940
<v Aaron van Wirdum>I guess. You can sort of see it that way.

00:11:03.340 --> 00:11:08.260
<v Sjors Provoost>Yeah, and it already led to some discussion. Some people argued that this fix is

00:11:08.260 --> 00:11:12.780
<v Sjors Provoost>not good enough, not even for mainnet. And so it's good to have this code out

00:11:12.780 --> 00:11:15.820
<v Sjors Provoost>there. When code is actually out there, people are more likely to look at it and

00:11:15.820 --> 00:11:16.360
<v Sjors Provoost>critique it.

00:11:17.730 --> 00:11:18.090
<v Aaron van Wirdum>Good.

00:11:18.970 --> 00:11:22.010
<v Sjors Provoost>But one thing that's important to point out, I already kind of said it, but

00:11:22.010 --> 00:11:26.590
<v Sjors Provoost>oftentimes when there's a software proposal, people hash out the whole software

00:11:26.590 --> 00:11:29.670
<v Sjors Provoost>proposal, then they agree, then they deploy it on testnet, then they deploy it on

00:11:29.670 --> 00:11:33.310
<v Sjors Provoost>mainnet. That's not what's happening here. This is just a test on testnet. It's

00:11:33.310 --> 00:11:36.830
<v Sjors Provoost>not like the test that we're about to do this on mainnet.

00:11:37.260 --> 00:11:42.360
<v Aaron van Wirdum>Yeah, there's actually a practical reason to use this on testnet right now.

00:11:42.540 --> 00:11:45.500
<v Aaron van Wirdum>That's the reason it's on testnet right now, not to test it for mainnet.

00:11:45.800 --> 00:11:49.800
<v Sjors Provoost>Well, it's there to test in case we want it for mainnet, but it's not like the

00:11:49.800 --> 00:11:52.860
<v Sjors Provoost>typical software test on testnet is really like, okay, we think this is

00:11:52.860 --> 00:11:56.260
<v Sjors Provoost>completely ready. Whereas in this case, we don't think that.

00:11:57.380 --> 00:12:00.470
<v Aaron van Wirdum>Right. Okay. Done with testnet?

00:12:00.890 --> 00:12:01.330
<v Sjors Provoost>Yes.

00:12:01.590 --> 00:12:03.780
<v Aaron van Wirdum>Awesome. Let's go to Bitcoin.

00:12:04.650 --> 00:12:05.770
<v Sjors Provoost>Talk about the mempool.

00:12:06.170 --> 00:12:07.130
<v Aaron van Wirdum>Yeah, so there's an actual...

00:12:07.130 --> 00:12:10.210
<v Sjors Provoost>Well, the mempool isn't really the blockchain either. So do you care? Are you

00:12:10.210 --> 00:12:11.070
<v Sjors Provoost>going to fall asleep again?

00:12:12.510 --> 00:12:15.050
<v Aaron van Wirdum>Mempool definitely counts. Mempool counts as Bitcoin.

00:12:15.450 --> 00:12:15.590
<v Sjors Provoost>Okay.

00:12:15.790 --> 00:12:16.990
<v Aaron van Wirdum>Mempool is sort of...

00:12:16.990 --> 00:12:18.190
<v Sjors Provoost>You heard it here first.

00:12:19.460 --> 00:12:25.180
<v Aaron van Wirdum>I count it. I count it. I care about the mempool for reasons that we're going to

00:12:25.180 --> 00:12:31.100
<v Aaron van Wirdum>explain right now. So there has been sort of a package of

00:12:31.100 --> 00:12:33.480
<v Aaron van Wirdum>upgrades, which also includes a package.

00:12:36.210 --> 00:12:41.270
<v Aaron van Wirdum>It's true, though. So the problem in a nutshell and the reason that this is

00:12:41.270 --> 00:12:44.370
<v Aaron van Wirdum>needed, I think, correct me if I'm wrong.

00:12:46.300 --> 00:12:52.120
<v Aaron van Wirdum>So in case there are any listeners that don't know this, every Bitcoin node has a

00:12:52.120 --> 00:12:57.140
<v Aaron van Wirdum>mempool, and the mempool collects transactions that are then included in blocks.

00:12:57.540 --> 00:13:01.260
<v Aaron van Wirdum>So there's sort of like a waiting room for transactions until they're actually

00:13:01.260 --> 00:13:05.400
<v Aaron van Wirdum>included in the blockchain. So if you are a miner, then you're actually mining

00:13:05.400 --> 00:13:07.620
<v Aaron van Wirdum>from the mempool of your node, essentially.

00:13:08.040 --> 00:13:11.860
<v Sjors Provoost>Yeah. There's no one mempool. Everybody has their own mempool, but all the

00:13:11.860 --> 00:13:16.380
<v Sjors Provoost>mempools... tend to be very similar, especially the top of the mempool, the thing

00:13:16.380 --> 00:13:18.040
<v Sjors Provoost>that's probably going to be mined next.

00:13:18.260 --> 00:13:24.140
<v Aaron van Wirdum>Right. But there is a problem, namely that mempools are also limited

00:13:24.140 --> 00:13:29.520
<v Aaron van Wirdum>in size. It depends per person or per node how big that size is exactly, but

00:13:29.520 --> 00:13:33.900
<v Aaron van Wirdum>ultimately a mempool also has a size, in the same way that a Bitcoin block has a

00:13:33.900 --> 00:13:38.260
<v Aaron van Wirdum>maximum size. So if your transaction doesn't have

00:13:38.260 --> 00:13:43.530
<v Aaron van Wirdum>enough fee, then it will actually drop out of people's mempools.

00:13:43.670 --> 00:13:43.930
<v Sjors Provoost>Yeah.

00:13:44.740 --> 00:13:50.100
<v Aaron van Wirdum>Now, this is a real problem, especially for second-layer protocols like

00:13:50.100 --> 00:13:55.740
<v Aaron van Wirdum>Lightning, where sometimes you need to get a

00:13:55.740 --> 00:14:00.660
<v Aaron van Wirdum>transaction that is sort of pre-made, pre-signed. You need to get it into a

00:14:00.660 --> 00:14:04.640
<v Aaron van Wirdum>block, but first of all, you need to get it into a mempool to get it into a

00:14:04.640 --> 00:14:10.360
<v Aaron van Wirdum>block. Now, if the fee is too low to get it into a block, but it at least gets

00:14:10.360 --> 00:14:14.330
<v Aaron van Wirdum>into the mempool, you can fix that with this trick called... Child pays for parent

00:14:14.330 --> 00:14:17.790
<v Sjors Provoost>Or with replace by fee depending on the type of transaction.

00:14:17.790 --> 00:14:21.750
<v Aaron van Wirdum>Right, but in this case we're talking about child pays for parent mostly right?

00:14:21.750 --> 00:14:23.350
<v Aaron van Wirdum>for the fix we're going to discuss right now.

00:14:23.350 --> 00:14:26.970
<v Sjors Provoost>Yeah, because if you're talking about Lightning what often happens is that you

00:14:26.970 --> 00:14:31.090
<v Sjors Provoost>and your channel partner agree about a transaction. You pre-sign it, and so at

00:14:31.090 --> 00:14:33.830
<v Sjors Provoost>the moment you sign it you don't know what the mempool fees are going to be in

00:14:33.830 --> 00:14:39.430
<v Sjors Provoost>the future. And so the only way to, if there's some conflict or you can't find

00:14:39.430 --> 00:14:44.110
<v Sjors Provoost>the other side, the only way to get your transaction then included to get it in

00:14:44.110 --> 00:14:47.130
<v Sjors Provoost>the mempool at all is that it must have enough fees to make it in the mempool

00:14:47.130 --> 00:14:52.110
<v Sjors Provoost>period. And to bump it, you cannot replace it because you don't have the,

00:14:52.210 --> 00:14:56.460
<v Sjors Provoost>yeah, you can't RBF a transaction because the other side has to do the same

00:14:56.460 --> 00:15:01.860
<v Sjors Provoost>thing. And so child pays for parent is then the only way to get it included in

00:15:01.860 --> 00:15:03.760
<v Sjors Provoost>the next block or to even get it in the mempool.

00:15:03.760 --> 00:15:09.210
<v Aaron van Wirdum>Yeah, so in other words, if I want to get my money out of a Lightning payment

00:15:09.210 --> 00:15:15.190
<v Aaron van Wirdum>channel then I can do that uh and then if the transaction fee of

00:15:15.190 --> 00:15:19.870
<v Aaron van Wirdum>me doing that is not high enough because this was all like pre-done then what I

00:15:19.870 --> 00:15:23.770
<v Aaron van Wirdum>can do is okay you know what, I'll just spend that money that I'm sending to

00:15:23.770 --> 00:15:27.850
<v Aaron van Wirdum>myself, anyways and I'll spend it in a new transaction also to myself, and I'll

00:15:27.850 --> 00:15:33.830
<v Aaron van Wirdum>include a higher fee, and then you know, nodes will figure out that okay if we

00:15:33.830 --> 00:15:37.610
<v Aaron van Wirdum>include both of these transactions in a block then we get both of these fees. So

00:15:37.610 --> 00:15:43.110
<v Aaron van Wirdum>that usually works unless if that first transaction where I'm originally getting

00:15:43.110 --> 00:15:47.210
<v Aaron van Wirdum>my money out of this Lightning payment channel, if that transaction doesn't even

00:15:47.210 --> 00:15:52.850
<v Aaron van Wirdum>have enough fee to fit in people's mempools, then I also can't claim it with this

00:15:52.850 --> 00:15:58.450
<v Aaron van Wirdum>child pays for parent trick because now this child that I'm using, the child

00:15:58.450 --> 00:16:01.730
<v Aaron van Wirdum>payment that I'm using to claim the money, isn't referring to something that

00:16:01.730 --> 00:16:05.410
<v Aaron van Wirdum>other nodes know about because the parent transaction... The first transaction

00:16:05.410 --> 00:16:10.930
<v Aaron van Wirdum>already fell out of their mempool. So the idea to fix that is that

00:16:10.930 --> 00:16:16.330
<v Aaron van Wirdum>I should be able to tell other nodes on the network, hey, I want to pay

00:16:16.330 --> 00:16:20.930
<v Aaron van Wirdum>for this transaction as well. So please consider both of these transactions. I

00:16:20.930 --> 00:16:24.030
<v Aaron van Wirdum>know that the first transaction doesn't have enough fee for your mempool. I know

00:16:24.030 --> 00:16:27.970
<v Aaron van Wirdum>that. But look, I got another transaction. Please consider them both.

00:16:27.870 --> 00:16:29.410
<v Sjors Provoost>Yeah, and a nice thing…

00:16:28.990 --> 00:16:31.070
<v Aaron van Wirdum>That's what we're trying to accomplish here.

00:16:31.250 --> 00:16:35.170
<v Sjors Provoost>Yeah, and if you can do that, then... One benefit is that when you open a

00:16:35.170 --> 00:16:39.830
<v Sjors Provoost>Lightning channel, you can use a very low fee by default because you know you can

00:16:39.830 --> 00:16:43.070
<v Sjors Provoost>just add whatever fees are needed later. And you don't have to think about the

00:16:43.070 --> 00:16:48.770
<v Sjors Provoost>absolute worst case inscription-type mempool situation. Yeah,

00:16:48.890 --> 00:16:53.450
<v Sjors Provoost>just assume an easy mempool. So it would be nice if this was possible, but

00:16:53.450 --> 00:16:54.230
<v Sjors Provoost>currently it isn't.

00:16:54.640 --> 00:16:58.760
<v Aaron van Wirdum>Yeah, I'll repeat this one more time to make it very simple, hopefully, in case

00:16:58.760 --> 00:17:02.640
<v Aaron van Wirdum>there's still someone out there doesn't understand. So when it comes to including

00:17:02.640 --> 00:17:08.350
<v Aaron van Wirdum>transactions into blocks, transactions are potentially considered... in

00:17:08.350 --> 00:17:12.090
<v Aaron van Wirdum>combinations. Like if one transaction spends from another, then the fees are sort

00:17:12.090 --> 00:17:15.470
<v Aaron van Wirdum>of added up and a miner will figure, okay, if I include them all, then I get

00:17:15.470 --> 00:17:15.950
<v Aaron van Wirdum>enough fees.

00:17:16.130 --> 00:17:18.030
<v Sjors Provoost>Yeah, and the miner has an incentive to do that, of course.

00:17:18.170 --> 00:17:22.810
<v Aaron van Wirdum>Yeah, so the goal is to accomplish a similar logic for the mempool. So nodes will

00:17:22.810 --> 00:17:26.650
<v Aaron van Wirdum>also see, okay, we're going to consider these transactions as a combination of

00:17:26.650 --> 00:17:31.510
<v Aaron van Wirdum>transactions rather than each individually. Okay, so that's what we're trying to

00:17:31.510 --> 00:17:35.600
<v Aaron van Wirdum>achieve here. You know, I'm saying we... that's what Bitcoin Core developers are

00:17:35.600 --> 00:17:36.220
<v Aaron van Wirdum>trying to achieve.

00:17:36.560 --> 00:17:41.080
<v Sjors Provoost>Yeah, some Bitcoin Core developers, not me per se, but I try to understand what they're doing.

00:17:41.280 --> 00:17:46.680
<v Aaron van Wirdum>Right, and now in Bitcoin Core 28, there's been some actual good progress on

00:17:46.680 --> 00:17:49.080
<v Aaron van Wirdum>this goal.

00:17:49.420 --> 00:17:53.200
<v Sjors Provoost>Yeah, we've got four buzzwords basically, and we'll try to explain them.

00:17:53.340 --> 00:17:59.340
<v Aaron van Wirdum>So the first one you wrote down is one parent, one child packages.

00:18:00.180 --> 00:18:00.660
<v Sjors Provoost>Yes.

00:18:01.720 --> 00:18:02.860
<v Aaron van Wirdum>Yeah, go on.

00:18:03.340 --> 00:18:08.960
<v Sjors Provoost>Yeah, so the most simple example, which is the example you gave, is you have one

00:18:08.960 --> 00:18:14.240
<v Sjors Provoost>parent, for example, this Lightning close thing, and one child, which is your fee

00:18:14.240 --> 00:18:20.100
<v Sjors Provoost>bump. And that is a special case of a package, the simplest possible package.

00:18:21.280 --> 00:18:25.320
<v Sjors Provoost>So basically support has been added to Bitcoin Core to handle that very specific

00:18:25.320 --> 00:18:25.760
<v Sjors Provoost>case

00:18:27.270 --> 00:18:33.220
<v Sjors Provoost>using, under the hood, something called the orphanage. As far

00:18:33.220 --> 00:18:34.080
<v Sjors Provoost>as I understand it.

00:18:34.440 --> 00:18:40.340
<v Aaron van Wirdum>So there is actually a part of the Bitcoin Core code that is called

00:18:40.340 --> 00:18:40.980
<v Aaron van Wirdum>the orphanage.

00:18:41.100 --> 00:18:45.280
<v Sjors Provoost>Yes. And remember when Roger Ver said that Bitcoin Core kills babies? Well, it

00:18:45.280 --> 00:18:48.900
<v Sjors Provoost>turns out Bitcoin Core kills a lot of them because the orphanage doesn't really

00:18:48.900 --> 00:18:49.640
<v Sjors Provoost>work.

00:18:49.740 --> 00:18:54.600
<v Aaron van Wirdum>It was actually true. Okay. So what is the orphanage and how does it work? How

00:18:54.600 --> 00:18:55.420
<v Aaron van Wirdum>does it not work?

00:18:56.320 --> 00:18:59.720
<v Sjors Provoost>I'm a little vague on this, so if you really, truly, deeply want to understand

00:18:59.720 --> 00:19:04.120
<v Sjors Provoost>this, you should look at everything Gloria Zhao has been writing on various

00:19:04.120 --> 00:19:05.280
<v Sjors Provoost>mailing lists and other places,

00:19:05.800 --> 00:19:07.940
<v Aaron van Wirdum>which explains in more detail.

00:19:08.080 --> 00:19:09.800
<v Sjors Provoost>But roughly the idea is this.

00:19:12.530 --> 00:19:16.390
<v Sjors Provoost>So you and I are exchanging transactions. You want to close your channel. You

00:19:16.390 --> 00:19:20.530
<v Sjors Provoost>want to send me those transactions, right? And so the first thing you do is you

00:19:20.530 --> 00:19:24.810
<v Sjors Provoost>tell me, hey, I have some new transactions. Namely, and then you don't give me

00:19:24.810 --> 00:19:28.750
<v Sjors Provoost>the full transaction. You just give me some identifier of them. So you give me a

00:19:28.750 --> 00:19:32.910
<v Sjors Provoost>list and I look at that list and I say, well, okay, send them to me. So then

00:19:32.910 --> 00:19:34.430
<v Sjors Provoost>you're sending me the full transactions.

00:19:35.870 --> 00:19:39.980
<v Sjors Provoost>But... And so this would be the Lightning close transaction that you want to send

00:19:39.980 --> 00:19:44.760
<v Sjors Provoost>me and the child that you want to send me. However, before we did any of that, I

00:19:44.760 --> 00:19:48.220
<v Sjors Provoost>told you, like, I'm not interested in transactions that are paying a very low fee.

00:19:49.600 --> 00:19:53.740
<v Sjors Provoost>And so the Lightning action transaction, let's say, is below that level, but your

00:19:53.740 --> 00:19:54.440
<v Sjors Provoost>child is above it.

00:19:54.520 --> 00:19:59.020
<v Aaron van Wirdum>So you're, for example, saying, I only want transactions that at least pay three

00:19:59.020 --> 00:20:00.260
<v Aaron van Wirdum>sats per byte.

00:20:00.580 --> 00:20:06.110
<v Sjors Provoost>And so you being very nice, you don't send me the... The thing that you actually

00:20:06.110 --> 00:20:11.070
<v Sjors Provoost>want to include, you just sent me the child. And that child then goes into the

00:20:11.070 --> 00:20:15.690
<v Sjors Provoost>orphanage, into my orphanage, because I recognize that this transaction looks

00:20:15.690 --> 00:20:21.270
<v Sjors Provoost>interesting, seems to pay a lot of fees, but I don't know the parent. So then a

00:20:21.270 --> 00:20:26.450
<v Sjors Provoost>while later, probably a fraction of a second later, I ask you... could you please

00:20:26.450 --> 00:20:32.430
<v Sjors Provoost>give me this parent? And you say, sure. You didn't send it before because

00:20:32.430 --> 00:20:36.430
<v Sjors Provoost>the fee rate, but now because I'm asking you, if I'm asking you, you're going to

00:20:36.430 --> 00:20:40.250
<v Sjors Provoost>send it to me regardless. And so I look at it and say, well, this doesn't pay

00:20:40.250 --> 00:20:41.690
<v Sjors Provoost>enough fees and I just throw it away.

00:20:41.830 --> 00:20:42.110
<v Aaron van Wirdum>Sure.

00:20:42.350 --> 00:20:46.660
<v Sjors Provoost>And then later on, the child is also thrown out of the orphanage. That's how it

00:20:46.660 --> 00:20:47.240
<v Sjors Provoost>used to work.

00:20:47.360 --> 00:20:48.040
<v Aaron van Wirdum>That's rough.

00:20:48.660 --> 00:20:52.120
<v Sjors Provoost>You know, life on the blockchain is rough and life in the mempool is even rougher.

00:20:53.130 --> 00:20:58.650
<v Aaron van Wirdum>Oh my god. So you request the parent of that poor child and I send you the parent

00:20:58.650 --> 00:21:00.970
<v Aaron van Wirdum>and you still throw them both away?

00:21:01.270 --> 00:21:01.470
<v Sjors Provoost>Yes.

00:21:02.430 --> 00:21:03.830
<v Aaron van Wirdum>Do you at least throw them away together?

00:21:04.310 --> 00:21:10.030
<v Sjors Provoost>No, probably separately. So anyway, so that is, as far as I

00:21:10.030 --> 00:21:14.250
<v Sjors Provoost>understand, really the thing that is being fixed. So you could say it's a bit of

00:21:14.250 --> 00:21:18.410
<v Sjors Provoost>a hack. It doesn't really scale towards more complicated groups of transactions.

00:21:18.410 --> 00:21:22.770
<v Sjors Provoost>But this one child, one parent use case is very useful already, for the example

00:21:22.770 --> 00:21:28.340
<v Sjors Provoost>we just discussed. So I believe the main thing that this release changes is

00:21:28.340 --> 00:21:32.630
<v Sjors Provoost>that... And when you're sending this parent, this time it will look at it and

00:21:32.630 --> 00:21:36.170
<v Sjors Provoost>say, oh, look at that. If I combine this parent with this child that I have here

00:21:36.170 --> 00:21:40.050
<v Sjors Provoost>in the orphanage, it does pay enough. Let me accept that and let me forward it to

00:21:40.050 --> 00:21:44.960
<v Sjors Provoost>peers the same way, who then repeat the same process, if they're all upgraded. So

00:21:44.960 --> 00:21:49.460
<v Sjors Provoost>as long as there is a bunch of upgraded nodes between you and the miner, they

00:21:49.460 --> 00:21:50.740
<v Sjors Provoost>will finally get both of them.

00:21:50.820 --> 00:21:52.540
<v Aaron van Wirdum>This is a very wholesome upgrade then.

00:21:52.840 --> 00:21:53.180
<v Sjors Provoost>Yes.

00:21:53.200 --> 00:21:54.340
<v Aaron van Wirdum>I'm very happy with this one.

00:21:54.340 --> 00:21:56.240
<v Sjors Provoost>But it is also a bit of a duct tape solution.

00:21:56.900 --> 00:21:57.300
<v Aaron van Wirdum>Why?

00:21:57.740 --> 00:22:02.500
<v Sjors Provoost>Well, the orphanage is not really designed to handle the generic case of

00:22:02.500 --> 00:22:08.320
<v Sjors Provoost>thousands of packages, etc. And you can quite easily overwhelm it. So

00:22:08.320 --> 00:22:10.860
<v Sjors Provoost>if you send, let's say, instead of...

00:22:10.860 --> 00:22:11.960
<v Aaron van Wirdum>It's a small orphanage.

00:22:11.960 --> 00:22:16.720
<v Sjors Provoost>It's a very small orphanage. So if you're sending a thousand children,

00:22:17.100 --> 00:22:22.580
<v Sjors Provoost>then the orphanage is going to throw away all but the last five.

00:22:23.360 --> 00:22:24.380
<v Sjors Provoost>Right, so

00:22:24.380 --> 00:22:25.980
<v Aaron van Wirdum>it's a hard knock life.

00:22:25.980 --> 00:22:29.280
<v Sjors Provoost>It's a hard life on the mempool, even harder than on the blockchain.

00:22:30.780 --> 00:22:34.500
<v Aaron van Wirdum>So basically what you're saying is

00:22:34.850 --> 00:22:40.430
<v Aaron van Wirdum>the adversarial you know person in the Bitcoin

00:22:40.430 --> 00:22:46.230
<v Aaron van Wirdum>network can intentionally create all kinds of transactions that don't even

00:22:46.230 --> 00:22:46.750
<v Aaron van Wirdum>have

00:22:48.830 --> 00:22:50.230
<v Aaron van Wirdum>a parent or a child.

00:22:50.310 --> 00:22:54.470
<v Sjors Provoost>Well, they might have it, but you're just, yeah, you're never going to ask for it

00:22:54.470 --> 00:22:59.210
<v Sjors Provoost>because there's too many orphans at the same time. Stuff like that. So, as far as

00:22:59.210 --> 00:23:03.230
<v Sjors Provoost>I understand it, there needs to be a better mechanism to really deal with this

00:23:03.230 --> 00:23:07.930
<v Sjors Provoost>problem of one parent, one child, and multiple parents, multiple children. But

00:23:07.930 --> 00:23:12.310
<v Sjors Provoost>this, you know... Hopefully it's good enough that under most circumstances you

00:23:12.310 --> 00:23:14.350
<v Sjors Provoost>will get your Lightning close transactions to a miner.

00:23:14.810 --> 00:23:19.730
<v Aaron van Wirdum>But there might be a better solution. Tomorrow. Tomorrow.

00:23:20.690 --> 00:23:21.510
<v Sjors Provoost>I don't know.

00:23:21.870 --> 00:23:24.390
<v Aaron van Wirdum>I'm making Annie references, Sjors.

00:23:25.400 --> 00:23:25.940
<v Sjors Provoost>Okay.

00:23:26.380 --> 00:23:27.000
<v Aaron van Wirdum>Orphanage.

00:23:28.240 --> 00:23:30.540
<v Aaron van Wirdum>Never mind. We're moving on to the next point.

00:23:31.880 --> 00:23:34.620
<v Aaron van Wirdum>There are V3 transactions.

00:23:35.200 --> 00:23:36.120
<v Sjors Provoost>Yeah, and so...

00:23:36.120 --> 00:23:37.200
<v Aaron van Wirdum>Version three transactions.

00:23:37.360 --> 00:23:41.100
<v Sjors Provoost>Yeah, and so that's just a field in the transaction that says number three, where

00:23:41.100 --> 00:23:42.920
<v Sjors Provoost>it currently usually says number two.

00:23:44.450 --> 00:23:45.790
<v Sjors Provoost>So you may wonder...

00:23:45.790 --> 00:23:49.270
<v Aaron van Wirdum>So the transactions are the same, now they just are version three. Okay, what does it mean?

00:23:49.270 --> 00:23:51.550
<v Sjors Provoost>Yeah, and that doesn't apply to all transactions, it applies to special

00:23:51.550 --> 00:23:53.990
<v Sjors Provoost>transactions that care about the following.

00:23:55.190 --> 00:24:00.420
<v Sjors Provoost>TRUC. And so... TRUC stands for, was it again,

00:24:00.580 --> 00:24:05.720
<v Sjors Provoost>topologically constrained until confirmation. Topologically constrained until

00:24:05.720 --> 00:24:09.540
<v Sjors Provoost>confirmation. So in other words, there are topologies, so how transactions relate

00:24:09.540 --> 00:24:14.980
<v Sjors Provoost>to each other. There are rules for that in the mempool, not in the blockchain. So

00:24:14.980 --> 00:24:15.920
<v Sjors Provoost>it's until confirmation.

00:24:17.650 --> 00:24:23.010
<v Sjors Provoost>And you may wonder what rules? Well, roughly, it needs to be a one child, one

00:24:23.010 --> 00:24:26.490
<v Sjors Provoost>parent pair. Exactly that special case that we just talked about.

00:24:28.610 --> 00:24:32.190
<v Sjors Provoost>And then the other rule, I believe, is that the child cannot be more than 10

00:24:32.190 --> 00:24:34.030
<v Sjors Provoost>kilobytes or 10 kilo-vbytes.

00:24:35.650 --> 00:24:41.330
<v Sjors Provoost>And this just means that if you opt into this version number, there are a lot of

00:24:41.330 --> 00:24:45.750
<v Sjors Provoost>shenanigans that somebody trying to keep you out of the mempool or keep you from

00:24:45.750 --> 00:24:49.350
<v Sjors Provoost>bumping the fees, etc., because we didn't really talk about that scenario, can be

00:24:49.350 --> 00:24:53.770
<v Sjors Provoost>prevented. So it's not really interesting to the scenario you started with, which

00:24:53.770 --> 00:24:57.580
<v Sjors Provoost>is you're not in the mempool, you want to be in the mempool. But it's the more

00:24:57.580 --> 00:25:02.220
<v Sjors Provoost>complicated thing called pinning attacks that we would need a Lightning expert to

00:25:02.220 --> 00:25:06.560
<v Sjors Provoost>completely explain. But it comes down to like you are in the mempool, but you

00:25:06.560 --> 00:25:10.720
<v Sjors Provoost>want to be higher in the mempool. Because if you stay at the bottom of the

00:25:10.720 --> 00:25:15.300
<v Sjors Provoost>mempool, then you'll just never get confirmed. And that's not good because there

00:25:15.300 --> 00:25:18.560
<v Sjors Provoost>might be a deadline for your Lightning transaction that you want to close it.

00:25:19.940 --> 00:25:24.520
<v Aaron van Wirdum>Hang on. So, okay, I'm sending a transaction, right? So then I decide if that's

00:25:24.520 --> 00:25:30.040
<v Aaron van Wirdum>going to be a V2 or V3 or V1 transaction. It can be whatever I want. But

00:25:30.040 --> 00:25:35.340
<v Aaron van Wirdum>if I make it a V3 transaction, then it cannot have any grandchildren,

00:25:36.170 --> 00:25:40.530
<v Aaron van Wirdum>you know, it cannot have any children of children in the mempool.

00:25:40.670 --> 00:25:40.870
<v Sjors Provoost>Exactly.

00:25:40.950 --> 00:25:44.890
<v Aaron van Wirdum>It can only have grandkids when it is included in the blockchain.

00:25:45.090 --> 00:25:45.410
<v Sjors Provoost>That's right.

00:25:45.740 --> 00:25:49.860
<v Aaron van Wirdum>And there is a benefit to this, which has something to do with pinning attacks

00:25:49.860 --> 00:25:55.340
<v Aaron van Wirdum>and Lightning, which I don't understand. You also can't quite

00:25:55.340 --> 00:25:56.080
<v Aaron van Wirdum>explain.

00:25:56.460 --> 00:25:59.860
<v Sjors Provoost>No, exactly. But generally in Lightning, you are coordinating a transaction

00:25:59.860 --> 00:26:05.620
<v Sjors Provoost>together with somebody else. And so that transaction, you may want to have it in

00:26:05.620 --> 00:26:09.300
<v Sjors Provoost>the mempool because the situation is to your benefit to get it included, or they

00:26:09.300 --> 00:26:12.460
<v Sjors Provoost>might want it in the mempool because it's in their benefit to get it in the

00:26:12.460 --> 00:26:18.180
<v Sjors Provoost>mempool. And you may have a conflict there where the other side may want to stop

00:26:18.180 --> 00:26:21.980
<v Sjors Provoost>you from getting it into the mempool. And you can do all sorts of shenanigans

00:26:21.980 --> 00:26:25.520
<v Sjors Provoost>where you attach lots and lots of small transactions or very large transactions

00:26:25.520 --> 00:26:30.620
<v Sjors Provoost>with too low fees to this Lightning close transaction so that it doesn't get into

00:26:30.620 --> 00:26:33.420
<v Sjors Provoost>the mempool or it doesn't get high enough into the mempool and you can't bump it

00:26:33.420 --> 00:26:38.300
<v Sjors Provoost>anymore because the RBF rules are complicated. And so all that goes away with V3

00:26:38.300 --> 00:26:43.860
<v Sjors Provoost>because there can only be one child. And, you know, you may still have to race

00:26:43.860 --> 00:26:46.160
<v Sjors Provoost>for paying higher fees, but it's somewhat limited.

00:26:47.140 --> 00:26:49.160
<v Aaron van Wirdum>It's a bit, of course, one child policy.

00:26:50.610 --> 00:26:53.640
<v Sjors Provoost>Yes. I'm sure that will make people happy.

00:26:54.000 --> 00:26:59.440
<v Aaron van Wirdum>The connotations here are less than optimal, Sjors, but I will remind the

00:26:59.440 --> 00:27:03.020
<v Aaron van Wirdum>listener it's an opt-in thing. You don't have to. You can have as many childs as

00:27:03.020 --> 00:27:03.420
<v Aaron van Wirdum>you want.

00:27:03.680 --> 00:27:05.800
<v Sjors Provoost>Yeah, exactly. You don't have to use those V3 transactions.

00:27:06.060 --> 00:27:09.940
<v Aaron van Wirdum>Okay. So that's a new thing. I don't quite understand the ban. Well, I kind of...

00:27:09.940 --> 00:27:11.580
<v Aaron van Wirdum>Let's just move to the next thing.

00:27:11.580 --> 00:27:13.340
<v Sjors Provoost>It removes all the stuff that we don't understand.

00:27:13.620 --> 00:27:14.660
<v Aaron van Wirdum>Right. Got it.

00:27:15.120 --> 00:27:18.360
<v Sjors Provoost>So we don't have to explain how pinning works because it's less of a problem.

00:27:18.640 --> 00:27:22.560
<v Aaron van Wirdum>Got it. And then there's one... Okay. There's one more thing to the whole mempool

00:27:22.560 --> 00:27:23.000
<v Aaron van Wirdum>upgrade.

00:27:23.220 --> 00:27:25.140
<v Sjors Provoost>Yes. The last buzzword.

00:27:25.300 --> 00:27:29.890
<v Aaron van Wirdum>Yes. And then we'll... then we're done with the mempool upgrades so we had the

00:27:29.890 --> 00:27:34.650
<v Aaron van Wirdum>one parent one child packages kind of with orphanages and then we were just

00:27:34.650 --> 00:27:40.330
<v Aaron van Wirdum>discussing the version three one child only policy and now… and that's called

00:27:40.330 --> 00:27:44.390
<v Aaron van Wirdum>the the TRUC what TRUC stands for?

00:27:44.280 --> 00:27:49.600
<v Sjors Provoost>Topologically restrained. Sorry. Yeah, I think topologically restricted until

00:27:49.600 --> 00:27:50.080
<v Sjors Provoost>confirmation.

00:27:50.460 --> 00:27:55.460
<v Aaron van Wirdum>Okay. Yes, you can only have grandchilds when you're in the blockchain as a

00:27:55.460 --> 00:27:59.820
<v Aaron van Wirdum>transaction. Being a transaction. Anyways. Okay. And then there's something

00:27:59.820 --> 00:28:00.820
<v Aaron van Wirdum>called P2A.

00:28:01.560 --> 00:28:02.160
<v Sjors Provoost>Yes.

00:28:02.440 --> 00:28:03.380
<v Aaron van Wirdum>What is P2A?

00:28:03.880 --> 00:28:09.390
<v Sjors Provoost>Pay to anchor. And so we talked about this situation where you want to make a

00:28:09.390 --> 00:28:12.910
<v Sjors Provoost>child to pay for the parent. Now, the question is, what does that child look

00:28:12.910 --> 00:28:17.130
<v Sjors Provoost>like? It can be anything. It doesn't really matter as long as it pays a lot of

00:28:17.130 --> 00:28:21.490
<v Sjors Provoost>fees. But you want it to be small because you don't have to pay just the fees for

00:28:21.490 --> 00:28:24.870
<v Sjors Provoost>your parent. You also have to pay your own fees. So you want the child to be as

00:28:24.870 --> 00:28:29.830
<v Sjors Provoost>small as possible. And pay to anchor is like a new standardness rule that lets

00:28:29.830 --> 00:28:35.580
<v Sjors Provoost>you make a very, very small transaction to do just that. And the funny thing

00:28:35.580 --> 00:28:39.500
<v Sjors Provoost>about it is that on the blockchain, the address will look like something like 1

00:28:39.500 --> 00:28:45.280
<v Sjors Provoost>fees or BC1P fees. And that's done with a special, very small

00:28:45.280 --> 00:28:48.260
<v Sjors Provoost>script that just happens to represent the word fees.

00:28:49.500 --> 00:28:53.500
<v Sjors Provoost>But it's really just a way to make it easier to make these children. It doesn't

00:28:53.500 --> 00:28:57.300
<v Sjors Provoost>have any special meaning otherwise. But the change is that these are now

00:28:57.300 --> 00:28:58.980
<v Sjors Provoost>standard, so they will actually get relayed.

00:29:00.590 --> 00:29:05.150
<v Aaron van Wirdum>Okay, so it was already possible according to the consensus rules to create this,

00:29:05.250 --> 00:29:07.710
<v Aaron van Wirdum>but so far Bitcoin Core wouldn't relay them.

00:29:07.950 --> 00:29:11.370
<v Sjors Provoost>Yeah, and if I understand correctly, it wouldn't relay spending them. So you

00:29:11.370 --> 00:29:15.540
<v Sjors Provoost>could send money to that address, but you couldn't spend from it.

00:29:17.860 --> 00:29:23.320
<v Aaron van Wirdum>Okay, so this is specifically intended to also benefit these other things we just

00:29:23.320 --> 00:29:25.780
<v Aaron van Wirdum>discussed with the orphanage and the one-child policy, etc.

00:29:25.880 --> 00:29:30.160
<v Sjors Provoost>Yeah, because the child is now spending from that address, essentially. And you

00:29:30.160 --> 00:29:34.540
<v Sjors Provoost>can do that, or anybody else can do it, too. So maybe you want to outsource it to

00:29:34.540 --> 00:29:35.880
<v Sjors Provoost>Watchtower or something like that.

00:29:36.020 --> 00:29:40.140
<v Aaron van Wirdum>Long story short, now with Bitcoin Core 28, mempool

00:29:40.140 --> 00:29:45.820
<v Aaron van Wirdum>policy has improved to the point where it makes Lightning a bit

00:29:45.820 --> 00:29:47.930
<v Aaron van Wirdum>more... Usable, reliable.

00:29:48.350 --> 00:29:50.910
<v Sjors Provoost>When they start using it, and that might be another year.

00:29:51.150 --> 00:29:55.910
<v Aaron van Wirdum>Of course, right. At least Bitcoin Core has now facilitated Lightning to become

00:29:55.970 --> 00:29:59.930
<v Aaron van Wirdum>more usable, cheaper.

00:30:00.530 --> 00:30:00.850
<v Sjors Provoost>Yeah, hopefully.

00:30:01.330 --> 00:30:03.290
<v Aaron van Wirdum>That sort of stuff. Okay.

00:30:03.550 --> 00:30:07.590
<v Sjors Provoost>And I mean, when we say Lightning, we mean anything that has the same concerns as Lightning.

00:30:07.990 --> 00:30:11.810
<v Aaron van Wirdum>Right, yeah. A lot of Layer 2 protocols actually have these kinds of issues, of

00:30:11.810 --> 00:30:14.770
<v Aaron van Wirdum>course. Okay, we're just discussing...

00:30:16.330 --> 00:30:22.050
<v Aaron van Wirdum>relay policy with the anchor stuff. Speaking of relay policy, Bitcoin Core,

00:30:22.230 --> 00:30:24.470
<v Aaron van Wirdum>so next topic, we're done with the mempool stuff.

00:30:24.970 --> 00:30:25.930
<v Sjors Provoost>Here's more mempool stuff.

00:30:26.070 --> 00:30:27.410
<v Aaron van Wirdum>Here's more mempool stuff for you.

00:30:29.090 --> 00:30:30.950
<v Aaron van Wirdum>Full RBF is now the default.

00:30:31.390 --> 00:30:35.370
<v Sjors Provoost>Yeah, so we've done multiple episodes about full RBF. If you look for the term in

00:30:35.370 --> 00:30:37.670
<v Sjors Provoost>our show notes or in our history, you will find it.

00:30:37.770 --> 00:30:38.570
<v Aaron van Wirdum>Replaced by fee.

00:30:39.470 --> 00:30:45.380
<v Sjors Provoost>Yes, well, full RBF. You know says, like it's fully replacing but anyway, it

00:30:45.380 --> 00:30:49.720
<v Sjors Provoost>doesn't really matter, it it the only thing it does is it turns the flag off, so

00:30:49.720 --> 00:30:53.780
<v Sjors Provoost>or it ignores the flag, so it used to be that you had something called opt-in RBF

00:30:53.780 --> 00:30:57.500
<v Sjors Provoost>where you would signal that your transaction could be replaced and if you didn't

00:30:57.500 --> 00:31:01.840
<v Sjors Provoost>signal that then nodes if they were nice would not replace it if they were not

00:31:01.840 --> 00:31:05.640
<v Sjors Provoost>nice they would replace it so unconfirmed transactions were always safe, unsafe

00:31:05.640 --> 00:31:11.070
<v Sjors Provoost>for that reason because it's just a mempool rule so um, but…

00:31:12.380 --> 00:31:17.740
<v Sjors Provoost>Then this new setting came in that lets your node basically ignore this flag and

00:31:17.740 --> 00:31:20.820
<v Sjors Provoost>say, I'm going to just anything that pays a higher fee and meets all these other

00:31:20.820 --> 00:31:23.760
<v Sjors Provoost>conditions will get relayed now. You don't need the flag anymore.

00:31:23.980 --> 00:31:25.680
<v Aaron van Wirdum>There was a setting in Bitcoin Core.

00:31:25.740 --> 00:31:30.860
<v Sjors Provoost>Yeah, that was off by default because it was a new thing. But now it turns out

00:31:30.860 --> 00:31:35.660
<v Sjors Provoost>that most miners appear to be also using that. And so when miners are using a

00:31:35.660 --> 00:31:40.140
<v Sjors Provoost>certain mempool policy, it is better for full nodes to also use that policy so

00:31:40.140 --> 00:31:44.880
<v Sjors Provoost>that... their mempool reflects the next block accurately. And this helps with

00:31:44.880 --> 00:31:49.640
<v Sjors Provoost>things like compact block relay, where you relay not the whole block to your

00:31:49.640 --> 00:31:54.540
<v Sjors Provoost>peers when you see it, but you relay a very short summary. And that short summary

00:31:54.540 --> 00:31:58.580
<v Sjors Provoost>relies on the fact that the person you're sending it to has the same mempool as

00:31:58.580 --> 00:32:03.380
<v Sjors Provoost>you do. And so we'll recognize. You don't need to send all the transactions to

00:32:03.380 --> 00:32:08.010
<v Sjors Provoost>your peers. You just send the header and a few other details. That doesn't work.

00:32:08.350 --> 00:32:12.030
<v Sjors Provoost>And that started to, you could measure that it was working less well. So

00:32:12.030 --> 00:32:16.750
<v Sjors Provoost>basically block relay was getting slower because too many people were using full

00:32:16.750 --> 00:32:21.570
<v Sjors Provoost>RBF, but too many people were not. And now hopefully it'll speed up again because

00:32:21.570 --> 00:32:24.590
<v Sjors Provoost>everybody will be using full RBF or most people.

00:32:24.950 --> 00:32:25.350
<v Aaron van Wirdum>Right.

00:32:26.660 --> 00:32:31.860
<v Aaron van Wirdum>Yeah, I mean, this has obviously been a pretty controversial topic for

00:32:31.860 --> 00:32:37.060
<v Aaron van Wirdum>over 10 years now. RBF in itself,

00:32:38.240 --> 00:32:43.700
<v Aaron van Wirdum>some people would argue that it makes unconfirmed transactions less reliable,

00:32:43.720 --> 00:32:48.440
<v Aaron van Wirdum>whereas previously they were still pretty reliable. If you got a transaction,

00:32:48.880 --> 00:32:53.540
<v Aaron van Wirdum>even if it was unconfirmed, you would probably just receive it. And now that's

00:32:53.540 --> 00:32:58.860
<v Aaron van Wirdum>been... You know, it's a lot less obvious now that it won't get replaced by a

00:32:58.860 --> 00:32:59.880
<v Aaron van Wirdum>completely different transaction.

00:33:00.120 --> 00:33:03.920
<v Sjors Provoost>I'm not sure if it matters that much in practice. You'd have to ask merchants who

00:33:03.920 --> 00:33:07.380
<v Sjors Provoost>still use it. There's not that many of them. They probably use all sorts of other

00:33:07.380 --> 00:33:11.640
<v Sjors Provoost>risk scoring techniques that are completely unrelated to the use of this flag,

00:33:11.660 --> 00:33:14.660
<v Sjors Provoost>but this flag would make it more difficult to perform the attack.

00:33:14.820 --> 00:33:19.510
<v Aaron van Wirdum>Yeah. Well, anyways, we've discussed RBF at length in different episodes, so

00:33:19.510 --> 00:33:25.150
<v Aaron van Wirdum>let's just keep it at that. In any case, Bitcoin Core 28 now has

00:33:25.150 --> 00:33:27.710
<v Aaron van Wirdum>full RBF on by default.

00:33:28.010 --> 00:33:31.390
<v Sjors Provoost>Yeah, and then for later on, we need to figure out, do we want to get rid of this

00:33:31.390 --> 00:33:37.130
<v Sjors Provoost>flag? Do we deprecate BIP 125 or that part of it? Because that's the privacy…

00:33:36.520 --> 00:33:38.540
<v Aaron van Wirdum>The flag seems pretty useless now, right?

00:33:38.530 --> 00:33:42.100
<v Sjors Provoost>It's useless, yes, but if Bitcoin Core turns it off... But everybody else

00:33:42.100 --> 00:33:45.680
<v Sjors Provoost>doesn't. Now you know which wallets are using Bitcoin Core. So there's still the

00:33:45.680 --> 00:33:48.600
<v Sjors Provoost>question of what to do with the flag. And maybe we should just say, like, it

00:33:48.600 --> 00:33:50.900
<v Sjors Provoost>should just be there. That just doesn't mean anything anymore.

00:33:51.180 --> 00:33:55.630
<v Aaron van Wirdum>I don't know. I say remove it. Get rid of it.

00:33:56.790 --> 00:34:02.650
<v Aaron van Wirdum>Just a full RBF is the new reality. Okay. AssumeUTXO is available

00:34:02.650 --> 00:34:03.650
<v Aaron van Wirdum>on Mainnet.

00:34:03.750 --> 00:34:09.010
<v Sjors Provoost>Yes. We talked about AssumeUTXO in episode number 14

00:34:13.570 --> 00:34:14.370
<v Sjors Provoost>in 2020.

00:34:16.330 --> 00:34:21.630
<v Sjors Provoost>And it's ready. Well, you still need some command line magic, but you can

00:34:21.630 --> 00:34:24.190
<v Sjors Provoost>basically, how you use it is you download a torrent.

00:34:25.760 --> 00:34:28.300
<v Aaron van Wirdum>What is it? What are we talking about?

00:34:29.040 --> 00:34:29.720
<v Sjors Provoost>That's what I'm explaining.

00:34:29.760 --> 00:34:33.380
<v Aaron van Wirdum>Okay, remind our listener. Oh, you are explaining it? Okay, good, good, good.

00:34:33.480 --> 00:34:36.700
<v Sjors Provoost>So you download a torrent, about 10 gigabytes, which represents the UTXO set

00:34:36.700 --> 00:34:40.840
<v Sjors Provoost>during the halving block. So it represents who owns what coin. who owned what

00:34:40.840 --> 00:34:45.440
<v Sjors Provoost>coin at block 8,400, sorry, 840,000.

00:34:46.640 --> 00:34:51.440
<v Sjors Provoost>Then your node loads that snapshot and it checks it based on the hash that the

00:34:51.440 --> 00:34:55.300
<v Sjors Provoost>developers put in. It doesn't trust it, it just assumes it, hence it's called

00:34:55.300 --> 00:35:00.300
<v Sjors Provoost>AssumeUTXO. Then it goes to the tip, which is quick because it's only six months

00:35:00.300 --> 00:35:00.840
<v Sjors Provoost>worth of blocks.

00:35:01.680 --> 00:35:02.500
<v Aaron van Wirdum>From now, yeah.

00:35:02.760 --> 00:35:05.880
<v Sjors Provoost>And from that point on, you can use your node pretty much normally. You can

00:35:05.880 --> 00:35:08.560
<v Sjors Provoost>create a wallet, you can receive coins, you can send coins, you have a mempool,

00:35:08.700 --> 00:35:12.320
<v Sjors Provoost>all that stuff works. Meanwhile, in the background, it starts at the Genesis

00:35:12.320 --> 00:35:17.620
<v Sjors Provoost>block, goes all the way to block 840,000, makes sure that the UTXO set

00:35:17.620 --> 00:35:23.440
<v Sjors Provoost>from Genesis actually matches what you assumed. And the

00:35:23.440 --> 00:35:27.200
<v Sjors Provoost>moment it confirms that, it's happy. And if not, it crashes.

00:35:27.480 --> 00:35:32.400
<v Aaron van Wirdum>Right. So for a limited amount of time, you are kind of trusting the developers.

00:35:32.660 --> 00:35:32.840
<v Sjors Provoost>Yes.

00:35:33.480 --> 00:35:39.100
<v Aaron van Wirdum>You know, potentially the developers could have... I mean, you attribute

00:35:39.100 --> 00:35:43.120
<v Aaron van Wirdum>coins to themselves that weren't really theirs, to name an extreme example.

00:35:43.300 --> 00:35:43.460
<v Sjors Provoost>Yeah.

00:35:43.740 --> 00:35:47.240
<v Aaron van Wirdum>But your node is still, you know, it's a temporary thing. It's like, okay, it's a

00:35:47.240 --> 00:35:50.180
<v Aaron van Wirdum>stopgap until the node is really fully synced.

00:35:50.280 --> 00:35:54.200
<v Sjors Provoost>And the other thing is, any kind of fraud would be trivial to detect, right?

00:35:54.320 --> 00:35:58.800
<v Sjors Provoost>Because anybody can take their own node, make this snapshot themselves, compare

00:35:58.800 --> 00:36:02.220
<v Sjors Provoost>the hash, and look at the code and say, hey, the hash in the code does not

00:36:02.220 --> 00:36:07.140
<v Sjors Provoost>actually match what I found, so... It's not just new people using it that would

00:36:07.140 --> 00:36:10.100
<v Sjors Provoost>be surprised by this. Everybody would be saying, hey, why is Bitcoin Core putting

00:36:10.100 --> 00:36:14.720
<v Sjors Provoost>an invalid snapshot in the source code? But it does actually check against this

00:36:14.720 --> 00:36:17.620
<v Sjors Provoost>assumption. So you cannot get a snapshot from a random...

00:36:16.036 --> 00:36:20.280
<v Aaron van Wirdum>Why is all my money gone? Why is Sjors so rich all of a sudden?

00:36:20.840 --> 00:36:25.440
<v Sjors Provoost>Something like that, yeah. So it's not the case that you can just download a

00:36:25.440 --> 00:36:29.470
<v Sjors Provoost>snapshot from a random person on the internet and they could pull that thing on

00:36:29.470 --> 00:36:32.910
<v Sjors Provoost>you because Bitcoin Core is expecting a specific one.

00:36:34.350 --> 00:36:38.230
<v Sjors Provoost>But maybe in the future that might change. It depends on what people want and

00:36:38.230 --> 00:36:39.370
<v Sjors Provoost>what risks you're worried about.

00:36:40.010 --> 00:36:40.410
<v Aaron van Wirdum>Right.

00:36:41.430 --> 00:36:44.870
<v Sjors Provoost>But you still have to do, like, you have to find the torrent, you have to

00:36:44.870 --> 00:36:48.590
<v Sjors Provoost>download it, you have to enter a command. So the next steps would be to make that

00:36:48.590 --> 00:36:49.290
<v Sjors Provoost>process easier.

00:36:50.860 --> 00:36:54.980
<v Aaron van Wirdum>Right. Okay, so that's included in Bitcoin Core 28 as well?

00:36:55.200 --> 00:36:55.500
<v Sjors Provoost>Yep.

00:36:56.040 --> 00:37:01.880
<v Aaron van Wirdum>Next point, it's now easier to migrate your wallet

00:37:01.880 --> 00:37:05.940
<v Aaron van Wirdum>from your legacy wallet to the new descriptor wallet format?

00:37:06.240 --> 00:37:11.200
<v Sjors Provoost>Yeah, so basically a couple of years ago already, the Bitcoin Core wallet was

00:37:11.200 --> 00:37:15.580
<v Sjors Provoost>changed in two important ways. One is it uses a more modern way to organize

00:37:15.580 --> 00:37:21.000
<v Sjors Provoost>keys using descriptors. We probably talked about that a little bit along with

00:37:21.000 --> 00:37:21.440
<v Sjors Provoost>Miniscript.

00:37:22.030 --> 00:37:24.370
<v Aaron van Wirdum>We've definitely spoken about this in one of our episodes.

00:37:24.490 --> 00:37:29.810
<v Sjors Provoost>Basically, the wallet used to be just a bag of keys and some scripts and some

00:37:29.810 --> 00:37:34.010
<v Sjors Provoost>logic to make sure that it's presenting sane addresses. And this has been made

00:37:34.010 --> 00:37:37.710
<v Sjors Provoost>much more elegant in a way that's also easier to import your wallet, export your

00:37:37.710 --> 00:37:42.570
<v Sjors Provoost>wallet, that sort of stuff. The other thing that changed is the database backend,

00:37:42.930 --> 00:37:47.830
<v Sjors Provoost>which is a bit boring, but we used to have wallets. The wallet used to use

00:37:47.830 --> 00:37:51.950
<v Sjors Provoost>Berkeley DB, which is a very, very old piece of software that we use a

00:37:51.950 --> 00:37:57.070
<v Sjors Provoost>10-year-old version of from like 2014 or even older, I think, maybe 2010.

00:37:58.440 --> 00:38:03.500
<v Sjors Provoost>And the new modern wallets use SQLite 3, which is a modern database thing.

00:38:04.520 --> 00:38:10.120
<v Sjors Provoost>And so those two things were combined. So it's the nicer organized scripts and

00:38:10.120 --> 00:38:13.940
<v Sjors Provoost>the more modern database backend. And now the goal is to get rid of that old

00:38:13.940 --> 00:38:16.840
<v Sjors Provoost>database backend. But of course, you know, there's a lot of money in these old

00:38:16.840 --> 00:38:20.780
<v Sjors Provoost>wallets, so we don't want people to lose anything. And so there's a migration

00:38:20.780 --> 00:38:24.440
<v Sjors Provoost>tool that has already been there for a while, but you need the command line, and

00:38:24.440 --> 00:38:28.140
<v Sjors Provoost>I believe now you can do it from the GUI. And this tool is going to get more and

00:38:28.140 --> 00:38:33.200
<v Sjors Provoost>more insistent that you use it, because the goal is to get rid of the old

00:38:33.200 --> 00:38:38.450
<v Sjors Provoost>database format. But there is a way that we can still read those old wallets.

00:38:39.050 --> 00:38:42.430
<v Sjors Provoost>So we will get rid of the software dependency, but there will still be code in

00:38:42.430 --> 00:38:46.930
<v Sjors Provoost>Bitcoin Core that can read the old wallet and then upgrade it, but you cannot use it anymore.

00:38:47.210 --> 00:38:51.930
<v Aaron van Wirdum>So let's say I have a Bitcoin Core wallet that's still a legacy wallet. What's

00:38:51.930 --> 00:38:55.790
<v Aaron van Wirdum>the incentive for me to upgrade? What's the benefit for me, if any?

00:38:57.800 --> 00:39:00.500
<v Sjors Provoost>Sanity. But in the future, you don't have a choice.

00:39:01.570 --> 00:39:01.970
<v Aaron van Wirdum>Okay.

00:39:01.970 --> 00:39:05.690
<v Sjors Provoost>It will basically say like, hey, you need to upgrade this wallet, otherwise you

00:39:05.690 --> 00:39:09.890
<v Sjors Provoost>can't use it. You keep a backup of the old thing. So if there is a problem,

00:39:10.210 --> 00:39:11.110
<v Sjors Provoost>please file a bug report.

00:39:12.040 --> 00:39:12.440
<v Aaron van Wirdum>Right.

00:39:12.600 --> 00:39:13.200
<v Sjors Provoost>But yeah.

00:39:13.620 --> 00:39:18.880
<v Aaron van Wirdum>Okay, so that's now a bit upgrading or migrating, I should say, is now a bit easier.

00:39:19.260 --> 00:39:19.640
<v Sjors Provoost>Yeah.

00:39:19.840 --> 00:39:22.220
<v Aaron van Wirdum>You can actually see what you're doing if you're not a developer.

00:39:22.580 --> 00:39:25.000
<v Sjors Provoost>I think it's just press a button, yeah.

00:39:25.240 --> 00:39:26.180
<v Aaron van Wirdum>Yeah, I like buttons.

00:39:28.400 --> 00:39:31.340
<v Aaron van Wirdum>Final point, last point of this episode. Sure.

00:39:31.500 --> 00:39:34.320
<v Sjors Provoost>Yeah, there's plenty more in the release, but this is what we're going to cover.

00:39:34.520 --> 00:39:34.780
<v Aaron van Wirdum>Yeah.

00:39:35.700 --> 00:39:38.460
<v Sjors Provoost>This is the most exciting feature, I think, of the release.

00:39:40.010 --> 00:39:41.070
<v Aaron van Wirdum>Is that sarcasm?

00:39:41.230 --> 00:39:41.510
<v Sjors Provoost>Yes.

00:39:42.780 --> 00:39:48.480
<v Aaron van Wirdum>Block files are, no, I'm not sure how to pronounce this. XOR?

00:39:48.640 --> 00:39:48.820
<v Sjors Provoost>Yeah.

00:39:49.040 --> 00:39:52.780
<v Aaron van Wirdum>Yeah, block file XOR. What is a block file XOR?

00:39:53.240 --> 00:39:58.500
<v Sjors Provoost>Well, the goal is, the problem here is that there are virus scanners out there

00:39:58.500 --> 00:40:02.980
<v Sjors Provoost>and they, historically already, they would look at your mempool and they would

00:40:02.980 --> 00:40:06.580
<v Sjors Provoost>look at your blocks. And then if something was, especially back then in the

00:40:06.580 --> 00:40:11.360
<v Sjors Provoost>mempool, that looked like a virus, like a transaction that just has, you know,

00:40:12.170 --> 00:40:16.350
<v Sjors Provoost>an OP_RETURN, which doesn't do anything, but the OP_RETURN is followed by a

00:40:16.350 --> 00:40:20.840
<v Sjors Provoost>well-known worm or a well-known virus, then the virus scanner... doesn't know

00:40:20.840 --> 00:40:24.960
<v Sjors Provoost>that it's just an OP_RETURN and doesn't do anything. It just sees the pattern of

00:40:24.960 --> 00:40:28.880
<v Sjors Provoost>the virus. It puts your whole Bitcoin Core node into quarantine. Or worse, it

00:40:28.880 --> 00:40:32.500
<v Sjors Provoost>puts some files in quarantine, breaking the node, basically.

00:40:32.500 --> 00:40:35.420
<v Aaron van Wirdum>We did discuss this at some point in some context.

00:40:35.560 --> 00:40:40.120
<v Sjors Provoost>Yeah, I think so too. And from what I remember is it was first added to the

00:40:40.120 --> 00:40:43.860
<v Sjors Provoost>mempool, the solution that we're about to discuss. And that same solution is now

00:40:43.860 --> 00:40:46.220
<v Sjors Provoost>also applied to the blockchain files on your disk.

00:40:46.510 --> 00:40:50.950
<v Aaron van Wirdum>Right. Okay. So the problem indeed is, so you're storing all kinds of data in

00:40:50.950 --> 00:40:54.910
<v Aaron van Wirdum>your mempool, in your blockchain, and this data can also be generated, well, is

00:40:54.910 --> 00:40:57.910
<v Aaron van Wirdum>usually generated by other people on the internet.

00:40:58.210 --> 00:40:58.610
<v Sjors Provoost>Yeah.

00:40:58.790 --> 00:41:03.450
<v Aaron van Wirdum>And it can be generated in such a way, like you said, people can just put data in

00:41:03.450 --> 00:41:07.070
<v Aaron van Wirdum>an OP_RETURN, for example, that just looks a lot like a virus. And then your

00:41:07.070 --> 00:41:11.490
<v Aaron van Wirdum>virus scanner will say, hey, that doesn't look good to me. I'm just going to lock

00:41:11.490 --> 00:41:15.980
<v Aaron van Wirdum>this entire program over here, which in that case is Bitcoin, so you can't use

00:41:15.980 --> 00:41:21.420
<v Aaron van Wirdum>Bitcoin anymore. So there was a solution for this for the mempool already. I'm

00:41:21.420 --> 00:41:25.760
<v Aaron van Wirdum>pretty sure we discussed that. And now the same solution has been applied to the

00:41:25.760 --> 00:41:27.160
<v Aaron van Wirdum>blockchain itself. So what's the solution?

00:41:27.320 --> 00:41:33.230
<v Sjors Provoost>Yeah, the solution is called XOR, which basically... It scrambles it, obviously,

00:41:33.430 --> 00:41:37.530
<v Sjors Provoost>but it scrambles it in a symmetrical way. So you use one key

00:41:37.530 --> 00:41:39.010
<v Aaron van Wirdum>from the blockchain in this case.

00:41:39.170 --> 00:41:43.370
<v Sjors Provoost>Yeah, on disk. It uses a key, a very simple key, and it just encrypts everything

00:41:43.370 --> 00:41:47.210
<v Sjors Provoost>with that key. And with the same key, it can decrypt it. And this operation is

00:41:47.210 --> 00:41:52.650
<v Sjors Provoost>extremely fast on most computers. So it can be done easily. It's not meant to be

00:41:52.650 --> 00:41:58.110
<v Sjors Provoost>a secure form of encryption. Like any five-year-old can decrypt it because the

00:41:58.110 --> 00:42:02.100
<v Sjors Provoost>encryption key is literally... stored next to it. So it's like, here's the

00:42:02.100 --> 00:42:06.020
<v Sjors Provoost>encryption key. Like, please go decrypt it. It's just enough to trick the virus scanner.

00:42:06.240 --> 00:42:09.400
<v Aaron van Wirdum>Right, just to hide it from the virus scanner.

00:42:09.400 --> 00:42:12.340
<v Sjors Provoost>Yeah, and so if the virus scanner tries to be really smart and says, well, I

00:42:12.340 --> 00:42:16.280
<v Sjors Provoost>think that's the decryption key. Let me decrypt it and then it's game over. But

00:42:16.280 --> 00:42:20.920
<v Sjors Provoost>hopefully, because viruses, of course, use this trick too to hide some of their

00:42:20.920 --> 00:42:25.900
<v Sjors Provoost>own code. So they might start with some code that is just enough to extract the

00:42:25.900 --> 00:42:30.850
<v Sjors Provoost>real code. And so virus scanners will look at code that, you know, decrypt bad

00:42:30.850 --> 00:42:36.270
<v Sjors Provoost>code, etc. So hopefully this won't be a cat and mouse game, but there it is.

00:42:36.590 --> 00:42:36.810
<v Aaron van Wirdum>Okay.

00:42:38.030 --> 00:42:42.430
<v Aaron van Wirdum>Okay. Well, that covers it. Well, as we mentioned, there's, of course, a whole

00:42:42.430 --> 00:42:47.250
<v Aaron van Wirdum>bunch of new, you know, upgrades, maintenance, all kinds of stuff happening with

00:42:47.250 --> 00:42:51.970
<v Aaron van Wirdum>Bitcoin Core. But these were some of the most notable changes in Bitcoin Core 28.

00:42:52.690 --> 00:42:53.290
<v Sjors Provoost>That's right.

00:42:53.550 --> 00:42:55.510
<v Aaron van Wirdum>Where can people find Bitcoin Core 28?

00:42:55.930 --> 00:42:56.850
<v Sjors Provoost>Bitcoincore.org.

00:42:57.430 --> 00:42:57.890
<v Aaron van Wirdum>Great.

00:42:58.070 --> 00:43:02.590
<v Sjors Provoost>Or they can go on Nostr and follow me or Wladimir van der Laan,

00:43:02.770 --> 00:43:08.570
<v Sjors Provoost>who, you know, the former lead maintainer. And there you can

00:43:08.570 --> 00:43:13.470
<v Sjors Provoost>actually get a torrent directly that doesn't even take you to GitHub. But you

00:43:13.470 --> 00:43:15.150
<v Sjors Provoost>should just probably just go to BitcoinCore.org.

00:43:16.160 --> 00:43:16.820
<v Aaron van Wirdum>Sounds good.

00:43:17.360 --> 00:43:19.760
<v Sjors Provoost>Yep. All right, then. Thank you for listening to Bitcoin,

00:43:20.240 --> 00:43:20.700
<v Aaron van Wirdum>Explained.

