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

00:00:14.450 --> 00:00:17.170
<v Aaron van Wirdum>Live from the internet, this is Bitcoin

00:00:17.360 --> 00:00:18.980
<v Sjors Provoost>Explained.

00:00:19.600 --> 00:00:20.540
<v Aaron van Wirdum>How are you, Sjors?

00:00:21.200 --> 00:00:22.660
<v Sjors Provoost>Hello, how are you?

00:00:23.100 --> 00:00:24.240
<v Aaron van Wirdum>It's been a while.

00:00:24.580 --> 00:00:25.620
<v Sjors Provoost>It's been a few days.

00:00:26.080 --> 00:00:30.720
<v Aaron van Wirdum>Yeah, we haven't made an episode because we always committed to only making

00:00:30.720 --> 00:00:35.240
<v Aaron van Wirdum>episodes live in person. There were some exceptions, but I think neither of us

00:00:35.240 --> 00:00:39.630
<v Aaron van Wirdum>really liked that, so we kind of made it a rule. But I haven't been in the

00:00:39.630 --> 00:00:44.570
<v Aaron van Wirdum>Netherlands for a while now, never mind in Utrecht, so we couldn't do it. We

00:00:44.570 --> 00:00:46.670
<v Aaron van Wirdum>decided to pick up where we left anyways.

00:00:47.750 --> 00:00:51.610
<v Sjors Provoost>Yeah, especially because this is a topic that really nobody talks about, and I

00:00:51.610 --> 00:00:52.130
<v Sjors Provoost>think we should.

00:00:53.130 --> 00:00:57.970
<v Aaron van Wirdum>Yeah, there's apparently a very obscure new software release called Bitcoin Core

00:00:57.970 --> 00:01:02.990
<v Aaron van Wirdum>30, and we thought maybe it's time that someone brings it under the attention of

00:01:02.990 --> 00:01:08.110
<v Aaron van Wirdum>the people out there. On that point, I do want to start with that a little bit

00:01:08.110 --> 00:01:12.270
<v Aaron van Wirdum>because I think this has been the most...

00:01:12.000 --> 00:01:13.750
<v Sjors Provoost>Do we want to thank our sponsor?

00:01:15.490 --> 00:01:20.410
<v Aaron van Wirdum>Yes. Thank you, CoinKite. Thanks for being our sponsor. Thanks for making

00:01:20.410 --> 00:01:25.350
<v Aaron van Wirdum>the brilliant COLDCARD and all the other magical devices

00:01:25.350 --> 00:01:29.900
<v Aaron van Wirdum>you put out there. What's the... Sjors, help remind me. What's the little USB

00:01:29.900 --> 00:01:30.480
<v Aaron van Wirdum>thingy called?

00:01:31.420 --> 00:01:33.860
<v Sjors Provoost>I think it was the coin... The COLDPOWER.

00:01:34.440 --> 00:01:35.380
<v Aaron van Wirdum>No. But it's like a...

00:01:36.200 --> 00:01:37.660
<v Sjors Provoost>Oh, you mean the OPENDIME.

00:01:37.860 --> 00:01:38.860
<v Aaron van Wirdum>The OPENDIME.

00:01:38.960 --> 00:01:39.660
<v Sjors Provoost>The legend.

00:01:40.140 --> 00:01:45.040
<v Aaron van Wirdum>Yeah. Yes. Legendary. Legendary CoinKite. Thanks for sponsoring us.

00:01:46.320 --> 00:01:47.120
<v Aaron van Wirdum>Oh, my God.

00:01:47.440 --> 00:01:51.160
<v Sjors Provoost>I think the OPENDIME still doesn't support Taproot because I opened a pull

00:01:51.160 --> 00:01:55.320
<v Sjors Provoost>request once to make it use Taproot and they closed it because it wasn't

00:01:55.320 --> 00:01:56.860
<v Sjors Provoost>cockroach enough.

00:01:58.100 --> 00:01:58.660
<v Sjors Provoost>Anywho.

00:01:59.400 --> 00:01:59.880
<v Aaron van Wirdum>Anyways.

00:02:00.180 --> 00:02:01.900
<v Sjors Provoost>Let's talk about this obscure piece of software.

00:02:02.080 --> 00:02:07.360
<v Aaron van Wirdum>Oh, yeah. So I wanted to ask you, you know, okay, we're mostly going to be

00:02:07.360 --> 00:02:11.700
<v Aaron van Wirdum>making a drama-free episode here. You know, we're going to discuss what's

00:02:11.700 --> 00:02:13.140
<v Aaron van Wirdum>actually new in Bitcoin Core 30.

00:02:14.520 --> 00:02:20.160
<v Aaron van Wirdum>Like I said, it does seem like this has been probably the most controversial

00:02:20.160 --> 00:02:22.980
<v Aaron van Wirdum>Bitcoin Core release ever.

00:02:26.220 --> 00:02:32.160
<v Aaron van Wirdum>Social media community has been sort of ablaze over all of this. I

00:02:32.160 --> 00:02:37.060
<v Aaron van Wirdum>don't think I've seen it this bad since the block size wars and in some ways even

00:02:37.060 --> 00:02:42.500
<v Aaron van Wirdum>worse than the block size wars. And I'm just sort of wondering, you as a Bitcoin

00:02:42.500 --> 00:02:47.840
<v Aaron van Wirdum>Core developer, I know you're not on Twitter, you're not on X. How much are you

00:02:47.840 --> 00:02:52.840
<v Aaron van Wirdum>seeing of this or how much does it affect you and maybe others? Can you give some

00:02:52.840 --> 00:02:54.500
<v Aaron van Wirdum>sort of estimation of that?

00:02:55.120 --> 00:02:59.400
<v Sjors Provoost>Yeah, I guess compared to the block size wars, because the community was smaller

00:02:59.400 --> 00:03:02.560
<v Sjors Provoost>too, this is probably actually smaller in relative terms.

00:03:03.880 --> 00:03:09.360
<v Sjors Provoost>But it's just more money to be made and more attention to be had on social media.

00:03:09.740 --> 00:03:13.020
<v Sjors Provoost>Maybe social media is just worse than it was 10 years ago.

00:03:14.720 --> 00:03:20.460
<v Sjors Provoost>Yeah, like I said, I try to just ignore things as much as possible other than the

00:03:20.460 --> 00:03:26.300
<v Sjors Provoost>actual facts. because just arguing with people on Twitter or even Nostr is just a

00:03:26.300 --> 00:03:30.880
<v Sjors Provoost>huge energy drain. We did record a whole episode on probably the most

00:03:30.880 --> 00:03:34.200
<v Sjors Provoost>controversial part of it. That's our previous episode, The Return of the

00:03:34.200 --> 00:03:38.580
<v Sjors Provoost>OP_RETURN, so people can listen to that. And I don't think anything has changed,

00:03:38.600 --> 00:03:43.740
<v Sjors Provoost>although I think we'll address a couple of very minor things here.

00:03:44.720 --> 00:03:45.780
<v Sjors Provoost>in the release notes

00:03:45.780 --> 00:03:50.320
<v Aaron van Wirdum>yeah yeah but yeah i mean that's a good uh sort of non-spoiler warning maybe

00:03:50.320 --> 00:03:54.660
<v Aaron van Wirdum>we're not gonna spend half an hour discussing this change because we made a whole

00:03:54.660 --> 00:04:00.480
<v Aaron van Wirdum>episode about it anyone who wants to know how Sjors thinks about

00:04:00.480 --> 00:04:05.220
<v Aaron van Wirdum>that or me i can go to the previous episodes uh previous episodes and that's

00:04:05.220 --> 00:04:07.920
<v Aaron van Wirdum>where we really discussed the you know the OP_RETURN limit change

00:04:07.920 --> 00:04:13.360
<v Sjors Provoost>well now i would say uh if you look at um say the github repo and you know 99

00:04:13.970 --> 00:04:17.130
<v Sjors Provoost>percent of the work on Bitcoin Core is completely unrelated to these

00:04:17.130 --> 00:04:23.130
<v Sjors Provoost>controversial changes. And that work just continues as before. It's interesting

00:04:23.130 --> 00:04:28.970
<v Sjors Provoost>how, you know, there's like 350 open pull requests on the GitHub repo and

00:04:28.970 --> 00:04:33.930
<v Sjors Provoost>they're almost all like silos. So one pull request can be super crowded and noisy

00:04:33.930 --> 00:04:37.010
<v Sjors Provoost>and the other one is completely deserted and nobody's even looking at it.

00:04:37.660 --> 00:04:38.140
<v Aaron van Wirdum>Yeah.

00:04:38.840 --> 00:04:42.860
<v Sjors Provoost>I think I've made the analogy before that the Bitcoin Core project sometimes

00:04:42.860 --> 00:04:48.200
<v Sjors Provoost>feels like you have a very large brutalist office building and everybody has a

00:04:48.200 --> 00:04:52.540
<v Sjors Provoost>little cubicle. And if you're in that cubicle, your pull request is like a

00:04:52.540 --> 00:04:56.880
<v Sjors Provoost>cubicle. You might be in multiple cubicles, I guess. But if nobody comes by, then

00:04:56.880 --> 00:04:58.060
<v Sjors Provoost>nobody can hear you.

00:04:58.440 --> 00:05:03.710
<v Aaron van Wirdum>Yeah. Okay, well, regardless, let's actually kick off with that specific topic

00:05:03.710 --> 00:05:09.230
<v Aaron van Wirdum>just to get it out of the way. So the OP_RETURN policy limit has been

00:05:09.230 --> 00:05:11.630
<v Aaron van Wirdum>lifted basically entirely, right?

00:05:14.080 --> 00:05:19.280
<v Aaron van Wirdum>Again, I think we've said enough about that. Anyone who wants to know the details

00:05:19.280 --> 00:05:23.880
<v Aaron van Wirdum>about that can go to the previous episode. However, there is also another related

00:05:23.880 --> 00:05:29.580
<v Aaron van Wirdum>change that's close to it, but that we did not discuss in the previous episode.

00:05:31.060 --> 00:05:34.340
<v Aaron van Wirdum>I think there's also a policy...

00:05:35.570 --> 00:05:40.790
<v Aaron van Wirdum>policy rule is that it's now also possible besides bigger OP_RETURNs to include

00:05:40.790 --> 00:05:45.370
<v Aaron van Wirdum>multiple OP_RETURNs in one transaction, right? We did not cover that last time.

00:05:45.750 --> 00:05:50.850
<v Sjors Provoost>I'm not sure if we did, but we can just repeat it. Yes. So you can either make

00:05:50.850 --> 00:05:55.210
<v Sjors Provoost>one OP_RETURN that is the maximum size of a transaction or less, or you can make

00:05:55.210 --> 00:06:00.270
<v Sjors Provoost>multiple ones, which, you know, can ultimately add up to the same size.

00:06:00.820 --> 00:06:02.380
<v Aaron van Wirdum>Yeah, that's important to note.

00:06:02.660 --> 00:06:05.000
<v Sjors Provoost>I would say that's mostly a simplification.

00:06:06.770 --> 00:06:11.950
<v Aaron van Wirdum>Well, it's important to note because, you know, in this entire shitstorm, it has

00:06:11.950 --> 00:06:17.810
<v Aaron van Wirdum>been brought up as well as like another supposedly bad thing

00:06:17.810 --> 00:06:23.210
<v Aaron van Wirdum>that Bitcoin Core developers have done. But as you point out, even if there are

00:06:23.210 --> 00:06:28.140
<v Aaron van Wirdum>multiple OP_RETURNs in a transaction, the

00:06:28.140 --> 00:06:34.040
<v Aaron van Wirdum>total size of these OP_RETURN, are still bound to whatever the limit is and

00:06:34.040 --> 00:06:37.980
<v Aaron van Wirdum>this limit even in Bitcoin Core is still configurable right uh

00:06:38.680 --> 00:06:42.200
<v Sjors Provoost>yeah so we kind of went back and forth on that the initial idea was to completely

00:06:42.200 --> 00:06:45.620
<v Sjors Provoost>drop it because it's essentially a placebo but you know there was a lot of drama

00:06:45.620 --> 00:06:50.160
<v Sjors Provoost>so eventually i think now the default has been changed like there's no limit but

00:06:50.160 --> 00:06:54.420
<v Sjors Provoost>if you do set a limit the only difference between now and before is that the

00:06:54.420 --> 00:06:59.740
<v Sjors Provoost>limit applies to the total for transactions so Let's say you set the limit to 83

00:06:59.740 --> 00:07:05.300
<v Sjors Provoost>bytes. That was, I think, the previous default. Then somebody could make, I

00:07:05.300 --> 00:07:10.460
<v Sjors Provoost>guess, you know, 20 OP_RETURNs of two bytes each if they somehow wanted to. Now,

00:07:10.520 --> 00:07:14.300
<v Sjors Provoost>that'd be pretty expensive for them because every output has an overhead.

00:07:15.170 --> 00:07:19.010
<v Aaron van Wirdum>Yeah, I'm pointing it out because there was a point of critique, as I mentioned,

00:07:19.270 --> 00:07:22.790
<v Aaron van Wirdum>that, okay, you can change the default setting now. You can change it back to

00:07:22.790 --> 00:07:27.710
<v Aaron van Wirdum>where it was. But the critique was, but now you can still include multiple

00:07:27.710 --> 00:07:32.770
<v Aaron van Wirdum>OP_RETURNs in a transaction. However, the point is that if you do change it back

00:07:32.770 --> 00:07:37.470
<v Aaron van Wirdum>to, let's say, 83 bytes, then if you then put multiple OP_RETURNs in a

00:07:37.470 --> 00:07:43.150
<v Aaron van Wirdum>transaction, then their combined size can still only be 83 bytes. So even if you

00:07:43.150 --> 00:07:47.510
<v Aaron van Wirdum>change it... If you do change the defaults for whatever reason you may think you

00:07:47.510 --> 00:07:52.830
<v Aaron van Wirdum>want to do that, then that is still the actual limit for OP_RETURNs.

00:07:53.110 --> 00:07:57.210
<v Aaron van Wirdum>Yeah, you can split it up in two different OP_RETURNs, but it's still 83 bytes in

00:07:57.210 --> 00:07:58.330
<v Aaron van Wirdum>that case, right?

00:07:59.150 --> 00:07:59.430
<v Sjors Provoost>Mm-hmm.

00:07:59.870 --> 00:08:04.770
<v Aaron van Wirdum>Yeah, okay. So then why you said the change was made, and I'm talking again

00:08:04.770 --> 00:08:09.590
<v Aaron van Wirdum>specifically about the fact that you can include multiple OP_RETURNs, that was

00:08:09.590 --> 00:08:10.790
<v Aaron van Wirdum>made as a simplification?

00:08:12.220 --> 00:08:16.540
<v Sjors Provoost>Yeah, I mean, it depends on how you look at it, I guess. But the idea was there

00:08:16.540 --> 00:08:19.940
<v Sjors Provoost>can only be one, so that restriction is dropped. Now it doesn't matter how many

00:08:19.940 --> 00:08:24.240
<v Sjors Provoost>outputs are OP_RETURNs. So the rules are simplified. Whether that actually is

00:08:24.240 --> 00:08:27.920
<v Sjors Provoost>simpler in the code, that's debatable, right? Now you have to check the total

00:08:27.920 --> 00:08:31.780
<v Sjors Provoost>against multiple outputs. As long as the option is there at all, there's some

00:08:31.780 --> 00:08:34.820
<v Sjors Provoost>complexity. As long as you remove the option, it becomes simpler because you're

00:08:34.820 --> 00:08:39.180
<v Sjors Provoost>just not counting it at all. But now, you know, it has to count, like look at the

00:08:39.180 --> 00:08:41.980
<v Sjors Provoost>first output, look at the second output, look at the third output, and then

00:08:41.980 --> 00:08:43.740
<v Sjors Provoost>complain when something goes over it.

00:08:45.320 --> 00:08:49.640
<v Aaron van Wirdum>And because, you know, because we're talking about a policy rule, you know, just

00:08:49.640 --> 00:08:53.900
<v Aaron van Wirdum>to repeat this point, it does not apply to the consensus rules. If your node

00:08:53.900 --> 00:08:57.340
<v Aaron van Wirdum>receives a block with a transaction in it that has...

00:08:58.800 --> 00:09:03.280
<v Aaron van Wirdum>you know, bigger OP_RETURNs than whatever setting you're switching it to, then

00:09:03.280 --> 00:09:04.280
<v Aaron van Wirdum>you'll still accept that.

00:09:04.900 --> 00:09:08.880
<v Sjors Provoost>Yeah, in fact, you know, a block could contain a four megabyte OP_RETURN in a

00:09:08.880 --> 00:09:12.800
<v Sjors Provoost>single transaction, right? Which would not be even possible with the new Bitcoin

00:09:12.800 --> 00:09:13.820
<v Sjors Provoost>Core over the mempool.

00:09:14.420 --> 00:09:14.560
<v Aaron van Wirdum>Yeah.

00:09:15.420 --> 00:09:18.400
<v Sjors Provoost>Each transaction is limited to 100 kilobyte in general.

00:09:18.830 --> 00:09:23.830
<v Aaron van Wirdum>Yeah, so what is technically new in this specific instance is that there can now

00:09:23.830 --> 00:09:29.130
<v Aaron van Wirdum>be multiple OP_RETURNs in a transaction on whatever size you want to put that

00:09:29.130 --> 00:09:33.730
<v Aaron van Wirdum>setting. And then if it's within that size, you will accept it in your mempool

00:09:33.730 --> 00:09:35.290
<v Aaron van Wirdum>and relay it to other nodes, correct?

00:09:35.950 --> 00:09:40.470
<v Sjors Provoost>Yes. And so just a little bit more background on why, you know, such as, I mean,

00:09:40.570 --> 00:09:44.510
<v Sjors Provoost>first of all, if the setting was entirely removed, which was the initial idea,

00:09:44.710 --> 00:09:46.070
<v Sjors Provoost>it's actually a simplification.

00:09:47.370 --> 00:09:50.510
<v Sjors Provoost>But because the setting is still there, we still need to look at the total. So

00:09:50.510 --> 00:09:53.990
<v Sjors Provoost>you could argue it's not really a simplification, but it is in the long run. But

00:09:53.990 --> 00:09:57.890
<v Sjors Provoost>another reason to do this is because if somebody has a need to have multiple

00:09:57.890 --> 00:10:02.750
<v Sjors Provoost>OP_RETURNs, and I don't know if anybody does at the moment, but if they do, and

00:10:02.750 --> 00:10:08.310
<v Sjors Provoost>we still have this limit of one OP_RETURN output per

00:10:08.310 --> 00:10:12.290
<v Sjors Provoost>transaction, then there is another incentive for people to go outside the

00:10:12.290 --> 00:10:16.770
<v Sjors Provoost>mempool. And you use accelerators, which creates the centralization pressure that

00:10:16.770 --> 00:10:18.270
<v Sjors Provoost>we tried to solve in the first place.

00:10:18.710 --> 00:10:24.290
<v Aaron van Wirdum>Yeah. And on that point, what I also find interesting

00:10:24.290 --> 00:10:29.650
<v Aaron van Wirdum>to sort of highlight here is that your reasoning... So you

00:10:29.650 --> 00:10:35.340
<v Aaron van Wirdum>said... We don't know if there's a use case for it. Maybe there isn't. That in

00:10:35.340 --> 00:10:39.680
<v Aaron van Wirdum>itself has drawn a lot of ire. There seem to be a lot of people that feel that

00:10:39.680 --> 00:10:43.560
<v Aaron van Wirdum>unless you can prove that there is a use case for it, you shouldn't make any

00:10:43.560 --> 00:10:46.660
<v Aaron van Wirdum>changes. While you, and I agree with you,

00:10:47.870 --> 00:10:53.750
<v Aaron van Wirdum>see it more as, well, if there's no harm, then what's the problem? If there's no

00:10:53.750 --> 00:10:56.710
<v Aaron van Wirdum>harm and you simplify the code, then that seems like an improvement.

00:10:57.990 --> 00:11:02.450
<v Sjors Provoost>Yeah, I guess in this case, where the confusion comes from is, or potentially

00:11:02.450 --> 00:11:07.200
<v Sjors Provoost>comes from, is that initially the idea was to drop the setting entirely. And

00:11:07.200 --> 00:11:12.700
<v Sjors Provoost>because we haven't dropped it entirely now, the simplicity argument isn't as strong.

00:11:14.160 --> 00:11:17.740
<v Sjors Provoost>But yeah, the problem with these alternative use cases is if you wait until

00:11:17.740 --> 00:11:22.360
<v Sjors Provoost>they're actually fully deployed... and they go around the mempool because, you

00:11:22.360 --> 00:11:27.000
<v Sjors Provoost>know, they're already deployed. Now you lift the limit and, well, they're already

00:11:27.000 --> 00:11:30.760
<v Sjors Provoost>going around the mempool. So, you know, why would they change anything? So you

00:11:30.760 --> 00:11:33.900
<v Sjors Provoost>might be too late if you keep chasing these things and Bitcoin Core only releases

00:11:33.900 --> 00:11:37.820
<v Sjors Provoost>once every six months. And we'll have another topic on the list where something

00:11:37.820 --> 00:11:42.600
<v Sjors Provoost>similar happens where it was a response to actual behavior. So we were a little

00:11:42.600 --> 00:11:44.620
<v Sjors Provoost>bit late at this time, I guess.

00:11:45.000 --> 00:11:48.860
<v Aaron van Wirdum>Yeah, yeah. So if you're being reactive on these things, you're actually too

00:11:48.860 --> 00:11:53.420
<v Aaron van Wirdum>late. And then if there's no harm in doing it, then it's better to just do it now

00:11:53.420 --> 00:11:55.080
<v Aaron van Wirdum>in case someone might need it.

00:11:55.540 --> 00:11:59.600
<v Sjors Provoost>Especially because the total amount doesn't change, right? Like you said, you can

00:11:59.600 --> 00:12:00.680
<v Sjors Provoost>spread it over multiple outputs.

00:12:01.020 --> 00:12:01.360
<v Aaron van Wirdum>Yeah.

00:12:02.800 --> 00:12:08.160
<v Aaron van Wirdum>Yeah, okay, let's move on from that point. Anyone who was listening specifically

00:12:08.160 --> 00:12:12.200
<v Aaron van Wirdum>to hear more about the OP_RETURN drama can now switch off because we're going to

00:12:12.200 --> 00:12:17.840
<v Aaron van Wirdum>talk about other interesting, notable improvements in Bitcoin Core 30, right? Or

00:12:17.840 --> 00:12:19.540
<v Aaron van Wirdum>was there anything else you wanted to say about this?

00:12:20.300 --> 00:12:23.820
<v Sjors Provoost>Yes, but I was just changing the sequence of

00:12:24.040 --> 00:12:27.800
<v Sjors Provoost>items on our to-do list.

00:12:32.890 --> 00:12:35.330
<v Sjors Provoost>All right, let's talk about the minimum relay fee then.

00:12:37.860 --> 00:12:42.200
<v Sjors Provoost>Because that's sort of in the same area of changes. And then we'll move on to

00:12:42.200 --> 00:12:43.360
<v Sjors Provoost>completely different changes.

00:12:44.280 --> 00:12:48.720
<v Aaron van Wirdum>Okay. It was very important to adjust that in the Google Doc that no one else

00:12:48.720 --> 00:12:53.160
<v Aaron van Wirdum>will see besides you and me. Good thing that you did that. Exactly.

00:12:54.300 --> 00:13:00.020
<v Aaron van Wirdum>Okay. So yeah, so this is another policy change,

00:13:00.260 --> 00:13:05.860
<v Aaron van Wirdum>which, okay, so that's the minimum fee that is included in the

00:13:05.860 --> 00:13:11.720
<v Aaron van Wirdum>transaction, can now be lower before Bitcoin Core node will accept it in the

00:13:11.720 --> 00:13:13.540
<v Aaron van Wirdum>mempool and relay it to other nodes, right?

00:13:13.820 --> 00:13:18.100
<v Sjors Provoost>Yeah, so it used to be one satoshi per vbyte, now it's a 0.1 satoshi per vbyte.

00:13:18.490 --> 00:13:24.190
<v Sjors Provoost>And this is a case of people start doing things and Bitcoin Core has to follow.

00:13:24.370 --> 00:13:26.390
<v Sjors Provoost>Otherwise, everybody will go around the mempool.

00:13:28.280 --> 00:13:32.580
<v Sjors Provoost>So what started happening is because the fee market is such an amazing success.

00:13:34.320 --> 00:13:40.230
<v Sjors Provoost>Yeah, people wanted to pay less fees. And well, like I said, I'm not on social

00:13:40.230 --> 00:13:44.050
<v Sjors Provoost>media myself at the moment. But what my understanding is that there was sort of a

00:13:44.050 --> 00:13:49.180
<v Sjors Provoost>Twitter movement to... for people to individually configure their relay fee to go

00:13:49.180 --> 00:13:50.940
<v Sjors Provoost>lower by factor 10.

00:13:51.200 --> 00:13:52.220
<v Aaron van Wirdum>Yeah, and that was...

00:13:52.220 --> 00:13:54.060
<v Sjors Provoost>Somebody just followed that example.

00:13:54.920 --> 00:13:59.940
<v Aaron van Wirdum>And so that was... Sure, that was always possible with Bitcoin Core. Any

00:13:59.940 --> 00:14:05.580
<v Aaron van Wirdum>individual user could already lower the min relay fee.

00:14:05.900 --> 00:14:09.750
<v Sjors Provoost>Yeah, it's a matter of changing a setting. Now, keep in mind, everything is

00:14:09.750 --> 00:14:13.230
<v Sjors Provoost>possible with Bitcoin Core if you recompile it yourself. But in this case, it's

00:14:13.230 --> 00:14:17.890
<v Sjors Provoost>just a matter of changing a setting. So you can already lower it to one

00:14:17.890 --> 00:14:22.770
<v Sjors Provoost>thousandth of a satoshi per vbyte. Not lower, because the amounts internally are

00:14:22.770 --> 00:14:26.710
<v Sjors Provoost>processed at that resolution. So you'd have to do some more changes if you want

00:14:26.710 --> 00:14:27.630
<v Sjors Provoost>to go even lower than that.

00:14:29.090 --> 00:14:34.540
<v Sjors Provoost>But I guess, yeah, people settled on about 10x lower. And some miners followed,

00:14:34.600 --> 00:14:37.980
<v Sjors Provoost>and that means these things get mined. But that means if you don't change your

00:14:37.980 --> 00:14:41.360
<v Sjors Provoost>default setting, now you're kind of surprised about what gets into blocks.

00:14:42.840 --> 00:14:47.560
<v Sjors Provoost>And that surprise hurts compact block relay, among other things. So

00:14:47.560 --> 00:14:52.580
<v Sjors Provoost>we talked about compact block relay in our previous episode. But generally the

00:14:52.580 --> 00:14:57.300
<v Sjors Provoost>idea is that if you're sending a block to the next person down the line, to one

00:14:57.300 --> 00:15:01.410
<v Sjors Provoost>of your peers, If you know what's in their mempool, you really only need to send

00:15:01.410 --> 00:15:05.270
<v Sjors Provoost>the header of the block and a summary of the transactions, like a list of the

00:15:05.270 --> 00:15:10.810
<v Sjors Provoost>transaction IDs, rather than the full block with all its contents. But if you

00:15:10.810 --> 00:15:13.310
<v Sjors Provoost>don't know what's in somebody else's mempool because they changed some setting,

00:15:13.670 --> 00:15:17.870
<v Sjors Provoost>now you have to send the whole block over. And so this delays propagation network-wide.

00:15:18.510 --> 00:15:23.190
<v Aaron van Wirdum>Yeah, it's better for the health of the network if blocks find their way across

00:15:23.190 --> 00:15:29.010
<v Aaron van Wirdum>the entire network as fast as possible. And that requires... that mempools

00:15:29.010 --> 00:15:34.530
<v Aaron van Wirdum>closely reflect the actual blocks that are being mined. So if for whatever

00:15:34.530 --> 00:15:40.350
<v Aaron van Wirdum>reason, the blocks start to look different, in this case, because very

00:15:40.350 --> 00:15:45.930
<v Aaron van Wirdum>low fee transactions start to make their way to miners, then it's actually better

00:15:45.930 --> 00:15:51.810
<v Aaron van Wirdum>for the health of the network that everyone adapts the same behavior. So

00:15:51.810 --> 00:15:56.400
<v Aaron van Wirdum>in this case, Bitcoin... in this case, and also very relevant to the OP_RETURN

00:15:56.400 --> 00:16:01.800
<v Aaron van Wirdum>issue, but in this case as well, Bitcoin Core has decided to

00:16:01.800 --> 00:16:07.540
<v Aaron van Wirdum>allow lower fee transactions in the mempool and relay it to other

00:16:07.540 --> 00:16:11.680
<v Aaron van Wirdum>nodes in order to better reflect the mempool with blocks that are being found.

00:16:11.900 --> 00:16:12.460
<v Aaron van Wirdum>Good summary.

00:16:13.010 --> 00:16:18.250
<v Sjors Provoost>Yes, and so this has been a general theme now over a few different topics. We've

00:16:18.250 --> 00:16:22.430
<v Sjors Provoost>seen with RBF, full RBF, the changes. We've seen it with OP_RETURN. Now we're

00:16:22.430 --> 00:16:27.190
<v Sjors Provoost>seeing it with the fee rate. And the response has been slightly different in

00:16:27.190 --> 00:16:32.370
<v Sjors Provoost>different cases. So in the case of full RBF, you had somebody basically

00:16:32.370 --> 00:16:37.460
<v Sjors Provoost>promoting that concept, releasing an alternative client, and then Bitcoin Core

00:16:37.460 --> 00:16:43.350
<v Sjors Provoost>did not follow. until at some point, you know, all the miners or at least a large

00:16:43.350 --> 00:16:47.690
<v Sjors Provoost>chunk of the miners were doing this and compact block relay was broken. And so

00:16:47.690 --> 00:16:51.050
<v Sjors Provoost>then Bitcoin Core said, okay, let's turn RBF on. So arguably that was too late.

00:16:52.700 --> 00:16:57.340
<v Sjors Provoost>But because we already had broken compact block relay and, you know, the longer

00:16:57.340 --> 00:17:02.620
<v Sjors Provoost>you let that sort of centralization risk exist, you know, maybe at some point the

00:17:02.620 --> 00:17:07.350
<v Sjors Provoost>damage is irreversible. Probably not in this case. Okay, so then we had the

00:17:07.350 --> 00:17:13.310
<v Sjors Provoost>OP_RETURN stuff, where Bitcoin Core developers saw that a use case was

00:17:13.310 --> 00:17:19.310
<v Sjors Provoost>imminent and tried to preempt it. That caused an enormous amount of drama.

00:17:20.070 --> 00:17:26.070
<v Sjors Provoost>And now it's kind of in between, like this spontaneous change in policy by

00:17:26.070 --> 00:17:29.370
<v Sjors Provoost>users, and Bitcoin Core follows it just a month or two later.

00:17:30.720 --> 00:17:35.280
<v Sjors Provoost>Yeah, I don't think there's really consensus on how to best deal with this. Like

00:17:35.280 --> 00:17:39.540
<v Sjors Provoost>these three options, you can either be too early or too late or right on time.

00:17:40.060 --> 00:17:45.860
<v Sjors Provoost>And at some point, there might be a deviation from... from in

00:17:45.860 --> 00:17:51.500
<v Sjors Provoost>policy that is simply not acceptable, as in it would just be unsafe, cause a DoS

00:17:51.500 --> 00:17:55.740
<v Sjors Provoost>problem. And at that point, there's nothing Bitcoin Core can do other than

00:17:55.740 --> 00:18:00.320
<v Sjors Provoost>propose a consensus change or just accept that nodes are slow or vulnerable or

00:18:00.320 --> 00:18:04.280
<v Sjors Provoost>something bad like that. So it's not a healthy development, I think, but people

00:18:04.280 --> 00:18:07.060
<v Sjors Provoost>do what they do, right? It's an open source, open system.

00:18:07.910 --> 00:18:12.810
<v Aaron van Wirdum>Yeah, and I think that's an important point to emphasize here, because this says

00:18:12.810 --> 00:18:18.450
<v Aaron van Wirdum>a lot about how the Bitcoin Core project sort of operates, is

00:18:18.450 --> 00:18:23.960
<v Aaron van Wirdum>that... you know you guys you know you are one of the Bitcoin Core developers you

00:18:23.960 --> 00:18:29.300
<v Aaron van Wirdum>don't see yourselves as authorities that decide how other people can or even

00:18:29.300 --> 00:18:33.380
<v Aaron van Wirdum>should use the network it's not in your control how people what kind of

00:18:33.380 --> 00:18:39.200
<v Aaron van Wirdum>transactions people send or what kind of transactions miners mine Bitcoin Core

00:18:39.200 --> 00:18:45.190
<v Aaron van Wirdum>can only you know adjust to that so and then

00:18:45.190 --> 00:18:49.130
<v Aaron van Wirdum>like you said there are like a couple of ways to do that which is either sort of

00:18:49.130 --> 00:18:53.510
<v Aaron van Wirdum>you know do it in advance when you see it coming or only do it when it's kind of

00:18:53.510 --> 00:18:56.670
<v Aaron van Wirdum>too late and that's sort of the difficult aspect here to balance

00:18:56.670 --> 00:19:01.530
<v Sjors Provoost>or worse like you can't do it at all Because there might be some trade-off that's

00:19:01.530 --> 00:19:02.730
<v Sjors Provoost>really unacceptable.

00:19:03.410 --> 00:19:08.290
<v Aaron van Wirdum>Yeah. So this is a good example of that as well. Users were already starting to

00:19:08.290 --> 00:19:13.630
<v Aaron van Wirdum>relay very low fee transactions. Miners were already starting to mine that. So

00:19:13.630 --> 00:19:18.290
<v Aaron van Wirdum>then Bitcoin Core in this release said, okay, we're going to lower the fee

00:19:18.290 --> 00:19:20.470
<v Aaron van Wirdum>minimum in order to better.

00:19:20.830 --> 00:19:24.810
<v Sjors Provoost>And this change, I don't think this change is particularly bad because, you know,

00:19:24.950 --> 00:19:28.790
<v Sjors Provoost>the last time this limit was lowered, I think it was 10 sats per vbyte in the

00:19:28.790 --> 00:19:34.610
<v Sjors Provoost>past or maybe five, and the price has gone up 10,000x. So if you look at

00:19:34.610 --> 00:19:39.390
<v Sjors Provoost>this, you're going to have to look at it as a DoS, a denial of service

00:19:39.390 --> 00:19:45.110
<v Sjors Provoost>protection. If the minimum relay is too low, then somebody can just

00:19:45.110 --> 00:19:50.030
<v Sjors Provoost>cheaply cause you to use a lot of bandwidth, everyone to use a lot of bandwidth.

00:19:50.520 --> 00:19:54.600
<v Sjors Provoost>And so I think the initial calculation years ago was done on like, okay, if

00:19:54.600 --> 00:19:58.720
<v Sjors Provoost>somebody spins up a bunch of Amazon nodes and just starts flooding us with random

00:19:58.720 --> 00:20:03.920
<v Sjors Provoost>data, how much does it cost them versus how much does it cost the ecosystem?

00:20:04.700 --> 00:20:09.940
<v Sjors Provoost>How much cost does the attacker have and how much resources of the community are

00:20:09.940 --> 00:20:14.080
<v Sjors Provoost>they wasting if you add up everybody's node costs? And so I think we're still

00:20:14.080 --> 00:20:17.660
<v Sjors Provoost>quite on the safe side of that equation. It's really expensive.

00:20:18.920 --> 00:20:23.940
<v Sjors Provoost>For the attacker, they need to spend quite a lot of sats to cause people to use bandwidth.

00:20:25.310 --> 00:20:31.130
<v Aaron van Wirdum>Yeah, okay. One last note on this point, because I noticed that

00:20:31.130 --> 00:20:37.030
<v Aaron van Wirdum>in the GUI, that change, yeah, so in the user interface, that

00:20:37.030 --> 00:20:42.790
<v Aaron van Wirdum>change does not apply. Like the minimum fee if you want to send the transaction

00:20:42.790 --> 00:20:44.830
<v Aaron van Wirdum>is still the same as it ever was, right?

00:20:45.270 --> 00:20:49.960
<v Sjors Provoost>Technically, it's the wallet that's unaffected. So the wallet can be used from

00:20:49.960 --> 00:20:53.800
<v Sjors Provoost>the command line. You'd be surprised some people use it from the command line and

00:20:53.800 --> 00:20:54.360
<v Sjors Provoost>they like it.

00:20:56.860 --> 00:21:02.640
<v Sjors Provoost>But yeah, as far as I know, the wallet still has one sat per vbyte as a minimum.

00:21:02.880 --> 00:21:08.150
<v Sjors Provoost>I think you can manually set it lower. But my guess is the wallet will follow

00:21:08.150 --> 00:21:13.970
<v Sjors Provoost>in a later release. You kind of want to make sure that the network actually

00:21:13.970 --> 00:21:18.890
<v Sjors Provoost>relays your transaction, because let's say we change the wallet now to use this 0

00:21:18.890 --> 00:21:24.750
<v Sjors Provoost>.1 sat per vbyte, and you start your GUI, and you have maybe five peers, and

00:21:24.750 --> 00:21:29.520
<v Sjors Provoost>none of them have this custom setting. Because, you know, a lot of people do, but

00:21:29.520 --> 00:21:33.080
<v Sjors Provoost>not everybody does. So you might not be connected to anyone who does. So you sent

00:21:33.080 --> 00:21:37.560
<v Sjors Provoost>your 0.1 sats per vbyte transaction and it just gets rejected by your peers. And

00:21:37.560 --> 00:21:41.850
<v Sjors Provoost>they don't tell you it's rejected. So you just, you send it, you close your

00:21:41.850 --> 00:21:44.870
<v Sjors Provoost>wallet, you go to sleep and the next morning you're like, why isn't this

00:21:44.870 --> 00:21:48.170
<v Sjors Provoost>confirmed yet? It's because it never went anywhere because you only had your node

00:21:48.170 --> 00:21:52.130
<v Sjors Provoost>open for five minutes and none of your peers accepted your transaction. So you

00:21:52.130 --> 00:21:55.930
<v Sjors Provoost>kind of want to be a bit conservative when it comes to the wallet. But I think

00:21:55.930 --> 00:21:57.710
<v Sjors Provoost>you can just do it manually if you want to.

00:21:58.120 --> 00:22:03.680
<v Aaron van Wirdum>Right, so in that sense, Bitcoin Core actually also adjusts to the situation on

00:22:03.680 --> 00:22:08.460
<v Aaron van Wirdum>the network. It will only be implemented in the wallet once there's a good enough

00:22:08.460 --> 00:22:11.920
<v Aaron van Wirdum>likelihood that it will actually make its way through the network.

00:22:12.480 --> 00:22:15.920
<v Sjors Provoost>Yeah, and of course there's also a bottleneck of just the very small number of

00:22:15.920 --> 00:22:19.620
<v Sjors Provoost>people that work on the wallet in general in Bitcoin Core. I don't think we've

00:22:19.620 --> 00:22:24.480
<v Sjors Provoost>adjusted the new RBF... I don't think we've adjusted to the new RBF reality yet,

00:22:24.480 --> 00:22:24.900
<v Sjors Provoost>for example.

00:22:26.820 --> 00:22:28.020
<v Sjors Provoost>And there's some...

00:22:27.730 --> 00:22:28.430
<v Aaron van Wirdum>How so?

00:22:29.910 --> 00:22:32.430
<v Aaron van Wirdum>You can use RBF with Bitcoin Core, right?

00:22:33.590 --> 00:22:38.190
<v Sjors Provoost>Yeah, well, Bitcoin Core wallet has been setting the RBF flag for wallet

00:22:38.190 --> 00:22:42.690
<v Sjors Provoost>transactions for many years. We don't have to anymore because it's gone.

00:22:43.230 --> 00:22:45.610
<v Aaron van Wirdum>But there's also no harm in doing it, I guess.

00:22:46.210 --> 00:22:49.230
<v Sjors Provoost>No, and well, there's actually harm in turning it off.

00:22:49.850 --> 00:22:50.330
<v Aaron van Wirdum>Privacy?

00:22:51.150 --> 00:22:55.130
<v Sjors Provoost>Yeah, you can see who upgraded if we change this. And maybe something similar

00:22:55.130 --> 00:22:58.430
<v Sjors Provoost>applies to fee rates. If we suddenly drop it, then you can see who is upgraded.

00:22:59.150 --> 00:23:01.130
<v Sjors Provoost>So I'm not sure what the right path is there.

00:23:01.730 --> 00:23:05.070
<v Aaron van Wirdum>Right. Okay, let's move on to the next point.

00:23:05.550 --> 00:23:05.950
<v Sjors Provoost>Cool.

00:23:06.570 --> 00:23:12.150
<v Aaron van Wirdum>Actually, I think this is also, there's another policy issue. There's a new

00:23:12.150 --> 00:23:15.450
<v Aaron van Wirdum>policy rule, just correct me if I'm saying anything wrong, but there's a new

00:23:15.450 --> 00:23:20.490
<v Aaron van Wirdum>policy rule that restricts the number of signature operations, sigops.

00:23:20.960 --> 00:23:24.020
<v Aaron van Wirdum>Per transaction? Or no, per output, right?

00:23:24.520 --> 00:23:29.520
<v Sjors Provoost>Yeah. So we did a whole episode, 93, about the great consensus cleanup

00:23:29.520 --> 00:23:34.940
<v Sjors Provoost>restoration soft fork proposal, which deals with time warp attacks. And one of

00:23:34.940 --> 00:23:39.980
<v Sjors Provoost>the attacks that soft fork, proposed soft fork, is trying to deal with is...

00:23:40.560 --> 00:23:44.280
<v Sjors Provoost>preventing somebody from making a transaction that takes like an hour and a half

00:23:44.280 --> 00:23:48.500
<v Sjors Provoost>on a Raspberry Pi. Oh, sorry, to create a block that takes an hour and a half on

00:23:48.500 --> 00:23:53.740
<v Sjors Provoost>a Raspberry Pi to validate. And maybe several minutes on a modern computer.

00:23:54.220 --> 00:23:58.380
<v Sjors Provoost>Because if a malicious miner produces such a block,

00:23:58.950 --> 00:24:03.810
<v Sjors Provoost>they can stall their competition and maybe get a head start out of that.

00:24:06.190 --> 00:24:12.190
<v Sjors Provoost>And the way that was fixed involves that particular rule. So there's 2,500

00:24:12.190 --> 00:24:16.030
<v Sjors Provoost>sigops limit per, I think it's per transaction.

00:24:18.340 --> 00:24:24.140
<v Aaron van Wirdum>Okay, but just explain what it is. It means basically, if I understand

00:24:24.140 --> 00:24:29.140
<v Aaron van Wirdum>correctly, you can make a transaction or an output with what? So you're not sure

00:24:29.140 --> 00:24:31.520
<v Aaron van Wirdum>which of the two it is? It's either a transaction or an output?

00:24:31.520 --> 00:24:32.680
<v Sjors Provoost>I think it's...

00:24:34.010 --> 00:24:38.590
<v Sjors Provoost>It's per transaction, but what you're counting is you're counting sigops in the

00:24:38.590 --> 00:24:39.810
<v Sjors Provoost>inputs and in the outputs.

00:24:41.000 --> 00:24:46.340
<v Aaron van Wirdum>Okay, so there can be a maximum of 2,500 signatures, basically, in a transaction

00:24:46.340 --> 00:24:47.880
<v Aaron van Wirdum>then, right? That's what it means.

00:24:48.240 --> 00:24:51.040
<v Sjors Provoost>Yeah, signature operations is slightly different. So, for example,

00:24:52.680 --> 00:24:58.540
<v Sjors Provoost>a legacy multisig or bare multisig,

00:24:58.580 --> 00:25:04.440
<v Sjors Provoost>as we called it, I think it counts as 20. Something like that. I'm a little fuzzy

00:25:04.440 --> 00:25:07.620
<v Sjors Provoost>on the details here, but basically it's a limit in the number of signature

00:25:07.620 --> 00:25:12.740
<v Sjors Provoost>operations. No sane transaction would actually go over those limits. Like there’s no...

00:25:12.500 --> 00:25:14.780
<v Aaron van Wirdum>Because it's thousands, yeah.

00:25:15.320 --> 00:25:20.200
<v Sjors Provoost>Yeah, exactly. You'd need a very, very insane kind of multisig. So the only

00:25:20.200 --> 00:25:23.600
<v Sjors Provoost>people who would be making such a transaction are people trying to DoS the

00:25:23.600 --> 00:25:27.460
<v Sjors Provoost>network or people doing experiments. I think there were some historical examples

00:25:27.460 --> 00:25:30.600
<v Sjors Provoost>of these actually violating them.

00:25:32.350 --> 00:25:37.270
<v Aaron van Wirdum>Okay, so right now, if you make a transaction with 3,000 sigops,

00:25:37.750 --> 00:25:43.590
<v Aaron van Wirdum>it can still be mined in a block. It is still

00:25:43.590 --> 00:25:44.790
<v Aaron van Wirdum>consensus valid, correct?

00:25:44.950 --> 00:25:48.270
<v Sjors Provoost>Yeah, and that doesn't change, right? This is a policy change. The only thing

00:25:48.270 --> 00:25:49.750
<v Sjors Provoost>changes is you can't relay it anymore.

00:25:50.750 --> 00:25:55.090
<v Aaron van Wirdum>Right. So if someone sends a transaction like that to you and you're running

00:25:55.090 --> 00:25:58.590
<v Aaron van Wirdum>Bitcoin Core 30, then you're going to not include that in your mempool and not

00:25:58.590 --> 00:26:02.590
<v Aaron van Wirdum>relay it to other nodes. But if it's in a block, again, then that's still fine.

00:26:03.290 --> 00:26:06.710
<v Sjors Provoost>Yeah. And this is there to protect future miners. It's not really there to

00:26:06.710 --> 00:26:10.610
<v Sjors Provoost>protect the network because I don't think they're that terrible.

00:26:13.410 --> 00:26:18.890
<v Sjors Provoost>A future miner, when and if, or if and when this becomes a soft fork,

00:26:19.130 --> 00:26:23.670
<v Sjors Provoost>then it is consensus. And we don't want a miner to accidentally mine this thing.

00:26:23.990 --> 00:26:28.630
<v Sjors Provoost>And so that's one of the reasons, one of the goals of policy rules is to prevent

00:26:28.630 --> 00:26:32.760
<v Sjors Provoost>accidentally mining something. Because the miner doesn't accept it as a standard

00:26:32.760 --> 00:26:34.700
<v Sjors Provoost>transaction, they'll never see it, they'll never mine it.

00:26:35.160 --> 00:26:40.260
<v Aaron van Wirdum>Right, so it's kind of in anticipation of hopefully, potentially a future soft

00:26:40.260 --> 00:26:46.120
<v Aaron van Wirdum>fork to already sort of, you know, push network behavior kind of in that

00:26:46.120 --> 00:26:50.780
<v Aaron van Wirdum>direction so that when the soft fork happens, then it's a relatively small change

00:26:50.780 --> 00:26:53.640
<v Aaron van Wirdum>that can't really cause too much problems essentially, right?

00:26:54.560 --> 00:26:58.520
<v Sjors Provoost>Yeah, exactly. You want soft forks to be as safe as possible for users, but also

00:26:58.520 --> 00:26:59.000
<v Sjors Provoost>for miners.

00:26:59.550 --> 00:27:04.710
<v Aaron van Wirdum>Yeah, and I think also, so that ties in with, I guess, another point. We do

00:27:04.710 --> 00:27:10.230
<v Aaron van Wirdum>apparently keep getting back a little bit to the OP_RETURN issue. As a general

00:27:10.230 --> 00:27:15.770
<v Aaron van Wirdum>sort of direction, I think the goal of the Bitcoin Core project is to

00:27:15.770 --> 00:27:21.120
<v Aaron van Wirdum>essentially... you know, as much as possible, just get rid of policy rules and

00:27:21.120 --> 00:27:26.940
<v Aaron van Wirdum>make what nodes accept and relay as close as possible to the actual consensus

00:27:26.940 --> 00:27:28.200
<v Aaron van Wirdum>rules. Is that correct?

00:27:28.320 --> 00:27:33.320
<v Sjors Provoost>There is a philosophy that says that policy and consensus should converge.

00:27:33.600 --> 00:27:34.620
<v Aaron van Wirdum>Yeah, exactly.

00:27:34.940 --> 00:27:40.930
<v Sjors Provoost>I don't know if that's realistic, but... And one of the reasons is that

00:27:40.930 --> 00:27:46.910
<v Sjors Provoost>one of the use cases for policy is upgrades, upgrade hooks.

00:27:47.910 --> 00:27:53.770
<v Sjors Provoost>Upgrade hooks means that, say, SegWit version 2 or 3 or 4 currently is

00:27:53.770 --> 00:27:58.270
<v Sjors Provoost>not standard, so it will not be relayed. But it is consensus valid. It's just

00:27:58.270 --> 00:28:04.240
<v Sjors Provoost>that if you mine it, it has no meaning. So that's a case where we don't want them

00:28:04.240 --> 00:28:06.780
<v Sjors Provoost>to be the same because you would simply never be able to upgrade.

00:28:08.240 --> 00:28:08.840
<v Aaron van Wirdum>Sure, yeah.

00:28:09.320 --> 00:28:13.700
<v Sjors Provoost>So I get the philosophy of like, you don't want to have these pedantic limits, as

00:28:13.700 --> 00:28:19.040
<v Sjors Provoost>some people would call them, like the OP_RETURN size or RBF things. But it's not,

00:28:19.140 --> 00:28:23.330
<v Sjors Provoost>I don't think it's true that... consensus and policy cannot be identical because

00:28:23.330 --> 00:28:25.250
<v Sjors Provoost>you would never be able to upgrade Bitcoin anymore.

00:28:25.790 --> 00:28:27.940
<v Aaron van Wirdum>Yeah, you still got to leave the room for...

00:28:28.230 --> 00:28:31.050
<v Sjors Provoost>Or you'd make it, depending on how, you could also say, well, you'd make it

00:28:31.050 --> 00:28:36.590
<v Sjors Provoost>completely unsafe. So you could also say, well, let's just allow SegWit version 3

00:28:36.590 --> 00:28:40.990
<v Sjors Provoost>relay and not worry about it. But then people can shoot themselves in the foot

00:28:40.990 --> 00:28:46.540
<v Sjors Provoost>and give away their money because you would get a bc1f address.

00:28:47.180 --> 00:28:50.140
<v Sjors Provoost>which might be some future SegWit version. I don't know what the letter F maps

00:28:50.140 --> 00:28:54.380
<v Sjors Provoost>do. And you would just send to it and that money would just disappear and it

00:28:54.380 --> 00:28:55.240
<v Sjors Provoost>wouldn't even go to anyone.

00:28:57.010 --> 00:29:02.850
<v Aaron van Wirdum>Okay. Just to give our listeners a sort of rough idea, because

00:29:02.850 --> 00:29:04.810
<v Aaron van Wirdum>so now the limit is 2,500.

00:29:06.390 --> 00:29:12.150
<v Aaron van Wirdum>Like you mentioned, that is probably far beyond anything that anyone would ever

00:29:12.150 --> 00:29:14.870
<v Aaron van Wirdum>use for any real reason, essentially.

00:29:17.610 --> 00:29:22.870
<v Aaron van Wirdum>What kind of impact does this actually have on a node? Let's say this limit is

00:29:22.870 --> 00:29:28.130
<v Aaron van Wirdum>touched. There is a transaction that actually has 2,500 sigops. Are we talking

00:29:28.130 --> 00:29:33.690
<v Aaron van Wirdum>about a transaction that's going to stall your node with a second or not even

00:29:33.690 --> 00:29:36.490
<v Aaron van Wirdum>that? What sort of ballpark do you think about?

00:29:36.690 --> 00:29:41.070
<v Sjors Provoost>I haven't looked at the exact numbers, but my guess is it's negligible. This is

00:29:41.070 --> 00:29:44.810
<v Sjors Provoost>very safe for individual transactions. One of the reasons is that...

00:29:46.440 --> 00:29:52.390
<v Sjors Provoost>The policy, there's another policy limit which limits transactions to 100

00:29:52.390 --> 00:29:57.950
<v Sjors Provoost>,000 kilobytes. And so my guess would be that the combination of these

00:29:57.950 --> 00:30:02.770
<v Sjors Provoost>high numbers of sigops and a very large transaction are what really is more

00:30:02.770 --> 00:30:08.070
<v Sjors Provoost>dangerous. You've got to keep in mind that we have this quadratic phenomena in

00:30:08.070 --> 00:30:11.830
<v Sjors Provoost>Bitcoin. So quadratic hashing, that's what's solved with SegWit, but legacy

00:30:11.830 --> 00:30:12.690
<v Sjors Provoost>transactions still...

00:30:13.970 --> 00:30:19.530
<v Sjors Provoost>If you simplify it, if two transactions of

00:30:19.530 --> 00:30:25.410
<v Sjors Provoost>one kilobyte have like one bad each, it adds up to two

00:30:25.410 --> 00:30:30.440
<v Sjors Provoost>bad. But if you make it a two kilobyte transaction, it might be four bad.

00:30:31.000 --> 00:30:32.460
<v Aaron van Wirdum>It's bad times bad.

00:30:32.800 --> 00:30:36.440
<v Sjors Provoost>Yes. So if it's one big transaction, it's much worse than several small

00:30:36.440 --> 00:30:42.350
<v Sjors Provoost>transactions quadratically. And so... That's probably why an

00:30:42.350 --> 00:30:45.930
<v Sjors Provoost>individual transaction violating this policy limit is not going to be a problem,

00:30:45.970 --> 00:30:48.570
<v Sjors Provoost>but a miner could include a bigger one.

00:30:49.230 --> 00:30:54.970
<v Aaron van Wirdum>Right. But in any case, to summarize this, a transaction that has 2,500

00:30:54.970 --> 00:31:00.790
<v Aaron van Wirdum>sigops is both... very implausible to be used for any real reason, while at the

00:31:00.790 --> 00:31:06.750
<v Aaron van Wirdum>same time also still well within sort of safety limits. So that's why, at least

00:31:06.750 --> 00:31:08.330
<v Aaron van Wirdum>as a ballpark, that number was picked.

00:31:08.570 --> 00:31:14.490
<v Sjors Provoost>Well, yeah, and in general, the idea of this consensus cleanup thing is

00:31:14.490 --> 00:31:20.050
<v Sjors Provoost>to mitigate the worst case scenario without confiscating any

00:31:20.050 --> 00:31:23.390
<v Sjors Provoost>legitimate use case or getting anywhere near legitimate use cases.

00:31:23.590 --> 00:31:23.850
<v Aaron van Wirdum>Yeah.

00:31:24.190 --> 00:31:28.680
<v Sjors Provoost>So there is a trade-off. You might not. be able to solve like there might still

00:31:28.680 --> 00:31:33.700
<v Sjors Provoost>be blocks that are slow to validate but not as slow like you can't make it you

00:31:33.700 --> 00:31:37.640
<v Sjors Provoost>can't have a perfect solution because then you're going to start risking that you

00:31:37.640 --> 00:31:42.340
<v Sjors Provoost>confiscate somebody's very obscure but still potentially real setup

00:31:42.340 --> 00:31:47.670
<v Aaron van Wirdum>yeah Okay, let's move to the next point. An other

00:31:47.670 --> 00:31:53.430
<v Aaron van Wirdum>improvement is one parent, one child orphanage, or there's

00:31:53.430 --> 00:31:56.190
<v Aaron van Wirdum>something improved in that sense. Can you remind me what it is?

00:31:56.570 --> 00:32:02.310
<v Sjors Provoost>Yeah, we have covered this in previous episodes. But a quick recap is that

00:32:02.310 --> 00:32:08.150
<v Sjors Provoost>one parent, one child transactions packages are useful for especially

00:32:08.150 --> 00:32:09.270
<v Sjors Provoost>tools like Lightning.

00:32:10.500 --> 00:32:15.280
<v Sjors Provoost>So in the Lightning Network, when two people have a channel, they need to agree

00:32:15.280 --> 00:32:20.220
<v Sjors Provoost>on a forced close transaction or a penalty transaction. Basically, the

00:32:20.220 --> 00:32:24.080
<v Sjors Provoost>transaction that you can unilaterally close the channel with. So if you and I

00:32:24.080 --> 00:32:29.240
<v Sjors Provoost>have a channel and one of us is offline, we both have a transaction to... close

00:32:29.240 --> 00:32:32.560
<v Sjors Provoost>the transaction without talking to the other side but we have to decide how much

00:32:32.560 --> 00:32:36.720
<v Sjors Provoost>fees go into that transaction and we don't know how much fees the future is going

00:32:36.720 --> 00:32:40.560
<v Sjors Provoost>to hold so that's always been a bit of a complexity in lightning and the general

00:32:40.560 --> 00:32:45.600
<v Sjors Provoost>solution to that is anchors where you like allow yourself to add a transaction

00:32:45.600 --> 00:32:47.420
<v Sjors Provoost>later a child's transaction later

00:32:48.630 --> 00:32:51.630
<v Sjors Provoost>And there were different mechanisms to do that, and a lot of them suffered from

00:32:51.630 --> 00:32:55.250
<v Sjors Provoost>pinning attacks where you would add a transaction, but somebody else would add

00:32:55.250 --> 00:32:58.390
<v Sjors Provoost>another one, and you wouldn't be able to bump it, and it would never get

00:32:58.390 --> 00:33:04.080
<v Sjors Provoost>confirmed, and you'd be too late, and people cry. But then people came up with

00:33:04.080 --> 00:33:08.160
<v Sjors Provoost>the concept of ephemeral dust, which is not the Finnish metal band,

00:33:08.820 --> 00:33:13.740
<v Sjors Provoost>which basically lets you make a transaction with a

00:33:13.740 --> 00:33:16.580
<v Sjors Provoost>zero-fee, zero-amount output.

00:33:18.020 --> 00:33:22.600
<v Sjors Provoost>And then the child spends that zero fee zero transaction output and pays whatever

00:33:22.600 --> 00:33:24.980
<v Sjors Provoost>fee is necessary and can decide that at the last moment.

00:33:25.360 --> 00:33:31.140
<v Aaron van Wirdum>Yeah, and to do that, you of course have to add some of your own coins then. And

00:33:31.140 --> 00:33:36.220
<v Aaron van Wirdum>basically what you're doing is you spend that zero amount output to yourself in

00:33:36.220 --> 00:33:40.580
<v Aaron van Wirdum>combination with some real money Bitcoin sats that you're sending to yourself.

00:33:40.780 --> 00:33:46.220
<v Aaron van Wirdum>And you include a fee in that new transaction. And if that, you know, now because

00:33:46.220 --> 00:33:50.060
<v Aaron van Wirdum>this is a new transaction, you basically know exactly how much fees you're

00:33:50.060 --> 00:33:52.800
<v Aaron van Wirdum>supposed to include for it to confirm within a reasonable time.

00:33:53.380 --> 00:33:58.960
<v Sjors Provoost>Yes, and you can replace it. if fees go up immediately. So that's a nice

00:33:58.960 --> 00:34:03.120
<v Sjors Provoost>solution. Normally, you're not allowed to relay a transaction that has a zero

00:34:03.120 --> 00:34:07.660
<v Sjors Provoost>fee, zero, that has no fees. In general, of course, that's not going to relay.

00:34:09.380 --> 00:34:13.020
<v Sjors Provoost>having an output with a zero amount is also not going to relay because we have a

00:34:13.020 --> 00:34:17.800
<v Sjors Provoost>dust limit there. The idea is that you can relay them as a package, a one child,

00:34:17.960 --> 00:34:22.700
<v Sjors Provoost>one parent transaction. So it's ephemeral dust because the dust exists, but it's

00:34:22.700 --> 00:34:26.720
<v Sjors Provoost>immediately spent and it always goes as a pair in the same block. So the block

00:34:26.720 --> 00:34:29.060
<v Sjors Provoost>never creates any dust, only the transaction does.

00:34:30.250 --> 00:34:36.010
<v Aaron van Wirdum>Yeah, the zero sat transaction is immediately, or output is immediately

00:34:36.010 --> 00:34:40.150
<v Aaron van Wirdum>spent in the same block. It's just, it's immediately gone, right? That's the point.

00:34:40.250 --> 00:34:40.370
<v Sjors Provoost>Yeah.

00:34:40.730 --> 00:34:42.970
<v Aaron van Wirdum>So what's the improvement in Bitcoin Core 30?

00:34:44.110 --> 00:34:48.090
<v Sjors Provoost>The improvement is that this mechanism under the hood relied on something called

00:34:48.090 --> 00:34:51.570
<v Sjors Provoost>the orphanage. And the orphanage is a way for Bitcoin Core to see, hey, I just

00:34:51.570 --> 00:34:55.830
<v Sjors Provoost>got a new transaction, but I don't know what the parent is. So I'm just going to

00:34:55.830 --> 00:34:59.110
<v Sjors Provoost>keep it for a little bit and then ask the peer for the parent.

00:35:00.690 --> 00:35:06.250
<v Aaron van Wirdum>Okay, so the orphanage is specifically for transactions that do make it to you

00:35:06.250 --> 00:35:10.390
<v Aaron van Wirdum>over the peer-to-peer network, but you don't see basically where it's coming from

00:35:10.390 --> 00:35:11.230
<v Aaron van Wirdum>on the blockchain.

00:35:11.930 --> 00:35:15.610
<v Sjors Provoost>Yeah, it's not spending anything you know. So you're like, tell me what the

00:35:15.610 --> 00:35:18.230
<v Sjors Provoost>parent is, and the peer sends it to you.

00:35:18.610 --> 00:35:19.430
<v Aaron van Wirdum>Right, right.

00:35:19.810 --> 00:35:25.680
<v Sjors Provoost>That mechanism has been around now for, I think, since version 29. The problem

00:35:25.680 --> 00:35:29.360
<v Sjors Provoost>with that mechanism is that it's very easy to attack. So you can flood the

00:35:29.360 --> 00:35:34.440
<v Sjors Provoost>orphanage basically with infinite child transactions. That can just be complete

00:35:34.440 --> 00:35:37.360
<v Sjors Provoost>garbage transactions because the node has no way to know that a child is a real

00:35:37.360 --> 00:35:42.720
<v Sjors Provoost>transaction. So it's essentially free to, you know, if you know what peer you

00:35:42.720 --> 00:35:48.580
<v Sjors Provoost>want to influence, you just, you know, just flood them with orphans

00:35:48.580 --> 00:35:52.840
<v Sjors Provoost>basically. And it's a first in first out system. So once a hundred orphans are

00:35:52.840 --> 00:35:57.140
<v Sjors Provoost>there, you just replace all 100 of them and there's no orphans anymore. And so

00:35:57.140 --> 00:36:02.660
<v Sjors Provoost>this relay mechanism doesn't work. So I guess in the lightning scenario, if you

00:36:02.660 --> 00:36:07.280
<v Sjors Provoost>are trying to attack your counterparty and you roughly know what peers they're

00:36:07.280 --> 00:36:12.830
<v Sjors Provoost>connected to, maybe you can blast their orphanages out and

00:36:12.830 --> 00:36:17.710
<v Sjors Provoost>your peer will not be able to get their penalty transaction out. Something like

00:36:17.710 --> 00:36:18.610
<v Sjors Provoost>that. That would be the risk.

00:36:20.150 --> 00:36:25.790
<v Sjors Provoost>So version 30 makes the orphanage a lot stronger. It basically, well,

00:36:25.970 --> 00:36:31.870
<v Sjors Provoost>I don't understand the full mechanism, but it boils down to if one of your, let's

00:36:31.870 --> 00:36:36.290
<v Sjors Provoost>say you have 10 peers and one of your peers starts misbehaving by sending you

00:36:36.290 --> 00:36:40.870
<v Sjors Provoost>tons and tons of orphans, you're not just going to flush them all.

00:36:42.130 --> 00:36:47.300
<v Sjors Provoost>If another peer also sends you that orphan, you're going to hold on to it. So

00:36:47.300 --> 00:36:50.320
<v Sjors Provoost>there's just a better accounting system that makes it more difficult to attack

00:36:50.320 --> 00:36:50.920
<v Sjors Provoost>the orphanage.

00:36:51.970 --> 00:36:53.750
<v Aaron van Wirdum>Bitcoin Core is protecting the kids.

00:36:54.450 --> 00:36:56.910
<v Sjors Provoost>Exactly, yeah, yeah. Protect the children.

00:36:58.240 --> 00:37:02.000
<v Aaron van Wirdum>Okay, so the orphanage is more robust now. Next point.

00:37:04.020 --> 00:37:07.520
<v Sjors Provoost>Yes, there's a Bitcoin command, but I think that was a bit too nerdy. I don't

00:37:07.520 --> 00:37:08.360
<v Sjors Provoost>know if you cared about it.

00:37:09.650 --> 00:37:11.330
<v Aaron van Wirdum>Oh yeah, no, no, go for it though, yeah.

00:37:11.850 --> 00:37:15.610
<v Sjors Provoost>There's one command to rule them all. So there used to be bitcoind, bitcoin-qt,

00:37:15.810 --> 00:37:16.470
<v Sjors Provoost>Bitcoin...

00:37:19.260 --> 00:37:23.100
<v Sjors Provoost>Well, bitcoind and bitcoin-qt, basically. And then there's some other changes

00:37:23.100 --> 00:37:29.100
<v Sjors Provoost>coming up that would add bitcoin-node and bitcoin-gui. And, you know,

00:37:29.160 --> 00:37:31.760
<v Sjors Provoost>other developers are like, OK, this is becoming a confused mess. Somebody

00:37:31.760 --> 00:37:36.640
<v Sjors Provoost>downloads Bitcoin and they see like 15 commands that start with bitcoin.

00:37:39.020 --> 00:37:39.940
<v Sjors Provoost>What to do now?

00:37:44.130 --> 00:37:47.630
<v Sjors Provoost>And so the solution is to add another command, which is just called bitcoin.

00:37:48.940 --> 00:37:54.240
<v Sjors Provoost>And you call that command and you tell it what else to call. So it has a

00:37:54.240 --> 00:37:58.700
<v Sjors Provoost>documentation. You call bitcoin space node. It starts bitcoind.

00:37:59.350 --> 00:38:04.530
<v Aaron van Wirdum>There are 15 standards. That's too many standards. We need a standard to rule

00:38:04.530 --> 00:38:10.460
<v Aaron van Wirdum>them all. Now there are 16 standards. Yeah, exactly. So this is for

00:38:10.460 --> 00:38:15.660
<v Aaron van Wirdum>nerds that use the command line, which, as you said, a

00:38:15.660 --> 00:38:21.080
<v Aaron van Wirdum>command line doesn't exist for me. If it's not in the GUI, sure, I'm not aware of

00:38:21.080 --> 00:38:26.340
<v Aaron van Wirdum>its existence. I don't care about it, but this is for those people like yourself

00:38:26.340 --> 00:38:29.140
<v Aaron van Wirdum>that for some reason prefer to use that, right?

00:38:29.880 --> 00:38:30.360
<v Sjors Provoost>Yes.

00:38:31.000 --> 00:38:31.440
<v Aaron van Wirdum>Okay.

00:38:32.120 --> 00:38:34.020
<v Sjors Provoost>Well, one such user might be a miner.

00:38:36.410 --> 00:38:41.150
<v Aaron van Wirdum>Sure, I mean, I'm sure there's a lot of people that use it.

00:38:41.410 --> 00:38:43.450
<v Sjors Provoost>That was a bridge to the next topic.

00:38:44.030 --> 00:38:46.370
<v Aaron van Wirdum>Oh, so you're clever.

00:38:48.580 --> 00:38:50.020
<v Sjors Provoost>IPC mining interface.

00:38:50.780 --> 00:38:54.330
<v Aaron van Wirdum>Yeah, I don't remember what this was. Tell me.

00:38:54.300 --> 00:38:58.510
<v Sjors Provoost>Yeah, so we talked about Stratum v2 a couple episodes ago.

00:39:01.160 --> 00:39:06.120
<v Sjors Provoost>Well, we did. I think in multiple episodes. There has been the idea of, well,

00:39:06.220 --> 00:39:10.080
<v Sjors Provoost>decentralizing mining. Stratum V2 is one way to do that. It adds encryption, for

00:39:10.080 --> 00:39:14.600
<v Sjors Provoost>one thing, and it also adds the ability for individual miners to create their own

00:39:14.600 --> 00:39:17.080
<v Sjors Provoost>block templates. To kind of separate, you know.

00:39:20.440 --> 00:39:20.840
<v Sjors Provoost>And...

00:39:20.800 --> 00:39:26.560
<v Aaron van Wirdum>I mean, it's basically a way to decentralize mining pools, right? Miners on a

00:39:26.560 --> 00:39:29.060
<v Aaron van Wirdum>pool can, for themselves, decide what they put in blocks.

00:39:29.680 --> 00:39:32.960
<v Sjors Provoost>Yeah, and this mostly exists outside of Bitcoin Core. There's a project called

00:39:32.960 --> 00:39:38.080
<v Sjors Provoost>the Stratum Reference Implementation, SRI. They make all sorts of software tools

00:39:38.080 --> 00:39:43.920
<v Sjors Provoost>to run your own pool, to convert between Stratum v1 and Stratum v2, to

00:39:43.920 --> 00:39:47.990
<v Sjors Provoost>make your own block templates, etc. But they do need Bitcoin Core for one thing,

00:39:48.190 --> 00:39:53.150
<v Sjors Provoost>which is to make the block templates. And also to send the solution if you find a

00:39:53.150 --> 00:39:58.580
<v Sjors Provoost>block. And this part is called the template provider. And so the original idea

00:39:58.580 --> 00:40:03.200
<v Sjors Provoost>was for when the spec was written was for Bitcoin Core to be the template

00:40:03.200 --> 00:40:03.700
<v Sjors Provoost>provider.

00:40:04.300 --> 00:40:09.320
<v Aaron van Wirdum>Just to be very clear about this, templates basically just means everything that

00:40:09.320 --> 00:40:10.160
<v Aaron van Wirdum>goes into a block.

00:40:10.500 --> 00:40:13.080
<v Sjors Provoost>Except the solution for it. Yeah, except the nonce.

00:40:13.420 --> 00:40:14.740
<v Aaron van Wirdum>Except the hash, yeah, sure.

00:40:15.320 --> 00:40:16.400
<v Sjors Provoost>And the payout stuff.

00:40:18.050 --> 00:40:23.450
<v Sjors Provoost>Yeah, so Bitcoin Core is good at making templates, but the problem was that in

00:40:23.450 --> 00:40:27.030
<v Sjors Provoost>order for Bitcoin Core to do this, it would have to speak the Stratum v2

00:40:27.030 --> 00:40:32.930
<v Sjors Provoost>protocol. So it would have to support the same encryption standards and new

00:40:32.930 --> 00:40:38.760
<v Sjors Provoost>messages. And so this was implemented by me and a few others, and there was some

00:40:38.760 --> 00:40:43.020
<v Sjors Provoost>resistance to adding, basically to adding all this extra complexity, adding these

00:40:43.020 --> 00:40:48.650
<v Sjors Provoost>extra cryptographic methods. listening to ports and processing

00:40:48.650 --> 00:40:54.280
<v Sjors Provoost>messages, etc. So then a compromise was reached, which is that,

00:40:54.460 --> 00:40:59.760
<v Sjors Provoost>well, we'll have Bitcoin Core listen on a protocol we call IPC, Interprocess

00:40:59.760 --> 00:41:05.340
<v Sjors Provoost>Communication. And it's not directly supporting Stratum v2, but it does support

00:41:05.340 --> 00:41:08.820
<v Sjors Provoost>the messages that Stratum v2 needs, or it can give the information Stratum v2

00:41:08.820 --> 00:41:13.460
<v Sjors Provoost>needs. So it can give a block template, it can push a block template, etc.

00:41:14.340 --> 00:41:20.110
<v Sjors Provoost>And so... That's what's in version 30

00:41:20.110 --> 00:41:24.270
<v Sjors Provoost>of Bitcoin Core. And then you can use a separate application to connect to

00:41:24.270 --> 00:41:29.470
<v Sjors Provoost>Bitcoin Core and actually basically translate this to the actual Stratum V2

00:41:29.470 --> 00:41:30.090
<v Sjors Provoost>language.

00:41:30.530 --> 00:41:36.430
<v Aaron van Wirdum>Right. So let me repeat this back to you and see if I get it. So Stratum V2

00:41:36.430 --> 00:41:41.050
<v Aaron van Wirdum>is basically a different project. It's a mining specific project. It's like it

00:41:41.050 --> 00:41:46.870
<v Aaron van Wirdum>said, a way for... mining pools to decentralize

00:41:46.870 --> 00:41:52.750
<v Aaron van Wirdum>part of their operations, namely individual hashers, users of the pool,

00:41:52.870 --> 00:41:56.890
<v Aaron van Wirdum>miners, they can decide what goes into a block, which transactions go into a

00:41:56.890 --> 00:42:02.630
<v Aaron van Wirdum>block. But for that, they would actually use Bitcoin Core to

00:42:02.630 --> 00:42:07.210
<v Aaron van Wirdum>hear what transactions are on the network, et cetera, and use this to construct

00:42:07.210 --> 00:42:12.960
<v Aaron van Wirdum>essentially the block. And then... now there's kind of a bridge, a way to

00:42:12.960 --> 00:42:17.160
<v Aaron van Wirdum>connect with the Stratum v2 protocol in order to make it all work. Is that a good

00:42:17.160 --> 00:42:17.640
<v Aaron van Wirdum>enough summary?

00:42:18.400 --> 00:42:21.540
<v Sjors Provoost>Yeah, exactly. So there's a bridge between Bitcoin Core and the rest of the

00:42:21.540 --> 00:42:26.420
<v Sjors Provoost>Stratum v2 ecosystem, and it uses this new IPC system.

00:42:26.740 --> 00:42:27.240
<v Aaron van Wirdum>Right.

00:42:27.720 --> 00:42:30.760
<v Sjors Provoost>Which initially was intended for something completely different, namely the

00:42:30.760 --> 00:42:36.320
<v Sjors Provoost>separation of processes. So it was designed to split the node from the wallet and

00:42:36.320 --> 00:42:41.450
<v Sjors Provoost>from the GUI so that if one of them crashes, the other doesn't crash. And we

00:42:41.450 --> 00:42:44.510
<v Sjors Provoost>might still do that, but for now, we basically repurposed this tool.

00:42:45.210 --> 00:42:45.390
<v Aaron van Wirdum>Right.

00:42:47.050 --> 00:42:52.850
<v Aaron van Wirdum>So right now, the only mining pool that I'm aware of that uses Stratum v2 is

00:42:53.230 --> 00:42:57.250
<v Aaron van Wirdum>DEMAND pool, but they're kind of still in startup phase, I think.

00:42:57.350 --> 00:42:58.410
<v Sjors Provoost>And Braiins as well.

00:42:59.070 --> 00:43:00.030
<v Aaron van Wirdum>Do they use it?

00:43:00.330 --> 00:43:04.410
<v Sjors Provoost>Yes, but I don't think they do their own. I don't think they offer custom

00:43:04.410 --> 00:43:08.330
<v Sjors Provoost>templates. They just support the new technology. But that's already an

00:43:08.330 --> 00:43:14.300
<v Sjors Provoost>improvement, because if you're... If you run your ASIC farm and you connect to

00:43:14.300 --> 00:43:20.120
<v Sjors Provoost>any Stratum v1 pool now, your router or your internet provider or anyone can

00:43:20.120 --> 00:43:21.260
<v Sjors Provoost>just steal your hash rate.

00:43:22.580 --> 00:43:28.440
<v Aaron van Wirdum>Yeah, yeah, yeah. That's no good, Sjors. But Braiins does not, or

00:43:28.440 --> 00:43:31.880
<v Aaron van Wirdum>at least not yet, allow individual miners to construct their blocks.

00:43:32.180 --> 00:43:36.300
<v Sjors Provoost>I don't believe so. And DEMAND pool does plan to do that, but I don't think

00:43:36.300 --> 00:43:37.440
<v Sjors Provoost>they've actually launched this yet.

00:43:38.860 --> 00:43:40.420
<v Sjors Provoost>So there was a bit of a chicken egg.

00:43:40.420 --> 00:43:45.740
<v Aaron van Wirdum>I happen to know that they're getting close to sort of launching for real, basically.

00:43:46.280 --> 00:43:50.340
<v Sjors Provoost>Well, that's good news. It has been a bit of a chicken egg problem on the Bitcoin

00:43:50.340 --> 00:43:55.650
<v Sjors Provoost>Core side because shipping this new, even this new IPC interface was also

00:43:55.650 --> 00:44:00.350
<v Sjors Provoost>controversial, partially because nobody was using it yet. And so there's some

00:44:00.350 --> 00:44:03.990
<v Sjors Provoost>people that say, well, we should first thoroughly test it with the pools and et

00:44:03.990 --> 00:44:08.190
<v Sjors Provoost>cetera to make sure it's right and then ship it. Whereas the counter argument to

00:44:08.190 --> 00:44:11.130
<v Sjors Provoost>that is, well, the pools are not going to test it if it's not already shipped in

00:44:11.130 --> 00:44:15.090
<v Sjors Provoost>Bitcoin Core because it's too much of a pain for them to compile some custom

00:44:15.090 --> 00:44:19.150
<v Sjors Provoost>experimental version. And especially if they're not sure that it's actually going

00:44:19.150 --> 00:44:22.650
<v Sjors Provoost>to be deployed, right? They need to have at least some confidence.

00:44:23.470 --> 00:44:23.630
<v Aaron van Wirdum>Yeah.

00:44:23.950 --> 00:44:27.310
<v Sjors Provoost>There was that chicken egg, but now it's in the release, but it's not completely

00:44:27.310 --> 00:44:30.690
<v Sjors Provoost>final yet. So it might still make a few breaking changes in the next release.

00:44:31.610 --> 00:44:37.050
<v Aaron van Wirdum>Okay, so I was going to ask, is this completely good to go now, or is there still

00:44:37.050 --> 00:44:39.010
<v Aaron van Wirdum>work to be done on the Bitcoin Core side?

00:44:39.470 --> 00:44:43.170
<v Sjors Provoost>No, there's still [unclear]... I mean, it's usable, but I think it can be

00:44:43.170 --> 00:44:43.570
<v Sjors Provoost>improved.

00:44:44.010 --> 00:44:44.830
<v Aaron van Wirdum>Right, sure.

00:44:46.100 --> 00:44:51.250
<v Aaron van Wirdum>Okay, any last thoughts on this topic before we move to the last

00:44:51.250 --> 00:44:54.170
<v Aaron van Wirdum>one on our list?

00:44:54.350 --> 00:44:55.090
<v Sjors Provoost>No, let's move.

00:44:55.750 --> 00:44:58.550
<v Aaron van Wirdum>Okay, last one on our list is...

00:45:00.220 --> 00:45:01.720
<v Aaron van Wirdum>You explain this to me.

00:45:02.120 --> 00:45:07.280
<v Sjors Provoost>NAT-PMP and Port Control Protocol, PCP. We have covered this in earlier episodes.

00:45:08.220 --> 00:45:12.840
<v Sjors Provoost>It's a lonely world out there, especially if you run your node from a residential

00:45:12.840 --> 00:45:13.720
<v Sjors Provoost>place.

00:45:15.560 --> 00:45:20.900
<v Sjors Provoost>Typically, your router will block any connections to you. So your node can reach

00:45:20.900 --> 00:45:25.110
<v Sjors Provoost>the outside world, but the outside world cannot reach you. And there's various

00:45:25.110 --> 00:45:26.370
<v Sjors Provoost>methods that's often used.

00:45:26.690 --> 00:45:30.570
<v Aaron van Wirdum>It's a don't call us, we'll call you kind of logic.

00:45:30.990 --> 00:45:35.930
<v Sjors Provoost>Yes. And now, you know, in the world of gaming and torrents, et cetera, there

00:45:35.930 --> 00:45:39.690
<v Sjors Provoost>have already been methods developed to change that so that you can actually

00:45:39.690 --> 00:45:43.850
<v Sjors Provoost>listen to people connecting to you because there's some performance reasons that

00:45:43.850 --> 00:45:49.180
<v Sjors Provoost>you want to do that and other reasons why you want to do that. And Bitcoin Core

00:45:49.180 --> 00:45:54.390
<v Sjors Provoost>was using that from very early on, like 2012 or even earlier. But the method it

00:45:54.390 --> 00:45:58.150
<v Sjors Provoost>was using back then was unsafe. It was called UPnP. And so it was kind of turned

00:45:58.150 --> 00:46:01.330
<v Sjors Provoost>off by default. It's there. It's always been there, but it was off because there

00:46:01.330 --> 00:46:05.510
<v Sjors Provoost>were too many vulnerabilities in the software. And as of recently, we have a

00:46:05.510 --> 00:46:10.060
<v Sjors Provoost>brand new method. By brand new, I mean it's a 10-year-old standard probably,

00:46:10.360 --> 00:46:15.530
<v Sjors Provoost>called PCP, Port Control Protocol. It's been implemented from scratch in Bitcoin

00:46:15.530 --> 00:46:16.230
<v Sjors Provoost>Core itself.

00:46:18.570 --> 00:46:23.090
<v Sjors Provoost>And as of version 30, it's on by default. So that means if you install your node

00:46:23.090 --> 00:46:28.250
<v Sjors Provoost>freshly and if your router supports this protocol, which it may or may not, I

00:46:28.250 --> 00:46:33.860
<v Sjors Provoost>think a lot of modern routers will support it, your node is listening, which

00:46:33.860 --> 00:46:36.420
<v Sjors Provoost>means you're going to have a bit more connections and the network is going to be

00:46:36.420 --> 00:46:36.980
<v Sjors Provoost>more robust.

00:46:37.640 --> 00:46:43.350
<v Aaron van Wirdum>Yeah, so... Basically, normally, if you start up a node, then you can

00:46:43.350 --> 00:46:48.170
<v Aaron van Wirdum>connect to other nodes, but other nodes cannot connect to you, which means there

00:46:48.170 --> 00:46:54.050
<v Aaron van Wirdum>is essentially a subsection or a sub-community, whatever you want to call it, of

00:46:54.050 --> 00:46:59.730
<v Aaron van Wirdum>Bitcoin Core nodes that are providing more services or more connection to the

00:46:59.730 --> 00:47:00.990
<v Aaron van Wirdum>rest of the network than others.

00:47:01.250 --> 00:47:04.570
<v Sjors Provoost>Yeah, they're going to be better connected, and also there's a demand on those

00:47:04.570 --> 00:47:07.990
<v Sjors Provoost>nodes because... There's only a limited number of them and everybody wants to

00:47:07.990 --> 00:47:08.510
<v Sjors Provoost>connect to them.

00:47:08.790 --> 00:47:13.950
<v Aaron van Wirdum>Yeah, so it's a slightly centralizing factor, actually, that everyone sort of

00:47:13.950 --> 00:47:14.770
<v Aaron van Wirdum>initially...

00:47:14.770 --> 00:47:19.420
<v Sjors Provoost>I wouldn't say centralizing because there's plenty of them. But they could get

00:47:19.420 --> 00:47:25.400
<v Sjors Provoost>overloaded. If the ratio becomes too asymmetrical, then the few nodes

00:47:25.400 --> 00:47:27.220
<v Sjors Provoost>that are listening will get completely overwhelmed.

00:47:28.000 --> 00:47:33.940
<v Aaron van Wirdum>I didn't say centralized, but I would say that is a sort of centralizing

00:47:33.940 --> 00:47:38.320
<v Aaron van Wirdum>aspect, right? It's better if all nodes are sort of equal in that sense and

00:47:38.320 --> 00:47:42.060
<v Aaron van Wirdum>everyone helps each other rather than everyone relying on some subset.

00:47:42.620 --> 00:47:46.590
<v Sjors Provoost>It's better, but I don't think there was a risk of centralization here. But I do

00:47:46.590 --> 00:47:51.390
<v Sjors Provoost>think there's just a risk of overloading these resources. And part of the problem

00:47:51.390 --> 00:47:56.010
<v Sjors Provoost>is because we want to move away from... So Bitcoin nodes want to connect to a

00:47:56.010 --> 00:48:01.590
<v Sjors Provoost>diverse set of peers, not in the woke sense of the word, but in

00:48:01.590 --> 00:48:07.070
<v Sjors Provoost>as many places in the world, like different countries, different networks,

00:48:07.090 --> 00:48:10.910
<v Sjors Provoost>so that it's harder to trick you for one network operator to trick you.

00:48:12.810 --> 00:48:17.350
<v Sjors Provoost>There's a new project we talked about years ago in a podcast called ASMAP, where

00:48:17.350 --> 00:48:20.170
<v Sjors Provoost>we try to map the internet and then try to connect it really to different

00:48:20.170 --> 00:48:24.170
<v Sjors Provoost>countries, etc. And one of the side effects of that project is that we might

00:48:24.170 --> 00:48:30.070
<v Sjors Provoost>start connecting to very obscure places. And a lot of nodes

00:48:30.070 --> 00:48:32.890
<v Sjors Provoost>would start connecting to those very obscure places because they're trying to

00:48:32.890 --> 00:48:38.670
<v Sjors Provoost>diversify a bit too much. And then those, like you run in some random place in

00:48:38.670 --> 00:48:42.990
<v Sjors Provoost>South America. You have an internet provider with just one Bitcoin node in it,

00:48:43.190 --> 00:48:47.090
<v Sjors Provoost>and thousands of nodes try to connect to you because you are very unique and special.

00:48:49.210 --> 00:48:53.290
<v Sjors Provoost>And so if more nodes are listening, then hopefully on that obscure internet

00:48:53.290 --> 00:48:56.710
<v Sjors Provoost>provider, there's also going to be more nodes listening. So not all the traffic

00:48:56.710 --> 00:48:58.250
<v Sjors Provoost>just goes to that one listening node.

00:48:59.710 --> 00:49:05.600
<v Aaron van Wirdum>Yeah, okay. And this is... So what exactly is new in

00:49:05.600 --> 00:49:08.220
<v Aaron van Wirdum>Bitcoin Core? Like this is now just a thing or?

00:49:08.800 --> 00:49:12.080
<v Sjors Provoost>So this feature has been in there since the last version, but it's now on by

00:49:12.080 --> 00:49:17.240
<v Sjors Provoost>default. So if you upgrade and you didn't manually turn it on or manually turn it

00:49:17.240 --> 00:49:21.140
<v Sjors Provoost>off, it will be on. Then if you turn it off, it's not going to be turned on.

00:49:21.380 --> 00:49:23.060
<v Aaron van Wirdum>Then it can be called by the outside world.

00:49:23.580 --> 00:49:25.220
<v Sjors Provoost>If your router supports it, yes.

00:49:27.230 --> 00:49:31.230
<v Aaron van Wirdum>Okay. Do routers generally support this or what's the if there?

00:49:32.080 --> 00:49:36.760
<v Sjors Provoost>I'm not sure. We'll find out. It should be pretty clear in the stats that the

00:49:36.760 --> 00:49:40.660
<v Sjors Provoost>number of listening nodes would go up dramatically. Because at the moment, most

00:49:40.660 --> 00:49:44.440
<v Sjors Provoost>of the listening nodes are on Tor because the way people set up their Tor nodes

00:49:44.440 --> 00:49:50.360
<v Sjors Provoost>usually is such that they're also listening. So that's why some people

00:49:50.360 --> 00:49:53.500
<v Sjors Provoost>are saying, oh, the majority of Bitcoin nodes is on Tor. Well, that's not true.

00:49:53.600 --> 00:49:57.340
<v Sjors Provoost>The majority of listening Bitcoin nodes is on Tor. But that might no longer be

00:49:57.340 --> 00:49:57.960
<v Sjors Provoost>true eventually.

00:49:58.980 --> 00:49:59.500
<v Aaron van Wirdum>Right, right.

00:50:01.670 --> 00:50:03.690
<v Aaron van Wirdum>PCP is also a type of drugs.

00:50:05.180 --> 00:50:07.660
<v Sjors Provoost>That's not my expertise, but you tell me.

00:50:08.400 --> 00:50:08.880
<v Aaron van Wirdum>Coincidence?

00:50:09.200 --> 00:50:11.600
<v Sjors Provoost>I think every three-letter acronym probably is.

00:50:11.880 --> 00:50:12.360
<v Aaron van Wirdum>Okay.

00:50:14.920 --> 00:50:16.440
<v Aaron van Wirdum>I think we made it through the list, Sjors.

00:50:17.120 --> 00:50:20.440
<v Sjors Provoost>We did. Well, in that case, unless you have anything to add?

00:50:21.560 --> 00:50:26.120
<v Aaron van Wirdum>No, where can people find this? Where can people find Bitcoin Core 30?

00:50:26.960 --> 00:50:27.980
<v Sjors Provoost>BitcoinCore.org.

00:50:28.810 --> 00:50:30.570
<v Aaron van Wirdum>Okay. Thanks, Sjors.

00:50:30.690 --> 00:50:31.950
<v Sjors Provoost>Thank you for listening to Bitcoin

00:50:31.950 --> 00:50:33.370
<v Aaron van Wirdum>Explained.

