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

00:00:20.690 --> 00:00:22.850
<v Aaron van Wirdum>Live from Utrecht, this is Bitcoin

00:00:22.850 --> 00:00:24.270
<v Sjors Provoost>Explained.

00:00:24.590 --> 00:00:24.970
<v Aaron van Wirdum>Hey Sjors.

00:00:25.310 --> 00:00:25.650
<v Sjors Provoost>Hello.

00:00:26.570 --> 00:00:32.330
<v Aaron van Wirdum>Sjors, today we're going to cover another Ordinals related topic. Not

00:00:32.330 --> 00:00:36.630
<v Aaron van Wirdum>really, but I'm just giving you some context why I came up with this suggestion.

00:00:36.990 --> 00:00:40.930
<v Aaron van Wirdum>The reason is over the past couple of weeks I got the same question multiple

00:00:40.930 --> 00:00:44.710
<v Aaron van Wirdum>times. Once on a Twitter spaces and I think maybe

00:00:44.710 --> 00:00:50.590
<v Aaron van Wirdum>once or twice also just in a private conversation. and the

00:00:50.590 --> 00:00:55.670
<v Aaron van Wirdum>question is why is the witness discount there in the first place because that's

00:00:55.670 --> 00:01:00.050
<v Aaron van Wirdum>what Ordinals are using no well that's what inscriptions are using I should say

00:01:00.050 --> 00:01:03.950
<v Sjors Provoost>they're taking advantage of the fact that there is a witness discount Yeah.

00:01:03.950 --> 00:01:09.910
<v Aaron van Wirdum>Right, so I got the question why is the discount even there and that's the

00:01:09.910 --> 00:01:12.050
<v Aaron van Wirdum>question we're going to answer in this episode isn't that right

00:01:12.050 --> 00:01:14.370
<v Sjors Provoost>That sounds like a great question let's answer that.

00:01:14.370 --> 00:01:19.980
<v Aaron van Wirdum>But first everyone's favorite part of the episode Sjors stacks

00:01:19.980 --> 00:01:24.080
<v Aaron van Wirdum>sats. Sjors stacks sats. Sjors stacks sats.

00:01:24.080 --> 00:01:30.020
<v Sjors Provoost>Well, we have a very recursive sat this this week from ad fake for 12,837

00:01:30.020 --> 00:01:34.420
<v Sjors Provoost>sats saying Sjors stacks sats with a bunch of emojis.

00:01:34.420 --> 00:01:37.960
<v Aaron van Wirdum>You're not saying it right, just you gotta sing it

00:01:39.180 --> 00:01:43.840
<v Aaron van Wirdum>you gotta sing it No, it's your you're the one stacking sats you gotta sing it

00:01:43.840 --> 00:01:45.600
<v Aaron van Wirdum>you gotta read it out loud singing.

00:01:45.600 --> 00:01:46.860
<v Sjors Provoost>I don't sing.

00:01:46.860 --> 00:01:49.580
<v Aaron van Wirdum>Come on Sjors, everyone wants to hear this.

00:01:50.000 --> 00:01:50.760
<v Sjors Provoost>I don't sing.

00:01:51.810 --> 00:01:56.270
<v Aaron van Wirdum>All right. Well, do you want to tell our listeners how they can help you stack sats?

00:01:56.930 --> 00:02:00.630
<v Sjors Provoost>Yeah, they can use any of the podcasting 2.0 apps that do this.

00:02:00.930 --> 00:02:02.590
<v Aaron van Wirdum>And it's called boostagrams, right?

00:02:02.870 --> 00:02:02.990
<v Sjors Provoost>Yeah.

00:02:03.270 --> 00:02:08.440
<v Aaron van Wirdum>Okay. People can Google that. That was Sjors Stacks Sats.

00:02:09.150 --> 00:02:13.450
<v Aaron van Wirdum>Ordinals. No inscriptions. No witness discount. That's what we were.

00:02:13.690 --> 00:02:14.330
<v Sjors Provoost>That's right.

00:02:14.470 --> 00:02:14.830
<v Aaron van Wirdum>Okay. Yeah.

00:02:15.510 --> 00:02:15.950
<v Sjors Provoost>So...

00:02:16.270 --> 00:02:22.150
<v Aaron van Wirdum>also it's it's probably a good topic to cover an episode at this point

00:02:22.150 --> 00:02:27.950
<v Aaron van Wirdum>because when this was so the time this was discussed by now you know

00:02:27.950 --> 00:02:32.710
<v Aaron van Wirdum>it's been seven eight years Pieter Wuille to be exact proposed

00:02:32.710 --> 00:02:37.330
<v Aaron van Wirdum>SegWit which included the discount in December 2015

00:02:38.740 --> 00:02:43.980
<v Aaron van Wirdum>and then we had a couple of years of drama and block size wars and scaling all of

00:02:43.980 --> 00:02:49.450
<v Aaron van Wirdum>that and it was all discussed to death for a while but and SegWit

00:02:49.450 --> 00:02:55.010
<v Aaron van Wirdum>activated in 2017 so even that is almost six years ago by now so there's probably

00:02:55.010 --> 00:02:57.310
<v Aaron van Wirdum>a lot of people that weren't around by back then

00:02:57.310 --> 00:02:58.150
<v Sjors Provoost>That's right.

00:02:58.150 --> 00:03:03.710
<v Aaron van Wirdum>that know that there is a discount but just weren't there at the time and even

00:03:03.710 --> 00:03:09.390
<v Aaron van Wirdum>for us that's what I was saying when it was asked to me I could sort of answer it

00:03:09.390 --> 00:03:14.750
<v Aaron van Wirdum>but to really sort of answer this question properly you and I

00:03:14.750 --> 00:03:20.510
<v Aaron van Wirdum>you more than I went back way into the archives and you watched some old

00:03:20.510 --> 00:03:24.610
<v Aaron van Wirdum>presentations and tried to figure out what the reasoning was back then. Isn't that right?

00:03:24.890 --> 00:03:25.350
<v Sjors Provoost>That's right.

00:03:25.630 --> 00:03:31.190
<v Aaron van Wirdum>Okay, so before we get there, maybe we should first give a very brief

00:03:31.190 --> 00:03:34.550
<v Aaron van Wirdum>recap of what SegWit is?

00:03:34.910 --> 00:03:38.130
<v Sjors Provoost>Yeah, I think so. We did a whole episode about it. SegWit has many different

00:03:38.130 --> 00:03:42.090
<v Sjors Provoost>benefits, but the thing that we're focusing here on is that it was also a block

00:03:42.090 --> 00:03:47.440
<v Sjors Provoost>size increase and that it created the distinction between Well, it basically

00:03:47.440 --> 00:03:51.740
<v Sjors Provoost>splits the transaction into two parts. The main transaction, so to speak, and the

00:03:51.740 --> 00:03:56.700
<v Sjors Provoost>witness, which generally is the signature or stuff like a signature, like a hash

00:03:56.700 --> 00:04:01.480
<v Sjors Provoost>pre-image, things like that. And the thing that I guess people are asking about

00:04:01.480 --> 00:04:06.250
<v Sjors Provoost>is that these witness data, these signatures... are discounted so if you're you

00:04:06.250 --> 00:04:09.930
<v Sjors Provoost>know if you're making a transaction that's 300 bytes then you're you're paying

00:04:09.930 --> 00:04:13.170
<v Sjors Provoost>more for the part of the transaction that is not the witness than you are for the

00:04:13.170 --> 00:04:14.710
<v Sjors Provoost>part of the transaction that is the witness.

00:04:14.710 --> 00:04:20.160
<v Aaron van Wirdum>Yeah, maybe the other thing to mention about SegWit is I don't know if it was the

00:04:20.160 --> 00:04:24.920
<v Aaron van Wirdum>main reason but at least one of the big reasons what it was that it also made it

00:04:24.920 --> 00:04:28.240
<v Aaron van Wirdum>it fixed the malleability bug right? Well, we did an episode about this we don't…

00:04:28.240 --> 00:04:32.980
<v Sjors Provoost>Yeah, I mean that that is the exactly that was the main point of it it segregates

00:04:32.980 --> 00:04:35.740
<v Sjors Provoost>the witness and this fixes malleability. Yeah.

00:04:37.340 --> 00:04:40.480
<v Aaron van Wirdum>I mean was it the main point I don't think it really matters at this point but

00:04:40.480 --> 00:04:45.380
<v Aaron van Wirdum>there were definitely two main reasons right malleability for Lightning and then

00:04:45.380 --> 00:04:51.340
<v Aaron van Wirdum>a block size limit increase that didn't require hard fork

00:04:51.900 --> 00:04:53.560
<v Aaron van Wirdum>and that's because of the discount,

00:04:53.560 --> 00:04:57.680
<v Sjors Provoost>Right, but I don't think that the idea of segregating the witness had nothing to

00:04:57.680 --> 00:05:00.480
<v Sjors Provoost>do with increasing the block size it's just that people realize that you could

00:05:00.480 --> 00:05:04.820
<v Sjors Provoost>use it to increase the block size which is kind of a nice bycatch right and once

00:05:04.820 --> 00:05:08.320
<v Sjors Provoost>you do realize that you can start reasoning why the discount is roughly what it is.

00:05:08.320 --> 00:05:14.090
<v Aaron van Wirdum>Okay, so I think that's what we're getting into I think the best way to

00:05:14.090 --> 00:05:18.190
<v Aaron van Wirdum>get into it is just restate the question and then you can take it for that from

00:05:18.190 --> 00:05:18.910
<v Aaron van Wirdum>there what do you think?

00:05:18.910 --> 00:05:19.830
<v Sjors Provoost>I can try that.

00:05:19.830 --> 00:05:23.320
<v Aaron van Wirdum>Sure. why is there a witness discount?

00:05:23.320 --> 00:05:26.520
<v Sjors Provoost>Well, it's how you increase the block size.

00:05:26.520 --> 00:05:31.640
<v Aaron van Wirdum>Aha, but that's not the only reason right? There's there's more to it.

00:05:31.640 --> 00:05:36.240
<v Aaron van Wirdum>Well, there's more going on you just mentioned you don't did you just mention

00:05:36.240 --> 00:05:39.800
<v Aaron van Wirdum>this you don't actually have to include a discount to increase the block size

00:05:39.800 --> 00:05:40.340
<v Aaron van Wirdum>right?

00:05:40.950 --> 00:05:44.910
<v Sjors Provoost>Yeah. So, okay. So the question is, if you just wanted to increase the block

00:05:44.910 --> 00:05:48.910
<v Sjors Provoost>size, how would you do that? Well, the original idea was to do a hard fork where

00:05:48.910 --> 00:05:53.770
<v Sjors Provoost>you simply increase the block size. So there's just instead of buying five ice

00:05:53.770 --> 00:05:56.810
<v Sjors Provoost>creams per block, now you can buy 10 ice creams per block.

00:05:57.790 --> 00:06:00.610
<v Aaron van Wirdum>You can make double the amount of transactions.

00:06:00.950 --> 00:06:01.350
<v Sjors Provoost>That's right.

00:06:01.590 --> 00:06:06.310
<v Aaron van Wirdum>Right. And hang on. So at this point, we're not even talking

00:06:06.310 --> 00:06:09.210
<v Aaron van Wirdum>about... the discount yet right?

00:06:09.210 --> 00:06:13.770
<v Sjors Provoost>No, this is a very simple way to increase the block size is just a hard fork that

00:06:13.770 --> 00:06:16.090
<v Sjors Provoost>was known but there were good reasons not to do a hard fork.

00:06:16.090 --> 00:06:19.510
<v Aaron van Wirdum>Oh, sorry yeah that you were still in the hard fork part. Yeah, okay, yeah. Let's

00:06:19.510 --> 00:06:24.610
<v Aaron van Wirdum>get to SegWit then why was SegWit better other than it wasn't a hard fork or

00:06:24.610 --> 00:06:25.070
<v Aaron van Wirdum>wasn't it

00:06:25.390 --> 00:06:31.290
<v Sjors Provoost>Yeah, so SegWit was so the idea of segregating a witness existed before the idea

00:06:31.290 --> 00:06:36.440
<v Sjors Provoost>of the soft fork called SegWit right But the question is, but it turns out that

00:06:36.440 --> 00:06:41.160
<v Sjors Provoost>you can use the soft fork SegWit to increase the block size. And the reason is

00:06:41.160 --> 00:06:46.820
<v Sjors Provoost>because you are basically making transactions that to old nodes look like they

00:06:46.820 --> 00:06:50.600
<v Sjors Provoost>don't have a signature. They're just giving away the money for free to anybody

00:06:50.600 --> 00:06:55.460
<v Sjors Provoost>else who wants it. But new nodes will download essentially a separate block or a

00:06:55.460 --> 00:07:00.650
<v Sjors Provoost>separate part of the block that is a witness block. And this could be as big as

00:07:00.650 --> 00:07:01.430
<v Sjors Provoost>you want in theory.

00:07:02.730 --> 00:07:04.430
<v Sjors Provoost>which means that you could...

00:07:04.430 --> 00:07:10.290
<v Aaron van Wirdum>Let's pause there for one second. So even by doing that, that

00:07:10.290 --> 00:07:14.030
<v Aaron van Wirdum>would in itself be a block size increase in a way, right?

00:07:14.230 --> 00:07:17.970
<v Sjors Provoost>It could be a block size increase really depending on how you do it because you

00:07:17.970 --> 00:07:22.950
<v Sjors Provoost>can add an additional constraint. So if you just say that you can have as much

00:07:22.950 --> 00:07:26.710
<v Sjors Provoost>witness data as you want, then it would be an infinite block size increase

00:07:26.710 --> 00:07:32.500
<v Sjors Provoost>essentially. But you could also say, well, you cannot add as much stuff as you

00:07:32.500 --> 00:07:35.980
<v Sjors Provoost>want the total amount of data. So the total between the block and the witness

00:07:35.980 --> 00:07:39.160
<v Sjors Provoost>still needs to be one megabyte, for example. So it could have been done without a

00:07:39.160 --> 00:07:39.800
<v Sjors Provoost>block size increase.

00:07:40.100 --> 00:07:45.260
<v Aaron van Wirdum>Okay, I think this is a good point to explain what I meant by that.

00:07:47.940 --> 00:07:53.340
<v Aaron van Wirdum>The important part is that old nodes will only accept up to one megabyte of

00:07:53.340 --> 00:07:54.260
<v Aaron van Wirdum>transaction data.

00:07:54.520 --> 00:07:54.880
<v Sjors Provoost>Yes.

00:07:55.160 --> 00:07:59.560
<v Aaron van Wirdum>A block must be one megabyte. Now, if you're moving part of the transaction, and

00:07:59.560 --> 00:08:02.200
<v Aaron van Wirdum>I think a witness is a big part of the transaction, right?

00:08:02.300 --> 00:08:03.040
<v Sjors Provoost>Certainly, yes.

00:08:03.420 --> 00:08:07.580
<v Aaron van Wirdum>It's around half or even more than half. It depends on the transaction, right?

00:08:07.800 --> 00:08:10.460
<v Sjors Provoost>Yeah, I think for a typical transaction, it was slightly less than half.

00:08:10.980 --> 00:08:16.880
<v Aaron van Wirdum>Yeah, maybe 40%. Anyways, it's roughly half. So in that case, if

00:08:16.880 --> 00:08:21.080
<v Aaron van Wirdum>we're assuming there's only going to be regular transactions, which is obviously

00:08:21.080 --> 00:08:25.950
<v Aaron van Wirdum>a bad assumption, but let's make that bad assumption, then already... you're

00:08:25.950 --> 00:08:30.330
<v Aaron van Wirdum>almost doubling the amount of transactions that can be processed on the network

00:08:30.330 --> 00:08:34.110
<v Aaron van Wirdum>just by separating the witness yes right if you're not adding any additional

00:08:34.110 --> 00:08:38.570
<v Aaron van Wirdum>constraints because now the base part of the transaction can be up to one

00:08:38.570 --> 00:08:43.130
<v Aaron van Wirdum>megabyte all the base parts of every transaction in the block and then all the

00:08:43.130 --> 00:08:48.050
<v Aaron van Wirdum>witnesses which is almost half is in a separate part so already you've doubled it

00:08:48.050 --> 00:08:50.170
<v Aaron van Wirdum>just by segregating the witness

00:08:51.580 --> 00:08:55.140
<v Aaron van Wirdum>under a bad assumption and no additional constraints, right?

00:08:55.480 --> 00:08:55.530
<v Sjors Provoost>Yes.

00:08:56.510 --> 00:09:00.730
<v Aaron van Wirdum>Okay, so maybe a logical next question is,

00:09:01.550 --> 00:09:07.150
<v Aaron van Wirdum>why wasn't this done, I guess? Why wasn't this just what segregated witnesses?

00:09:07.490 --> 00:09:11.590
<v Sjors Provoost>Well, the thing here is that the question is, how big should that extra data be?

00:09:11.710 --> 00:09:16.200
<v Sjors Provoost>Should there be a limit on it? And if you make that a separate limit, so let's

00:09:16.200 --> 00:09:20.800
<v Sjors Provoost>say you say the main stuff in the blockchain is one megabyte per block. And the

00:09:20.800 --> 00:09:24.100
<v Sjors Provoost>witness, we're just going to pick a random number, maybe call it also one

00:09:24.100 --> 00:09:25.400
<v Sjors Provoost>megabyte or two megabytes, whatever.

00:09:26.260 --> 00:09:29.960
<v Aaron van Wirdum>Yeah, let's just also say one megabyte, right? That way it's a doubling. That's

00:09:29.960 --> 00:09:30.600
<v Aaron van Wirdum>what I was just...

00:09:30.600 --> 00:09:33.700
<v Sjors Provoost>Yeah, but if you do that in a naive way where you just say these are separate

00:09:33.700 --> 00:09:39.280
<v Sjors Provoost>buckets, then you create a very difficult fee market because now in order to

00:09:39.280 --> 00:09:43.300
<v Sjors Provoost>decide what goes into a block, the miner has to solve what's called a nonlinear

00:09:43.300 --> 00:09:48.020
<v Sjors Provoost>equation, basically, where they have to decide how... Basically, you have to

00:09:48.020 --> 00:09:51.220
<v Sjors Provoost>compete for space in the main block and you have to compete for space in the

00:09:51.220 --> 00:09:54.760
<v Sjors Provoost>witness block and those are completely separate markets. And that is

00:09:54.760 --> 00:09:56.920
<v Sjors Provoost>mathematically a very hard problem to solve.

00:09:57.160 --> 00:10:02.400
<v Aaron van Wirdum>Yeah, I guess the problem, and correct me if I'm wrong, the problem would be that

00:10:02.400 --> 00:10:08.140
<v Aaron van Wirdum>a transaction only includes one fee, but now all of a sudden there's kind of two

00:10:08.140 --> 00:10:13.080
<v Aaron van Wirdum>markets, one for the base transactions and one for the witness. And so now the

00:10:13.080 --> 00:10:17.540
<v Aaron van Wirdum>miner has to make some sort of calculation per transaction, whether to include it

00:10:17.540 --> 00:10:23.070
<v Aaron van Wirdum>or not. And depending on those buckets, and this gets very

00:10:23.070 --> 00:10:27.030
<v Aaron van Wirdum>complicated very fast for miners to figure out what to include. That's sort of

00:10:27.030 --> 00:10:27.450
<v Aaron van Wirdum>right, right?

00:10:27.450 --> 00:10:31.730
<v Sjors Provoost>Yeah, and it also creates potential for abuse. So let's say the main part of the

00:10:31.730 --> 00:10:36.630
<v Sjors Provoost>block is the most scarce, and so fees are quite high for that. But once you've

00:10:36.630 --> 00:10:40.110
<v Sjors Provoost>paid for that, the witness part is really, there's not much competition. So if

00:10:40.110 --> 00:10:44.170
<v Sjors Provoost>you want to spam the witness part, that might be very cheap, and that creates all

00:10:44.170 --> 00:10:45.510
<v Sjors Provoost>sorts of weird incentives.

00:10:46.350 --> 00:10:51.410
<v Aaron van Wirdum>Right. So this argument can be sums up as things get complicated.

00:10:51.750 --> 00:10:55.270
<v Sjors Provoost>You don't want to have your fee market based on more than one variable.

00:10:56.500 --> 00:10:56.860
<v Aaron van Wirdum>Right.

00:10:57.060 --> 00:11:00.620
<v Sjors Provoost>And actually, if we look at the modern world, that's not the case because we'll

00:11:00.620 --> 00:11:04.360
<v Sjors Provoost>probably talk about this in earlier episodes. There's such a thing as transaction

00:11:04.360 --> 00:11:07.380
<v Sjors Provoost>packages where you cannot look at the fee of one transaction. You have to look at

00:11:07.380 --> 00:11:10.220
<v Sjors Provoost>the fee of a combination of transactions. So actually, the problem is already

00:11:10.220 --> 00:11:11.400
<v Sjors Provoost>very hard.

00:11:11.540 --> 00:11:14.720
<v Aaron van Wirdum>And also what we mentioned in one of the previous episodes, like the SIGHASH

00:11:14.720 --> 00:11:17.080
<v Aaron van Wirdum>limits should maybe be taken into account at this point.

00:11:17.260 --> 00:11:20.480
<v Sjors Provoost>That was already a factor that you had to take into account. So your fee

00:11:20.480 --> 00:11:23.730
<v Sjors Provoost>calculations get more difficult if you take the SIGHASH into account. which

00:11:23.730 --> 00:11:25.110
<v Sjors Provoost>generally we just kind of don't.

00:11:25.430 --> 00:11:31.190
<v Aaron van Wirdum>Nevertheless, even though it's still more complicated than one variable,

00:11:31.450 --> 00:11:34.390
<v Aaron van Wirdum>it would be worse if there were even more variables.

00:11:34.650 --> 00:11:38.250
<v Sjors Provoost>Well, there was some discussion on the mailing list that said, well, going from

00:11:38.250 --> 00:11:42.350
<v Sjors Provoost>one to two variables is very, very bad. Going from two to three is probably not

00:11:42.350 --> 00:11:46.890
<v Sjors Provoost>as bad. But I guess the hope was to really nail it to one variable and somehow

00:11:46.890 --> 00:11:52.100
<v Sjors Provoost>find a way to deal with the SIGHASH limit. these things so anyway it's nice to

00:11:52.100 --> 00:11:52.840
<v Sjors Provoost>have one fee rate.

00:11:52.840 --> 00:11:58.780
<v Aaron van Wirdum>Okay, so this okay so go on. so it's nice to have one fee rate I

00:11:58.780 --> 00:11:59.740
<v Aaron van Wirdum>mean…

00:11:59.740 --> 00:12:04.660
<v Sjors Provoost>Well, that means that there has to be one limit and right now as we discussed it

00:12:04.660 --> 00:12:08.100
<v Sjors Provoost>the simple way would be to have two limits so how do you turn two limits into one

00:12:08.100 --> 00:12:12.000
<v Sjors Provoost>limit that's essentially what was done and the solution to that is this thing

00:12:12.000 --> 00:12:15.830
<v Sjors Provoost>called virtual bytes where you say we're not actually counting the real bytes

00:12:15.830 --> 00:12:18.670
<v Sjors Provoost>anymore we're making this thing called the virtual byte and the simplest way to

00:12:18.670 --> 00:12:23.490
<v Sjors Provoost>do that might be to say one byte in the main block counts as one virtual byte and

00:12:23.490 --> 00:12:28.190
<v Sjors Provoost>one byte in the witness counts as one virtual byte so really one byte is one byte

00:12:28.190 --> 00:12:33.070
<v Sjors Provoost>but we are going to limit the total number of bytes to one million so one

00:12:33.070 --> 00:12:38.140
<v Sjors Provoost>megabyte So this means that you can have as many witness bytes as you want or as

00:12:38.140 --> 00:12:41.360
<v Sjors Provoost>many main bytes as you want, but the total has to be 1 million. So now you have

00:12:41.360 --> 00:12:41.860
<v Sjors Provoost>one limit.

00:12:42.080 --> 00:12:45.920
<v Aaron van Wirdum>Okay. Well, the example you just gave would not be a block size increase then, right?

00:12:46.780 --> 00:12:49.120
<v Sjors Provoost>Exactly. That would be no block size increase.

00:12:49.320 --> 00:12:49.520
<v Aaron van Wirdum>Right.

00:12:49.740 --> 00:12:54.460
<v Sjors Provoost>If you wanted to do your 2 megabyte example, then you would have to make the

00:12:54.460 --> 00:13:00.390
<v Sjors Provoost>limit 2 megabytes. So you would say, but that's not possible, right? Naively.

00:13:00.710 --> 00:13:06.110
<v Sjors Provoost>Because if you... Because you said the total limit has to be two, but you can't

00:13:06.110 --> 00:13:10.650
<v Sjors Provoost>have the main block be more than one. So that's not possible, naively.

00:13:10.950 --> 00:13:15.150
<v Aaron van Wirdum>The reason it's not possible to make that very clear is it wouldn't be backwards

00:13:15.150 --> 00:13:15.590
<v Aaron van Wirdum>compatible.

00:13:15.830 --> 00:13:16.090
<v Sjors Provoost>Exactly.

00:13:16.410 --> 00:13:20.250
<v Aaron van Wirdum>Old nodes would now see two megabyte blocks and reject them while new nodes would

00:13:20.250 --> 00:13:22.670
<v Aaron van Wirdum>be fine with them. So that's the reason you're saying it's not possible.

00:13:22.910 --> 00:13:26.090
<v Sjors Provoost>So first we started with, we split the witness out from the main data. Then we're

00:13:26.090 --> 00:13:29.230
<v Sjors Provoost>like, oh, that gives us a lot of extra space. But oh my God, now we have this

00:13:29.230 --> 00:13:33.170
<v Sjors Provoost>super complicated fee market that nobody can reason about. Let's bring back the

00:13:33.170 --> 00:13:37.230
<v Sjors Provoost>limit of one megabyte for the total amount. So now we don't have a block size

00:13:37.230 --> 00:13:42.590
<v Sjors Provoost>increase anymore. What do we do? and this is where the witness discount comes in.

00:13:42.590 --> 00:13:47.270
<v Aaron van Wirdum>Well, or you're missing one step or we can increase it but then it wouldn't be

00:13:47.270 --> 00:13:51.730
<v Aaron van Wirdum>backwards compatible that'd be hard fork, so not Yeah, so now that so this is

00:13:51.730 --> 00:13:56.310
<v Aaron van Wirdum>where the discount comes in okay so how does the discount actually work maybe

00:13:56.310 --> 00:13:57.570
<v Aaron van Wirdum>that's a good next question?

00:13:57.570 --> 00:14:01.950
<v Sjors Provoost>Yeah, so what the discount does it's more like a you could also see it as a tax

00:14:01.950 --> 00:14:07.140
<v Sjors Provoost>on the old stuff. It's basically saying every part of the old chain is, sorry,

00:14:07.880 --> 00:14:11.860
<v Sjors Provoost>every part of the main part of the transaction, which means all the outputs and

00:14:11.860 --> 00:14:17.840
<v Sjors Provoost>all the sort of stuff in the middle of a transaction counts as four, and all

00:14:17.840 --> 00:14:22.900
<v Sjors Provoost>the witness stuff counts as one. And then we say the total is, in this way of

00:14:22.900 --> 00:14:26.910
<v Sjors Provoost>counting, is four million. And so what that means is if you only use old stuff,

00:14:27.210 --> 00:14:31.150
<v Sjors Provoost>every byte counts as four. So if you only use, basically you don't use SegWit at

00:14:31.150 --> 00:14:35.850
<v Sjors Provoost>all, your block gets to be one megabyte and then you hit this four weight limit

00:14:35.850 --> 00:14:36.550
<v Sjors Provoost>limit.

00:14:36.850 --> 00:14:42.570
<v Aaron van Wirdum>Yeah, it's a little bit confusing here because again, when we say

00:14:42.570 --> 00:14:46.430
<v Aaron van Wirdum>we're going to make the new limit four, wait, what did you say?

00:14:46.430 --> 00:14:49.670
<v Sjors Provoost>You can also do it the other way around. You can say, well, we'll count the main

00:14:49.670 --> 00:14:55.380
<v Sjors Provoost>parts as one. So one megabyte of main stuff is one megabyte block in total. And

00:14:55.380 --> 00:14:58.220
<v Sjors Provoost>we're going to count everything in the witness. We're going to count that as

00:14:58.220 --> 00:14:58.880
<v Sjors Provoost>0.25.

00:14:59.360 --> 00:14:59.940
<v Aaron van Wirdum>So one quarter.

00:15:00.360 --> 00:15:01.580
<v Sjors Provoost>That's maybe easier to think about.

00:15:01.780 --> 00:15:04.520
<v Aaron van Wirdum>Actually, yeah, I was just going to say that's an easier way to understand it.

00:15:04.580 --> 00:15:05.700
<v Aaron van Wirdum>And it's kind of equivalent.

00:15:05.900 --> 00:15:10.220
<v Sjors Provoost>And this is the difference between weight units and virtual bytes. So this last

00:15:10.220 --> 00:15:14.020
<v Sjors Provoost>thing we talked about are virtual bytes. So we say one virtual byte in the main

00:15:14.020 --> 00:15:17.810
<v Sjors Provoost>part of the block or in the main part of the transaction is just one byte. but

00:15:17.810 --> 00:15:21.530
<v Sjors Provoost>one byte in the witness part counts as 0.25 virtual bytes.

00:15:21.890 --> 00:15:27.880
<v Aaron van Wirdum>Right. So now there's a block being mined with, yeah, just one

00:15:27.880 --> 00:15:33.280
<v Aaron van Wirdum>megabyte of all transaction styles. So now both new and old nodes will just see

00:15:33.280 --> 00:15:34.360
<v Aaron van Wirdum>one megabyte. It's fine.

00:15:34.540 --> 00:15:34.680
<v Sjors Provoost>Yep.

00:15:37.130 --> 00:15:41.010
<v Aaron van Wirdum>And the alternative is, okay, so the other extreme would be there's going to be

00:15:41.010 --> 00:15:46.570
<v Aaron van Wirdum>four megabytes of witness stuff, and then new nodes are going to

00:15:46.570 --> 00:15:52.350
<v Aaron van Wirdum>discount this. 0.25 so now they're seeing one megabyte again so

00:15:52.540 --> 00:15:57.230
<v Aaron van Wirdum>that's within their limit as we're talking about weight limits yeah and then all

00:15:57.230 --> 00:16:00.230
<v Aaron van Wirdum>the nodes are just going to see nothing essentially they're going to see an empty

00:16:00.230 --> 00:16:04.530
<v Aaron van Wirdum>block because everything is in the witness precisely so an empty block is also

00:16:04.530 --> 00:16:09.370
<v Aaron van Wirdum>within the one megabyte limit so now both nodes are okay yeah exactly okay so

00:16:09.370 --> 00:16:15.090
<v Aaron van Wirdum>basically what we've said now that so this sounds a lot this argument

00:16:15.090 --> 00:16:21.040
<v Aaron van Wirdum>sounds a lot like It is kind of an accounting trick. We just want to make sure

00:16:21.040 --> 00:16:26.320
<v Aaron van Wirdum>that we have a block size increase while we don't create different fee markets

00:16:26.320 --> 00:16:27.880
<v Aaron van Wirdum>because that gets very complicated. Right.

00:16:27.980 --> 00:16:32.340
<v Sjors Provoost>So I would always or I would tend to separate it in three concerns that we need

00:16:32.340 --> 00:16:36.380
<v Sjors Provoost>to deal with. One is that you want to have one market despite having this

00:16:36.380 --> 00:16:39.680
<v Sjors Provoost>separate witness. The other is that we wanted to have a block size increase

00:16:39.680 --> 00:16:45.220
<v Sjors Provoost>somehow. And the third is then the way you do that is by having this discount in

00:16:45.220 --> 00:16:48.880
<v Sjors Provoost>the witness data. But you could kind of do these things separately. So we could

00:16:48.880 --> 00:16:53.420
<v Sjors Provoost>have separated the witness, but kept the block size the same. And we could have

00:16:53.420 --> 00:16:56.580
<v Sjors Provoost>increased the block size without SegWit, I guess. But if you wanted to increase

00:16:56.580 --> 00:17:00.500
<v Sjors Provoost>the block size and have SegWit, then the only way to do that is with this witness

00:17:00.500 --> 00:17:05.860
<v Sjors Provoost>discount. Now, the exact number is somewhat arbitrary. Well, we can defend that

00:17:05.860 --> 00:17:07.920
<v Sjors Provoost>number, but that will be the next phase.

00:17:10.960 --> 00:17:13.880
<v Sjors Provoost>Now we've explained why you really need to have a discount.

00:17:15.000 --> 00:17:20.700
<v Aaron van Wirdum>yeah okay so we can defend the number before we get to defending the number I

00:17:20.700 --> 00:17:24.340
<v Aaron van Wirdum>think there is also an argument or at least there was an argument

00:17:26.060 --> 00:17:31.620
<v Aaron van Wirdum>a more technical argument for giving a discount it would better align incentives

00:17:31.620 --> 00:17:33.940
<v Aaron van Wirdum>of the Bitcoin system is that right?

00:17:33.940 --> 00:17:37.780
<v Sjors Provoost>Yeah, and there's there's kind of two ways to look at those incentives we're

00:17:37.780 --> 00:17:42.500
<v Sjors Provoost>talking about the UTXO set essentially so this is the the set that you're kind of

00:17:42.500 --> 00:17:46.040
<v Sjors Provoost>keeping either in memory or at least you you very often need to read read it

00:17:46.040 --> 00:17:51.680
<v Sjors Provoost>which is the list of who owns which coin and by using this discount mechanism

00:17:51.680 --> 00:17:56.040
<v Sjors Provoost>that list tends to not grow a lot And there's two ways to look at that. One is

00:17:56.040 --> 00:18:00.180
<v Sjors Provoost>we're saying, I guess the more abstract way is to say the block size is

00:18:00.180 --> 00:18:04.180
<v Sjors Provoost>increasing, but the only part that is increasing is the witness. And the witness

00:18:04.180 --> 00:18:09.360
<v Sjors Provoost>does not go into the UTXO set ever. You check the witness, but you don't put it

00:18:09.360 --> 00:18:13.320
<v Sjors Provoost>in the UTXO set. So by only increasing the witness size, you are increasing the

00:18:13.320 --> 00:18:17.960
<v Sjors Provoost>block size without increasing the UTXO set. The other way to look at it. It's

00:18:17.960 --> 00:18:22.720
<v Sjors Provoost>more from an individual transaction point of view, where before SegWit, it was

00:18:22.720 --> 00:18:28.090
<v Sjors Provoost>much more expensive to spend an input than to create an output

00:18:28.090 --> 00:18:29.890
<v Sjors Provoost>for a very basic transaction.

00:18:30.230 --> 00:18:32.610
<v Aaron van Wirdum>Wait, before? Sorry, can you repeat that for me?

00:18:32.850 --> 00:18:36.870
<v Sjors Provoost>Before SegWit, it was more expensive to spend an input than to create a new

00:18:36.870 --> 00:18:40.790
<v Sjors Provoost>output. And the reason is because when you're spending an input, you need to put

00:18:40.790 --> 00:18:46.190
<v Sjors Provoost>on the blockchain usually a public key and a signature. Because you're trying to

00:18:46.190 --> 00:18:52.030
<v Sjors Provoost>prove that you have the hash. And so that's about 90 bytes, roughly. Whereas to

00:18:52.030 --> 00:18:58.030
<v Sjors Provoost>create a new output is basically just 20 bytes. Because you only need

00:18:58.030 --> 00:19:02.990
<v Sjors Provoost>to put the hash of a thing on there. Well, at least it's 20 bytes more than a few

00:19:02.990 --> 00:19:05.770
<v Sjors Provoost>other things. You also have to put the amount on the chain, etc. That doesn't

00:19:05.770 --> 00:19:11.630
<v Sjors Provoost>change. So SegWit changes this because of the discount. Changes this

00:19:11.630 --> 00:19:12.070
<v Sjors Provoost>math.

00:19:12.860 --> 00:19:18.820
<v Aaron van Wirdum>What does it, though? Because you just said it's 90 versus 20. 90 for

00:19:18.820 --> 00:19:20.880
<v Aaron van Wirdum>an input, 20 for an output.

00:19:21.160 --> 00:19:23.980
<v Sjors Provoost>Yeah, and so the input now gets a 4x discount.

00:19:24.180 --> 00:19:24.440
<v Aaron van Wirdum>Yes.

00:19:24.860 --> 00:19:27.540
<v Sjors Provoost>So that makes it, you know, it's still slightly more expensive.

00:19:27.740 --> 00:19:31.860
<v Aaron van Wirdum>It's only the witness, right? Yes. And there's more to the input, I would assume.

00:19:32.300 --> 00:19:37.580
<v Sjors Provoost>Yes, exactly. So it doesn't work exactly like this because the input also has to

00:19:37.580 --> 00:19:40.440
<v Sjors Provoost>point to the previous transaction that takes up space.

00:19:40.660 --> 00:19:40.980
<v Aaron van Wirdum>Right.

00:19:41.260 --> 00:19:42.900
<v Sjors Provoost>And that doesn't get a discount.

00:19:43.160 --> 00:19:43.320
<v Aaron van Wirdum>Right.

00:19:43.820 --> 00:19:47.640
<v Sjors Provoost>But at least it makes it significantly less expensive to spend an input than it

00:19:47.640 --> 00:19:48.080
<v Sjors Provoost>used to be.

00:19:48.300 --> 00:19:53.820
<v Aaron van Wirdum>Okay, so it's about equal now? Creating an input is about as expensive as

00:19:53.820 --> 00:19:54.540
<v Aaron van Wirdum>creating an output?

00:19:54.940 --> 00:19:58.480
<v Sjors Provoost>I mean, it still depends on which kind of input and which kind of output. I think

00:19:58.480 --> 00:20:04.320
<v Sjors Provoost>it's still slightly more expensive to spend it. Yeah, slightly more expensive to

00:20:04.320 --> 00:20:06.320
<v Sjors Provoost>spend it. But at least the difference isn't as big anymore.

00:20:06.540 --> 00:20:10.500
<v Aaron van Wirdum>Okay, and what is the practical benefit of this?

00:20:11.650 --> 00:20:15.890
<v Sjors Provoost>Well, so yeah, so I read, I think it was the Stack Overflow or Reddit somewhere

00:20:15.890 --> 00:20:19.470
<v Sjors Provoost>where somebody gave a nice example of like you have a wallet and has three coins

00:20:19.470 --> 00:20:25.270
<v Sjors Provoost>in it. It has a 0.25, a 0.5 and a one BTC coin in it. And you

00:20:25.270 --> 00:20:30.090
<v Sjors Provoost>want to spend 0.75. So anybody who's very good at math can see there's two ways

00:20:30.090 --> 00:20:35.270
<v Sjors Provoost>to do that. You can combine your 0.25 and your 0.5 coin. That's 0.75.

00:20:35.830 --> 00:20:41.570
<v Sjors Provoost>Or you can use your one BTC coin and you get... 0.25 and change those are your

00:20:41.570 --> 00:20:47.270
<v Sjors Provoost>two options and in the old situation because it is so expensive to spend an input

00:20:47.270 --> 00:20:53.050
<v Sjors Provoost>you would be better off taking your one BTC coin and then just creating the

00:20:53.050 --> 00:20:56.050
<v Sjors Provoost>change address rather than spending those two coins

00:20:56.050 --> 00:21:00.450
<v Aaron van Wirdum>Right, so then you have four—no, then you have three UTXOs still.

00:21:00.930 --> 00:21:02.070
<v Sjors Provoost>Yes.

00:21:03.340 --> 00:21:07.280
<v Aaron van Wirdum>Plus the UTXO that's being spent to the ice cream seller.

00:21:07.520 --> 00:21:08.600
<v Sjors Provoost>Well, that's not your problem.

00:21:08.840 --> 00:21:13.900
<v Aaron van Wirdum>Yeah. Okay, so maybe this is part of my confusion then.

00:21:14.060 --> 00:21:15.680
<v Sjors Provoost>The incentive for you in the old days...

00:21:15.680 --> 00:21:17.600
<v Aaron van Wirdum>We're really talking about individual incentives here.

00:21:17.680 --> 00:21:23.020
<v Sjors Provoost>Yeah, so in the old days for you as the sender, it was better to just take your

00:21:23.020 --> 00:21:28.110
<v Sjors Provoost>1BTC coin and get some change back. because the change that you have to create is

00:21:28.110 --> 00:21:32.450
<v Sjors Provoost>only 22 bytes, at least the part that, you know, you're actually, 20 bytes,

00:21:32.610 --> 00:21:35.130
<v Sjors Provoost>sorry, the part that you're actually putting, that you have some control over.

00:21:36.280 --> 00:21:39.920
<v Sjors Provoost>Whereas if you had to spend that old coin, you had to use these 90 bytes, so

00:21:39.920 --> 00:21:43.460
<v Sjors Provoost>these 90 bytes, if you wanted to add, sorry, if you wanted to add those two coins.

00:21:44.700 --> 00:21:47.360
<v Sjors Provoost>You have to spend at least one coin, right? So the difference is, do you spend an

00:21:47.360 --> 00:21:52.580
<v Sjors Provoost>extra coin? and make change and don't have change or do you not do that and only

00:21:52.580 --> 00:21:55.980
<v Sjors Provoost>have change and so that the difference is 90 versus 20 so the difference is

00:21:55.980 --> 00:21:56.860
<v Sjors Provoost>roughly 70 bytes

00:21:56.860 --> 00:21:58.260
<v Aaron van Wirdum>Yeah, but hang on.

00:21:58.260 --> 00:21:59.620
<v Sjors Provoost>And with SegWit the difference is much smaller.

00:21:59.620 --> 00:22:05.320
<v Aaron van Wirdum>Sjors, I'm confused okay you're saying this is in my individual benefits but who

00:22:05.320 --> 00:22:08.400
<v Aaron van Wirdum>cares about my individual benefit isn't isn't the goal you

00:22:08.400 --> 00:22:08.560
<v Sjors Provoost>do.

00:22:09.550 --> 00:22:15.450
<v Aaron van Wirdum>Yes, but why do Bitcoin developers because isn't the goal wasn't the goal to

00:22:15.450 --> 00:22:16.810
<v Aaron van Wirdum>reduce the UTXO set?

00:22:17.180 --> 00:22:21.900
<v Sjors Provoost>Yeah, exactly. So it would be nice if the incentives are such that you prefer to

00:22:21.900 --> 00:22:27.120
<v Sjors Provoost>spend your coins, I.e. you reduce the size of the UTXO set. It should be in your

00:22:27.120 --> 00:22:27.840
<v Sjors Provoost>interest to do that.

00:22:29.100 --> 00:22:29.500
<v Aaron van Wirdum>Yes.

00:22:29.780 --> 00:22:34.670
<v Sjors Provoost>And it wasn't. Because in this example we just made, it was much cheaper for you

00:22:34.670 --> 00:22:39.470
<v Sjors Provoost>to not spend the small change that you had in your wallet, but rather just

00:22:39.470 --> 00:22:42.870
<v Sjors Provoost>fragment it further and further and further and further. Maybe in the long run

00:22:42.870 --> 00:22:44.970
<v Sjors Provoost>that changes, of course, because eventually you'll have to spend it.

00:22:45.410 --> 00:22:51.170
<v Aaron van Wirdum>Would this only hold up if you can add up your UTXOs to make a

00:22:51.170 --> 00:22:54.210
<v Aaron van Wirdum>payment in such a way that there's no change address?

00:22:55.640 --> 00:22:56.680
<v Sjors Provoost>Yeah, I think so.

00:22:57.060 --> 00:23:02.980
<v Aaron van Wirdum>Right. Okay. So in the cases where you can add up UTXOs to prevent

00:23:02.980 --> 00:23:08.860
<v Aaron van Wirdum>getting a change address, in these cases, it's better to have the

00:23:08.860 --> 00:23:14.120
<v Aaron van Wirdum>discount because you're incentivized to actually do that rather than to take one

00:23:14.120 --> 00:23:19.200
<v Aaron van Wirdum>big chunk of coin. and get a change address and only have one input yeah okay I

00:23:19.200 --> 00:23:21.360
<v Aaron van Wirdum>think that makes sense that sounds about right to me

00:23:21.360 --> 00:23:24.740
<v Sjors Provoost>Yeah, and of course it is always more complicated because you have to think about

00:23:24.740 --> 00:23:28.580
<v Sjors Provoost>what's the future fee rate going to be so I've created all these change outputs

00:23:28.580 --> 00:23:31.540
<v Sjors Provoost>okay but now you're stuck with them so eventually maybe you still want to

00:23:31.540 --> 00:23:35.460
<v Sjors Provoost>consolidate them and if you expect fees to go up in the future it may still be in

00:23:35.460 --> 00:23:38.980
<v Sjors Provoost>your interest to make sure you don't have too many small coins because it's going

00:23:38.980 --> 00:23:41.600
<v Sjors Provoost>to make your life harder in the end yep.

00:23:42.400 --> 00:23:48.340
<v Aaron van Wirdum>okay so this is this is the argument for why it's better aligns incentives

00:23:48.340 --> 00:23:53.540
<v Aaron van Wirdum>with the greater Bitcoin protocol essentially right yeah with the Bitcoin system

00:23:53.540 --> 00:23:58.100
<v Aaron van Wirdum>was this the only argument in that direction or was there something else

00:23:59.410 --> 00:24:03.590
<v Sjors Provoost>Yeah, well, the other was basically, well, I guess that gets us to why the 4x

00:24:03.590 --> 00:24:04.170
<v Sjors Provoost>would be good.

00:24:04.250 --> 00:24:09.990
<v Aaron van Wirdum>That was going to be my next question. Yeah, why 4x and why not 2x or 8x or 500x?

00:24:10.010 --> 00:24:13.210
<v Sjors Provoost>Yeah, so first of all, I think, I mean, the number was, I don't think it was

00:24:13.210 --> 00:24:17.530
<v Sjors Provoost>calculated with any precision, with any kind of algorithm. It was sort of a

00:24:17.530 --> 00:24:21.690
<v Sjors Provoost>guesstimate. And then it's useful to understand that software developers like

00:24:21.690 --> 00:24:25.390
<v Sjors Provoost>powers of two. So they like the number 1, they like the number 2, they like the

00:24:25.390 --> 00:24:30.490
<v Sjors Provoost>number 4, they like the number 8, 16, 32, etc. They don't like numbers like 3 and

00:24:30.490 --> 00:24:35.590
<v Sjors Provoost>5. So really, you know, why is it 4, why is it not 2, why is it not 8 should be

00:24:35.590 --> 00:24:40.880
<v Sjors Provoost>your question. And then you, basically the analysis is kind of like this.

00:24:41.540 --> 00:24:47.320
<v Sjors Provoost>The part that you're making more difficult is the signature validation.

00:24:47.320 --> 00:24:51.660
<v Sjors Provoost>So you're adding four times as much signature stuff potentially because you're

00:24:51.660 --> 00:24:56.220
<v Sjors Provoost>giving it a discount. And it turned out that recently it became about five to

00:24:56.220 --> 00:24:58.660
<v Sjors Provoost>seven times easier to verify those signatures.

00:24:58.960 --> 00:25:02.520
<v Aaron van Wirdum>Well, when you say recently, you mean recently before SegWit was introduced.

00:25:02.700 --> 00:25:07.160
<v Sjors Provoost>That's right. Because we did another episode a long time ago called libsecp256k1,

00:25:07.360 --> 00:25:11.840
<v Sjors Provoost>where we explained this library that essentially is purpose-built for Bitcoin

00:25:11.840 --> 00:25:16.480
<v Sjors Provoost>that just validates signatures and a few other things. And that library was made

00:25:16.480 --> 00:25:19.640
<v Sjors Provoost>about, yeah, like I said, it was about five or seven times faster.

00:25:20.900 --> 00:25:26.380
<v Sjors Provoost>So knowing that you can verify five times more signatures per second means that

00:25:26.380 --> 00:25:30.160
<v Sjors Provoost>it's kind of okay if there are five times more signatures, at least from the

00:25:30.160 --> 00:25:35.160
<v Sjors Provoost>point of view of your CPU. So if you look at computer science in general, there's

00:25:35.160 --> 00:25:39.860
<v Sjors Provoost>kind of different bottlenecks. One of your bottlenecks is your CPU, the other is

00:25:39.860 --> 00:25:42.800
<v Sjors Provoost>your RAM, the other is your download, and the other is maybe your disk storage.

00:25:44.510 --> 00:25:49.810
<v Sjors Provoost>And so here the idea was, yeah, we can probably reasonably safely increase this

00:25:49.810 --> 00:25:53.010
<v Sjors Provoost>by four because it doesn't make it much worse.

00:25:53.650 --> 00:25:58.790
<v Aaron van Wirdum>And that was because the library was updated is what you were saying. The other

00:25:58.790 --> 00:26:02.770
<v Aaron van Wirdum>thing I do remember, I don't know how big of a factor that was really for the

00:26:02.770 --> 00:26:08.370
<v Aaron van Wirdum>developers, but I think it was Jonathan Toomim who was a Bitcoin,

00:26:08.370 --> 00:26:14.200
<v Aaron van Wirdum>one of the forks, Bitcoin Classic. Bitcoin Classic developer I think

00:26:14.200 --> 00:26:19.790
<v Aaron van Wirdum>and he did some testnet testing and I think he also found that four megabytes

00:26:19.790 --> 00:26:22.650
<v Aaron van Wirdum>transmits broadcasts over the network

00:26:23.860 --> 00:26:27.740
<v Aaron van Wirdum>reasonably fast enough, and it kind of slows down if it gets bigger than that.

00:26:28.160 --> 00:26:31.800
<v Sjors Provoost>Yeah, and so this gets to the analysis of all these different bottlenecks, right?

00:26:32.040 --> 00:26:36.760
<v Sjors Provoost>So one bottleneck we talked about CPU, the other might be how fast blocks

00:26:36.760 --> 00:26:40.320
<v Sjors Provoost>propagate, and that tends to be a function of bandwidth. But the good news there

00:26:40.320 --> 00:26:44.360
<v Sjors Provoost>is that there were ways already in development and already partially deployed

00:26:44.360 --> 00:26:50.260
<v Sjors Provoost>that make it easier to transmit fairly big blocks fairly quickly. I think

00:26:50.260 --> 00:26:54.440
<v Sjors Provoost>we haven't done an episode on compact blocks yet, but maybe one day we will. But

00:26:54.440 --> 00:26:58.220
<v Sjors Provoost>basically the idea is you anticipate what the next block is going to be, and then

00:26:58.220 --> 00:27:02.100
<v Sjors Provoost>you only get the header and a few missing transactions. So then it doesn't matter

00:27:02.100 --> 00:27:05.120
<v Sjors Provoost>that these blocks are very large. Because if block propagation gets too slow,

00:27:05.280 --> 00:27:06.740
<v Sjors Provoost>then you get too many orphan blocks, etc.

00:27:07.260 --> 00:27:09.520
<v Aaron van Wirdum>Do we have compact blocks in Bitcoin now?

00:27:09.820 --> 00:27:11.460
<v Sjors Provoost>Yeah, we've had them for a long time.

00:27:11.660 --> 00:27:13.300
<v Aaron van Wirdum>Right. Right. Okay.

00:27:13.460 --> 00:27:16.040
<v Sjors Provoost>In fact, I think it was done around the same time because it was one of these

00:27:16.040 --> 00:27:20.720
<v Sjors Provoost>ways to mitigate this risk of increasing the bandwidth. And then I think the

00:27:20.720 --> 00:27:24.940
<v Sjors Provoost>other bottleneck, well, I think there is a bottleneck storage, but for that,

00:27:25.000 --> 00:27:30.310
<v Sjors Provoost>there was already a solution called pruning. So that really leaves two. One is to

00:27:30.310 --> 00:27:34.430
<v Sjors Provoost>keep up with the blockchain. That is not solved with SegWit, makes it four times

00:27:34.430 --> 00:27:38.170
<v Sjors Provoost>worse, right? Or two to four times worse. You have to just, when you're keeping

00:27:38.170 --> 00:27:40.470
<v Sjors Provoost>up, you just have to download more because you have to check everything.

00:27:41.420 --> 00:27:46.140
<v Aaron van Wirdum>I mean, but keeping up also means validating the signatures, right?

00:27:46.620 --> 00:27:48.340
<v Sjors Provoost>Yeah, exactly. So that became four times worse.

00:27:48.840 --> 00:27:54.180
<v Aaron van Wirdum>Okay, except that the library, the crypto library was updated too. Handle it faster.

00:27:54.500 --> 00:27:57.160
<v Sjors Provoost>So your CPU is fine with it, but you still have to download it.

00:27:57.360 --> 00:27:58.160
<v Aaron van Wirdum>Oh, yeah, yeah, sure.

00:27:58.240 --> 00:28:04.220
<v Sjors Provoost>So that's the problem. But the good news there was if you look at, say, SPV

00:28:04.220 --> 00:28:08.340
<v Sjors Provoost>wallets or light clients or mobile wallets, typically what they would do is they

00:28:08.340 --> 00:28:13.960
<v Sjors Provoost>would not actually verify all the things. And so the

00:28:13.960 --> 00:28:17.540
<v Sjors Provoost>stuff they still have to download, because they're not doing complete validation

00:28:17.540 --> 00:28:20.320
<v Sjors Provoost>anyway, the stuff they have to download does not go up at all.

00:28:22.010 --> 00:28:25.610
<v Sjors Provoost>because they don't have to download any of the witness data anyway. So the idea

00:28:25.610 --> 00:28:28.910
<v Sjors Provoost>was there, okay, their life is not getting any worse for the light wallets. Of

00:28:28.910 --> 00:28:31.510
<v Sjors Provoost>course, light wallets have their downsides, but at least their life doesn't get

00:28:31.510 --> 00:28:36.600
<v Sjors Provoost>any worse. Then another constraint is if you are a new node and you need to

00:28:36.600 --> 00:28:42.310
<v Sjors Provoost>download the entire history of the Bitcoin blockchain, how does that change? And

00:28:42.310 --> 00:28:45.810
<v Sjors Provoost>there, I think the easiest use case to look at, if you're trying to download the

00:28:45.810 --> 00:28:49.910
<v Sjors Provoost>whole blockchain and have an archive, then that just got four times worse, right?

00:28:50.600 --> 00:28:55.080
<v Sjors Provoost>But if you are a little bit more conservative on how many resources you have, you

00:28:55.080 --> 00:29:00.060
<v Sjors Provoost>may want to be pruning. And if you're pruning anyway, then as recently people

00:29:00.060 --> 00:29:04.040
<v Sjors Provoost>started to actually implement this, then you can actually just not download the

00:29:04.040 --> 00:29:04.560
<v Sjors Provoost>witness data.

00:29:06.390 --> 00:29:09.390
<v Sjors Provoost>And if you don't download the witness data for the first part of the blockchain,

00:29:09.810 --> 00:29:14.580
<v Sjors Provoost>well, then your blocks are essentially just as big as they used to be. There is

00:29:14.580 --> 00:29:17.560
<v Sjors Provoost>no block size increase for the history. There's only a block size increase for

00:29:17.560 --> 00:29:19.960
<v Sjors Provoost>the present, but there's no block size increase for the history.

00:29:20.530 --> 00:29:26.070
<v Aaron van Wirdum>so I remember this argument from back in the days but I was also under the

00:29:26.070 --> 00:29:30.750
<v Aaron van Wirdum>impression that this argument was kind of dropped and there's probably a couple

00:29:30.750 --> 00:29:35.270
<v Aaron van Wirdum>of reasons for that but the first one I can think of is well you can do that

00:29:35.270 --> 00:29:39.130
<v Aaron van Wirdum>anyways right with or without putting the signatures in the witness you can

00:29:39.130 --> 00:29:43.970
<v Aaron van Wirdum>always just decide not to validate or download the signatures or at least

00:29:43.970 --> 00:29:48.450
<v Sjors Provoost>No, technically possible not, because the problem is in the old system the

00:29:48.450 --> 00:29:52.850
<v Sjors Provoost>signatures are really stuck inside the block in a way that you cannot take it out

00:29:52.850 --> 00:29:57.410
<v Sjors Provoost>safely because in order to see if a block is what it says it should be you're

00:29:57.410 --> 00:30:01.450
<v Sjors Provoost>checking the header of a block and if the header of the block basically says

00:30:01.450 --> 00:30:04.270
<v Sjors Provoost>what's in the block and if you're not downloading the signatures you can't check

00:30:04.270 --> 00:30:06.910
<v Sjors Provoost>whether that's any of that is true so that's pretty unsafe

00:30:06.910 --> 00:30:12.670
<v Aaron van Wirdum>Right, okay so in that okay so witness segregated witness does actually

00:30:12.670 --> 00:30:17.320
<v Aaron van Wirdum>make what do we call it assumevalid more plausible

00:30:19.270 --> 00:30:23.730
<v Sjors Provoost>yeah it makes it more practical to because assumevalid what it does so far we

00:30:23.730 --> 00:30:27.590
<v Sjors Provoost>talked about that in an earlier episode assumevalid simply downloads all the

00:30:27.590 --> 00:30:32.150
<v Sjors Provoost>signatures but just ignores them but with this change assumevalid could actually

00:30:32.150 --> 00:30:36.150
<v Sjors Provoost>download all this not download all the signatures right the downside then is of

00:30:36.150 --> 00:30:39.350
<v Sjors Provoost>course you do not have an archive of the blockchain so I guess the practical

00:30:39.350 --> 00:30:43.310
<v Sjors Provoost>utility there for that was somewhat limited in recent history so nobody's

00:30:43.310 --> 00:30:47.120
<v Sjors Provoost>actually implemented that The only use case of this is if you plan to prune it

00:30:47.120 --> 00:30:52.780
<v Sjors Provoost>anyway. So if you plan to prune all the blocks after you've verified them, there

00:30:52.780 --> 00:30:55.640
<v Sjors Provoost>really is no point in downloading the witness data and then deleting it.

00:30:55.820 --> 00:30:59.380
<v Aaron van Wirdum>Okay, that would be the difference. It would save on downloads.

00:30:59.600 --> 00:31:02.700
<v Sjors Provoost>Yeah, and so for those users, the contrast with the regular hard fork becomes

00:31:02.700 --> 00:31:07.760
<v Sjors Provoost>very clear, I think. So if your goal is to just download it and then prune it,

00:31:07.900 --> 00:31:12.440
<v Sjors Provoost>you don't have to download the witness data. So for you, there is no block size

00:31:12.440 --> 00:31:16.600
<v Sjors Provoost>increase from your perspective. But if there had been a hard fork doubling the

00:31:16.600 --> 00:31:20.860
<v Sjors Provoost>block size, you would have to download all of that stuff because just the amount

00:31:20.860 --> 00:31:21.640
<v Sjors Provoost>of data would have doubled.

00:31:23.020 --> 00:31:28.840
<v Aaron van Wirdum>Right. Okay. Taking one small step back. So I think it's fair to say that the 4

00:31:28.840 --> 00:31:34.570
<v Aaron van Wirdum>megabyte limit was sort of picked to deal with worst case scenarios, right?

00:31:35.370 --> 00:31:39.270
<v Sjors Provoost>Yeah, you don't want it to be too high. And I guess, yeah, some of the examples

00:31:39.270 --> 00:31:43.770
<v Sjors Provoost>you called might have been the case. And also it was picked to be pretty close to

00:31:43.770 --> 00:31:48.970
<v Sjors Provoost>what they knew was improved because they knew the 5 to 7x thing in the CPU

00:31:48.970 --> 00:31:53.160
<v Sjors Provoost>performance was there. And then it happens to work out quite nicely that it

00:31:53.160 --> 00:31:58.020
<v Sjors Provoost>creates a little bit of a better balance between spending and changing coins. But

00:31:58.020 --> 00:32:00.600
<v Sjors Provoost>whether that was really part of the calculation, I'm not so sure.

00:32:00.980 --> 00:32:04.060
<v Aaron van Wirdum>Right. Is there anything else you want to say?

00:32:04.080 --> 00:32:07.380
<v Sjors Provoost>And of course, the number four will actually give you a decent block size

00:32:07.380 --> 00:32:12.030
<v Sjors Provoost>increase, right? So if you look at what happens if you... Just create the same

00:32:12.030 --> 00:32:14.590
<v Sjors Provoost>type of transaction, so you're still doing, I don't know, two inputs, two

00:32:14.590 --> 00:32:18.990
<v Sjors Provoost>outputs. That gives you, I think, about a 75% increase in the block size,

00:32:19.030 --> 00:32:23.590
<v Sjors Provoost>effectively, if everybody used SegWit, so you get 1.75. Whereas if you'd only

00:32:23.590 --> 00:32:28.610
<v Sjors Provoost>done a factor two discount, maybe you would only get 1.25 megabyte block. So you

00:32:28.610 --> 00:32:32.950
<v Sjors Provoost>want to actually make a dent in the block size without it being too crazy. The

00:32:32.950 --> 00:32:36.670
<v Sjors Provoost>number four makes a lot more sense than the number two. But the next number

00:32:36.670 --> 00:32:41.290
<v Sjors Provoost>eight, it gets a little bit scary because it's not that easy to justify that increase.

00:32:41.590 --> 00:32:46.870
<v Aaron van Wirdum>Yeah. Another thing I remember from back in those days. So one of the

00:32:46.870 --> 00:32:52.770
<v Aaron van Wirdum>very few, if not only sort of valid criticism on SegWit

00:32:52.770 --> 00:32:58.670
<v Aaron van Wirdum>at that time, in my opinion anyways, was that the real block size increase

00:32:58.670 --> 00:33:03.550
<v Aaron van Wirdum>that you gain from it is about double, like you just said,

00:33:03.870 --> 00:33:09.870
<v Aaron van Wirdum>while the worst case block size increase that you get is four

00:33:09.870 --> 00:33:15.120
<v Aaron van Wirdum>megabytes. So an attacker could sort of do worse than honest users.

00:33:15.520 --> 00:33:15.720
<v Sjors Provoost>Yes.

00:33:15.960 --> 00:33:20.660
<v Aaron van Wirdum>That was an argument against SegWit at the time, which I found was one of the

00:33:20.660 --> 00:33:24.740
<v Aaron van Wirdum>very few, like I said, one of the few, if not only, valid arguments.

00:33:24.880 --> 00:33:27.140
<v Sjors Provoost>But then, as opposed to doing what?

00:33:28.790 --> 00:33:32.900
<v Sjors Provoost>I mean, obviously, it's better to not increase the block size from that point of

00:33:32.900 --> 00:33:37.080
<v Sjors Provoost>view. But what was the alternative that they would propose in that case?

00:33:37.080 --> 00:33:39.880
<v Aaron van Wirdum>A hard fork. These were the people that wanted a hard fork.

00:33:40.020 --> 00:33:43.780
<v Sjors Provoost>Yeah, so you could say that, but we just went through all these other

00:33:43.780 --> 00:33:49.480
<v Sjors Provoost>bottlenecks, and basically the number 4, 4X worst case, was acceptable for most

00:33:49.480 --> 00:33:50.640
<v Sjors Provoost>of these scenarios.

00:33:51.540 --> 00:33:54.880
<v Aaron van Wirdum>Yes, but it would still be nice, so to say.

00:33:54.880 --> 00:33:58.260
<v Sjors Provoost>Whereas a straight hard fork would actually make things worse for a lot of these

00:33:58.260 --> 00:33:58.680
<v Sjors Provoost>scenarios.

00:34:00.010 --> 00:34:03.090
<v Sjors Provoost>So for the scenario, for example, the prune node that we talked about, the prune

00:34:03.090 --> 00:34:06.550
<v Sjors Provoost>node that for the first time catches up to the blockchain. If you do a 2x

00:34:06.550 --> 00:34:11.310
<v Sjors Provoost>increase, then yes, 2x is the worst case, but 2x is also the best case, because

00:34:11.310 --> 00:34:14.850
<v Sjors Provoost>that prune node now has to download twice as much stuff to verify the blocks.

00:34:15.210 --> 00:34:19.390
<v Sjors Provoost>Whereas with SegWit, in the good case, they don't have to download more data. And

00:34:19.390 --> 00:34:22.790
<v Sjors Provoost>in the worst case, they also don't have to download more data, because all that

00:34:22.790 --> 00:34:25.170
<v Sjors Provoost>witness stuff is just... can be completely ignored.

00:34:25.170 --> 00:34:30.910
<v Aaron van Wirdum>Well, so let me rephrase the question see if we're talking about the same thing?

00:34:30.910 --> 00:34:35.350
<v Sjors Provoost>Yeah, you're comparing a straight hard fork a straight 2x hard fork to…

00:34:35.350 --> 00:34:40.710
<v Aaron van Wirdum>Well, let me be more specific so what for example Gavin Andresen back in these

00:34:40.710 --> 00:34:46.700
<v Aaron van Wirdum>days I think fairly shortly after the SegWit presentation by Pieter Wuille

00:34:46.700 --> 00:34:50.320
<v Aaron van Wirdum>someone asked him for his opinion or he weighed in on a mailing list or something

00:34:50.320 --> 00:34:55.820
<v Aaron van Wirdum>like that and he said he liked SegWit but he would like to see it as a hard fork

00:34:55.820 --> 00:35:01.080
<v Aaron van Wirdum>so then you still get the witness separate and the transactions

00:35:01.080 --> 00:35:06.200
<v Aaron van Wirdum>it's basically all the same however it's done as a hard fork and then you can for

00:35:06.200 --> 00:35:11.830
<v Aaron van Wirdum>example do four megabytes so now you can have four megabytes of both regular data

00:35:11.830 --> 00:35:17.650
<v Aaron van Wirdum>or worst case so now the worst case and the best case is the same is that what

00:35:17.650 --> 00:35:18.550
<v Aaron van Wirdum>you were also saying?

00:35:18.550 --> 00:35:23.550
<v Sjors Provoost>I'm not sure if the hard fork makes any difference for this economic side of it

00:35:23.550 --> 00:35:29.050
<v Sjors Provoost>it might. I'm… also because you still need to have one metric otherwise you have a problem

00:35:30.490 --> 00:35:33.890
<v Sjors Provoost>But because you don't have to be backwards compatible, yes, you can simply say

00:35:33.890 --> 00:35:37.750
<v Sjors Provoost>that the total of the witness and the normal data has to be 2 megabytes. And this

00:35:37.750 --> 00:35:41.690
<v Sjors Provoost>time you don't care what the old nodes think about that. But then if you wanted

00:35:41.690 --> 00:35:45.370
<v Sjors Provoost>to talk about the worst case safety, which you are, I think, then you want to

00:35:45.370 --> 00:35:47.170
<v Sjors Provoost>look at the 2x variant, right?

00:35:48.110 --> 00:35:51.990
<v Aaron van Wirdum>I mean, we just established that the network, at least back then, that people

00:35:51.990 --> 00:35:56.180
<v Aaron van Wirdum>reasoned 4MB would be feasible worst case, right?

00:35:56.340 --> 00:36:00.380
<v Sjors Provoost>The criticism you were... formulating was that there was a good case and a bad

00:36:00.380 --> 00:36:06.140
<v Sjors Provoost>case and the good case was two megabytes and the bad case was four megabytes by

00:36:06.140 --> 00:36:07.980
<v Sjors Provoost>the by the abuser basically which

00:36:07.980 --> 00:36:09.340
<v Aaron van Wirdum>is how SegWit is designed now.

00:36:09.340 --> 00:36:13.640
<v Sjors Provoost>Yes, yes. So then what do you want to compare that with if you if you compare

00:36:13.640 --> 00:36:17.400
<v Sjors Provoost>that to a normal 4x increase then you're basically saying let's just build the

00:36:17.400 --> 00:36:21.130
<v Sjors Provoost>worst case, whereas if you can right if you're comparing it…

00:36:21.130 --> 00:36:26.820
<v Aaron van Wirdum>Well, that's the I mean even the worst case can be fine, but it's nice if the

00:36:26.820 --> 00:36:30.500
<v Aaron van Wirdum>good case is the same as the worst case, right? An attacker doesn't have a

00:36:30.500 --> 00:36:31.820
<v Aaron van Wirdum>benefit, so to say.

00:36:32.220 --> 00:36:35.640
<v Sjors Provoost>Exactly. So if the good case is the same as the worst case, either for 2MB or

00:36:35.640 --> 00:36:41.340
<v Sjors Provoost>4MB, then that's only interesting for the person who is

00:36:41.340 --> 00:36:46.250
<v Sjors Provoost>downloading the full blockchain archive. Because in the other scenarios where

00:36:46.250 --> 00:36:49.890
<v Sjors Provoost>somebody is downloading a pruned version, it's actually better to have SegWit

00:36:49.890 --> 00:36:53.990
<v Sjors Provoost>because they can safely ignore three out of those four megabytes.

00:36:57.100 --> 00:37:01.780
<v Aaron van Wirdum>Let's pull this conversation to the present day because that's where I was sort

00:37:01.780 --> 00:37:02.980
<v Aaron van Wirdum>of heading at.

00:37:03.240 --> 00:37:06.560
<v Sjors Provoost>Okay, so now you have these actual four megabyte blocks and people are saying,

00:37:06.680 --> 00:37:09.580
<v Sjors Provoost>oh, if we hadn't had this discount, this wouldn't have happened.

00:37:09.740 --> 00:37:13.000
<v Aaron van Wirdum>Right, yes. So that sounds like a...

00:37:13.000 --> 00:37:17.320
<v Sjors Provoost>If we had done a 4x hard fork, then this would have happened, right? We simply

00:37:17.320 --> 00:37:17.840
<v Sjors Provoost>would have...

00:37:17.880 --> 00:37:21.180
<v Aaron van Wirdum>Well, but then that all the space for it yeah but then the inscriptions wouldn't

00:37:21.180 --> 00:37:27.140
<v Aaron van Wirdum>have a cost benefit against regular transactions and I think that's like that's

00:37:27.140 --> 00:37:32.910
<v Aaron van Wirdum>for me at least the one valid or the one criticism of sort of the

00:37:32.910 --> 00:37:38.050
<v Aaron van Wirdum>inscriptions haters that I agree with like it's it doesn't really feel right that

00:37:38.050 --> 00:37:41.850
<v Aaron van Wirdum>inscriptions are cheaper byte for byte versus regular transactions it would be

00:37:41.850 --> 00:37:43.250
<v Aaron van Wirdum>nice if that wasn't the case.

00:37:43.250 --> 00:37:47.310
<v Sjors Provoost>Well, that's not I'm not sure if that's true because we talked about one of the

00:37:47.310 --> 00:37:51.610
<v Sjors Provoost>reasons why it's good to discount witness data which is that it does not go into

00:37:51.610 --> 00:37:52.470
<v Sjors Provoost>the UTXO set

00:37:52.470 --> 00:37:57.450
<v Aaron van Wirdum>Right, okay so that's yeah this is exactly what I was gonna ask you I guess so

00:37:57.450 --> 00:37:58.530
<v Aaron van Wirdum>yeah go on I shouldn't…

00:37:58.530 --> 00:38:04.410
<v Sjors Provoost>So it is so I think it is actually good to discount witness data regardless of

00:38:04.410 --> 00:38:08.010
<v Sjors Provoost>whether you use a soft fork or hard fork for that reason because you want to

00:38:08.010 --> 00:38:12.190
<v Sjors Provoost>incentivize people not shoving stuff into the UTXO set

00:38:14.790 --> 00:38:19.930
<v Aaron van Wirdum>Yeah, but hang on. If you're creating an inscription, you're also not using up

00:38:19.930 --> 00:38:24.350
<v Aaron van Wirdum>UTXOs, right? It's just a wash. You have one, you still have one, basically.

00:38:24.590 --> 00:38:27.550
<v Sjors Provoost>Yeah, so inscriptions don't pollute the UTXO set at all.

00:38:28.110 --> 00:38:34.110
<v Aaron van Wirdum>I mean, except that each inscription does probably create one UTXO

00:38:34.110 --> 00:38:35.090
<v Aaron van Wirdum>in the form of an ordinal.

00:38:35.590 --> 00:38:40.140
<v Sjors Provoost>Sure, but just one. They're not big UTXOs,

00:38:40.600 --> 00:38:41.380
<v Aaron van Wirdum>right?

00:38:43.090 --> 00:38:46.150
<v Sjors Provoost>If there was no discount for doing that, you might as well just create a giant

00:38:46.150 --> 00:38:46.990
<v Sjors Provoost>UTXO, perhaps.

00:38:48.190 --> 00:38:51.170
<v Aaron van Wirdum>Okay, if there was no discount...

00:38:51.170 --> 00:38:55.670
<v Sjors Provoost>Then there's no reason to not say, I'm just going to make an Opera... So there's

00:38:55.670 --> 00:39:00.130
<v Sjors Provoost>OP_RETURN, right? OP_RETURN creates giant UTXOs, but we say, well, they're

00:39:00.130 --> 00:39:04.210
<v Sjors Provoost>unspendable, so we ignore those UTXOs. That was kind of the fix for getting an

00:39:04.210 --> 00:39:09.300
<v Sjors Provoost>infinitely large UTXO set. Because let's say there was a world where...

00:39:09.070 --> 00:39:14.650
<v Sjors Provoost>OP_RETURN ish things existed but they could not be removed so

00:39:14.870 --> 00:39:20.150
<v Sjors Provoost>people would be putting their pictures on the blockchain right into the UTXO set

00:39:20.150 --> 00:39:23.530
<v Aaron van Wirdum>Yeah, I don't want that. But however but now…

00:39:23.530 --> 00:39:28.750
<v Sjors Provoost>Yeah, okay now people are doing that using OP_RETURN but…

00:39:29.230 --> 00:39:32.050
<v Aaron van Wirdum>No, they're not. Well, they you're not referring to…

00:39:32.050 --> 00:39:34.950
<v Sjors Provoost>Let's say there is no discount then they would probably be doing it using

00:39:34.950 --> 00:39:39.240
<v Sjors Provoost>OP_RETURN Now, you know, this 80-byte limit on OP_RETURN is just in the mempool,

00:39:39.280 --> 00:39:42.960
<v Sjors Provoost>so they would probably lobby for, you know, just increase those mempool limits or

00:39:42.960 --> 00:39:47.730
<v Sjors Provoost>just send it straight to a miner. But there still wouldn't be anything bad. But

00:39:47.730 --> 00:39:51.230
<v Sjors Provoost>that's only because they're using OP_RETURN and not using something else. Because

00:39:51.230 --> 00:39:55.610
<v Sjors Provoost>what if they go full, say, Mike in space and say, hey, wait a minute, this UTXO

00:39:55.610 --> 00:40:00.610
<v Sjors Provoost>set can still get pruned. What if we just create a not really OP_RETURN? We

00:40:00.610 --> 00:40:05.010
<v Sjors Provoost>change it slightly so that it's really... The blockchain doesn't know that it's

00:40:05.010 --> 00:40:09.630
<v Sjors Provoost>unspendable. And we still pay the same fee because whether you use OP_RETURN or

00:40:09.630 --> 00:40:14.500
<v Sjors Provoost>put actual spam in the UTXO set, there's no price difference. So you could do op,

00:40:14.560 --> 00:40:18.840
<v Sjors Provoost>not really return, and then put four megabytes in a transaction. And now you've

00:40:18.840 --> 00:40:23.440
<v Sjors Provoost>got this four megabytes sitting in the UTXO set. So that's pretty bad. So in that

00:40:23.440 --> 00:40:28.280
<v Sjors Provoost>sense, it's good that the way inscriptions do it is four times cheaper. because

00:40:28.280 --> 00:40:32.080
<v Sjors Provoost>they're putting their spam they have a 4x incentive to put their spam in a place

00:40:32.080 --> 00:40:33.800
<v Sjors Provoost>where it does not blow up the UTXO set.

00:40:33.800 --> 00:40:39.140
<v Aaron van Wirdum>Okay, let me rephrase the question then and okay what

00:40:40.230 --> 00:40:44.730
<v Aaron van Wirdum>if we removed the OP_RETURN limit or the OP_RETURN limit was never there?

00:40:44.730 --> 00:40:47.250
<v Sjors Provoost>Well, it's not really there right so let's

00:40:47.250 --> 00:40:49.490
<v Aaron van Wirdum>It's not there. Oh, you mean because it's a policy.

00:40:49.490 --> 00:40:50.350
<v Sjors Provoost>It's just a policy rule.

00:40:51.820 --> 00:40:55.200
<v Sjors Provoost>So anybody can run a node that has no OP_RETURN limit. And in fact, there are

00:40:55.200 --> 00:40:58.180
<v Sjors Provoost>some pull requests that suggest like, hey, just drop the OP_RETURN limit.

00:40:58.320 --> 00:41:02.580
<v Aaron van Wirdum>Yeah, which I agree with, I think. But that's a side quest.

00:41:03.820 --> 00:41:09.020
<v Aaron van Wirdum>Well, or maybe it's not. I guess it's actually my question. So do you think

00:41:09.020 --> 00:41:14.450
<v Aaron van Wirdum>the motivations for SegWit and the discount... hold up

00:41:14.450 --> 00:41:20.310
<v Aaron van Wirdum>for inscriptions versus if the OP_RETURN would have no limits like would it

00:41:20.310 --> 00:41:24.530
<v Aaron van Wirdum>still be beneficial would we still want to incentivize people putting it in

00:41:24.530 --> 00:41:26.390
<v Aaron van Wirdum>witness rather than OP_RETURN

00:41:26.390 --> 00:41:32.110
<v Sjors Provoost>No, I I would imagine that that doesn't make a difference I guess what I'm

00:41:32.110 --> 00:41:35.110
<v Sjors Provoost>worried about is the op not really return scenario.

00:41:35.110 --> 00:41:39.830
<v Aaron van Wirdum>Well, okay yeah I mean that's Mike in space doing Mike in space that's a

00:41:39.830 --> 00:41:41.110
<v Aaron van Wirdum>completely different story right?

00:41:43.040 --> 00:41:47.600
<v Aaron van Wirdum>Maybe. If the OP_RETURN is just OP_RETURN and there is no limit, then you're

00:41:47.600 --> 00:41:50.700
<v Aaron van Wirdum>saying then it doesn't matter whether it's in the witness or in the OP_RETURN.

00:41:50.900 --> 00:41:54.120
<v Sjors Provoost>Yeah, if the choice is between OP_RETURN and the witness and there was no

00:41:54.120 --> 00:41:55.240
<v Sjors Provoost>discount, then it didn't matter.

00:41:55.440 --> 00:41:56.060
<v Aaron van Wirdum>Right, but...

00:41:56.060 --> 00:41:57.360
<v Sjors Provoost>Also not for the health of the blockchain.

00:41:57.700 --> 00:42:03.420
<v Aaron van Wirdum>Yeah, but there is a discount. So wouldn't it be better if... I'm getting lost in

00:42:03.420 --> 00:42:08.760
<v Aaron van Wirdum>my own argument. No, I think I'm still following myself. Wouldn't it be fairer if

00:42:08.760 --> 00:42:14.420
<v Aaron van Wirdum>there was no discount and now that was either the OP_RETURN or the

00:42:14.420 --> 00:42:18.380
<v Aaron van Wirdum>witness? Instead of now definitely people are going to use the witness with a

00:42:18.380 --> 00:42:21.780
<v Aaron van Wirdum>discount, which means that the inscriptions are cheaper than transactions. Are

00:42:21.780 --> 00:42:22.560
<v Aaron van Wirdum>you still following me?

00:42:22.720 --> 00:42:24.300
<v Sjors Provoost>I think I'm still following me,

00:42:24.320 --> 00:42:25.120
<v Aaron van Wirdum>but I'm not sure anymore.

00:42:25.320 --> 00:42:28.860
<v Sjors Provoost>I don't think that's good. And now we're talking about just the case of I'm

00:42:28.860 --> 00:42:33.800
<v Sjors Provoost>downloading the old blockchain. So I'm a prune node and I arrived to Bitcoin for

00:42:33.800 --> 00:42:37.180
<v Sjors Provoost>the first time. Now I'm downloading the old blockchain. And in your no discount

00:42:37.180 --> 00:42:40.960
<v Sjors Provoost>scenario, where somehow we increased the block size to four megabytes as a hard

00:42:40.960 --> 00:42:43.740
<v Sjors Provoost>fork, I'm now downloading four megabyte blocks.

00:42:45.140 --> 00:42:47.760
<v Sjors Provoost>Whereas in the current world, I can download one megabyte block.

00:42:47.760 --> 00:42:48.100
<v Aaron van Wirdum>With real transactions.

00:42:49.000 --> 00:42:51.980
<v Sjors Provoost>Yeah, because these OP_RETURN transactions, you do have to download them. You

00:42:51.980 --> 00:42:56.900
<v Sjors Provoost>can't skip that part. With the Ordinals, I can skip it if I'm a new node catching up.

00:42:59.270 --> 00:43:01.650
<v Sjors Provoost>So there is a benefit to shoving things in your witness.

00:43:01.830 --> 00:43:04.110
<v Aaron van Wirdum>Why couldn't you skip OP_RETURNs?

00:43:05.110 --> 00:43:10.030
<v Sjors Provoost>Because in order to check what is in a block, you need to have everything to

00:43:10.030 --> 00:43:10.870
<v Sjors Provoost>check the hash, basically.

00:43:11.110 --> 00:43:12.050
<v Aaron van Wirdum>You already said that. You're right.

00:43:12.170 --> 00:43:14.810
<v Sjors Provoost>Otherwise, I think you could have a scenario where somebody would give you the

00:43:14.810 --> 00:43:17.390
<v Sjors Provoost>header of a block and the header would have the proof of work. And you're like,

00:43:17.430 --> 00:43:20.190
<v Sjors Provoost>yeah, this is a great block. It has all the proof of work. Then they give you the

00:43:20.190 --> 00:43:23.370
<v Sjors Provoost>contents of the block and they say, yeah, trust me, this belongs to that header.

00:43:23.630 --> 00:43:27.610
<v Sjors Provoost>And that doesn't work unless you completely restructure the block internally so

00:43:27.610 --> 00:43:31.330
<v Sjors Provoost>that you can have like Merkle trees of parts of the block. But that's really what

00:43:31.330 --> 00:43:34.600
<v Sjors Provoost>SegWit does. essentially puts some of the stuff on somewhere else.

00:43:34.600 --> 00:43:40.310
<v Aaron van Wirdum>Okay, so you support the witness discount even today

00:43:40.310 --> 00:43:45.980
<v Aaron van Wirdum>with today's knowledge that people are using it to upload [unclear]

00:43:45.940 --> 00:43:50.480
<v Sjors Provoost>I support it in the sense that given that we increased the block size to four

00:43:50.480 --> 00:43:54.680
<v Sjors Provoost>megabytes worst case or even if we had only increased it to two megabytes this is

00:43:54.680 --> 00:43:55.440
<v Sjors Provoost>a better way to do it.

00:43:55.440 --> 00:43:59.800
<v Aaron van Wirdum>You still think that the incentives work out this is how the incentives are

00:43:59.800 --> 00:44:01.100
<v Aaron van Wirdum>supposed to be used?

00:44:01.100 --> 00:44:05.580
<v Sjors Provoost>Yeah, I mean the alternative was either we stick to one megabyte so we have

00:44:05.580 --> 00:44:08.900
<v Sjors Provoost>SegWit but it's a one megabyte limit then it doesn't matter you don't need a

00:44:08.900 --> 00:44:13.340
<v Sjors Provoost>discount but if we do want to increase the block size then it's nice that that

00:44:13.340 --> 00:44:18.600
<v Sjors Provoost>all that extra stuff goes to a safe place yeah so I still think that's the right call.

00:44:18.600 --> 00:44:23.630
<v Aaron van Wirdum>Okay, I'm gonna think about this and I hope at least

00:44:23.630 --> 00:44:24.810
<v Sjors Provoost>Of course we didn't know that.

00:44:24.810 --> 00:44:29.070
<v Aaron van Wirdum>at least three listeners could keep up with the last five minutes of rambling

00:44:29.390 --> 00:44:34.230
<v Aaron van Wirdum>Sjors, is there anything else we need to discuss which we haven't yet

00:44:36.820 --> 00:44:41.740
<v Aaron van Wirdum>about the discount, about the way this discounts, or did that wrap it up more or less?

00:44:41.900 --> 00:44:45.360
<v Sjors Provoost>No, I think we've got it all. There's some good videos that you can watch, I

00:44:45.360 --> 00:44:49.020
<v Sjors Provoost>guess. But some of this is really a matter of reconstructing. I think if you look

00:44:49.020 --> 00:44:54.750
<v Sjors Provoost>at the mailing list posts from that time, they did not go... into as much, I

00:44:54.750 --> 00:44:57.870
<v Sjors Provoost>think it didn't go as much into as much depth as we just did.

00:44:58.090 --> 00:44:58.690
<v Aaron van Wirdum>Yeah, definitely.

00:44:58.690 --> 00:45:02.610
<v Sjors Provoost>It seems to me that some of these decisions were correct. For example, the idea

00:45:02.610 --> 00:45:06.770
<v Sjors Provoost>of having a single metric. But if you read the SegWit BIP and especially the

00:45:06.770 --> 00:45:10.210
<v Sjors Provoost>original version of the SegWit BIP, it doesn't even explain, I think it doesn't

00:45:10.210 --> 00:45:12.190
<v Sjors Provoost>even explain this need to have a single market.

00:45:13.100 --> 00:45:17.720
<v Aaron van Wirdum>That was my impression as well. I mean, I wasn't in every conversation,

00:45:17.760 --> 00:45:20.120
<v Aaron van Wirdum>especially not, you know, they were probably...

00:45:20.120 --> 00:45:24.380
<v Sjors Provoost>Now, it is said in the presentation that sipa gave, I think either in Hong Kong

00:45:24.380 --> 00:45:27.560
<v Sjors Provoost>or the follow-up a few days later in San Francisco, where he does explicitly

00:45:27.560 --> 00:45:31.900
<v Sjors Provoost>point out this problem of having one market. And there's some discussion about it

00:45:31.900 --> 00:45:36.250
<v Sjors Provoost>on the mailing list. But I think nowadays maybe you'd want to have a bit more

00:45:36.250 --> 00:45:40.330
<v Sjors Provoost>elaboration on that in a BIP. Because for all you know, somebody comes along with

00:45:40.330 --> 00:45:44.110
<v Sjors Provoost>a similar idea and just implements it incorrectly, forgets about this fee market

00:45:44.110 --> 00:45:49.730
<v Sjors Provoost>problem. Now we could have had SegWit with a double super complicated fee market

00:45:49.730 --> 00:45:53.290
<v Sjors Provoost>and it would have been very difficult to fix it if we didn't have somebody smart

00:45:53.290 --> 00:45:54.830
<v Sjors Provoost>enough to do it correctly in the first place.

00:45:56.010 --> 00:46:00.230
<v Aaron van Wirdum>Yeah, I was just gonna say my impression at the time was that four megabyte was

00:46:00.230 --> 00:46:04.070
<v Aaron van Wirdum>picked because people wanted the block size increase and four megabytes seemed

00:46:04.070 --> 00:46:09.540
<v Aaron van Wirdum>about right and over time as the debate was very heated

00:46:09.540 --> 00:46:14.600
<v Aaron van Wirdum>sort of arguments really only started to crystal crystallize that was my

00:46:14.600 --> 00:46:19.300
<v Aaron van Wirdum>impression but maybe you know As you mentioned, there was probably some thought

00:46:19.300 --> 00:46:20.420
<v Aaron van Wirdum>even before I realized that.

00:46:20.420 --> 00:46:23.960
<v Sjors Provoost>Probably, but of course we don't know what was happening. We don't know

00:46:23.960 --> 00:46:26.380
<v Sjors Provoost>everything that was happening before these presentations were given, right?

00:46:26.660 --> 00:46:26.920
<v Aaron van Wirdum>Right.

00:46:27.060 --> 00:46:32.140
<v Sjors Provoost>The heat around the block size wars was started in 2015 or so, whereas this

00:46:32.140 --> 00:46:33.800
<v Sjors Provoost>proposal was at the end of 2015.

00:46:35.130 --> 00:46:39.730
<v Aaron van Wirdum>Yeah, but it continued and then people started attacking SegWit for all kinds of

00:46:39.730 --> 00:46:41.170
<v Aaron van Wirdum>weird reasons from all directions.

00:46:41.550 --> 00:46:46.290
<v Sjors Provoost>Yeah, and I guess part of that might be because some of these things that we just

00:46:46.290 --> 00:46:51.350
<v Sjors Provoost>talked about today were not as clearly available. You could find out if you

00:46:51.350 --> 00:46:55.400
<v Sjors Provoost>watched the technical presentations. went all the way to the Q&A and went into

00:46:55.400 --> 00:46:58.540
<v Sjors Provoost>the mailing list discussions, but there was no Bitcoin Explained podcast at the time.

00:46:58.700 --> 00:46:59.040
<v Aaron van Wirdum>True.

00:46:59.260 --> 00:47:03.120
<v Sjors Provoost>Summing up these reasons in a super clear way. And that is why we thank you for

00:47:03.120 --> 00:47:04.100
<v Sjors Provoost>listening to Bitcoin

00:47:04.100 --> 00:47:05.000
<v Aaron van Wirdum>Explained.

