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

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

00:00:22.950 --> 00:00:23.470
<v Sjors Provoost>Explained.

00:00:23.690 --> 00:00:28.830
<v Aaron van Wirdum>I love it. Here we are again. It feels very retro.

00:00:29.230 --> 00:00:33.750
<v Aaron van Wirdum>We just recorded three quarters of an episode before you realized you weren't

00:00:33.750 --> 00:00:34.850
<v Aaron van Wirdum>actually recording anything.

00:00:35.230 --> 00:00:39.710
<v Sjors Provoost>Yep, there's this little device and you have to put the SD card in it. Otherwise,

00:00:39.970 --> 00:00:43.850
<v Sjors Provoost>you'll press the record button and you'll see all the volume and all that stuff.

00:00:43.990 --> 00:00:45.770
<v Sjors Provoost>It looks very good, but there is no counter.

00:00:46.290 --> 00:00:49.830
<v Aaron van Wirdum>Yeah, I think that used to happen almost every time in the first couple of months.

00:00:49.990 --> 00:00:52.630
<v Sjors Provoost>No, I think we've only done it once.

00:00:52.810 --> 00:00:57.330
<v Aaron van Wirdum>No, [unclear] done it. What? No, we did it all the time, Sjors.

00:00:57.630 --> 00:00:57.810
<v Sjors Provoost>Oh.

00:00:57.990 --> 00:00:58.790
<v Aaron van Wirdum>Did you forget about that?

00:00:58.870 --> 00:00:59.990
<v Sjors Provoost>Maybe I suppressed the memory.

00:01:00.910 --> 00:01:05.590
<v Aaron van Wirdum>Anyways, so this time I hope you're recording and we're going to go for take two.

00:01:05.890 --> 00:01:07.850
<v Sjors Provoost>I see a clock ticking, so that's good.

00:01:08.310 --> 00:01:12.780
<v Aaron van Wirdum>Nice. We're going to discuss burying soft forks.

00:01:13.360 --> 00:01:14.000
<v Sjors Provoost>All right.

00:01:14.200 --> 00:01:18.400
<v Aaron van Wirdum>Yeah, this is one of these topics that I sort of knew was a thing that was

00:01:18.400 --> 00:01:24.200
<v Aaron van Wirdum>sometimes discussed by developers, but also based on the discussion

00:01:24.200 --> 00:01:28.440
<v Aaron van Wirdum>that I was sort of you know eyeing on the Bitcoin development mailing list I

00:01:28.440 --> 00:01:32.820
<v Aaron van Wirdum>could tell that it was kind of a niche not super important kind of big deal sort

00:01:32.820 --> 00:01:37.760
<v Aaron van Wirdum>of thing. You know, only developers that are very far into the weeds kind of

00:01:37.760 --> 00:01:40.280
<v Aaron van Wirdum>cared about. So I never really paid attention to it.

00:01:40.380 --> 00:01:44.900
<v Sjors Provoost>But then we were desperate to find a new topic and I found it and you found it interesting.

00:01:45.120 --> 00:01:48.100
<v Aaron van Wirdum>Yeah, I thought it was actually kind of interesting. It's one of these topics

00:01:48.100 --> 00:01:51.640
<v Aaron van Wirdum>that, you know, it might be niche, but it still has some sort of broader

00:01:51.640 --> 00:01:57.140
<v Aaron van Wirdum>implications about, you know, how do we think about Bitcoin or in a way...

00:01:57.580 --> 00:02:02.700
<v Aaron van Wirdum>I've always found protocol changes the most interesting part of Bitcoin because

00:02:02.700 --> 00:02:08.650
<v Aaron van Wirdum>it kind of gives you a very existential idea of what Bitcoin actually is. Like if

00:02:08.650 --> 00:02:12.950
<v Aaron van Wirdum>it can change, then you can sort of think about, you know, what conditions can

00:02:12.950 --> 00:02:17.890
<v Aaron van Wirdum>you change it then or what is Bitcoin then? You can get very philosophical about

00:02:17.890 --> 00:02:21.570
<v Aaron van Wirdum>it if you want to, but I don't think we're really going to do that today, but we

00:02:21.570 --> 00:02:27.230
<v Aaron van Wirdum>are going to discuss burying soft forks. So yeah, we have discussed Taproot and

00:02:27.230 --> 00:02:30.070
<v Aaron van Wirdum>Taproot activation in multiple episodes so far.

00:02:30.230 --> 00:02:31.870
<v Sjors Provoost>It's a five-episode epic story.

00:02:32.030 --> 00:02:37.190
<v Aaron van Wirdum>It's like a miniseries within our podcast from start to finish. We sort of

00:02:37.190 --> 00:02:42.460
<v Aaron van Wirdum>covered the whole Taproot activation saga. And in a way, this is a new entry in

00:02:42.460 --> 00:02:44.860
<v Aaron van Wirdum>that miniseries. So I like it.

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

00:02:45.740 --> 00:02:49.640
<v Aaron van Wirdum>Probably the last one. Probably this will be the last entry because at this

00:02:49.640 --> 00:02:53.800
<v Aaron van Wirdum>point, we're going to discuss, you know, the soft fork happened, the activation

00:02:53.800 --> 00:02:56.500
<v Aaron van Wirdum>happened. It all went great.

00:02:59.240 --> 00:03:04.950
<v Aaron van Wirdum>And at this point, the question is sort of, how do we move forward from there?

00:03:04.950 --> 00:03:09.530
<v Aaron van Wirdum>How do we now retroactively kind of deal with the activation code and with

00:03:09.530 --> 00:03:13.530
<v Aaron van Wirdum>Taproot? And that's what burying soft forks is about.

00:03:13.770 --> 00:03:18.410
<v Sjors Provoost>Yeah. So one analogy that can be used, although we'll get to the philosophical

00:03:18.410 --> 00:03:24.350
<v Sjors Provoost>discussion about that, is that activation code is a scaffold. It's like when you

00:03:24.350 --> 00:03:26.970
<v Sjors Provoost>have a, you know, when there's a soft fork, it's like building a new house. And

00:03:26.970 --> 00:03:30.090
<v Sjors Provoost>when you're building a house, there's a scaffold next to it. And then the

00:03:30.090 --> 00:03:33.750
<v Sjors Provoost>question is, what do you do with the scaffold when the house is done? And that's

00:03:33.750 --> 00:03:36.230
<v Sjors Provoost>kind of what we're going to talk about. Can we just remove it somehow?

00:03:36.610 --> 00:03:41.790
<v Aaron van Wirdum>Yeah. So this has happened before. Burying soft forks, it's not a completely new

00:03:41.790 --> 00:03:47.790
<v Aaron van Wirdum>concept. It is being discussed again, at least sort of on GitHub, not really

00:03:47.790 --> 00:03:51.070
<v Aaron van Wirdum>on the Bitcoin dev list this time, I think, because I guess Bitcoin Core

00:03:51.070 --> 00:03:54.970
<v Aaron van Wirdum>developers have already sort of agreed that this is kind of the way to go.

00:03:55.190 --> 00:03:56.310
<v Sjors Provoost>Well, it's still open, so.

00:03:57.590 --> 00:04:02.010
<v Aaron van Wirdum>All right. So it is being discussed again, but it has happened before. So I'll

00:04:02.010 --> 00:04:06.870
<v Aaron van Wirdum>just let you explain, Sjors, what does it mean? What is burying a soft fork?

00:04:07.070 --> 00:04:09.470
<v Sjors Provoost>Well, I think you wanted to recap first what a soft fork is.

00:04:09.550 --> 00:04:13.570
<v Aaron van Wirdum>Yeah, sure. Let's start with that. You're right. For those listeners that don't

00:04:13.570 --> 00:04:13.990
<v Aaron van Wirdum>know that.

00:04:14.310 --> 00:04:19.110
<v Sjors Provoost>It's also relevant to explain how the burying works. So a soft fork is a

00:04:19.110 --> 00:04:20.130
<v Sjors Provoost>tightening of the rules.

00:04:21.400 --> 00:04:25.960
<v Sjors Provoost>And intuitively, you might think, what? How do you get new features when you have

00:04:25.960 --> 00:04:29.060
<v Sjors Provoost>less rules? Well, we've explained this in earlier episodes, but basically,

00:04:29.380 --> 00:04:32.020
<v Sjors Provoost>Bitcoin has a lot of ways to throw away money.

00:04:33.220 --> 00:04:38.460
<v Sjors Provoost>And so you can make all sorts of addresses, quote unquote, that you can send

00:04:38.460 --> 00:04:42.540
<v Sjors Provoost>coins to. And then anybody can take the money from those addresses. And

00:04:42.540 --> 00:04:43.640
<v Sjors Provoost>generally, you don't want to do that.

00:04:43.740 --> 00:04:47.140
<v Aaron van Wirdum>You don't even need a signature. There's just no requirements. You can just take

00:04:47.140 --> 00:04:50.040
<v Aaron van Wirdum>the money from these outputs or addresses.

00:04:50.540 --> 00:04:55.900
<v Sjors Provoost>So what a soft fork does in practice, at least some soft forks do, is to say,

00:04:56.020 --> 00:04:59.860
<v Sjors Provoost>well, there's now going to be slightly fewer ways to throw away your money. So if

00:04:59.860 --> 00:05:02.780
<v Sjors Provoost>you make this specific type of transaction, we're now going to call that Taproot.

00:05:03.340 --> 00:05:06.920
<v Sjors Provoost>And you can only spend that with a valid Schnorr signature, et cetera, et cetera.

00:05:07.060 --> 00:05:10.220
<v Sjors Provoost>Whereas before the soft fork, you could just take those coins.

00:05:10.800 --> 00:05:10.920
<v Aaron van Wirdum>Right.

00:05:11.440 --> 00:05:16.360
<v Sjors Provoost>And this ties into the burying of the soft fork because it turns out that if you

00:05:16.360 --> 00:05:20.340
<v Sjors Provoost>look back at the history of the blockchain and you see how many people have

00:05:20.340 --> 00:05:26.140
<v Sjors Provoost>actually thrown away their money in the past in a way that would now be

00:05:26.140 --> 00:05:29.890
<v Sjors Provoost>called Taproot, it turns out that's only happened once. So there's only one

00:05:29.890 --> 00:05:34.930
<v Sjors Provoost>historical transaction that happens before Taproot activated, where somebody sent

00:05:34.930 --> 00:05:39.250
<v Sjors Provoost>money to something that we now call a Taproot address. And more importantly,

00:05:39.570 --> 00:05:44.070
<v Sjors Provoost>somebody else took that money. And that taking of the money would not be

00:05:44.070 --> 00:05:46.230
<v Sjors Provoost>compliant with the modern Taproot rules.

00:05:46.590 --> 00:05:50.450
<v Aaron van Wirdum>Yes. Well, actually, I'll have to correct you there a little bit. So actually,

00:05:50.450 --> 00:05:56.080
<v Aaron van Wirdum>several people sent money to a Taproot address before Taproot was active.

00:05:56.320 --> 00:05:57.160
<v Sjors Provoost>But only one took it.

00:05:57.400 --> 00:06:02.220
<v Aaron van Wirdum>Yes, it's only been taken one time. Now, sending to such an address was always

00:06:02.220 --> 00:06:05.680
<v Aaron van Wirdum>okay, of course, and it's still okay, and that was never a problem. It's a taken

00:06:05.680 --> 00:06:11.480
<v Aaron van Wirdum>from that address that since Taproot is active, you cannot do that

00:06:11.480 --> 00:06:15.380
<v Aaron van Wirdum>anymore. But before Taproot was active, you could just take that money.

00:06:15.620 --> 00:06:16.140
<v Sjors Provoost>That's right.

00:06:16.540 --> 00:06:17.020
<v Aaron van Wirdum>Okay.

00:06:17.320 --> 00:06:21.300
<v Sjors Provoost>And so this presents an opportunity to look at the Bitcoin Core source code,

00:06:21.460 --> 00:06:27.440
<v Sjors Provoost>which currently just says, wait, when you see the blockchain for the first time,

00:06:27.640 --> 00:06:30.600
<v Sjors Provoost>you think the whole thing, you look at the signaling, and then after a while,

00:06:30.600 --> 00:06:34.500
<v Sjors Provoost>you've seen that the speedy trial activated, and now you're going to apply the

00:06:34.500 --> 00:06:38.380
<v Sjors Provoost>new rules to the new blocks. What you can do instead is say, don't worry about

00:06:38.380 --> 00:06:42.580
<v Sjors Provoost>the signaling, just apply the Taproot rules from the Genesis block onwards,

00:06:42.760 --> 00:06:47.350
<v Sjors Provoost>pretend that Taproot has always existed, with one exception. And that exception

00:06:47.350 --> 00:06:51.950
<v Sjors Provoost>would be hardcoded in the source code saying, well, Taproot is always active

00:06:51.950 --> 00:06:53.370
<v Sjors Provoost>except for this specific block.

00:06:53.630 --> 00:06:58.290
<v Aaron van Wirdum>Yes, and that block would be the block that includes the transaction that I just

00:06:58.290 --> 00:07:02.670
<v Aaron van Wirdum>mentioned that took these coins. They were sent to Brink, actually.

00:07:04.050 --> 00:07:08.590
<v Aaron van Wirdum>There's a blog post. While we're discussing it, let me just mention that real

00:07:08.590 --> 00:07:14.190
<v Aaron van Wirdum>quick. So it was actually taken by... or at least the Bitcoin developer named

00:07:14.190 --> 00:07:19.730
<v Aaron van Wirdum>0xB10C. He sort of initiated, and then it was included by

00:07:19.730 --> 00:07:25.310
<v Aaron van Wirdum>F2Pool, and it was sent. So these coins were

00:07:25.310 --> 00:07:26.970
<v Aaron van Wirdum>sent to Brink at the time.

00:07:27.110 --> 00:07:27.850
<v Sjors Provoost>Oh, that's very nice.

00:07:27.970 --> 00:07:32.550
<v Aaron van Wirdum>Not very important in the context of the rest of this episode, but a little detail.

00:07:31.160 --> 00:07:36.110
<v Sjors Provoost>No, and it turns out something like this has happened in the past with BIP 16

00:07:36.110 --> 00:07:41.910
<v Sjors Provoost>that introduced, back in 2012, that introduced pay-to-script hash. There was

00:07:41.910 --> 00:07:45.710
<v Sjors Provoost>also one exception block. So there has been, there is precedent of having an

00:07:45.710 --> 00:07:49.430
<v Sjors Provoost>exception block in the Bitcoin source code in this way. So the Taproot would just

00:07:49.430 --> 00:07:50.950
<v Sjors Provoost>have another exception block.

00:07:51.630 --> 00:07:53.490
<v Aaron van Wirdum>So let me recap that real quick.

00:07:53.730 --> 00:07:57.590
<v Sjors Provoost>Okay. And with SegWit, I just add is there is no exception necessary.

00:07:57.910 --> 00:07:58.070
<v Aaron van Wirdum>Right.

00:07:58.150 --> 00:08:02.550
<v Sjors Provoost>So SegWit rules can be applied from the Genesis block perfectly. There's no exception.

00:08:02.810 --> 00:08:07.290
<v Aaron van Wirdum>Right. Yes. Okay. So if you currently run a Bitcoin Core

00:08:07.680 --> 00:08:09.040
<v Aaron van Wirdum>node,

00:08:10.780 --> 00:08:14.480
<v Aaron van Wirdum>Better yet, if you sync a Bitcoin Core node, so if you start from the Genesis

00:08:14.480 --> 00:08:18.840
<v Aaron van Wirdum>block, you start from the very first block that was released by Satoshi, and then

00:08:18.840 --> 00:08:22.240
<v Aaron van Wirdum>you go through the entire blockchain to verify every transaction in every block,

00:08:22.520 --> 00:08:27.780
<v Aaron van Wirdum>then what your Bitcoin Core node is currently doing is, at some point, it will

00:08:27.780 --> 00:08:32.860
<v Aaron van Wirdum>check if there is blockchain signaling going on, and then it sees that there is,

00:08:32.880 --> 00:08:36.380
<v Aaron van Wirdum>in fact, blockchain signaling going on, and then from a certain block, it will

00:08:36.380 --> 00:08:40.550
<v Aaron van Wirdum>start to enforce the Taproot rules. That's how a Bitcoin Core node right now

00:08:40.550 --> 00:08:44.590
<v Aaron van Wirdum>works when it comes to Taproot. And then this proposal, which has been done with

00:08:44.590 --> 00:08:48.890
<v Aaron van Wirdum>other soft forks before, is that it will actually start applying the Taproot

00:08:48.890 --> 00:08:54.370
<v Aaron van Wirdum>rules from block zero, from the very beginning, with the exception

00:08:54.370 --> 00:08:59.310
<v Aaron van Wirdum>for this one block that has an invalid spend in it under the Taproot rules, and

00:08:59.310 --> 00:09:04.670
<v Aaron van Wirdum>we'll just ignore that. Right? This is the recap. This is how it would work. So

00:09:04.670 --> 00:09:10.580
<v Aaron van Wirdum>what are the benefits of implementing this in Bitcoin Core? Why is it better

00:09:10.580 --> 00:09:11.940
<v Aaron van Wirdum>to start from block zero?

00:09:12.240 --> 00:09:15.800
<v Sjors Provoost>Yeah, so I think the first thing to say is that this is not a dramatic benefit

00:09:15.800 --> 00:09:20.000
<v Sjors Provoost>that we're going to talk about. It's somewhat marginal. However, we're dealing

00:09:20.000 --> 00:09:25.300
<v Sjors Provoost>with very critical code. So the less headache basically for developers, the more

00:09:25.300 --> 00:09:27.760
<v Sjors Provoost>likely they spend their time finding real bugs.

00:09:29.040 --> 00:09:33.020
<v Sjors Provoost>It basically, first of all, it makes the code a little bit simpler, but that's

00:09:33.020 --> 00:09:37.630
<v Sjors Provoost>very marginal. So instead of saying, after this block, do X, it says... do X all

00:09:37.630 --> 00:09:39.030
<v Sjors Provoost>the time, except for this block.

00:09:39.270 --> 00:09:39.650
<v Aaron van Wirdum>Right.

00:09:40.590 --> 00:09:44.630
<v Sjors Provoost>And the other side is that it makes testing the code easier. So Bitcoin Core

00:09:44.630 --> 00:09:50.910
<v Sjors Provoost>itself has tests that are run in something called the regtest framework from regression.

00:09:52.990 --> 00:09:58.410
<v Sjors Provoost>And what these tests do is they simulate a fresh blockchain. So with a fresh

00:09:58.410 --> 00:10:02.550
<v Sjors Provoost>Genesis block or maybe the real Genesis block. And then they create very low

00:10:02.550 --> 00:10:05.890
<v Sjors Provoost>difficulty blocks. So they very quickly can build a blockchain with 100 blocks or

00:10:05.890 --> 00:10:11.770
<v Sjors Provoost>200 blocks on it. And then they can check all the rules, basically. So there's a

00:10:11.770 --> 00:10:16.270
<v Sjors Provoost>test that says, okay, make sure that before Taproot activates, these rules apply

00:10:16.270 --> 00:10:20.970
<v Sjors Provoost>and these blocks are still valid. And then after Taproot activates, the test

00:10:20.970 --> 00:10:25.190
<v Sjors Provoost>might check that the Taproot rules are actually enforced. And so if you just

00:10:25.190 --> 00:10:29.570
<v Sjors Provoost>pretend that Taproot has always been there, 1984 style, then

00:10:29.570 --> 00:10:34.210
<v Sjors Provoost>basically the test can be simplified because you only need to test for the

00:10:34.210 --> 00:10:38.360
<v Sjors Provoost>enforcement of Taproot rules. You don't have to test anymore for pre-activation

00:10:38.360 --> 00:10:41.480
<v Sjors Provoost>scenarios. So that's basically a simplification there.

00:10:42.290 --> 00:10:46.970
<v Aaron van Wirdum>Right. So you've now mentioned two benefits. One of them, it cleans up the actual

00:10:46.970 --> 00:10:52.820
<v Aaron van Wirdum>code of the Bitcoin Core code base. And the other way is it simplifies

00:10:52.820 --> 00:10:56.520
<v Aaron van Wirdum>tests that you might run because now there's less scenarios.

00:10:56.900 --> 00:11:01.680
<v Sjors Provoost>Well, those tests are in the Bitcoin source code too. So yeah, there's fewer

00:11:01.680 --> 00:11:05.400
<v Sjors Provoost>permutations to test, right? Especially if you add up multiple soft forks. Like,

00:11:05.520 --> 00:11:09.680
<v Sjors Provoost>okay, we have to test before SegWit and then after SegWit, but before Taproot.

00:11:10.060 --> 00:11:11.140
<v Sjors Provoost>Those kind of combinations.

00:11:11.480 --> 00:11:15.240
<v Aaron van Wirdum>Okay, so I think we can actually summarize it as it just cleans up the code. It's

00:11:15.240 --> 00:11:20.490
<v Aaron van Wirdum>a... code cleanup. And the idea is essentially that

00:11:21.070 --> 00:11:26.980
<v Aaron van Wirdum>the soft fork activated so long ago that it doesn't

00:11:26.980 --> 00:11:29.040
<v Aaron van Wirdum>really make a difference. Am I saying that right?

00:11:29.040 --> 00:11:32.060
<v Sjors Provoost>Well, we'll get to that. I think there's a second part to the cleanup that I want

00:11:32.060 --> 00:11:37.970
<v Sjors Provoost>to emphasize and then we can say that analogy. The second thing is

00:11:37.970 --> 00:11:42.850
<v Sjors Provoost>now that we've said Taproot has always existed as in the 1984 example.

00:11:43.910 --> 00:11:49.690
<v Sjors Provoost>We still have these signals that happened in blocks. And, well, there's no point

00:11:49.690 --> 00:11:52.610
<v Sjors Provoost>in looking at those signals anymore because we've already said SegWit is always

00:11:52.610 --> 00:11:56.810
<v Sjors Provoost>there or Taproot is always there. So why do we look at the signals? So the second

00:11:56.810 --> 00:12:00.950
<v Sjors Provoost>cleanup would be to simply not check those signals anymore. So to remove the

00:12:00.950 --> 00:12:06.830
<v Sjors Provoost>speedy trial, essentially, in this case. And that has, again, somewhat of a

00:12:06.830 --> 00:12:11.900
<v Sjors Provoost>benefit for developers. What it allows developers to do is say, hey, we want to

00:12:11.900 --> 00:12:15.720
<v Sjors Provoost>change the activation mechanism itself. Maybe we want to change the BIP9 system

00:12:15.720 --> 00:12:21.300
<v Sjors Provoost>to something more like a BIP8 system. And then we can just change the

00:12:21.300 --> 00:12:26.120
<v Sjors Provoost>code, basically. We don't have to copy the code and write a new piece of code. We

00:12:26.120 --> 00:12:30.560
<v Sjors Provoost>can change it entirely because the code is no longer used for anything. So it's

00:12:30.560 --> 00:12:34.740
<v Sjors Provoost>safer to just change it. Again, that's marginal, but it's still nice.

00:12:35.040 --> 00:12:39.930
<v Aaron van Wirdum>Yeah, and it's also still code cleanup, right? That's the benefit, essentially.

00:12:40.900 --> 00:12:45.940
<v Sjors Provoost>Yeah, so especially if you understand that BIP-8, at least the simple version of

00:12:45.940 --> 00:12:51.580
<v Sjors Provoost>BIP-8 with LOT is false that we talked about, is essentially simpler than BIP-9.

00:12:51.780 --> 00:12:56.800
<v Sjors Provoost>So yeah, you can actually maybe remove some code net, but I don't know.

00:12:56.920 --> 00:13:00.600
<v Aaron van Wirdum>Well, that wasn't really the point I was getting at. I was just, in general, just

00:13:00.600 --> 00:13:04.720
<v Aaron van Wirdum>not having to check for the activation signals for the specific soft fork.

00:13:05.200 --> 00:13:07.280
<v Sjors Provoost>Yeah, it saves, again, a little bit of code.

00:13:07.560 --> 00:13:13.380
<v Aaron van Wirdum>Yeah. So that makes a lot of sense to me. I

00:13:13.380 --> 00:13:17.380
<v Aaron van Wirdum>can barely think of any downside to that. And that is sort of what you were

00:13:17.380 --> 00:13:22.000
<v Aaron van Wirdum>getting at earlier. You mentioned scaffolds, right? I think that was in this

00:13:22.000 --> 00:13:24.200
<v Aaron van Wirdum>recording, not in the one we erased.

00:13:24.460 --> 00:13:25.740
<v Sjors Provoost>Yeah, we brought it up in this recording.

00:13:25.980 --> 00:13:31.370
<v Aaron van Wirdum>Or maybe in both. Anyway, so for the second benefit, you're basically removing

00:13:31.370 --> 00:13:35.930
<v Aaron van Wirdum>the scaffolds. It activated. Everyone agreed that it activated on this specific block.

00:13:36.590 --> 00:13:41.530
<v Sjors Provoost>Yeah, arguably both are scaffolds because the idea that you're going to start

00:13:41.530 --> 00:13:45.730
<v Sjors Provoost>applying rules from a certain block is also a scaffold compared to just applying

00:13:45.730 --> 00:13:46.470
<v Sjors Provoost>the rules all the time.

00:13:46.730 --> 00:13:52.430
<v Aaron van Wirdum>Well, I think that's where the discussion comes in. So I

00:13:52.430 --> 00:13:58.130
<v Aaron van Wirdum>think we're ready to point out where some of the disagreement stems from, right?

00:13:58.330 --> 00:13:58.730
<v Sjors Provoost>Yep, we're ready.

00:13:58.990 --> 00:14:04.760
<v Aaron van Wirdum>Right, so we've just mentioned that the main benefits are all kind of...

00:14:04.610 --> 00:14:10.270
<v Aaron van Wirdum>code cleanup related. They benefit, you could argue, they benefit developers. You

00:14:10.270 --> 00:14:14.190
<v Aaron van Wirdum>know indirectly anything that benefits developers benefits users because

00:14:14.190 --> 00:14:19.270
<v Aaron van Wirdum>developers work for users, but they are things that benefit developers and they

00:14:19.270 --> 00:14:24.320
<v Aaron van Wirdum>shouldn't affect users, and they arguably don't affect users.

00:14:24.390 --> 00:14:30.180
<v Aaron van Wirdum>But there are some edge cases

00:14:30.180 --> 00:14:34.650
<v Aaron van Wirdum>where it could actually affect users. So when we were discussing

00:14:34.650 --> 00:14:39.930
<v Aaron van Wirdum>at the beginning of the episode, I think that was this one and not the one we

00:14:39.930 --> 00:14:45.850
<v Aaron van Wirdum>erased. I hope we mentioned, anyways, that a soft fork can in fact

00:14:45.850 --> 00:14:48.990
<v Aaron van Wirdum>split the blockchain or even a hard fork?

00:14:49.330 --> 00:14:51.350
<v Sjors Provoost>No, I don't think we've said that in this recording yet.

00:14:51.670 --> 00:14:55.390
<v Aaron van Wirdum>Okay, maybe do you want to point it out? Well, I'll just point it out. So

00:14:55.390 --> 00:15:00.970
<v Aaron van Wirdum>basically, either a soft fork or a hard fork can split the

00:15:00.970 --> 00:15:05.890
<v Aaron van Wirdum>blockchain between users that are using the old rules and users that are using

00:15:05.890 --> 00:15:11.240
<v Aaron van Wirdum>the new rules. Great benefit of soft fork is that if a majority of hash power

00:15:11.240 --> 00:15:16.640
<v Aaron van Wirdum>is enforcing the soft fork rules, then the chain should not split. Then

00:15:16.640 --> 00:15:20.740
<v Aaron van Wirdum>the upgrade should be backwards compatible, as they call it.

00:15:21.950 --> 00:15:26.790
<v Sjors Provoost>Which means that people do not have to upgrade their nodes immediately when

00:15:26.790 --> 00:15:29.190
<v Sjors Provoost>there's a soft fork, and that's kind of nice. Because we don't want to force

00:15:29.190 --> 00:15:29.810
<v Sjors Provoost>people to upgrade.

00:15:30.130 --> 00:15:35.060
<v Aaron van Wirdum>Yeah, they can upgrade a bit later if they want, or potentially even never. Okay.

00:15:37.070 --> 00:15:42.970
<v Aaron van Wirdum>In this case, a new Bitcoin Core node would assume that

00:15:42.970 --> 00:15:48.770
<v Aaron van Wirdum>the Taproot rules have always applied. Now, what this means is that,

00:15:49.050 --> 00:15:55.050
<v Aaron van Wirdum>and this is the edge case, if there is a very big reorg, so

00:15:55.050 --> 00:16:00.330
<v Aaron van Wirdum>someone starts mining on top of a block from a year ago or whatever it is,

00:16:00.490 --> 00:16:06.450
<v Aaron van Wirdum>and... That someone, you know, aliens have come to Earth, I think is the analogy.

00:16:07.050 --> 00:16:12.880
<v Sjors Provoost>Yeah, it's either the aliens or some secret government

00:16:12.880 --> 00:16:13.320
<v Sjors Provoost>agency.

00:16:13.580 --> 00:16:17.920
<v Aaron van Wirdum>Yeah, someone has a lot of hash power for whatever reason. They start mining on a

00:16:17.920 --> 00:16:23.640
<v Aaron van Wirdum>block from a year ago, and they actually claim the longest chain. Now, in that

00:16:23.640 --> 00:16:28.430
<v Aaron van Wirdum>chain, they make a transaction.

00:16:29.730 --> 00:16:35.230
<v Aaron van Wirdum>And they do this before the original Taproot activation block. They make a

00:16:35.230 --> 00:16:37.170
<v Aaron van Wirdum>transaction that breaks the Taproot rules.

00:16:37.510 --> 00:16:37.850
<v Sjors Provoost>That's right.

00:16:38.070 --> 00:16:43.670
<v Aaron van Wirdum>So all nodes, all Bitcoin Core nodes, for example, will accept this chain because

00:16:43.670 --> 00:16:49.250
<v Aaron van Wirdum>it's the longest valid chain. While new Bitcoin Core nodes who are enforcing all

00:16:49.250 --> 00:16:53.430
<v Aaron van Wirdum>their Taproot rules, no, sorry, who are enforcing Taproot rules from the

00:16:53.430 --> 00:16:58.480
<v Aaron van Wirdum>beginning, they will reject this chain because... It's an invalid chain.

00:16:58.680 --> 00:17:03.120
<v Sjors Provoost>Yeah, so basically when a new chain appears, what the node will do is it will

00:17:03.120 --> 00:17:07.940
<v Sjors Provoost>just roll back its blockchain. It will just basically do everything in reverse.

00:17:08.200 --> 00:17:12.780
<v Sjors Provoost>And when all the coins that are spent are recreated until it gets to the forking

00:17:12.780 --> 00:17:16.820
<v Sjors Provoost>point and then follows the longest chain all the way up, checking the rules for

00:17:16.820 --> 00:17:21.220
<v Sjors Provoost>that new longest chain. And so if it goes, indeed, if it goes before Taproot

00:17:21.220 --> 00:17:27.010
<v Sjors Provoost>activation, then... yeah, Taproot rules didn't apply. If you're an old node, you

00:17:27.010 --> 00:17:30.210
<v Sjors Provoost>would say, okay, Taproot is no longer active because you've gone back in time.

00:17:31.100 --> 00:17:35.920
<v Sjors Provoost>And those blocks can just do whatever they want. But if you're a new node under

00:17:35.920 --> 00:17:39.930
<v Sjors Provoost>this little cleanup, you're going to say... No, no, no. Taproot rules are always

00:17:39.930 --> 00:17:44.790
<v Sjors Provoost>active. So if anything violates Taproot rules, I'm going to complain. So that

00:17:44.790 --> 00:17:48.930
<v Sjors Provoost>means if the new blocks are written, you know, at the low enough, then yeah, it's

00:17:48.930 --> 00:17:49.370
<v Sjors Provoost>going to be a problem.

00:17:49.830 --> 00:17:49.950
<v Aaron van Wirdum>Yeah.

00:17:50.150 --> 00:17:53.870
<v Sjors Provoost>And it could even be worse. Like Taproot could never activate at all, according

00:17:53.870 --> 00:17:57.550
<v Sjors Provoost>to the old nodes. Because if you go back before the speedy trial, if the aliens

00:17:57.550 --> 00:18:02.890
<v Sjors Provoost>basically reorg back to 2020, they then, and then replay again, they might just

00:18:02.890 --> 00:18:08.760
<v Sjors Provoost>decide to not signal for Taproot and say Taproot never happened. Now, the

00:18:08.760 --> 00:18:13.260
<v Sjors Provoost>reason we don't care about that this much is that this scenario is really,

00:18:13.360 --> 00:18:18.240
<v Sjors Provoost>really, really bad. So the analogy might be to say, well, if all of the

00:18:18.240 --> 00:18:22.200
<v Sjors Provoost>Netherlands is flooded, are we really going to argue about this street name in

00:18:22.200 --> 00:18:24.500
<v Sjors Provoost>Rotterdam that we have issues about?

00:18:25.540 --> 00:18:30.680
<v Aaron van Wirdum>Right, yes. The arguments, I'll just, you explain it clearly, I think, but still

00:18:30.680 --> 00:18:36.520
<v Aaron van Wirdum>to reiterate, the argument is that if a... reorg happens that is

00:18:36.520 --> 00:18:42.340
<v Aaron van Wirdum>this bad then Bitcoin is screwed either way and it's not worth considering

00:18:42.340 --> 00:18:45.060
<v Aaron van Wirdum>even, essentially, right? Or

00:18:45.060 --> 00:18:49.640
<v Sjors Provoost>maybe at least you probably have to do some human intervention to decide what,

00:18:49.640 --> 00:18:52.460
<v Sjors Provoost>what on earth you're going to do about this situation because it means that

00:18:52.460 --> 00:18:56.240
<v Sjors Provoost>probably lots of people's coins won't, won't exist anymore.

00:18:57.790 --> 00:19:03.290
<v Sjors Provoost>Yeah, all the transactions may or may not be replayed again. So unless you bought

00:19:03.290 --> 00:19:06.750
<v Sjors Provoost>Bitcoin in 2011 and you just HODLed and never moved them, you're going to be

00:19:06.750 --> 00:19:10.850
<v Sjors Provoost>impacted by this event. And the whole point of a money system, you know, kind of

00:19:10.850 --> 00:19:16.520
<v Sjors Provoost>goes away if that much changes. It's very similar to in a fiat system if

00:19:16.520 --> 00:19:20.020
<v Sjors Provoost>suddenly your bank account is zero or a million, depending on some random

00:19:20.020 --> 00:19:24.600
<v Sjors Provoost>historical glitch. Are you really going to just keep on going with the bank

00:19:24.600 --> 00:19:28.340
<v Sjors Provoost>balance or are you going to do something else? It's a big disaster if this happens.

00:19:28.700 --> 00:19:32.900
<v Aaron van Wirdum>Yeah, well, so on the other side of the debate is, for example, Eric Voskuil,

00:19:33.080 --> 00:19:38.420
<v Aaron van Wirdum>who's the lead developer of Libbitcoin. And he argues, or at least one of his

00:19:38.420 --> 00:19:44.320
<v Aaron van Wirdum>arguments is that this threshold that you just... like

00:19:44.320 --> 00:19:49.800
<v Aaron van Wirdum>at what point is this the case? At what point doesn't it matter anymore that

00:19:49.800 --> 00:19:54.420
<v Aaron van Wirdum>there's a big reorg? Like is it after a day? Is it after two days? Is it after a

00:19:54.420 --> 00:19:57.020
<v Aaron van Wirdum>week, two weeks? Like where is this threshold?

00:19:57.340 --> 00:19:57.520
<v Sjors Provoost>Yeah.

00:19:57.860 --> 00:20:03.750
<v Aaron van Wirdum>And you know, he, I guess he values consistency a

00:20:03.750 --> 00:20:08.540
<v Aaron van Wirdum>lot when it comes to these kinds of things. And his argument would be, or is, I

00:20:08.540 --> 00:20:13.500
<v Aaron van Wirdum>think, well, I need to be careful to represent his arguments because he might

00:20:13.500 --> 00:20:16.340
<v Aaron van Wirdum>disagree with my explanation of it.

00:20:16.360 --> 00:20:19.500
<v Sjors Provoost>We could say a hypothetical argument could be whether or not somebody makes the argument.

00:20:19.820 --> 00:20:20.680
<v Aaron van Wirdum>Maybe that's better.

00:20:22.220 --> 00:20:28.100
<v Aaron van Wirdum>The only consistent argument there is there is no threshold. It's just for

00:20:28.100 --> 00:20:33.420
<v Aaron van Wirdum>each block, you need to assign a probability that

00:20:33.420 --> 00:20:39.240
<v Aaron van Wirdum>it... it's gonna make reorgs harder. So the more confirmations you have it will

00:20:39.240 --> 00:20:43.840
<v Aaron van Wirdum>just make a reorg harder and harder and harder, and it's kind of how we apply it

00:20:43.840 --> 00:20:48.580
<v Aaron van Wirdum>already. Like, you know, one confirmation is not as secure as two confirmation is

00:20:48.580 --> 00:20:54.440
<v Aaron van Wirdum>not as secure as three and this change would imply that there's some hard

00:20:54.440 --> 00:21:00.310
<v Aaron van Wirdum>cutoff to that logic rather than it's just always going to be incrementally safer

00:21:00.310 --> 00:21:01.050
<v Aaron van Wirdum>to wait longer.

00:21:01.190 --> 00:21:05.730
<v Sjors Provoost>Now, there is actually a real cutoff because very old versions of Bitcoin Core

00:21:05.730 --> 00:21:10.750
<v Sjors Provoost>use checkpoints, but that hasn't been done for many, many years. But a checkpoint

00:21:10.750 --> 00:21:15.050
<v Sjors Provoost>basically meant that that specific block had to exist. So there are a couple of

00:21:15.050 --> 00:21:18.050
<v Sjors Provoost>blocks in the source code that say this block must exist, otherwise the chain is

00:21:18.050 --> 00:21:18.450
<v Sjors Provoost>not valid.

00:21:18.730 --> 00:21:22.310
<v Aaron van Wirdum>Yes, but that is itself also controversial.

00:21:22.590 --> 00:21:24.950
<v Sjors Provoost>Yeah, and I think it's good that those don't exist anymore.

00:21:25.070 --> 00:21:25.610
<v Aaron van Wirdum>Right, exactly.

00:21:25.850 --> 00:21:30.770
<v Sjors Provoost>But this is not as strong as a checkpoint. The only thing you could argue, and I

00:21:30.770 --> 00:21:34.810
<v Sjors Provoost>think maybe that's what Voskuil was arguing, is that the fact that you're now

00:21:34.810 --> 00:21:40.770
<v Sjors Provoost>retroactively, in a certain sense, activating Taproot is... is in a way a hard fork.

00:21:41.680 --> 00:21:45.800
<v Aaron van Wirdum>No, it is in a way a checkpoint. I mean, it's like...

00:21:45.800 --> 00:21:48.180
<v Sjors Provoost>Well, a checkpoint says this specific block has to exist.

00:21:48.340 --> 00:21:48.520
<v Aaron van Wirdum>Yes.

00:21:48.660 --> 00:21:52.000
<v Sjors Provoost>This just says these rules have to apply, regardless of what the blocks are.

00:21:52.200 --> 00:21:56.860
<v Aaron van Wirdum>No, sure, but it does have sort of the similar implications for it, because

00:21:56.860 --> 00:22:02.500
<v Aaron van Wirdum>you're assuming that before that block, no split could have possibly happened.

00:22:03.020 --> 00:22:06.310
<v Aaron van Wirdum>Otherwise, you would have to check, right? Am I saying that right? I think so.

00:22:06.430 --> 00:22:11.490
<v Sjors Provoost>Well, I mean, the problem with checkpoints is you could have almost completely

00:22:11.490 --> 00:22:15.850
<v Sjors Provoost>arbitrary rules, right? It gives too much power to the people who decide what is

00:22:15.850 --> 00:22:19.250
<v Sjors Provoost>a checkpoint. But I think in the case of Taproot, you don't have that discussion

00:22:19.250 --> 00:22:24.170
<v Sjors Provoost>because it's not that by having this rule or by not having this rule, that

00:22:24.170 --> 00:22:28.250
<v Sjors Provoost>Taproot is always active. It doesn't really matter that much. It's like there's

00:22:28.250 --> 00:22:31.370
<v Sjors Provoost>not a specific person who stands to benefit from whether or not that rule

00:22:31.370 --> 00:22:35.300
<v Sjors Provoost>happens. We can't predict what the disaster is going to look like. So that's why

00:22:35.300 --> 00:22:36.920
<v Sjors Provoost>I think it's not as bad as a checkpoint.

00:22:37.480 --> 00:22:42.120
<v Aaron van Wirdum>So, yeah, whether or not it's a checkpoint or some kind of checkpoint or some

00:22:42.120 --> 00:22:45.760
<v Aaron van Wirdum>kind of subcategory of a checkpoint is maybe not the important part. The

00:22:45.760 --> 00:22:49.040
<v Aaron van Wirdum>important part here is that one

00:22:50.350 --> 00:22:54.750
<v Aaron van Wirdum>group of developers, I guess mostly in Bitcoin Core, figure that if there's a

00:22:54.750 --> 00:22:59.990
<v Aaron van Wirdum>reorg this big, then Bitcoin is screwed anyways. While someone like Voskuil will

00:22:59.990 --> 00:23:04.600
<v Aaron van Wirdum>argue, you know, there's no single point where you can make that argument.

00:23:04.800 --> 00:23:10.220
<v Aaron van Wirdum>There's no point where Bitcoin will be dead if the reorg is that bad. It just

00:23:10.220 --> 00:23:16.120
<v Aaron van Wirdum>gets incrementally worse for every extra block that's being reorg. But

00:23:16.120 --> 00:23:20.060
<v Aaron van Wirdum>there's no objective point you can point to. And therefore, the only sort of

00:23:20.060 --> 00:23:25.200
<v Aaron van Wirdum>logic that you can apply is simply longest [unclear] chain. That's what will you

00:23:25.200 --> 00:23:27.240
<v Aaron van Wirdum>accept to be Bitcoin.

00:23:27.600 --> 00:23:33.090
<v Sjors Provoost>So this reminded me of the other argument that you can have here, which is,

00:23:33.290 --> 00:23:38.330
<v Sjors Provoost>do we look at only the blockchain? Like should nodes only look at the blockchain

00:23:38.330 --> 00:23:42.690
<v Sjors Provoost>or should nodes keep into account sort of the social consensus? And that gets

00:23:42.690 --> 00:23:47.870
<v Sjors Provoost>back to what signaling means. Is signaling something that must occur on the

00:23:47.870 --> 00:23:53.090
<v Sjors Provoost>blockchain and then a soft fork is active? Or is it a way to coordinate the

00:23:53.090 --> 00:23:58.930
<v Sjors Provoost>activation of a new set of rules in a point in... And so in essence... does the

00:23:58.930 --> 00:24:04.470
<v Sjors Provoost>soft fork activate on a chain or does it activate in a chronological point in the

00:24:04.470 --> 00:24:09.170
<v Sjors Provoost>space-time continuum? So can we say, as of November 21, or whatever date it was,

00:24:09.330 --> 00:24:15.250
<v Sjors Provoost>2021, Taproot is active. If you produce blocks in the future, no matter what the

00:24:15.250 --> 00:24:20.010
<v Sjors Provoost>height of those new blocks is, it's still after November 21, 2022, and therefore

00:24:20.010 --> 00:24:22.570
<v Sjors Provoost>you should know that Taproot is active and you should just enforce it.

00:24:23.800 --> 00:24:29.570
<v Sjors Provoost>That is, of course, also a philosophical question you can have. And if you agree

00:24:29.570 --> 00:24:34.510
<v Sjors Provoost>with the latter, if you say Taproot should be considered active after a

00:24:34.510 --> 00:24:39.720
<v Sjors Provoost>chronological point in time, well, then this deep reorg is not a problem because

00:24:39.720 --> 00:24:40.920
<v Sjors Provoost>you'll enforce Taproot.

00:24:44.620 --> 00:24:50.060
<v Aaron van Wirdum>Well, I think there's two issues here, or at least there's one thing to point

00:24:50.060 --> 00:24:52.060
<v Aaron van Wirdum>out, and I think that's what you're getting at.

00:24:53.780 --> 00:24:58.680
<v Aaron van Wirdum>So there are sort of two... visions on what the activation logic is in the first

00:24:58.680 --> 00:25:04.020
<v Aaron van Wirdum>place. So everyone agrees, you know, basically what a soft fork is and that's,

00:25:04.020 --> 00:25:08.920
<v Aaron van Wirdum>you know, you've explained it a couple minutes ago, and I think everyone will

00:25:08.920 --> 00:25:13.960
<v Aaron van Wirdum>agree on that, but then there's the activation of the soft fork sort of the

00:25:13.960 --> 00:25:19.460
<v Aaron van Wirdum>activation logic, like you must signal or the signaling

00:25:19.460 --> 00:25:25.250
<v Aaron van Wirdum>logic itself which is something some developers will itself consider a soft

00:25:25.250 --> 00:25:30.650
<v Aaron van Wirdum>fork while other developers will argue that's the word you used before, is it?

00:25:30.650 --> 00:25:35.140
<v Aaron van Wirdum>That's scaffolding that shouldn't be considered a consensus change. So I think

00:25:35.140 --> 00:25:40.300
<v Aaron van Wirdum>that the arguments, at least if you hold the second opinion, of removing the

00:25:40.300 --> 00:25:44.950
<v Aaron van Wirdum>signaling logic from the code that's a much easier argument to make which I also

00:25:44.950 --> 00:25:46.150
<v Aaron van Wirdum>mentioned before, I think.

00:25:46.490 --> 00:25:50.590
<v Sjors Provoost>Yeah, I mean, we presented these two parts of the burying, right? So the first

00:25:50.590 --> 00:25:53.310
<v Sjors Provoost>part is we're going to apply the rules from Genesis and the second part is we

00:25:53.310 --> 00:25:57.810
<v Sjors Provoost>don't check the rules. And in that order, that's one way to look at it in that

00:25:57.810 --> 00:26:00.510
<v Sjors Provoost>order, but you can look at it in the other order. I guess that's what you're

00:26:00.510 --> 00:26:04.150
<v Sjors Provoost>saying now if you just drop the signaling requirement.

00:26:05.060 --> 00:26:09.420
<v Aaron van Wirdum>Yeah, but you were making a point about social consensus applying to time, but

00:26:09.420 --> 00:26:14.820
<v Aaron van Wirdum>you can still apply social consensus to the blockchain itself. So you can still

00:26:14.820 --> 00:26:20.520
<v Aaron van Wirdum>argue that there's no reason for the signaling other than informing people that a

00:26:20.520 --> 00:26:24.880
<v Aaron van Wirdum>soft fork is happening while still applying it to the actual blockchain and

00:26:24.880 --> 00:26:30.850
<v Aaron van Wirdum>therefore accepting that a soft fork didn't happen if there's a big reorg, even

00:26:30.850 --> 00:26:32.170
<v Aaron van Wirdum>though we're past a certain date.

00:26:32.410 --> 00:26:36.790
<v Sjors Provoost>You could, but if you go back to the history of soft forks, you know, we did that

00:26:36.790 --> 00:26:42.550
<v Sjors Provoost>in another episode, but basically the reason miners started signaling, that

00:26:42.550 --> 00:26:46.050
<v Sjors Provoost>wasn't the case. The earliest soft forks in Satoshi's code were just activating

00:26:46.050 --> 00:26:49.490
<v Sjors Provoost>at a certain height. That was a problem. So the idea was to have miners signal

00:26:49.490 --> 00:26:52.650
<v Sjors Provoost>for it, and there were various ways to do that signaling, and eventually we ended

00:26:52.650 --> 00:26:56.210
<v Sjors Provoost>up with BIP 9. But the reason for the signaling is to make sure that miners

00:26:56.210 --> 00:26:59.910
<v Sjors Provoost>actually upgrade and are actually ready. And there's no reason to assume that

00:26:59.910 --> 00:27:03.920
<v Sjors Provoost>with a big reorg, they're suddenly unready. They would have to downgrade their

00:27:03.920 --> 00:27:04.700
<v Sjors Provoost>software, basically.

00:27:06.880 --> 00:27:09.240
<v Aaron van Wirdum>That's not something everyone agrees on, Sjors.

00:27:09.520 --> 00:27:12.820
<v Sjors Provoost>That's fine. That's sort of the point I'm trying to make. If that is your

00:27:12.820 --> 00:27:18.700
<v Sjors Provoost>interpretation, if the interpretation is we use the signaling in the actual

00:27:18.700 --> 00:27:23.360
<v Sjors Provoost>history of Earth just to say, okay, now all the miners are ready. They have the

00:27:23.360 --> 00:27:27.810
<v Sjors Provoost>latest software. They can enforce Taproot. Then there's no reason to assume that

00:27:27.810 --> 00:27:32.520
<v Sjors Provoost>when there's a deep reorg, they're certainly unready. But you can also have the

00:27:32.520 --> 00:27:36.120
<v Sjors Provoost>blockchain-centric perspective where you say, no, there is no reality outside the

00:27:36.120 --> 00:27:41.900
<v Sjors Provoost>blockchain and outside this code. And in that case, you might say, no, if time is

00:27:41.900 --> 00:27:45.940
<v Sjors Provoost>undone, it's like real time travel. We've really changed history and Taproot

00:27:45.940 --> 00:27:48.080
<v Sjors Provoost>never happened or did or some other time.

00:27:50.520 --> 00:27:52.560
<v Sjors Provoost>That is a potential discussion you can have.

00:27:52.640 --> 00:27:55.800
<v Aaron van Wirdum>Yeah, well, that's interesting you bring that up. I think that's right. So these

00:27:55.800 --> 00:28:00.840
<v Aaron van Wirdum>are sort of two ways of looking at signaling, whether it's informing...

00:28:01.600 --> 00:28:05.880
<v Aaron van Wirdum>miners or really whether it really means readiness signaling which is definitely

00:28:05.880 --> 00:28:10.300
<v Aaron van Wirdum>a term that has been used, but recently during the Taproot debates there was also

00:28:10.300 --> 00:28:15.540
<v Aaron van Wirdum>sort of this idea that signaling is really for users, so users know that a

00:28:15.540 --> 00:28:21.220
<v Aaron van Wirdum>certain change will activate which also allows them to fork off if they disagree

00:28:21.220 --> 00:28:25.460
<v Aaron van Wirdum>with the change, for example, and that's really the reason for signaling. So

00:28:25.460 --> 00:28:30.050
<v Aaron van Wirdum>Sjors, I think we're getting really into the weeds at this point. I think it's

00:28:30.050 --> 00:28:33.710
<v Aaron van Wirdum>interesting, but we might be losing some listeners by now.

00:28:33.810 --> 00:28:39.460
<v Sjors Provoost>That's fine. We've shown the readers, the listeners, sorry, where the weed is.

00:28:40.150 --> 00:28:40.590
<v Aaron van Wirdum>Right.

00:28:43.360 --> 00:28:44.360
<v Aaron van Wirdum>Where the weed is?

00:28:44.580 --> 00:28:47.620
<v Sjors Provoost>Yeah, maybe not the best analogy. We've shown them very deep into the rabbit

00:28:47.620 --> 00:28:51.900
<v Sjors Provoost>hole. They can explore more for themselves by just reading these mailing list

00:28:51.900 --> 00:28:54.660
<v Sjors Provoost>threads. We'll probably put them in the show notes.

00:28:54.880 --> 00:28:59.300
<v Aaron van Wirdum>Yeah, no, there's one other thing we do need to bring up. Okay, we're jumping

00:28:59.300 --> 00:29:04.280
<v Aaron van Wirdum>around now, so the episode's getting confusing. Sorry, people. But there is this

00:29:04.280 --> 00:29:09.800
<v Aaron van Wirdum>other... sort of what it ultimately comes down to, this discussion, I think,

00:29:09.960 --> 00:29:15.750
<v Aaron van Wirdum>is whether burying a soft fork... as we've

00:29:15.750 --> 00:29:21.190
<v Aaron van Wirdum>explained throughout this episode, whether that should be considered a consensus

00:29:21.190 --> 00:29:26.540
<v Aaron van Wirdum>change or not. And by extension, whether it should be considered,

00:29:26.820 --> 00:29:32.800
<v Aaron van Wirdum>whether it should be a BIP, Bitcoin Improvement Proposal. So if you see

00:29:32.800 --> 00:29:33.980
<v Aaron van Wirdum>it as a consensus BIP,

00:29:34.060 --> 00:29:36.860
<v Sjors Provoost>because you can have an informational BIP that's not a consensus BIP.

00:29:37.220 --> 00:29:38.100
<v Aaron van Wirdum>Can you though?

00:29:38.300 --> 00:29:44.060
<v Sjors Provoost>You can basically write a BIP that says, hey, if you're writing a full node, you

00:29:44.060 --> 00:29:47.620
<v Sjors Provoost>could consider burying the soft fork because it will make your life easier. But

00:29:47.620 --> 00:29:51.460
<v Sjors Provoost>keep in mind that if this time travel thing happens, you have a problem.

00:29:52.940 --> 00:29:55.540
<v Aaron van Wirdum>It's not really the point of BIPs, though, Sjors, is it?

00:29:55.540 --> 00:29:58.860
<v Sjors Provoost>Well, we've done an episode about BIPs. There are informational BIPs, and there

00:29:58.860 --> 00:29:59.960
<v Sjors Provoost>are consensus BIPs.

00:29:59.960 --> 00:30:03.420
<v Aaron van Wirdum>Well, yeah, but they need to be relevant for other nodes. They are.

00:30:04.080 --> 00:30:07.060
<v Sjors Provoost>It's good to explain to other nodes what you've done in your implementation that,

00:30:07.360 --> 00:30:09.920
<v Sjors Provoost>under extreme circumstances, can make a difference.

00:30:11.780 --> 00:30:13.440
<v Aaron van Wirdum>Well, you can make...

00:30:14.700 --> 00:30:19.100
<v Aaron van Wirdum>very general informational BIP of this is a thing you can do, but then that BIP

00:30:19.100 --> 00:30:22.840
<v Aaron van Wirdum>doesn't need to include a specific block height, right? That doesn't require…

00:30:22.840 --> 00:30:28.800
<v Aaron van Wirdum>Well, that's the debate then: is this a consensus change? In other words, if

00:30:28.800 --> 00:30:34.360
<v Aaron van Wirdum>there would be this big of a reorg should we expect all nodes to

00:30:34.360 --> 00:30:39.960
<v Aaron van Wirdum>accept this reorg or reject it? Like, should they do the same thing?

00:30:40.100 --> 00:30:43.640
<v Sjors Provoost>Yeah, so this comes down to the little street in Rotterdam situation that I was talking about.

00:30:43.640 --> 00:30:48.400
<v Aaron van Wirdum>Hang on, let me finish the sentence. Or is this just a thing that developers can

00:30:48.400 --> 00:30:54.280
<v Aaron van Wirdum>do as a shortcut in their own code? And then, essentially, if it does

00:30:54.280 --> 00:30:57.820
<v Aaron van Wirdum>go wrong, that's the wrong problem. That's the problem of that specific

00:30:57.820 --> 00:31:02.140
<v Aaron van Wirdum>implementation that would essentially mean that that specific implementation has

00:31:02.140 --> 00:31:06.270
<v Aaron van Wirdum>forked itself off the network. I think if you really... go into this debate,

00:31:06.450 --> 00:31:10.590
<v Aaron van Wirdum>That's sort of ultimately what it's about. And that's why I mentioned at the

00:31:10.590 --> 00:31:13.990
<v Aaron van Wirdum>beginning of this episode that, you know, consensus changes are kind of

00:31:13.990 --> 00:31:18.010
<v Aaron van Wirdum>interesting because it sort of says something about how do you define Bitcoin?

00:31:18.210 --> 00:31:22.370
<v Aaron van Wirdum>What is Bitcoin? And this is an example where that actually applies. Like if in

00:31:22.370 --> 00:31:26.990
<v Aaron van Wirdum>this unlikely scenario would happen, then would the buried version be the real

00:31:26.990 --> 00:31:30.750
<v Aaron van Wirdum>Bitcoin? The nodes that have the buried software, would that be the real Bitcoin?

00:31:31.010 --> 00:31:33.950
<v Aaron van Wirdum>Or would they fork themselves off of the real Bitcoin network?

00:31:35.040 --> 00:31:39.020
<v Sjors Provoost>Yeah, so we're talking about a specific deep reorg that actually violates the

00:31:39.020 --> 00:31:42.320
<v Sjors Provoost>Taproot rule, right? Because there is a good chance that they don't violate

00:31:42.320 --> 00:31:46.920
<v Sjors Provoost>Taproot in the deep reorg. So I think in general, it's a good idea to think about

00:31:46.920 --> 00:31:49.520
<v Sjors Provoost>an extreme scenario like this.

00:31:50.980 --> 00:31:55.420
<v Sjors Provoost>But I think if you do that, you'll end up thinking, you know, you'll end up

00:31:55.420 --> 00:31:58.260
<v Sjors Provoost>seeing this is a really big problem. There's all sorts of things we need to solve

00:31:58.260 --> 00:32:03.760
<v Sjors Provoost>in such an event, and this little thing about buried consensus rules is somewhere

00:32:03.760 --> 00:32:08.420
<v Sjors Provoost>on the to-do list of that giant project of, okay, what are we going to do? Is

00:32:08.420 --> 00:32:12.480
<v Sjors Provoost>there some threshold that we say if this alien shows up? I guess in general, we

00:32:12.480 --> 00:32:16.260
<v Sjors Provoost>need a scenario what to do with the aliens. The aliens might have extreme hash

00:32:16.260 --> 00:32:20.340
<v Sjors Provoost>power. They might be able to just completely double spend everyone on the planet

00:32:20.340 --> 00:32:26.000
<v Sjors Provoost>because they have some alien ASIC that can double spend any block

00:32:26.000 --> 00:32:29.410
<v Sjors Provoost>at any depth, and they can create... reorgs out of spite.

00:32:31.040 --> 00:32:35.400
<v Sjors Provoost>Or the secret government agency, basically. It might be useful to have a plan for

00:32:35.400 --> 00:32:38.720
<v Sjors Provoost>that. I just think that this won't be the most interesting part of the plan

00:32:38.720 --> 00:32:42.100
<v Sjors Provoost>because it's a really bad situation. And it probably means Bitcoin would be

00:32:42.100 --> 00:32:47.040
<v Sjors Provoost>completely broken in that case. But maybe not. Maybe there is a rational way to deal with it.

00:32:47.180 --> 00:32:51.220
<v Aaron van Wirdum>That's the difference of opinion, right? Some people like Eric Voskuil will say

00:32:51.220 --> 00:32:56.440
<v Aaron van Wirdum>Bitcoin isn't broken. Bitcoin is working as intended. Longest valid chain still

00:32:56.440 --> 00:33:01.510
<v Aaron van Wirdum>applies. There was a long reorg that's part of the Bitcoin consensus system.

00:33:02.560 --> 00:33:05.900
<v Sjors Provoost>Yeah, but the question is, can you use it for practical transactions if that can

00:33:05.900 --> 00:33:07.520
<v Sjors Provoost>happen again and again and again and again?

00:33:08.950 --> 00:33:13.170
<v Sjors Provoost>I would probably say no. It's just the same reason with lots of altcoins that try

00:33:13.170 --> 00:33:17.430
<v Sjors Provoost>to use SHA-256 and those altcoins are completely... Yeah, technically they're

00:33:17.430 --> 00:33:20.030
<v Sjors Provoost>still valid chains. It's just that nobody uses them anymore.

00:33:21.830 --> 00:33:26.280
<v Sjors Provoost>So I think it's good to have some sort of thought about what to do with the alien

00:33:26.280 --> 00:33:26.680
<v Sjors Provoost>invasion.

00:33:28.650 --> 00:33:33.670
<v Aaron van Wirdum>So is it, I want to close off this episode, but I want to ask you then, sort of

00:33:33.670 --> 00:33:36.930
<v Aaron van Wirdum>personally, like, should this be considered consensus change?

00:33:39.250 --> 00:33:40.730
<v Sjors Provoost>No, I think this...

00:33:40.730 --> 00:33:43.890
<v Aaron van Wirdum>Or is this a developer shortcut at their own risk?

00:33:45.930 --> 00:33:51.030
<v Sjors Provoost>Yeah, I think it's a developer shortcut, but it's that, the idea of a one-year

00:33:51.030 --> 00:33:56.410
<v Sjors Provoost>reorg is undefined behavior, I think. So I think there is no consensus rule for a

00:33:56.410 --> 00:34:01.570
<v Sjors Provoost>one-year reorg. That's my opinion. It's a disaster that's not been worked out.

00:34:01.750 --> 00:34:05.790
<v Sjors Provoost>There's just no contingency plan. It's like saying, what do we do if the 55 nukes

00:34:05.790 --> 00:34:09.930
<v Sjors Provoost>go off over Amsterdam? You know what's the… Can you still go into a hospital

00:34:09.930 --> 00:34:12.570
<v Sjors Provoost>without a mask? I don't know. It's undefined.

00:34:13.960 --> 00:34:15.160
<v Sjors Provoost>But maybe it should be defined.

00:34:15.760 --> 00:34:20.860
<v Aaron van Wirdum>I mean, I guess I disagree with you. I think it's defined [unclear] chain. That's it.

00:34:21.000 --> 00:34:21.360
<v Sjors Provoost>That's fine.

00:34:22.250 --> 00:34:24.890
<v Aaron van Wirdum>Well, then I guess that's the episode, Sjors.

00:34:25.410 --> 00:34:25.930
<v Sjors Provoost>That's right.

00:34:26.070 --> 00:34:27.350
<v Aaron van Wirdum>We've reached the point.

00:34:29.320 --> 00:34:34.000
<v Aaron van Wirdum>Kept pulling the threads to the point where sort of the disagreement emerges, I

00:34:34.000 --> 00:34:35.380
<v Aaron van Wirdum>think, of the broader discussion.

00:34:35.860 --> 00:34:36.380
<v Sjors Provoost>Yeah.

00:34:36.680 --> 00:34:41.340
<v Aaron van Wirdum>I hope our listeners could follow. I think it was maybe a bit messy because it's

00:34:41.340 --> 00:34:44.700
<v Aaron van Wirdum>a complicated topic. But I thought it was kind of interesting.

00:34:45.400 --> 00:34:49.900
<v Sjors Provoost>Yeah, I think so too. Yeah, especially the fact that we're talking about

00:34:49.900 --> 00:34:54.720
<v Sjors Provoost>hypothetical time machines in a situation where we lost one recording. In other

00:34:54.720 --> 00:34:57.920
<v Sjors Provoost>words, we also have this hypothetical time machine. Did we say this before? Was

00:34:57.920 --> 00:35:00.020
<v Sjors Provoost>it really said? Because we said it without recording it.

00:35:00.140 --> 00:35:01.420
<v Aaron van Wirdum>I'm sure that didn't help, yeah.

00:35:01.880 --> 00:35:05.220
<v Sjors Provoost>So anyway, thank you all for listening to Bitcoin Explained.

