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

00:00:00.530 --> 00:00:02.890
<v Aaron van Wirdum>Before the show, a quick word from our sponsor.

00:00:10.920 --> 00:00:13.280
<v Aaron van Wirdum>Live from Utrecht, this is the Van Wirdum Sjorsnado.

00:00:13.520 --> 00:00:13.740
<v Sjors Provoost>Hello.

00:00:14.460 --> 00:00:14.900
<v Aaron van Wirdum>Hello.

00:00:15.540 --> 00:00:15.800
<v Ruben Somsen>Hello.

00:00:16.360 --> 00:00:17.160
<v Sjors Provoost>Hey, who's there?

00:00:17.520 --> 00:00:20.220
<v Ruben Somsen>I don't know. Someone who's never been on the show before.

00:00:20.700 --> 00:00:21.500
<v Sjors Provoost>It's Ruben.

00:00:21.680 --> 00:00:21.820
<v Ruben Somsen>Oh.

00:00:22.360 --> 00:00:23.220
<v Aaron van Wirdum>Ruben is back.

00:00:23.620 --> 00:00:23.800
<v Ruben Somsen>Yeah.

00:00:23.980 --> 00:00:24.100
<v Aaron van Wirdum>Again.

00:00:24.420 --> 00:00:24.780
<v Ruben Somsen>Yeah.

00:00:25.060 --> 00:00:28.280
<v Aaron van Wirdum>Ruben, I think you're our in-house sidechain expert.

00:00:28.500 --> 00:00:29.100
<v Ruben Somsen>I guess so.

00:00:29.100 --> 00:00:35.010
<v Aaron van Wirdum>At this point. Well, I would consider you a... You're a… Bitcoin expert. But it

00:00:35.010 --> 00:00:39.950
<v Aaron van Wirdum>seems like your specialization lies in all sorts of sidechain. Anything

00:00:39.950 --> 00:00:40.490
<v Aaron van Wirdum>sidechain.

00:00:40.650 --> 00:00:44.630
<v Ruben Somsen>Yeah, that seems like it. It just happened to be like that, become like that.

00:00:44.850 --> 00:00:48.410
<v Aaron van Wirdum>Is that how am I using the term correctly? That's how I've been using the term.

00:00:48.510 --> 00:00:52.670
<v Aaron van Wirdum>Sidechain is sort of the umbrella term. And we have all sorts of different ways

00:00:52.670 --> 00:00:57.090
<v Aaron van Wirdum>of doing it, which have their own names like drive chain or state chain.

00:00:59.170 --> 00:01:02.720
<v Sjors Provoost>Depends if you're picking on the definition of sidechain, then it's not. Then you

00:01:02.720 --> 00:01:05.980
<v Sjors Provoost>would just say other chain or related chain, I guess.

00:01:06.400 --> 00:01:09.980
<v Ruben Somsen>Yeah, but that doesn't really roll off the tongue. I'm a other chain expert.

00:01:12.480 --> 00:01:14.180
<v Ruben Somsen>Well, not altcoins, I guess.

00:01:14.340 --> 00:01:15.140
<v Aaron van Wirdum>No, you're not altcoins.

00:01:15.380 --> 00:01:19.600
<v Ruben Somsen>So it's difficult. Yeah, I like, generally speaking, I'm very much interested in

00:01:19.600 --> 00:01:24.280
<v Ruben Somsen>trying to get Bitcoin to do more with less. And I think sidechains are a good

00:01:24.280 --> 00:01:29.100
<v Ruben Somsen>avenue for reaching that. So that's kind of why I think I spend a lot of time

00:01:29.100 --> 00:01:29.860
<v Ruben Somsen>thinking about these things.

00:01:30.100 --> 00:01:34.280
<v Aaron van Wirdum>Yeah, so you came up with another idea, another type of sidechain, I would call

00:01:34.280 --> 00:01:35.880
<v Aaron van Wirdum>it, which is called a softchain.

00:01:36.020 --> 00:01:36.440
<v Ruben Somsen>That's right.

00:01:36.680 --> 00:01:38.600
<v Aaron van Wirdum>And that's what we're going to discuss today.

00:01:38.980 --> 00:01:41.000
<v Sjors Provoost>Yeah, we're going to try and understand it.

00:01:41.370 --> 00:01:41.830
<v Ruben Somsen>Great.

00:01:42.110 --> 00:01:46.710
<v Aaron van Wirdum>So first of all, for the listeners who haven't listened to one of the previous

00:01:46.710 --> 00:01:50.750
<v Aaron van Wirdum>episodes about sidechains, Ruben, what is a sidechain? Briefly.

00:01:50.890 --> 00:01:56.770
<v Ruben Somsen>Yeah, so a sidechain is basically a completely separate chain, ideally, that

00:01:56.770 --> 00:02:02.140
<v Ruben Somsen>you can move your bitcoins to and you can move your bitcoins back again. And the

00:02:02.140 --> 00:02:06.900
<v Ruben Somsen>dream is kind of that you can build out this ecosystem where your bitcoins are

00:02:06.900 --> 00:02:12.340
<v Ruben Somsen>not necessarily stuck with Bitcoin's validation rules. But if you like

00:02:12.340 --> 00:02:15.460
<v Ruben Somsen>Ethereum's validation rules or something, you could maybe move your bitcoins to

00:02:15.460 --> 00:02:19.960
<v Ruben Somsen>some Ethereum-like chain and use them there. And then when you are done again,

00:02:20.000 --> 00:02:22.920
<v Ruben Somsen>because you figured out that Ethereum is not so great after all, you can move

00:02:22.920 --> 00:02:28.310
<v Ruben Somsen>back to Bitcoin. Buying and selling is not quite that at all. And this kind of

00:02:28.310 --> 00:02:32.530
<v Ruben Somsen>preserves the 21 million Bitcoin limits, where you don't have to deal with all

00:02:32.530 --> 00:02:37.090
<v Ruben Somsen>these altcoin shenanigans, yet you still get all the functionality that you might

00:02:37.090 --> 00:02:39.230
<v Ruben Somsen>want that is not available in Bitcoin currently.

00:02:39.690 --> 00:02:43.390
<v Sjors Provoost>So that's an argument from experimentation or from more features.

00:02:43.670 --> 00:02:44.590
<v Ruben Somsen>I guess so. Yeah.

00:02:44.610 --> 00:02:47.630
<v Sjors Provoost>And your other argument, I guess, would be scale, in theory.

00:02:47.870 --> 00:02:51.750
<v Ruben Somsen>Yeah, yeah, that's definitely a second argument. Good point. Yeah, if you have

00:02:51.750 --> 00:02:56.020
<v Ruben Somsen>all these sidechains, then potentially, you could have more block space. You

00:02:56.020 --> 00:02:58.780
<v Ruben Somsen>could have multiple sidechains that are just like Bitcoin or maybe slightly

00:02:58.780 --> 00:03:03.300
<v Ruben Somsen>different. And yeah, it basically gives you more block space for people to use.

00:03:03.640 --> 00:03:07.600
<v Aaron van Wirdum>Yeah. So let's say you want to use some sort of DeFi app that's not really

00:03:07.600 --> 00:03:11.020
<v Aaron van Wirdum>compatible with the current Bitcoin protocol. You can move it to a sidechain.

00:03:11.580 --> 00:03:15.180
<v Aaron van Wirdum>That has these Ethereum rules and you can do all your DeFi stuff there. And then

00:03:15.180 --> 00:03:18.240
<v Aaron van Wirdum>when you're done, you move back your bitcoins to the main Bitcoin blockchain.

00:03:18.580 --> 00:03:22.760
<v Ruben Somsen>Yeah. And importantly, yeah, you can do it with your bitcoins, right? Because we

00:03:22.760 --> 00:03:26.280
<v Ruben Somsen>talked about, I think I didn't call it space chains back then, but I call it

00:03:26.280 --> 00:03:30.920
<v Ruben Somsen>space chains now, which is blind merge mining in a perpetual one-way peg. So that

00:03:30.920 --> 00:03:35.320
<v Ruben Somsen>one did not allow you to move your bitcoins to, well, you could move to the other

00:03:35.320 --> 00:03:38.560
<v Ruben Somsen>chain, but you couldn't move back. So this proposal actually allows you to move

00:03:38.560 --> 00:03:41.560
<v Ruben Somsen>back. But there are obviously downsides as well, which we'll get into.

00:03:41.560 --> 00:03:45.460
<v Sjors Provoost>Yeah. A couple of weeks ago, we talked about drive chains, which do allow you to

00:03:45.460 --> 00:03:46.380
<v Sjors Provoost>move your coins back.

00:03:46.810 --> 00:03:50.230
<v Ruben Somsen>Yeah. And that's also good to kind of point out the difference. So with drive

00:03:50.230 --> 00:03:55.170
<v Ruben Somsen>chains, very high level, the miners basically control the bitcoins and they

00:03:55.170 --> 00:03:58.730
<v Ruben Somsen>decide whether or not you get to move back. And with this proposal, it wouldn't

00:03:58.730 --> 00:04:02.770
<v Ruben Somsen>be like that. It would actually be consensus, basically, whether or not you get

00:04:02.770 --> 00:04:03.250
<v Ruben Somsen>to move back.

00:04:03.490 --> 00:04:07.390
<v Aaron van Wirdum>Yeah. So we just gave a DeFi example. Other examples would be like Zcash,

00:04:07.610 --> 00:04:12.070
<v Aaron van Wirdum>sidechain, or like any altcoin that's out there. Basically, you could instead use

00:04:12.070 --> 00:04:15.430
<v Aaron van Wirdum>a sidechain and then therefore use sort of the Bitcoin currency unit.

00:04:15.570 --> 00:04:15.710
<v Ruben Somsen>Yeah.

00:04:16.160 --> 00:04:18.360
<v Aaron van Wirdum>Under these different rules and conditions.

00:04:18.520 --> 00:04:18.840
<v Ruben Somsen>That's right.

00:04:19.160 --> 00:04:23.440
<v Aaron van Wirdum>All right. So soft chains, your new, well, is it new? No, when did you propose this?

00:04:23.640 --> 00:04:29.060
<v Ruben Somsen>Yes and no, it's new. I posted it December 31st last year. So not too long ago

00:04:29.060 --> 00:04:32.580
<v Ruben Somsen>because we just entered this year. So it was a little New Year's gift, so to speak.

00:04:32.760 --> 00:04:33.740
<v Aaron van Wirdum>It's your newest one.

00:04:33.860 --> 00:04:38.440
<v Ruben Somsen>It's my newest one, but it's, you know, I'm building forth on work that I did

00:04:38.440 --> 00:04:42.960
<v Ruben Somsen>about a year and a half ago on proof of work fraud proofs. So it's not completely

00:04:42.960 --> 00:04:46.100
<v Ruben Somsen>new, but the kind of sidechain aspect of it is new.

00:04:46.320 --> 00:04:51.020
<v Aaron van Wirdum>Right. So yeah, that is the first step in explaining how soft chains work or

00:04:51.020 --> 00:04:51.760
<v Aaron van Wirdum>proof of work.

00:04:51.920 --> 00:04:52.600
<v Ruben Somsen>Fraud proofs.

00:04:52.740 --> 00:04:57.200
<v Aaron van Wirdum>Fraud proofs, exactly. So let's get into that. And before we get into that, I

00:04:57.200 --> 00:05:00.900
<v Aaron van Wirdum>want to tell the listener, at this point, it's probably easiest if you forget

00:05:00.900 --> 00:05:05.580
<v Aaron van Wirdum>about sidechains for a minute. Ruben is just going to explain a consensus

00:05:05.580 --> 00:05:09.820
<v Aaron van Wirdum>mechanism. It could potentially work on the Bitcoin main chain as well.

00:05:10.080 --> 00:05:10.220
<v Ruben Somsen>Yeah.

00:05:10.560 --> 00:05:14.220
<v Aaron van Wirdum>Okay, so let's get into it. What are proof of work fraud proofs?

00:05:14.260 --> 00:05:17.940
<v Ruben Somsen>Yeah, so we're taking a bit of a detour here and we're going to be talking about

00:05:17.940 --> 00:05:23.540
<v Ruben Somsen>how you could potentially validate a blockchain, such as Bitcoin or other

00:05:23.540 --> 00:05:29.220
<v Ruben Somsen>blockchains, in a way that is very cheap to validate, essentially. So it's kind

00:05:29.220 --> 00:05:34.320
<v Ruben Somsen>of like one way of doing that would be SPV proofs, where SPV basically means you

00:05:34.320 --> 00:05:39.430
<v Ruben Somsen>look at the proof of work. And you just assume that whichever chain with the most

00:05:39.430 --> 00:05:42.750
<v Ruben Somsen>proof of work, a lot of effort went into creating that chain, so it must be

00:05:42.750 --> 00:05:47.110
<v Ruben Somsen>valid. Like that's one way you can get very cheap consensus. But the general

00:05:47.110 --> 00:05:51.290
<v Ruben Somsen>issue with that is that you're trusting that 51% of the miners or more is

00:05:51.290 --> 00:05:54.970
<v Ruben Somsen>actually telling you the truth. And if everybody starts relying on that, these

00:05:54.970 --> 00:05:58.330
<v Ruben Somsen>miners could actually create coins out of thin air. So it's not very secure, but

00:05:58.330 --> 00:06:00.370
<v Ruben Somsen>it would be one way of kind of getting cheap consensus.

00:06:00.830 --> 00:06:06.730
<v Aaron van Wirdum>Yeah. So the normal way to achieve that is for everyone on the network

00:06:06.730 --> 00:06:10.150
<v Aaron van Wirdum>to control, to check every, to validate every protocol rule.

00:06:10.270 --> 00:06:10.490
<v Ruben Somsen>Yes.

00:06:10.670 --> 00:06:13.310
<v Aaron van Wirdum>To validate that everything that happens in every block is valid.

00:06:13.590 --> 00:06:13.790
<v Ruben Somsen>Yeah.

00:06:13.990 --> 00:06:18.110
<v Aaron van Wirdum>And then SPV, like you explained, is a much cheaper way to do it because you're

00:06:18.110 --> 00:06:21.610
<v Aaron van Wirdum>not checking everything in every block. You're only checking the proof of work. Yeah.

00:06:21.810 --> 00:06:24.930
<v Sjors Provoost>And so in episode 25, we actually explained SPV.

00:06:25.010 --> 00:06:25.590
<v Ruben Somsen>Oh, great. Yeah.

00:06:25.710 --> 00:06:30.860
<v Aaron van Wirdum>Right. And then soft chains is a method sort of in between.

00:06:31.160 --> 00:06:33.920
<v Ruben Somsen>Well, proof of work, fraud proofs, right? That's why we're not talking about the

00:06:33.920 --> 00:06:34.480
<v Ruben Somsen>soft chains yet.

00:06:34.480 --> 00:06:35.060
<v Aaron van Wirdum>You're right.

00:06:35.200 --> 00:06:35.320
<v Ruben Somsen>Yeah.

00:06:36.200 --> 00:06:40.720
<v Aaron van Wirdum>It's sort of in between full validation and SPV validation in a way.

00:06:40.800 --> 00:06:46.700
<v Ruben Somsen>So if you look at SPV, the assumption is SPV works if 51% of all miners are

00:06:46.700 --> 00:06:52.080
<v Ruben Somsen>being honest. And with proof of work fraud proofs, what you can do is you can say

00:06:52.080 --> 00:06:58.030
<v Ruben Somsen>this validation method works if there is some honest miner

00:06:58.030 --> 00:07:02.330
<v Ruben Somsen>out there and you can choose whatever percentage you like, if you say it's 1%,

00:07:02.330 --> 00:07:07.670
<v Ruben Somsen>that's fine. You can go all the way conservative to say 0.01%. But the difference

00:07:07.670 --> 00:07:13.770
<v Ruben Somsen>is that what your assumption is affects how slow your validation is.

00:07:14.590 --> 00:07:20.460
<v Aaron van Wirdum>You need more confirmations if you want to trust less miners, am I

00:07:20.460 --> 00:07:20.920
<v Aaron van Wirdum>saying that right?

00:07:20.920 --> 00:07:25.060
<v Ruben Somsen>Yeah, so so let's take a simple number like one percent, if you assume that only

00:07:25.060 --> 00:07:29.140
<v Ruben Somsen>one percent of all miners is honest and 99 is out there to get you, it basically

00:07:29.140 --> 00:07:34.200
<v Ruben Somsen>means that you got to wait for that honest miner to create their block. And if

00:07:34.200 --> 00:07:38.100
<v Ruben Somsen>you don't see that block, well, you're not going to see that block until you've

00:07:38.100 --> 00:07:41.820
<v Ruben Somsen>given them enough time to actually create that block. So that's why it's a slow

00:07:41.820 --> 00:07:46.180
<v Ruben Somsen>consensus mechanism, but it's much more secure than SPV. And you no longer have

00:07:46.180 --> 00:07:47.340
<v Ruben Somsen>the 51% assumption.

00:07:47.760 --> 00:07:53.760
<v Aaron van Wirdum>Yeah. So to restate that with SPV, with full validation, you don't need

00:07:53.760 --> 00:07:58.400
<v Aaron van Wirdum>to trust any hash power, basically. With SPV, you need to trust that at least

00:07:58.400 --> 00:07:59.720
<v Aaron van Wirdum>half hash power is honest.

00:08:00.020 --> 00:08:01.180
<v Ruben Somsen>Yeah. More than half, yeah.

00:08:02.100 --> 00:08:04.700
<v Aaron van Wirdum>Proof of war— work frauds proofs…

00:08:04.700 --> 00:08:05.540
<v Ruben Somsen>Sorry for the name. Yeah.

00:08:05.540 --> 00:08:11.440
<v Aaron van Wirdum>You can sort of pick your own level of trust in hash power and then depending on

00:08:11.440 --> 00:08:13.520
<v Aaron van Wirdum>that you need to wait for more confirmations.

00:08:13.520 --> 00:08:14.000
<v Ruben Somsen>Yeah.

00:08:14.000 --> 00:08:18.340
<v Aaron van Wirdum>And let's say I think okay I think at least one percent of hash power is going to

00:08:18.340 --> 00:08:23.080
<v Aaron van Wirdum>be honest so therefore I'm just going to wait a whole day of confirmations for

00:08:23.080 --> 00:08:26.860
<v Aaron van Wirdum>example. Yeah that's maybe two days or whatever. Yeah. Okay. So how does this work?

00:08:26.860 --> 00:08:32.860
<v Ruben Somsen>Yeah exactly. So so the way this works is you only look at the forks. So if you

00:08:32.860 --> 00:08:36.000
<v Ruben Somsen>have normally, when you have the Bitcoin blockchain, you download all the

00:08:36.000 --> 00:08:38.640
<v Ruben Somsen>headers, and then you download all the blocks that are associated with the

00:08:38.640 --> 00:08:43.220
<v Ruben Somsen>headers. But what you do here is you start with only the headers, and then you

00:08:43.220 --> 00:08:47.380
<v Ruben Somsen>look whether there are forks. So maybe you have like a block one, block two,

00:08:47.500 --> 00:08:52.040
<v Ruben Somsen>block three, four, five. And then somewhere along the line, you see another block

00:08:52.040 --> 00:08:56.400
<v Ruben Somsen>three. So block three B, let's say. So there's one, two, three B, and there's

00:08:56.400 --> 00:08:58.140
<v Ruben Somsen>one, two, three, A, four, five.

00:08:59.290 --> 00:09:03.290
<v Aaron van Wirdum>I want to make a small clarification for listeners that don't know this because

00:09:03.290 --> 00:09:05.210
<v Aaron van Wirdum>the term fork is very confusing.

00:09:05.350 --> 00:09:05.890
<v Ruben Somsen>That's true, yeah.

00:09:05.970 --> 00:09:11.030
<v Aaron van Wirdum>We're not talking about Bcash kind of altcoin forks or anything like that. We're

00:09:11.030 --> 00:09:14.990
<v Aaron van Wirdum>just talking about the normal operation of things in Bitcoin where sometimes, for

00:09:14.990 --> 00:09:19.830
<v Aaron van Wirdum>example, by coincidence, two competing blocks are mined by different miners and

00:09:19.830 --> 00:09:21.850
<v Aaron van Wirdum>then eventually the longest chain wins out, right?

00:09:22.110 --> 00:09:22.890
<v Ruben Somsen>Yeah, that's correct.

00:09:22.890 --> 00:09:24.450
<v Aaron van Wirdum>That's the type of fork we're talking about here.

00:09:24.450 --> 00:09:27.150
<v Sjors Provoost>Yeah, which we mentioned in last week's episode.

00:09:27.490 --> 00:09:27.910
<v Ruben Somsen>Perfect.

00:09:28.430 --> 00:09:30.870
<v Aaron van Wirdum>You're like an encyclopedia of episodes.

00:09:31.790 --> 00:09:31.870
<v Sjors Provoost>Yeah,

00:09:32.430 --> 00:09:37.470
<v Ruben Somsen>So basically these are regular, naturally occurring forks that would happen in

00:09:37.470 --> 00:09:43.330
<v Ruben Somsen>Bitcoin anyway, just by pure coincidence or if a miner just happens to mess up or

00:09:43.330 --> 00:09:48.350
<v Ruben Somsen>whatever. So these occur naturally. But there are also reasons why they could

00:09:48.350 --> 00:09:52.430
<v Ruben Somsen>occur kind of unnaturally, which is that a miner is kind of deliberately trying

00:09:52.430 --> 00:09:56.270
<v Ruben Somsen>to create an invalid… and if there's a deliberate attempt to create an invalid

00:09:56.270 --> 00:10:00.590
<v Ruben Somsen>block, all the miners that kind of don't want to participate in that invalid

00:10:00.590 --> 00:10:06.590
<v Ruben Somsen>chain, they need to fork away from that chain. So given we kind of can…

00:10:06.590 --> 00:10:10.530
<v Aaron van Wirdum>Hang on, do you mean by invalid in this context? Do you mean that it's breaking

00:10:10.530 --> 00:10:11.230
<v Aaron van Wirdum>protocol rules?

00:10:11.410 --> 00:10:12.250
<v Ruben Somsen>Exactly, yeah.

00:10:12.690 --> 00:10:16.930
<v Aaron van Wirdum>So for example, the miner is awarding itself a thousand Bitcoin as a block reward.

00:10:17.150 --> 00:10:21.470
<v Ruben Somsen>Yeah, so basically anything that your full node would reject. If your full node

00:10:21.470 --> 00:10:24.570
<v Ruben Somsen>were to download the block and validate the block and they would reject the

00:10:24.570 --> 00:10:26.310
<v Ruben Somsen>block, that would be an invalid block.

00:10:26.450 --> 00:10:31.320
<v Aaron van Wirdum>Right, yeah. So it's possible for miners to create invalid blocks. Then you have

00:10:31.320 --> 00:10:33.520
<v Aaron van Wirdum>a fork, basically. What happens then, Ruben?

00:10:33.680 --> 00:10:38.400
<v Ruben Somsen>Yeah, so that's kind of what you want to check for, right? You want to figure out

00:10:38.400 --> 00:10:43.620
<v Ruben Somsen>whether something is invalid. And so this is called proof-of-work fraud proofs.

00:10:43.700 --> 00:10:48.240
<v Ruben Somsen>And the reason for that is maybe it's not the best name. Sjors, you had a suggestion.

00:10:48.500 --> 00:10:50.480
<v Sjors Provoost>I think it was proof-of-work fraud indicator.

00:10:50.700 --> 00:10:54.260
<v Ruben Somsen>Fraud indicator, yeah. So I like that. I forgot it again, but yeah, it's good. So

00:10:54.260 --> 00:10:59.310
<v Ruben Somsen>fraud indicator, let's say. The fact that there's a fork is an indication

00:10:59.310 --> 00:11:05.210
<v Ruben Somsen>that the block you're forking away from might be invalid, but you don't know for sure.

00:11:05.370 --> 00:11:06.590
<v Aaron van Wirdum>May or may not be, yeah.

00:11:07.070 --> 00:11:11.850
<v Ruben Somsen>So if we then had a method to validate that specific block, we could actually

00:11:11.850 --> 00:11:17.370
<v Ruben Somsen>kind of investigate that claim and see whether or not something is wrong. So

00:11:17.370 --> 00:11:21.150
<v Ruben Somsen>that's the first thing. And the second thing is that this miner that created the

00:11:21.150 --> 00:11:26.960
<v Ruben Somsen>forked block, they did choose to mine… the block before it is the same

00:11:26.960 --> 00:11:28.220
<v Ruben Somsen>in both forks.

00:11:28.340 --> 00:11:33.380
<v Aaron van Wirdum>Yeah, they still agree that the block came... Before it is valid. Everyone

00:11:33.380 --> 00:11:37.320
<v Aaron van Wirdum>basically, of all the forks you're seeing, everyone agrees that block is valid at least.

00:11:37.640 --> 00:11:40.320
<v Ruben Somsen>Yeah, otherwise they wouldn't have forked from that point. They would have forked

00:11:40.320 --> 00:11:40.920
<v Ruben Somsen>earlier.

00:11:41.180 --> 00:11:41.360
<v Aaron van Wirdum>Right.

00:11:41.700 --> 00:11:47.500
<v Ruben Somsen>So we have two assumptions here. We have the assumption that that block

00:11:47.500 --> 00:11:51.740
<v Ruben Somsen>might be invalid and the block before it, all the miners agree that it's valid.

00:11:51.920 --> 00:11:52.080
<v Aaron van Wirdum>Right.

00:11:52.520 --> 00:11:56.280
<v Ruben Somsen>So with that assumption, now what you need is you need to download block three

00:11:56.280 --> 00:12:00.320
<v Ruben Somsen>and you need to validate it. But we have a problem because you need the UTXO sets.

00:12:00.800 --> 00:12:05.260
<v Sjors Provoost>To validate the block right because every block contains transactions which refer

00:12:05.260 --> 00:12:09.280
<v Sjors Provoost>back to previous transactions and those previous transactions well they're not in

00:12:09.280 --> 00:12:13.240
<v Sjors Provoost>this block so either you have to download all the other blocks or you need to

00:12:13.240 --> 00:12:17.320
<v Sjors Provoost>keep track of you know which coins currently exist and that is the UTXO set.

00:12:17.320 --> 00:12:20.920
<v Aaron van Wirdum>Yeah, which we discussed in episode well…

00:12:20.920 --> 00:12:24.200
<v Sjors Provoost>In a whole bunch of episodes but in particular because of where we're going in

00:12:24.200 --> 00:12:29.880
<v Sjors Provoost>episode 15 where we explain Utreexo and UTXO commitments right.

00:12:30.540 --> 00:12:34.620
<v Ruben Somsen>So yeah, Utreexo, which is definitely an episode I think you should go back and

00:12:34.620 --> 00:12:40.560
<v Ruben Somsen>listen to, but Utreexo basically gives you a solution to validate blocks without

00:12:40.560 --> 00:12:46.100
<v Ruben Somsen>having the entire [unclear] sets. You just need a hash. And then you need some

00:12:46.100 --> 00:12:50.120
<v Ruben Somsen>proofs that are attached to the hash. And that allows you to validate a

00:12:50.120 --> 00:12:53.860
<v Ruben Somsen>transition. So in this case, from block two to block three, we can validate that

00:12:53.860 --> 00:12:59.480
<v Ruben Somsen>transition. So what you need inside of block two, inside of consensus, is a

00:12:59.480 --> 00:13:04.760
<v Ruben Somsen>hash to the Utreexo state. And with that state, which you assume is valid,

00:13:04.880 --> 00:13:09.390
<v Ruben Somsen>because we're assuming block two is valid, you can then… validate the transition

00:13:09.510 --> 00:13:14.470
<v Ruben Somsen>from block two to block three, without requiring the entire UTXO set. And that's

00:13:14.470 --> 00:13:18.410
<v Ruben Somsen>how we achieve basically what we want, which is validating block three and

00:13:18.410 --> 00:13:21.310
<v Ruben Somsen>figuring out whether the most proof of work chain is valid or not.

00:13:21.710 --> 00:13:26.090
<v Aaron van Wirdum>Yeah, so the reason it's that much lighter than full validation is because you're

00:13:26.090 --> 00:13:31.210
<v Aaron van Wirdum>not downloading all the blocks. You're only looking for potential conflicts where

00:13:31.210 --> 00:13:34.370
<v Aaron van Wirdum>they exist. And that's the only thing you check.

00:13:34.670 --> 00:13:34.810
<v Ruben Somsen>Yeah.

00:13:34.930 --> 00:13:37.760
<v Aaron van Wirdum>Well, plus... The block headers, the proof of work for all blocks.

00:13:37.940 --> 00:13:41.580
<v Ruben Somsen>Yeah, so it's basically every block for which there is another block at the same

00:13:41.580 --> 00:13:46.600
<v Ruben Somsen>block height. You need to go and check the block inside of the most proof of work chain.

00:13:46.800 --> 00:13:47.120
<v Aaron van Wirdum>Right.

00:13:47.360 --> 00:13:51.560
<v Sjors Provoost>And if you're bored, you can also check, you know, a random other block as a spot

00:13:51.560 --> 00:13:53.880
<v Sjors Provoost>check. Although for this mechanism, that doesn't really matter.

00:13:54.140 --> 00:13:57.780
<v Ruben Somsen>Yeah, I don't think it would do anything here, but it's definitely interesting

00:13:57.780 --> 00:14:01.020
<v Ruben Somsen>that it's possible, thanks to Utreexo, if you have these commitments.

00:14:01.300 --> 00:14:05.040
<v Sjors Provoost>Yeah, so the interesting thing, there are different ways of doing commitments of

00:14:05.040 --> 00:14:10.800
<v Sjors Provoost>the UTXO set in blocks. And Utreexo is a very interesting one, because

00:14:10.800 --> 00:14:14.460
<v Sjors Provoost>it's not just a commitment, that you can, you know, if you have the UTXO set, you

00:14:14.460 --> 00:14:19.920
<v Sjors Provoost>can figure out what the Utreexo is, but you could have a different hash as well

00:14:19.920 --> 00:14:25.840
<v Sjors Provoost>but that hash won't be very useful to check the next block and with Utreexo it is

00:14:25.840 --> 00:14:29.080
<v Sjors Provoost>useful to check the next block because you can it's a hash that you can add

00:14:29.080 --> 00:14:32.440
<v Sjors Provoost>things to. It's an accumulator. Yeah, so I can take the hash of the previous

00:14:32.440 --> 00:14:36.200
<v Sjors Provoost>block add all the transactions to it and now I have the hash of the new block.

00:14:36.200 --> 00:14:41.420
<v Sjors Provoost>Yeah, and well we explained that in episode 15, but not all UTXO commitments will

00:14:41.420 --> 00:14:42.080
<v Sjors Provoost>work like this.

00:14:42.080 --> 00:14:42.660
<v Ruben Somsen>Yeah, that's right.

00:14:42.660 --> 00:14:46.660
<v Aaron van Wirdum>So yeah, I want to point out right here that this, what you just explained, this

00:14:46.660 --> 00:14:51.360
<v Aaron van Wirdum>is why you potentially only need one percent of honest miners. Now let's say in

00:14:51.360 --> 00:14:56.650
<v Aaron van Wirdum>this example, you just gave proof of work, fraud proofs, fraud indicators. If

00:14:56.650 --> 00:15:01.630
<v Aaron van Wirdum>100% of miners is dishonest, then you're never going to find out because there's

00:15:01.630 --> 00:15:05.090
<v Aaron van Wirdum>never going to be a conflicting block. They're always colluding and you're just

00:15:05.090 --> 00:15:06.030
<v Aaron van Wirdum>never going to find out.

00:15:06.190 --> 00:15:06.530
<v Ruben Somsen>Yes.

00:15:06.630 --> 00:15:11.070
<v Aaron van Wirdum>But if there's even 1% of honest miners, then at some point that one honest miner

00:15:11.070 --> 00:15:14.550
<v Aaron van Wirdum>isn't going to build on the longest proof of work chain because they think it's

00:15:14.550 --> 00:15:18.510
<v Aaron van Wirdum>invalid. They know it's invalid. Instead, they're going to create a conflicting

00:15:18.510 --> 00:15:23.230
<v Aaron van Wirdum>block that's honest. So even if there were like 100 blocks that were dishonest,

00:15:23.980 --> 00:15:27.900
<v Aaron van Wirdum>after block one or whatever. And then at some point, the honest miner will create

00:15:27.900 --> 00:15:33.750
<v Aaron van Wirdum>an honest block two. At that point, you see the conflict and you go check which

00:15:33.750 --> 00:15:39.270
<v Aaron van Wirdum>of the two block twos is valid. If you see that a block two that created, that

00:15:39.270 --> 00:15:43.110
<v Aaron van Wirdum>preceded the 100 blockchain with 100 blocks, then you're just going to reject all

00:15:43.110 --> 00:15:46.690
<v Aaron van Wirdum>100 blocks and you're going to continue only on this block number two.

00:15:46.970 --> 00:15:47.130
<v Sjors Provoost>Yeah.

00:15:47.330 --> 00:15:52.750
<v Ruben Somsen>So it's important to point out here that the creation of the fork is really not a

00:15:52.750 --> 00:15:57.600
<v Ruben Somsen>sacrifice, right? It's not that that person who created that fork block and

00:15:57.600 --> 00:16:02.180
<v Ruben Somsen>caused the 100 blocks to be rejected. That's just kind of the normal way things

00:16:02.180 --> 00:16:05.360
<v Ruben Somsen>should be. Like that person who created the forked block, they get the block

00:16:05.360 --> 00:16:08.960
<v Ruben Somsen>reward, whereas everybody else who was building on the invalid chain, they get

00:16:08.960 --> 00:16:10.640
<v Ruben Somsen>nothing, right? Because their chain is invalidated.

00:16:10.740 --> 00:16:15.100
<v Sjors Provoost>Right, but it is a little bit risky because at any point, if you're proposing, if

00:16:15.100 --> 00:16:18.040
<v Sjors Provoost>you're telling the rest of the network, oh, we're about to do a 100 block reorg,

00:16:18.480 --> 00:16:22.060
<v Sjors Provoost>or maybe a thousand or whatever it is, at some point the rest of the network

00:16:22.060 --> 00:16:26.290
<v Sjors Provoost>might say, well, although you're right, like it's not worth the damage that this

00:16:26.290 --> 00:16:29.870
<v Sjors Provoost>reorg does, but we don't want to get too far ahead of our discussion section…

00:16:29.870 --> 00:16:31.750
<v Aaron van Wirdum>But, well, we can get into this now maybe?

00:16:31.750 --> 00:16:32.830
<v Ruben Somsen>Yeah, I think it's a good like…

00:16:32.830 --> 00:16:38.090
<v Aaron van Wirdum>Yeah a lot of people might say, well I just sold my car for these coins or I just

00:16:38.090 --> 00:16:43.750
<v Aaron van Wirdum>you know I just accepted rent or whatever let's you know okay yes sure the chain

00:16:43.750 --> 00:16:47.880
<v Aaron van Wirdum>turned out to be invalid but, let's just forget about it. Let's just continue on

00:16:47.880 --> 00:16:51.560
<v Aaron van Wirdum>this chain because I don't want to lose all this money I received. That's sort of

00:16:51.560 --> 00:16:57.060
<v Aaron van Wirdum>possible. That's sort of complicated incentive thing going on there, game theory thing.

00:16:57.360 --> 00:17:01.240
<v Sjors Provoost>Now, of course, if you're receiving money on one of those soft chains or whatever

00:17:01.240 --> 00:17:05.340
<v Sjors Provoost>thing is built on top of this mechanism, if you're the one receiving coins on it,

00:17:05.440 --> 00:17:10.260
<v Sjors Provoost>you probably want to do full validation of that particular chain. So at least you

00:17:10.260 --> 00:17:13.740
<v Sjors Provoost>know that there's a problem. But then you could still have the opposite, where

00:17:13.740 --> 00:17:18.800
<v Sjors Provoost>you can see that there's cheating going on, but you may have to wait a whole year

00:17:18.800 --> 00:17:22.780
<v Sjors Provoost>for any miner to agree with you on the fact that there's cheating going on.

00:17:23.090 --> 00:17:26.250
<v Sjors Provoost>Because all the other people are not validating. You're the only one validating.

00:17:26.510 --> 00:17:31.030
<v Ruben Somsen>Yeah, so the people who are not validating, not fully validating, but only

00:17:31.030 --> 00:17:35.650
<v Ruben Somsen>basically doing the proof of work fraud proof validation, they have an assumption

00:17:35.650 --> 00:17:39.210
<v Ruben Somsen>to make, right? Like they have to assume that there is a honest miner out there

00:17:39.210 --> 00:17:43.550
<v Ruben Somsen>and they have to, because of that assumption, they have to slow down how long

00:17:43.550 --> 00:17:47.630
<v Ruben Somsen>they wait. So if you receive money for a car and you use this consensus mechanism

00:17:47.630 --> 00:17:52.980
<v Ruben Somsen>and you don't wait for the proper number of blocks, yeah, that is just... The

00:17:52.980 --> 00:17:56.440
<v Ruben Somsen>wrong behavior, basically. That's not what you're supposed to so that's basically

00:17:56.440 --> 00:18:01.220
<v Ruben Somsen>outside of the trust assumption of this model. But if your assumption is wrong,

00:18:01.220 --> 00:18:03.720
<v Ruben Somsen>right, if you just assume one percent of all miners is honest, and that's

00:18:03.720 --> 00:18:06.360
<v Ruben Somsen>actually a wrong assumption, yeah, then then you are screwed. So that's

00:18:06.360 --> 00:18:10.020
<v Ruben Somsen>definitely, you got to make a conservative choice there. And for that reason,

00:18:10.020 --> 00:18:13.960
<v Ruben Somsen>this consensus mechanism isn't isn't very practical. Instead of a full node, like

00:18:13.960 --> 00:18:16.160
<v Ruben Somsen>you could theoretically run this on your phone or something, right?

00:18:16.510 --> 00:18:22.150
<v Sjors Provoost>So ironically, this reverses the risks when compared to how Bitcoin works when it

00:18:22.150 --> 00:18:26.650
<v Sjors Provoost>comes to light nodes. So if on Bitcoin, you're running an SPV node, but you see

00:18:26.650 --> 00:18:30.390
<v Sjors Provoost>that if you're running the SPV node, you might be cheated because you're only

00:18:30.390 --> 00:18:35.150
<v Sjors Provoost>checking the proof of work. But whoever runs the full node knows exactly what's

00:18:35.150 --> 00:18:38.970
<v Sjors Provoost>going on. But here it could be the opposite. You could be running a full node,

00:18:38.990 --> 00:18:43.030
<v Sjors Provoost>you could be verifying everything very carefully, but you just don't get all the

00:18:43.030 --> 00:18:47.130
<v Sjors Provoost>headers for some reason. And so, yeah, you might not know that somebody else is

00:18:47.130 --> 00:18:51.750
<v Sjors Provoost>out there lying, basically. You'd have to not see a very long chain of headers,

00:18:51.870 --> 00:18:52.410
<v Sjors Provoost>but...

00:18:52.410 --> 00:18:56.110
<v Ruben Somsen>Well, if they're invalid headers, presumably none of your peers are going to tell

00:18:56.110 --> 00:19:00.070
<v Ruben Somsen>you about it because they're invalid. So maybe it's possible to not be aware.

00:19:00.930 --> 00:19:05.630
<v Sjors Provoost>Right. Yeah, I guess you'd still be following the valid chain, but you might not

00:19:05.630 --> 00:19:08.590
<v Sjors Provoost>know that there's an invalid chain out there because you might only be talking to

00:19:08.590 --> 00:19:11.950
<v Sjors Provoost>other full nodes. So you don't know that the rest of the network is kind of

00:19:11.950 --> 00:19:15.890
<v Sjors Provoost>trusting on an invalid chain and shit is about to hit the fan. Although you have

00:19:15.890 --> 00:19:19.710
<v Sjors Provoost>the correct chain, it may take a while for the rest of the network to agree on

00:19:19.710 --> 00:19:22.990
<v Sjors Provoost>that because there's an invalid chain out there that you don't know about. Though

00:19:22.990 --> 00:19:24.130
<v Sjors Provoost>I guess you would know about it.

00:19:24.290 --> 00:19:29.800
<v Ruben Somsen>Yeah, I think arguably it might be just good in general to... Give all valid

00:19:29.800 --> 00:19:33.020
<v Ruben Somsen>proof-of-work headers to all the full nodes, regardless of whether or not they're

00:19:33.020 --> 00:19:37.140
<v Ruben Somsen>in the most proof-of-work chain, just as an indicator of whether something is

00:19:37.140 --> 00:19:39.840
<v Ruben Somsen>wrong. But that's kind of a separate discussion.

00:19:40.380 --> 00:19:40.740
<v Sjors Provoost>Yeah.

00:19:41.000 --> 00:19:46.760
<v Aaron van Wirdum>So we've explained this consensus mechanism in general terms.

00:19:47.040 --> 00:19:47.380
<v Ruben Somsen>Yeah.

00:19:47.540 --> 00:19:49.760
<v Aaron van Wirdum>So how do we apply this as a sidechain?

00:19:49.940 --> 00:19:50.220
<v Ruben Somsen>Yeah.

00:19:50.360 --> 00:19:51.480
<v Aaron van Wirdum>That would be the next step, right?

00:19:51.680 --> 00:19:55.260
<v Ruben Somsen>Yeah. Yeah. So now we have this consensus mechanism, which you could

00:19:55.260 --> 00:19:58.420
<v Ruben Somsen>theoretically apply to Bitcoin and you could have consensus this way, but just

00:19:58.420 --> 00:19:58.900
<v Ruben Somsen>very slowly.

00:19:59.300 --> 00:20:02.460
<v Aaron van Wirdum>Yeah. Plus it would require Utreexo or something like that.

00:20:02.540 --> 00:20:02.640
<v Ruben Somsen>Yeah.

00:20:03.320 --> 00:20:08.490
<v Aaron van Wirdum>Which doesn't exist. We create a sidechain, it's easy to just implement it there.

00:20:08.730 --> 00:20:14.260
<v Ruben Somsen>Yeah, I have a method of actually not even requiring a

00:20:14.260 --> 00:20:20.020
<v Ruben Somsen>Utreexo commitment, but let's not go into that. But there's a post out there if

00:20:20.020 --> 00:20:20.760
<v Ruben Somsen>you're interested in that.

00:20:20.920 --> 00:20:26.130
<v Sjors Provoost>But it is good to realize that... The Utreexo and the commitments, they are a bit

00:20:26.130 --> 00:20:29.770
<v Sjors Provoost>of a controversial idea. But in this case, they wouldn't have to happen on the

00:20:29.770 --> 00:20:33.470
<v Sjors Provoost>Bitcoin side. They'd have to happen on the sidechain side. And so maybe we'd be

00:20:33.470 --> 00:20:34.050
<v Sjors Provoost>fine with that.

00:20:34.350 --> 00:20:38.250
<v Ruben Somsen>Yeah, yeah, exactly. So what we're doing here is we're using this consensus

00:20:38.250 --> 00:20:42.670
<v Ruben Somsen>mechanism for the sidechains or softchains, as I call them, that we're going to

00:20:42.670 --> 00:20:47.490
<v Ruben Somsen>be introducing. So on the side of the softchains, you need to have these Utreexo

00:20:47.490 --> 00:20:52.340
<v Ruben Somsen>set commitments, but not inside of the Bitcoin blockchain. So that's not

00:20:52.340 --> 00:20:54.660
<v Ruben Somsen>something that we require for Bitcoin here.

00:20:54.900 --> 00:20:57.100
<v Sjors Provoost>But you do need some soft fork on the Bitcoin side.

00:20:57.100 --> 00:20:58.060
<v Ruben Somsen>Yes, yeah, absolutely.

00:20:58.320 --> 00:20:58.700
<v Sjors Provoost>Tell us.

00:20:58.940 --> 00:21:04.840
<v Ruben Somsen>Yeah. So the way it works is we are going to introduce a soft fork. And

00:21:04.840 --> 00:21:09.380
<v Ruben Somsen>let's say we just start very simply. Let's say we want to create 10 more copies

00:21:09.380 --> 00:21:13.580
<v Ruben Somsen>of Bitcoin. We use Bitcoin Core for it, exactly the same. So we kind of want to

00:21:13.580 --> 00:21:18.340
<v Ruben Somsen>create a kind of a side chain block size increase, so to speak. So we create

00:21:18.340 --> 00:21:23.040
<v Ruben Somsen>these 10 chains. And they will have no coins on them. And there's going to be no

00:21:23.040 --> 00:21:27.060
<v Ruben Somsen>block reward or no coins being generated every block. But people can move their

00:21:27.060 --> 00:21:30.420
<v Ruben Somsen>coins in. And moving their coins in is going to be very simple. It's just you

00:21:30.420 --> 00:21:33.980
<v Ruben Somsen>freeze your coins on the Bitcoin blockchain and you point to a chain that you

00:21:33.980 --> 00:21:39.880
<v Ruben Somsen>want to go to. And then what we do is we expect everybody who

00:21:39.880 --> 00:21:44.700
<v Ruben Somsen>runs a Bitcoin full node to validate these 10 other soft chains. But they

00:21:44.700 --> 00:21:49.210
<v Ruben Somsen>validate them through these proof of work fraud proofs. And roughly speaking...

00:21:49.210 --> 00:21:49.830
<v Sjors Provoost>Fraud indicators.

00:21:50.070 --> 00:21:54.530
<v Ruben Somsen>Fraud indicators. Yeah, that's a better name. And roughly looking at the Bitcoin

00:21:54.530 --> 00:21:58.390
<v Ruben Somsen>blockchain and its history and looking at kind of just natural forks occurring by

00:21:58.390 --> 00:22:02.230
<v Ruben Somsen>accident. This comes down to, I think it was roughly, I don't remember the exact

00:22:02.230 --> 00:22:05.810
<v Ruben Somsen>numbers, but something like 40 blocks a year. That's probably even on the high

00:22:05.810 --> 00:22:11.450
<v Ruben Somsen>end. And roughly this would cost you, including the headers, 100 megabytes per

00:22:11.450 --> 00:22:12.290
<v Ruben Somsen>chain per year.

00:22:12.450 --> 00:22:15.680
<v Aaron van Wirdum>What you mean is 40 fork blocks, basically, right?

00:22:15.680 --> 00:22:15.960
<v Ruben Somsen>Yes.

00:22:15.960 --> 00:22:20.220
<v Aaron van Wirdum>So 40 times where you'd have to check… exactly, if anything weird is going on.

00:22:20.220 --> 00:22:24.460
<v Ruben Somsen>Yeah. And that's with, yeah, not, you know, non-malicious. Nobody on purpose…

00:22:24.460 --> 00:22:27.720
<v Ruben Somsen>well, presumably, I guess we don't know what what the reason was for these forks.

00:22:27.720 --> 00:22:28.800
<v Aaron van Wirdum>Sure. Yeah.

00:22:28.800 --> 00:22:34.680
<v Ruben Somsen>So given roughly those numbers, we can introduce those 10 chains and we can get

00:22:34.680 --> 00:22:38.160
<v Ruben Somsen>everybody to validate them with proof-of-work fraud proofs and it would cost them

00:22:38.160 --> 00:22:44.030
<v Ruben Somsen>10 times 100 megabytes per year. So roughly one gigabytes. And if

00:22:44.030 --> 00:22:49.790
<v Ruben Somsen>we thought that was a burden on the full nodes, we could even combine this with a

00:22:49.790 --> 00:22:54.450
<v Ruben Somsen>block size decrease. I think one gigabyte is only like minus 1% or something. So

00:22:54.450 --> 00:22:58.370
<v Ruben Somsen>we could decrease the Bitcoin block size by 1% to compensate for the extra cost.

00:22:58.610 --> 00:23:03.690
<v Ruben Somsen>And then we basically introduce these 10 chains. And it's important to note, and

00:23:03.690 --> 00:23:06.690
<v Ruben Somsen>this is something that some people I've explained this to have gotten confused

00:23:06.690 --> 00:23:11.620
<v Ruben Somsen>about, you completely separately validate the header. So you just have to get the

00:23:11.620 --> 00:23:16.060
<v Ruben Somsen>headers from the peer-to-peer network, from these proof of work, from these soft

00:23:16.060 --> 00:23:18.820
<v Ruben Somsen>chains. So they're not going to be committed inside of the Bitcoin blockchain or

00:23:18.820 --> 00:23:19.460
<v Ruben Somsen>anything like that.

00:23:19.680 --> 00:23:22.640
<v Sjors Provoost>It is essentially like you're running 11 nodes.

00:23:22.840 --> 00:23:23.140
<v Ruben Somsen>Yes.

00:23:23.140 --> 00:23:27.160
<v Sjors Provoost>So your main Bitcoin node does full validation and then you have 10 Bitcoin

00:23:27.160 --> 00:23:31.200
<v Sjors Provoost>sidechain nodes built in, of course, that are doing this partial validation by

00:23:31.200 --> 00:23:33.420
<v Sjors Provoost>just doing the headers and just checking conflicts.

00:23:33.780 --> 00:23:39.570
<v Ruben Somsen>Yeah, that's right. And then what we do is we make the peg outs incredibly slow.

00:23:39.770 --> 00:23:44.830
<v Ruben Somsen>We make them like a one year period. So the peg out meaning you moved your coins

00:23:44.830 --> 00:23:48.690
<v Ruben Somsen>to the soft chain and now you want to move back. So moving back is going to take

00:23:48.690 --> 00:23:53.050
<v Ruben Somsen>a year. And the reason we do that is because we don't want to rely too much on

00:23:53.050 --> 00:23:56.650
<v Ruben Somsen>miners. And if we wait a year, I don't know what it works out to, but it's like

00:23:56.650 --> 00:24:02.430
<v Ruben Somsen>0.01% or something like somebody out there within a year has to

00:24:02.430 --> 00:24:08.050
<v Ruben Somsen>create a fork when an invalid block occurs that is specifically

00:24:08.050 --> 00:24:09.730
<v Ruben Somsen>trying to peg out something that's invalid.

00:24:09.870 --> 00:24:13.210
<v Sjors Provoost>So a peg out on the main chain, that of course is a soft fork, right? Because

00:24:13.210 --> 00:24:16.970
<v Sjors Provoost>it's probably from old nodes point of view, an address that anybody can spend

00:24:16.970 --> 00:24:21.390
<v Sjors Provoost>from. Coins go in there. Those coins belong to the side chain. And for old nodes,

00:24:21.490 --> 00:24:24.590
<v Sjors Provoost>anybody can just take that money. But for these new nodes, there are constraints.

00:24:24.990 --> 00:24:29.240
<v Sjors Provoost>But what exactly is that constraint? Some sort of block refer… they have to refer

00:24:29.240 --> 00:24:31.080
<v Sjors Provoost>to a block hash on one of the sidechains?

00:24:31.320 --> 00:24:35.080
<v Ruben Somsen>Yeah, so this is not completely worked out because I think they're, you know,

00:24:35.460 --> 00:24:39.400
<v Ruben Somsen>this really, you go into the weeds and I think those design decisions kind of

00:24:39.400 --> 00:24:40.040
<v Ruben Somsen>need to come later.

00:24:40.280 --> 00:24:43.400
<v Sjors Provoost>Well, but roughly you refer to a block hash because then you could say, well, if

00:24:43.400 --> 00:24:47.360
<v Sjors Provoost>that block hash is forked out or like in an invalid block, because we checked all

00:24:47.360 --> 00:24:50.100
<v Sjors Provoost>those conflicts, we're not going to accept the peg out.

00:24:50.320 --> 00:24:54.640
<v Ruben Somsen>Yeah, that's right. Yeah, you definitely have to. So... If you want to peg out on

00:24:54.640 --> 00:24:58.780
<v Ruben Somsen>the Bitcoin blockchain, you say, hey, I want… to, so you're not even spending the

00:24:58.780 --> 00:25:02.520
<v Ruben Somsen>UTXO yet. You're just saying like one year from now, I want to take some coins

00:25:02.520 --> 00:25:07.700
<v Ruben Somsen>out of this UTXO. And you point to a specific soft chain block, which also

00:25:07.700 --> 00:25:11.520
<v Ruben Somsen>contains your peg out transaction that you want to be referring to. And then from

00:25:11.520 --> 00:25:15.080
<v Ruben Somsen>that moment inside of Bitcoin consensus, you wait one year worth of blocks,

00:25:15.220 --> 00:25:20.900
<v Ruben Somsen>however many blocks that is. And then after a year, if that block, if that soft

00:25:20.900 --> 00:25:24.910
<v Ruben Somsen>chain block that you pointed to is still valid according to proof of work fraud

00:25:24.910 --> 00:25:27.090
<v Ruben Somsen>proof consensus, then you get your peg out.

00:25:27.090 --> 00:25:31.690
<v Aaron van Wirdum>Yeah, so to make the problem you're solving here very concrete, if I understand

00:25:31.690 --> 00:25:37.590
<v Aaron van Wirdum>correctly, to give one example is that miners would create an

00:25:37.590 --> 00:25:42.420
<v Aaron van Wirdum>invalid transaction on the side chain to just pay all the money to themselves.

00:25:42.420 --> 00:25:47.000
<v Aaron van Wirdum>Yeah, and then your assumption is well there's got to be some miner out there

00:25:47.000 --> 00:25:51.820
<v Aaron van Wirdum>somewhere who's going to actually create a valid alternative yeah, and at that

00:25:51.820 --> 00:25:56.840
<v Aaron van Wirdum>point it creates a conflict and at that point, everyone checks and sees that the

00:25:56.840 --> 00:26:01.080
<v Aaron van Wirdum>valid alternative is not sending all this money to all the miners so therefore

00:26:01.080 --> 00:26:04.560
<v Aaron van Wirdum>the peg out transaction is invalid and won't happen.

00:26:04.560 --> 00:26:09.080
<v Ruben Somsen>Yeah, and and to add to that: if there is no block that is forking away from the

00:26:09.080 --> 00:26:12.740
<v Ruben Somsen>invalid block, then from the perspective of everybody who's using the soft chain,

00:26:12.920 --> 00:26:15.880
<v Ruben Somsen>and it's important to note, if you're actually using the soft chain, you're

00:26:15.880 --> 00:26:19.140
<v Ruben Somsen>running it as a full node. So you opt into it and you actually validate it

00:26:19.140 --> 00:26:23.200
<v Ruben Somsen>normally. So then from their perspective, the chain is not moving forward because

00:26:23.200 --> 00:26:26.980
<v Ruben Somsen>this is just a big chain of invalid blocks. So all their transactions are stuck.

00:26:27.160 --> 00:26:31.340
<v Ruben Somsen>So there's basically a huge fee pressure of saying like, hey, build the next

00:26:31.340 --> 00:26:34.710
<v Ruben Somsen>block, please, because everything you're building is invalid. From that

00:26:34.710 --> 00:26:40.070
<v Ruben Somsen>perspective, I think it's incredibly unlikely that within a year, there is not

00:26:40.070 --> 00:26:44.650
<v Ruben Somsen>going to be a block that is going to indicate that that entire chain was actually invalid.

00:26:44.890 --> 00:26:48.970
<v Sjors Provoost>But this is where I start getting really scared. And you're also going to get

00:26:48.970 --> 00:26:52.470
<v Sjors Provoost>really scared. You already gave some examples, but I'm going to give another one,

00:26:52.630 --> 00:26:57.120
<v Sjors Provoost>which is that… this is a fraud indicator, as you said. It's not really a proof.

00:26:57.240 --> 00:27:00.860
<v Sjors Provoost>And I guess a difference here would be a proof would be something committed to

00:27:00.860 --> 00:27:05.340
<v Sjors Provoost>the blockchain that really says, okay, this is the real thing and this is the

00:27:05.340 --> 00:27:09.820
<v Sjors Provoost>evidence that this thing is wrong. And there's problems with that concept. But at

00:27:09.820 --> 00:27:14.320
<v Sjors Provoost>least everybody would have access to that proof at the same time. And with this

00:27:14.320 --> 00:27:19.590
<v Sjors Provoost>fraud indicator… you're really hoping that all the Bitcoin full nodes are aware

00:27:19.590 --> 00:27:24.230
<v Sjors Provoost>that this particular pegout is invalid. So all of them have seen this alternative

00:27:24.230 --> 00:27:27.270
<v Sjors Provoost>header chain, have seen this header fork, basically.

00:27:27.530 --> 00:27:27.670
<v Ruben Somsen>Yeah.

00:27:28.030 --> 00:27:32.970
<v Sjors Provoost>Because if one doesn't, then they might think, oh, it's perfectly valid. And so

00:27:32.970 --> 00:27:37.030
<v Sjors Provoost>you get a consensus disagreement there. And that might still work out if the

00:27:37.030 --> 00:27:40.890
<v Sjors Provoost>majority of hash power, at least, because, you know, as long as the Bitcoin

00:27:40.890 --> 00:27:45.980
<v Sjors Provoost>miners, the majority of the Bitcoin miners, are doing the correct thing. But if

00:27:45.980 --> 00:27:48.540
<v Sjors Provoost>they're not, then things get real messy.

00:27:49.000 --> 00:27:52.760
<v Ruben Somsen>Yeah, worst case scenario, which I think is kind of an unlikely scenario, right?

00:27:52.900 --> 00:27:58.040
<v Ruben Somsen>That you don't learn about a certain... It is very similar to how in Bitcoin

00:27:58.040 --> 00:28:02.500
<v Ruben Somsen>you're assuming that you learn about the most proof of work chain. And if nobody

00:28:02.500 --> 00:28:05.880
<v Ruben Somsen>tells you about the most proof of work chain, then you might get stuck on some

00:28:05.880 --> 00:28:08.880
<v Ruben Somsen>fork and you don't see the chain move forward anymore or something like that.

00:28:09.330 --> 00:28:12.130
<v Ruben Somsen>Theoretically, I guess that could happen on one of these soft chains. I think

00:28:12.130 --> 00:28:16.350
<v Ruben Somsen>it's unlikely, but let's say it did, then that one node or those couple of nodes

00:28:16.350 --> 00:28:20.950
<v Ruben Somsen>that are in that situation, they could theoretically fork away from Bitcoin and

00:28:20.950 --> 00:28:25.070
<v Ruben Somsen>they would consider some, well, yeah, I guess I guess it would be a scenario

00:28:25.070 --> 00:28:29.630
<v Ruben Somsen>where they think a certain pegout was invalid because they didn't learn about it or something.

00:28:29.770 --> 00:28:32.440
<v Sjors Provoost>No, it'd be the other way around. So I think it wouldn't be too bad because yeah

00:28:32.440 --> 00:28:37.490
<v Sjors Provoost>if if there is a pegout that is not valid, but but you have not seen the real

00:28:37.490 --> 00:28:41.620
<v Sjors Provoost>chain, then you don't know that it's not valid. But that's okay, because you

00:28:41.620 --> 00:28:43.060
<v Sjors Provoost>still think you think it's valid.

00:28:43.460 --> 00:28:45.640
<v Ruben Somsen>Yeah, but it's not being spent, basically, then.

00:28:46.200 --> 00:28:50.520
<v Sjors Provoost>Yeah, so I think you'd be fine in terms of the software dynamics there. So maybe

00:28:50.520 --> 00:28:53.540
<v Sjors Provoost>we should move on to the example you talked about, which is, now let's do some

00:28:53.540 --> 00:28:54.640
<v Sjors Provoost>funny things with consensus.

00:28:54.980 --> 00:28:58.300
<v Ruben Somsen>Yeah, so there are problems with this, which you haven't talked about yet, and

00:28:58.300 --> 00:28:59.160
<v Ruben Somsen>let's get into that.

00:28:59.460 --> 00:29:01.660
<v Aaron van Wirdum>Yeah, let's get into it. You're the expert.

00:29:02.140 --> 00:29:07.380
<v Ruben Somsen>Yeah, so the problem was so far that I've identified, and... I guess I'll start

00:29:07.380 --> 00:29:12.890
<v Ruben Somsen>with saying that… at its current… they're not terrible, but I think they are

00:29:12.890 --> 00:29:18.670
<v Ruben Somsen>bad enough for it to not really be a great idea for Bitcoin yet. Like really, if

00:29:18.670 --> 00:29:22.630
<v Ruben Somsen>we can't mitigate these issues sufficiently, I don't think this is something that

00:29:22.630 --> 00:29:24.370
<v Ruben Somsen>should currently be activated in Bitcoin.

00:29:24.370 --> 00:29:26.530
<v Aaron van Wirdum>Right, so you're against your own proposal?

00:29:26.530 --> 00:29:31.350
<v Ruben Somsen>I am basically against my own proposal. I think there is some potential there to

00:29:31.350 --> 00:29:35.010
<v Ruben Somsen>think it through and maybe mitigate these issues. So I'm hopeful that we can get

00:29:35.010 --> 00:29:40.640
<v Ruben Somsen>to a point where it's safer than I think it is, or than I currently think it is.

00:29:40.920 --> 00:29:44.100
<v Aaron van Wirdum>Right. So we're considering this sort of like a first draft.

00:29:44.360 --> 00:29:45.540
<v Ruben Somsen>Yeah, yeah, basically.

00:29:45.800 --> 00:29:48.620
<v Aaron van Wirdum>Okay. So why is it a first draft? What's the problem?

00:29:48.760 --> 00:29:54.500
<v Ruben Somsen>So the first issue, and this is one that I think can be mitigated, is that you

00:29:54.500 --> 00:29:58.340
<v Ruben Somsen>could have a non-deterministic consensus in one of these soft chains.

00:29:58.960 --> 00:30:01.400
<v Aaron van Wirdum>You mean like a bug, or is that what you mean or not?

00:30:01.500 --> 00:30:06.180
<v Ruben Somsen>Yeah, it would be a bug. So what I mean by non-deterministic consensus is that:

00:30:06.660 --> 00:30:12.200
<v Ruben Somsen>you and I run the proof of work, fraud proof, a soft chain, the software on a

00:30:12.200 --> 00:30:17.660
<v Ruben Somsen>different computer, and somehow the software interprets something differently,

00:30:17.660 --> 00:30:21.500
<v Ruben Somsen>and you think a block is invalid, and I think a block is valid. So that would be

00:30:21.500 --> 00:30:25.920
<v Ruben Somsen>non-deterministic in the sense that we don't, given the same data, we don't come

00:30:25.920 --> 00:30:26.740
<v Ruben Somsen>to the same conclusion.

00:30:27.160 --> 00:30:31.180
<v Aaron van Wirdum>Right, but that's the same for Bitcoin itself, right? That's a problem right now.

00:30:31.340 --> 00:30:35.420
<v Ruben Somsen>Yes. So what I mean here is that let's say if you want to do something fancy,

00:30:35.700 --> 00:30:38.460
<v Ruben Somsen>like, hey, let's create an Ethereum soft chain.

00:30:38.660 --> 00:30:38.920
<v Aaron van Wirdum>Right.

00:30:39.120 --> 00:30:44.680
<v Ruben Somsen>Well, then you inherit all of Ethereum's crazy stuff that's in there. And that is

00:30:44.680 --> 00:30:49.000
<v Ruben Somsen>not something I would be comfortable with because of this non-deterministic bug

00:30:49.000 --> 00:30:54.100
<v Ruben Somsen>potential which could come back to actually influence Bitcoin main chain because

00:30:54.100 --> 00:30:58.100
<v Ruben Somsen>let's see how this would occur yeah if there's a transaction there's a pegout

00:30:58.100 --> 00:31:03.400
<v Ruben Somsen>transaction and the block is in dispute because there's a fork block and because

00:31:03.400 --> 00:31:08.620
<v Ruben Somsen>of this the non-deterministic behavior your node thinks the pegout is valid and

00:31:08.620 --> 00:31:14.270
<v Ruben Somsen>my node thinks it's invalid then a year goes by and now the pegouts, half the

00:31:14.270 --> 00:31:17.990
<v Ruben Somsen>network thinks the pegout is spendable, half the network thinks the pegout is not

00:31:17.990 --> 00:31:22.310
<v Ruben Somsen>spendable. And now you run into a fork on Bitcoin, actually.

00:31:22.650 --> 00:31:27.330
<v Aaron van Wirdum>Yeah, so any risk of the sidechain would actually be an equal risk for Bitcoin in

00:31:27.330 --> 00:31:31.430
<v Aaron van Wirdum>this scenario. Yes. It wouldn't be some sort of sealed off risk. That's a problem

00:31:31.430 --> 00:31:35.450
<v Aaron van Wirdum>of sidechain users; it would now all of a sudden be everyone's problem.

00:31:35.630 --> 00:31:40.130
<v Ruben Somsen>At the very least, you would see it coming because it would occur before that one

00:31:40.130 --> 00:31:44.910
<v Ruben Somsen>year period is up but you know that eventually it's going to happen and then you

00:31:44.910 --> 00:31:48.590
<v Ruben Somsen>need to actually take action to prevent it, which is like at least the soft fork.

00:31:48.590 --> 00:31:52.570
<v Sjors Provoost>So in a way it could be the difference between two operating systems like you

00:31:52.570 --> 00:31:55.610
<v Sjors Provoost>said Windows and Linux maybe having different interpretation but it can also be

00:31:55.610 --> 00:32:00.870
<v Sjors Provoost>different versions right we had, Bitcoin 0.7 and 0.8 where we you know

00:32:01.590 --> 00:32:07.370
<v Sjors Provoost>introduced a consensus bug which had to be undone and, now you have 10

00:32:07.370 --> 00:32:11.850
<v Sjors Provoost>different chains each with their own development team and they might not be very

00:32:11.850 --> 00:32:16.250
<v Sjors Provoost>experienced and they one of those teams makes a single mistake like that. Yeah.

00:32:16.250 --> 00:32:17.550
<v Sjors Provoost>And boom.

00:32:17.550 --> 00:32:23.030
<v Aaron van Wirdum>Yeah, so as if consensus isn't hard enough on Bitcoin itself, yet now we're

00:32:23.030 --> 00:32:24.170
<v Aaron van Wirdum>expanding that to

00:32:25.750 --> 00:32:27.630
<v Aaron van Wirdum>potentially less competent teams.

00:32:27.990 --> 00:32:32.150
<v Sjors Provoost>Yeah, right. Now you could go back to what you said, the simplest version, which

00:32:32.150 --> 00:32:36.670
<v Sjors Provoost>just adds scale, which is having 10 clones of Bitcoin and maybe even, I think you

00:32:36.670 --> 00:32:40.090
<v Sjors Provoost>mentioned in the mailing list, you turn off everything except Taproot and you

00:32:40.090 --> 00:32:42.370
<v Sjors Provoost>simplify it, make it as unrisky as possible.

00:32:42.610 --> 00:32:42.690
<v Aaron van Wirdum>Yeah.

00:32:43.070 --> 00:32:47.830
<v Sjors Provoost>Now that actually brings up another, two other issues for me. One we haven't

00:32:47.830 --> 00:32:50.130
<v Sjors Provoost>talked about yet, I think. But I forgot what it was.

00:32:51.170 --> 00:32:54.350
<v Ruben Somsen>I'll interject and at least say one thing, which is something that Adam Back

00:32:54.350 --> 00:33:00.160
<v Ruben Somsen>pointed out, which is that it's sort of like an extension block. An extension

00:33:00.160 --> 00:33:03.140
<v Ruben Somsen>block would be that you have sort of a blockchain inside of a blockchain that

00:33:03.140 --> 00:33:07.000
<v Ruben Somsen>everybody validates. So it's sort of the same thing here, where you could have an

00:33:07.000 --> 00:33:10.720
<v Ruben Somsen>Ethereum extension block or something like that. The difference just is that it's

00:33:10.720 --> 00:33:16.120
<v Ruben Somsen>an extension block that's really cheap to validate for people who only care about

00:33:16.120 --> 00:33:18.760
<v Ruben Somsen>the peg-ins and the peg-outs. And the people who actually want to use the

00:33:18.760 --> 00:33:22.660
<v Ruben Somsen>day-to-day, they got to go and actually do full validation on it.

00:33:22.940 --> 00:33:26.500
<v Sjors Provoost>Yeah. So I have a couple of them that could be a problem.

00:33:26.760 --> 00:33:26.860
<v Ruben Somsen>Okay.

00:33:27.040 --> 00:33:32.920
<v Sjors Provoost>One is a denial of service attack where I am a miner and I'm going to create

00:33:32.920 --> 00:33:37.720
<v Sjors Provoost>blocks with very low proof of work, basically. Well, it depends on when the soft

00:33:37.720 --> 00:33:41.760
<v Sjors Provoost>fork is introduced. But if these soft chains have the same proof of work, but

00:33:41.760 --> 00:33:46.580
<v Sjors Provoost>it's the lower difficulty, I could create lots of separate chains, presumably

00:33:46.580 --> 00:33:50.240
<v Sjors Provoost>that you then all have to validate to figure out which one is wrong. And the

00:33:50.240 --> 00:33:54.860
<v Sjors Provoost>other thing you mentioned that I… and that was the one I forgot, actually. You

00:33:54.860 --> 00:33:57.740
<v Sjors Provoost>mentioned that these chains don't have their own block reward.

00:33:58.160 --> 00:33:58.600
<v Ruben Somsen>Yeah.

00:33:58.820 --> 00:34:03.540
<v Sjors Provoost>But then why on earth would you mine them? Just for the fees, I guess.

00:34:03.740 --> 00:34:08.540
<v Ruben Somsen>Yeah. Yeah, so it would be the same as, you know, Bitcoin eventually has to get

00:34:08.540 --> 00:34:09.580
<v Ruben Somsen>into that state as well.

00:34:09.760 --> 00:34:12.460
<v Sjors Provoost>But why not give it a block reward and have a nice game of musical chairs?

00:34:13.040 --> 00:34:18.220
<v Ruben Somsen>Well, that would be an altcoin. So then you basically break the 21 million limits

00:34:18.220 --> 00:34:21.340
<v Ruben Somsen>by creating these other coins that I guess can't move back into Bitcoin

00:34:21.340 --> 00:34:22.600
<v Ruben Somsen>mainchain, but they would be…

00:34:22.600 --> 00:34:24.740
<v Sjors Provoost>No, they can, just until the peg runs out.

00:34:25.420 --> 00:34:25.800
<v Ruben Somsen>Until…

00:34:25.800 --> 00:34:27.160
<v Sjors Provoost>So it just becomes more and more fractional.

00:34:27.160 --> 00:34:31.240
<v Ruben Somsen>Oh, yeah, fractional. Yeah, that would be great. Fractional chain. Well, you

00:34:31.240 --> 00:34:31.700
<v Ruben Somsen>know…

00:34:32.330 --> 00:34:35.850
<v Aaron van Wirdum>Translate in a different price, obviously, defeating the point of a sidechain.

00:34:35.990 --> 00:34:37.470
<v Ruben Somsen>Yeah, I think that would be…

00:34:37.470 --> 00:34:38.110
<v Sjors Provoost>It's a strictly lower price.

00:34:38.370 --> 00:34:42.170
<v Ruben Somsen>Yeah, that would be kind of disastrous. But yeah, no, that's definitely a good

00:34:42.170 --> 00:34:46.070
<v Ruben Somsen>point. You run into the problem that Bitcoin will eventually run into sooner, and

00:34:46.070 --> 00:34:48.970
<v Ruben Somsen>you sort of have a bootstrapping problem in the sense that when you first start

00:34:48.970 --> 00:34:52.450
<v Ruben Somsen>the chain, there's not going to be much, in terms of fees on there. So there are

00:34:52.450 --> 00:34:56.140
<v Ruben Somsen>a couple of things you can do. I think the first thing you would want to do is be

00:34:56.140 --> 00:34:59.480
<v Ruben Somsen>very conservative with how much block space you add. So you don't want to start

00:34:59.480 --> 00:35:02.880
<v Ruben Somsen>and just create 10 chains right away. You want to start maybe with one chain or

00:35:02.880 --> 00:35:06.620
<v Ruben Somsen>something like that, or you could have like one chain activate every year, or I

00:35:06.620 --> 00:35:10.760
<v Ruben Somsen>don't know, something along those lines. And yeah, the other thing you want to do

00:35:10.760 --> 00:35:14.520
<v Ruben Somsen>is make sure that there's enough proof of work because yeah, like Sjors’s

00:35:14.520 --> 00:35:18.400
<v Ruben Somsen>pointing out, if the proof of work is really cheap, every time a fork is created

00:35:18.400 --> 00:35:22.650
<v Ruben Somsen>and… it could then potentially be created really really cheaply, every full node

00:35:22.650 --> 00:35:25.550
<v Ruben Somsen>has to do more work. They have to dial out another block and they have to check

00:35:25.550 --> 00:35:29.770
<v Ruben Somsen>the Utreexo proofs. It's roughly uh three megabytes. So yeah, that would not be

00:35:29.770 --> 00:35:35.760
<v Ruben Somsen>ideal. So… either you would want there to be some kind of minimum where you say,

00:35:35.980 --> 00:35:39.500
<v Ruben Somsen>well, a block needs to at least have 10% of Bitcoin's proof of work or something

00:35:39.500 --> 00:35:43.340
<v Ruben Somsen>along those lines. Or, and I don't know if we want to get into that now, I guess

00:35:43.340 --> 00:35:45.040
<v Ruben Somsen>we should, you could do merged mining.

00:35:45.540 --> 00:35:48.480
<v Sjors Provoost>Right, because the other thing with proof of work before we get to merged mining

00:35:48.480 --> 00:35:53.980
<v Sjors Provoost>is if all these things are clones of Bitcoin Core and they all use SHA-256,

00:35:54.220 --> 00:35:59.230
<v Sjors Provoost>now you have these giant ASIC miners that can pick. If they want to mine the main

00:35:59.230 --> 00:36:04.270
<v Sjors Provoost>chain, some shitcoin clone, or one of these 10 alternative chains,

00:36:04.510 --> 00:36:09.210
<v Sjors Provoost>and because they could overwhelm any of these alternative chains, they could do

00:36:09.210 --> 00:36:12.990
<v Sjors Provoost>all sorts of shenanigans where the whole game theory, I think, is not clear in

00:36:12.990 --> 00:36:17.350
<v Sjors Provoost>advance. Generally, it's very bad when two coins have the same proof-of-work

00:36:17.350 --> 00:36:20.290
<v Sjors Provoost>algorithm. The big coin can really bully the small coin.

00:36:20.410 --> 00:36:20.730
<v Ruben Somsen>Yeah.

00:36:20.850 --> 00:36:22.190
<v Sjors Provoost>Re-org it out of existence;

00:36:23.530 --> 00:36:28.230
<v Sjors Provoost>mess with the difficulty do all sorts of shenanigans and now we can you know we

00:36:28.230 --> 00:36:32.710
<v Sjors Provoost>would do that times 10 yeah so it's it's, very interesting yeah I guess a minimum

00:36:32.710 --> 00:36:36.550
<v Sjors Provoost>proof of work could at least make that more difficult, yeah but then they you'd

00:36:36.550 --> 00:36:41.850
<v Sjors Provoost>have to design consensus rules to compare difficulties. And uh…

00:36:41.850 --> 00:36:46.470
<v Ruben Somsen>Yeah, there are some complexities there, which I agree are not ideal, but I do

00:36:46.470 --> 00:36:51.250
<v Ruben Somsen>think they're solvable. But yeah, we are getting into the territory of where

00:36:51.250 --> 00:36:55.230
<v Ruben Somsen>you're starting to create fixes for little problems in ways that are not really

00:36:55.230 --> 00:36:55.770
<v Ruben Somsen>elegant?

00:36:55.770 --> 00:37:01.050
<v Sjors Provoost>I think where this will go, and I think I mentioned this before in another

00:37:01.050 --> 00:37:05.510
<v Sjors Provoost>episode where we said there's some implementation details to work out. Why do

00:37:05.510 --> 00:37:09.360
<v Sjors Provoost>implementation details matter? Because I think once you think about them... You

00:37:09.360 --> 00:37:13.900
<v Sjors Provoost>will end up with just bigger blocks. That's sort of where you, after you apply

00:37:13.900 --> 00:37:18.480
<v Sjors Provoost>fix after fix for problem after problem, you end up right back where you started

00:37:18.480 --> 00:37:21.040
<v Sjors Provoost>with bigger blocks. And then you say, well, we don't want bigger blocks because

00:37:21.040 --> 00:37:25.300
<v Sjors Provoost>the problem we had with bigger blocks. And it turns out you can't fix the block

00:37:25.300 --> 00:37:25.900
<v Sjors Provoost>size problem.

00:37:25.900 --> 00:37:30.400
<v Ruben Somsen>Yeah, I do think it's not quite like bigger blocks. At the very least, it's a

00:37:30.400 --> 00:37:34.640
<v Ruben Somsen>soft fork, not a hard fork. So that's a win. And I think the second thing that…

00:37:34.640 --> 00:37:35.940
<v Sjors Provoost>You can make bigger blocks with a soft fork.

00:37:36.200 --> 00:37:38.700
<v Ruben Somsen>I guess you could if you made it an extension block. Fair enough.

00:37:38.900 --> 00:37:39.000
<v Sjors Provoost>Yeah.

00:37:39.320 --> 00:37:45.020
<v Ruben Somsen>Okay. That's true. Yeah. So I guess to your proof of work points, just briefly to

00:37:45.020 --> 00:37:48.380
<v Ruben Somsen>point out, you could choose to have different proof of work on these different

00:37:48.380 --> 00:37:52.500
<v Ruben Somsen>chains. So that could be one way of doing it. But I think that would also be a little messy.

00:37:52.840 --> 00:37:57.220
<v Sjors Provoost>And that opens… multiple cans of worms right it opens the cans of worms that

00:37:57.220 --> 00:38:00.860
<v Sjors Provoost>other coins have when they come up with the new proof of work and oops there's an

00:38:00.860 --> 00:38:05.920
<v Sjors Provoost>ASIC or oops there's no ASIC and or you're competing with some altcoin you didn't

00:38:05.920 --> 00:38:11.420
<v Sjors Provoost>know about. Yeah. But also this proof of work is, again, another consensus thing

00:38:11.420 --> 00:38:12.680
<v Sjors Provoost>that could have bugs in it.

00:38:12.680 --> 00:38:16.720
<v Ruben Somsen>Yeah. Yeah. I think that's also in terms of, you know, I'm very slight tangent, I

00:38:16.720 --> 00:38:21.260
<v Ruben Somsen>guess, but like every time a new coin is created, you don't know if the creators

00:38:21.260 --> 00:38:25.320
<v Ruben Somsen>secretly have an optimization for whatever they chose for their proof of work.

00:38:25.320 --> 00:38:29.720
<v Sjors Provoost>Yeah. Yeah, and there's also the symmetry, because some proofs of work are not as

00:38:29.720 --> 00:38:35.140
<v Sjors Provoost>nicely symmetrical— asymmetrical, I mean, some you know, with Bitcoin it takes a

00:38:35.140 --> 00:38:41.120
<v Sjors Provoost>lot of work to produce the right hash, but it always takes the exact same amount

00:38:41.120 --> 00:38:46.300
<v Sjors Provoost>of time to verify the hash. Yeah, so the verification is O zero as we say I

00:38:46.300 --> 00:38:51.240
<v Sjors Provoost>think. So it scales with the zero power, so it doesn't scale at all. And then the

00:38:51.240 --> 00:38:55.600
<v Sjors Provoost>proof of work scales more than that. But there are other forms of proof of work

00:38:55.600 --> 00:39:00.060
<v Sjors Provoost>where it might be actually quite expensive to verify it. So then you create

00:39:00.060 --> 00:39:04.300
<v Sjors Provoost>another DoS factor where in order to verify all these blocks, you need to do very

00:39:04.300 --> 00:39:06.900
<v Sjors Provoost>expensive proof of work verification because, oops.

00:39:07.320 --> 00:39:11.360
<v Ruben Somsen>Yeah. I feel like there's one criticism that I haven't addressed.

00:39:11.560 --> 00:39:17.470
<v Aaron van Wirdum>Yeah, I think generally speaking, so to… get back on track, I think the two main

00:39:17.470 --> 00:39:22.030
<v Aaron van Wirdum>downsides you've mentioned now are the consensus risk, if there's a bug in one of

00:39:22.030 --> 00:39:27.490
<v Aaron van Wirdum>the sidechains, and the potentially low proof-of-work security of the sidechains.

00:39:28.230 --> 00:39:29.670
<v Aaron van Wirdum>And then the third one…

00:39:29.670 --> 00:39:31.950
<v Ruben Somsen>Well, yeah, there's one more thing we should get into about the low

00:39:31.950 --> 00:39:35.870
<v Ruben Somsen>proof-of-work, which is merged mining. So that's one potential way of solving it.

00:39:35.910 --> 00:39:39.650
<v Ruben Somsen>And now I remember what I was going to address, which was to claim whether or not

00:39:39.650 --> 00:39:43.960
<v Ruben Somsen>this isn't just like a block size increase. So if you do merged mining… what you

00:39:43.960 --> 00:39:48.680
<v Ruben Somsen>could do is you could say, well, every soft chain block just requires the same

00:39:48.680 --> 00:39:52.820
<v Ruben Somsen>amount of proof of work as a Bitcoin block. And what that means is that every

00:39:52.820 --> 00:39:58.600
<v Ruben Somsen>Bitcoin miner has to also merge mine the soft chain. And this makes it more

00:39:58.600 --> 00:40:02.740
<v Ruben Somsen>difficult for miners, which is a real downside, which I'm not happy with. But it

00:40:02.740 --> 00:40:07.980
<v Ruben Somsen>would mean that everyone who wants to be a Bitcoin miner also has to be a miner

00:40:07.980 --> 00:40:12.530
<v Ruben Somsen>for every soft chain. So if we were to introduce 10 soft chains, that would mean

00:40:12.530 --> 00:40:17.250
<v Ruben Somsen>they have to run another 10 full nodes to get all the fees and to create adequate

00:40:17.250 --> 00:40:17.790
<v Ruben Somsen>proof of work.

00:40:17.930 --> 00:40:22.970
<v Sjors Provoost>And do they have to create a block every time or can they opt out of creating...

00:40:23.510 --> 00:40:26.490
<v Sjors Provoost>I guess they can opt out of some of the chains, right?

00:40:26.630 --> 00:40:26.710
<v Ruben Somsen>Yeah.

00:40:26.890 --> 00:40:27.890
<v Sjors Provoost>But they lose out on revenue.

00:40:28.050 --> 00:40:31.950
<v Ruben Somsen>Yeah, exactly. So it would be, that's kind of always the tricky thing with merged

00:40:31.950 --> 00:40:35.890
<v Ruben Somsen>mining. You're sort of obligated to merge mine because you're not going to be

00:40:35.890 --> 00:40:37.070
<v Ruben Somsen>competitive if you don't do it.

00:40:37.270 --> 00:40:40.670
<v Sjors Provoost>Right. And we talked about that in the episode about drive chains, where if

00:40:40.670 --> 00:40:44.050
<v Sjors Provoost>you're a miner on the moon behind a Tor node, it's not fun if you have to

00:40:44.050 --> 00:40:45.570
<v Sjors Provoost>download other chains as well.

00:40:45.730 --> 00:40:45.910
<v Ruben Somsen>Yeah.

00:40:46.070 --> 00:40:49.630
<v Sjors Provoost>And especially if those other chains also have super complicated smart contract

00:40:49.630 --> 00:40:52.210
<v Sjors Provoost>validation rules and terabytes of data.

00:40:52.540 --> 00:40:55.900
<v Ruben Somsen>And I guess it's worth mentioning that something like blind merged mining doesn't

00:40:55.900 --> 00:40:59.240
<v Ruben Somsen>actually work for this. And there's an important reason for that, which is that

00:40:59.240 --> 00:41:05.040
<v Ruben Somsen>you need forks to be outside of Bitcoin consensus. And with blind merged mining,

00:41:05.300 --> 00:41:09.140
<v Ruben Somsen>your consensus of your other chain is inside of the Bitcoin chain, which means

00:41:09.140 --> 00:41:14.740
<v Ruben Somsen>that whoever is the Bitcoin miner can choose never to allow you to create the

00:41:14.740 --> 00:41:17.480
<v Ruben Somsen>fork in the first place. So blind merged mining is off the table here.

00:41:17.940 --> 00:41:18.440
<v Sjors Provoost>Yeah.

00:41:19.600 --> 00:41:20.800
<v Aaron van Wirdum>Okay third problem?

00:41:20.800 --> 00:41:25.620
<v Ruben Somsen>Oh yeah, just one more thing I want to address which is so in this scenario the

00:41:25.620 --> 00:41:29.380
<v Ruben Somsen>miners would have to do more work but it's still the case that everybody who runs

00:41:29.380 --> 00:41:34.500
<v Ruben Somsen>a regular full node and these soft chain full nodes or soft chain nodes they

00:41:35.160 --> 00:41:39.140
<v Ruben Somsen>they would not have to do 10 times the work. They would just have the same amount

00:41:39.140 --> 00:41:42.820
<v Ruben Somsen>of work that they're doing today. And optionally, if they want to opt into one of

00:41:42.820 --> 00:41:46.760
<v Ruben Somsen>these soft chains, then they have to validate that specific chain. So I think

00:41:46.760 --> 00:41:49.980
<v Ruben Somsen>it's still a win in that regard where, you know, maybe you would have two chains

00:41:49.980 --> 00:41:54.460
<v Ruben Somsen>that you validate per person and the other eight or nine chains you don't care about.

00:41:54.890 --> 00:41:58.130
<v Sjors Provoost>Well, at least, yeah, I guess other way to put it, if you're running a regular

00:41:58.130 --> 00:41:59.730
<v Sjors Provoost>node, you verify what you care about.

00:41:59.990 --> 00:42:00.290
<v Ruben Somsen>Yeah.

00:42:00.430 --> 00:42:02.770
<v Sjors Provoost>Right. Plus a little bit of work for the other chains.

00:42:02.890 --> 00:42:03.130
<v Ruben Somsen>That's right.

00:42:03.190 --> 00:42:04.870
<v Sjors Provoost>With all the caveats that we talked about.

00:42:05.210 --> 00:42:05.260
<v Ruben Somsen>Yeah.

00:42:05.250 --> 00:42:08.030
<v Sjors Provoost>Denial of service attacks that make you verify all the things.

00:42:08.230 --> 00:42:09.770
<v Ruben Somsen>Yeah. Okay.

00:42:10.230 --> 00:42:12.110
<v Aaron van Wirdum>I think it's time for problem number three.

00:42:12.190 --> 00:42:12.450
<v Ruben Somsen>That's right.

00:42:12.650 --> 00:42:13.530
<v Sjors Provoost>Was there a third problem?

00:42:13.690 --> 00:42:18.710
<v Ruben Somsen>There was. Yeah. So the third problem is also sort of related to low proof of

00:42:18.710 --> 00:42:24.660
<v Ruben Somsen>work, which is that you could have a scenario where there is a one-year reorg on

00:42:24.660 --> 00:42:28.930
<v Ruben Somsen>a soft chain. And if that's the case, and if this this one-year reorg…

00:42:28.930 --> 00:42:34.050
<v Aaron van Wirdum>That basically means 99.999% of miners are dishonest or something like that.

00:42:34.230 --> 00:42:37.670
<v Ruben Somsen>Yeah, or 200%, like depending on how you want to look at it, like you have a

00:42:37.670 --> 00:42:42.480
<v Ruben Somsen>chain and then suddenly a new new chain appears. Okay, yeah. Yeah, and and it

00:42:42.480 --> 00:42:45.850
<v Ruben Somsen>doesn't have to be— it doesn't even have to be invalid. These could be two valid

00:42:45.850 --> 00:42:51.550
<v Ruben Somsen>chains. The thing is that one year from now, you have to make a decision. Is this

00:42:51.550 --> 00:42:53.110
<v Ruben Somsen>pegout valid or is this pegout invalid?

00:42:54.510 --> 00:42:59.370
<v Ruben Somsen>Let's say right at the moment where it's about to become valid then you know you

00:42:59.370 --> 00:43:03.290
<v Ruben Somsen>say in your node you say, okay this pegout is valid I'm done. And then right at

00:43:03.290 --> 00:43:07.990
<v Ruben Somsen>that moment this other chain appears with a year worth of proof of work which

00:43:09.250 --> 00:43:11.330
<v Ruben Somsen>basically pushes out the pegout transaction.

00:43:11.630 --> 00:43:12.550
<v Sjors Provoost>Oh, it suddenly appears.

00:43:12.730 --> 00:43:13.510
<v Ruben Somsen>It suddenly appears.

00:43:13.670 --> 00:43:14.350
<v Sjors Provoost>Oh, that's a problem.

00:43:14.490 --> 00:43:18.070
<v Ruben Somsen>That's a problem, yeah. And now that pegout transaction that you thought was

00:43:18.070 --> 00:43:22.790
<v Ruben Somsen>valid is not valid. And if this happens right at that moment, right at the year

00:43:22.790 --> 00:43:25.730
<v Ruben Somsen>cutoff, then half the network might think it's valid, half the network might

00:43:25.730 --> 00:43:28.850
<v Ruben Somsen>think it's invalid. And now we're back to the fork issue.

00:43:29.010 --> 00:43:33.200
<v Sjors Provoost>This reminds me of something that happened to Bitcoin Cash. Because they were

00:43:33.200 --> 00:43:37.660
<v Sjors Provoost>doing a bunch of hard forks, and they had very low proof of work, and then they

00:43:37.660 --> 00:43:43.480
<v Sjors Provoost>had a little bit of a fight with Bitcoin SV, and they were threatening to

00:43:43.480 --> 00:43:49.120
<v Sjors Provoost>reorg each other. And basically, if you have two tiny, tiny coins, in this case,

00:43:49.340 --> 00:43:53.820
<v Sjors Provoost>and you start reorging one of them, well, yeah, in general, if you have a tiny

00:43:53.820 --> 00:43:58.420
<v Sjors Provoost>coin and somebody threatens to reorg you, you might get a reorg of 10 or 20

00:43:58.420 --> 00:44:02.750
<v Sjors Provoost>blocks or something like that. Rather than just accepting that, which means you

00:44:02.750 --> 00:44:06.550
<v Sjors Provoost>just have to wait more confirmations, the Bitcoin Cash folks said, no, no, no,

00:44:06.610 --> 00:44:12.290
<v Sjors Provoost>no. If your node sees a reorg of more than 10, it will ignore it.

00:44:12.630 --> 00:44:17.650
<v Sjors Provoost>And this is very bad because what happens now is that, let's say you are running

00:44:17.650 --> 00:44:22.290
<v Sjors Provoost>continuously, your node is constantly on. It sees a bunch of blocks coming in and

00:44:22.290 --> 00:44:28.160
<v Sjors Provoost>then it sees a 20 block reorg. And so it ignores it. And

00:44:28.160 --> 00:44:33.000
<v Sjors Provoost>then it might stop because that 20 block reorg might actually be the chain that's

00:44:33.000 --> 00:44:36.660
<v Sjors Provoost>continuing. So your node will just stop suddenly. But if you're a new node and

00:44:36.660 --> 00:44:39.980
<v Sjors Provoost>you're starting up, you're just looking at which is the longest right now and

00:44:39.980 --> 00:44:45.920
<v Sjors Provoost>you're going to follow that. It means that the state of your node

00:44:45.920 --> 00:44:50.670
<v Sjors Provoost>depends on how long it's been online. And if somebody games it and… creates

00:44:50.670 --> 00:44:54.590
<v Sjors Provoost>reorgs that are exactly 10 blocks long. It just creates them secretly and then

00:44:54.590 --> 00:44:57.690
<v Sjors Provoost>sends them over the network. It just knows that because of the difference in

00:44:57.690 --> 00:45:01.590
<v Sjors Provoost>timing, it's going to knock half the nodes out. And or you can steal coins that

00:45:01.590 --> 00:45:06.450
<v Sjors Provoost>way, of course. Because if you can fool an exchange into no longer checking new

00:45:06.450 --> 00:45:07.310
<v Sjors Provoost>blocks…

00:45:07.310 --> 00:45:12.170
<v Aaron van Wirdum>With the amount of proof-of-work security on Bcash, someone could do that as a hobby.

00:45:12.920 --> 00:45:14.760
<v Ruben Somsen>I think. Yes, I think.

00:45:14.960 --> 00:45:17.600
<v Aaron van Wirdum>Okay, so that's… yeah, and that's kind of the same problem here.

00:45:17.680 --> 00:45:22.940
<v Ruben Somsen>Yeah, I totally agree. It's exactly the same problem. And I think specific to

00:45:22.940 --> 00:45:26.180
<v Ruben Somsen>what you mentioned, I think Bitcoin Unlimited does not have that. So if you run

00:45:26.180 --> 00:45:29.820
<v Ruben Somsen>an exchange, just go run Bitcoin Unlimited. So you don't have that problem. But

00:45:29.820 --> 00:45:31.240
<v Ruben Somsen>yeah, you could literally…

00:45:31.240 --> 00:45:31.880
<v Aaron van Wirdum>Does that still exist?

00:45:32.120 --> 00:45:34.920
<v Ruben Somsen>That's a good question. Maybe this is all the information by now.

00:45:34.940 --> 00:45:36.660
<v Sjors Provoost>The code exists somewhere, I guess it exists.

00:45:36.900 --> 00:45:41.080
<v Ruben Somsen>Yeah, maybe it's uh it's not being kept up to date. So any any recent Bitcoin

00:45:41.080 --> 00:45:43.220
<v Ruben Somsen>Core bugs might apply here. But yeah.

00:45:43.280 --> 00:45:44.620
<v Aaron van Wirdum>Or newly introduced bugs.

00:45:44.780 --> 00:45:48.260
<v Ruben Somsen>Yeah, that's possible too, of course. So really, yeah, it is that same problem

00:45:48.260 --> 00:45:52.760
<v Ruben Somsen>where you have this one year cutoff. And that, if there is a reorg right at that

00:45:52.760 --> 00:45:56.520
<v Ruben Somsen>moment, you know, the saving grace here compared to the Bitcoin Cash examples,

00:45:56.660 --> 00:46:00.260
<v Ruben Somsen>that's not 10 blocks, it's one year. So that makes it better.

00:46:00.360 --> 00:46:03.900
<v Sjors Provoost>This comes back to my point that the difference between a fraud proof that is

00:46:03.900 --> 00:46:04.720
<v Sjors Provoost>committed somehow…

00:46:04.980 --> 00:46:05.160
<v Ruben Somsen>Yeah.

00:46:05.420 --> 00:46:09.180
<v Sjors Provoost>And so, you know, what all the reorg rules are versus an indicator, which depends

00:46:09.180 --> 00:46:13.100
<v Sjors Provoost>on when you see things and does not depend on something that's actually in the

00:46:13.100 --> 00:46:14.140
<v Sjors Provoost>main blockchain.

00:46:14.520 --> 00:46:14.680
<v Ruben Somsen>Yeah.

00:46:14.900 --> 00:46:15.200
<v Sjors Provoost>So, yeah.

00:46:15.460 --> 00:46:19.240
<v Ruben Somsen>But the one-year reorg, if we were to do merged mining, it would be incredibly

00:46:19.240 --> 00:46:23.240
<v Ruben Somsen>unlikely that… any miner would succeed in doing that without getting noticed.

00:46:23.520 --> 00:46:28.240
<v Sjors Provoost>Yeah, but when it comes to Bitcoin consensus, incredibly unlikely is not good enough.

00:46:28.540 --> 00:46:32.860
<v Ruben Somsen>Yeah, maybe, yeah. But yeah, it is definitely, it's a pain point, right? And we

00:46:32.860 --> 00:46:37.040
<v Ruben Somsen>can try to mitigate it and we can make it less and less painful, but it stays

00:46:37.040 --> 00:46:41.220
<v Ruben Somsen>there. It's there. And I don't think you can get rid of it completely. And there

00:46:41.220 --> 00:46:44.340
<v Ruben Somsen>was one more mitigation that I wanted to point out, which is that what you could

00:46:44.340 --> 00:46:48.860
<v Ruben Somsen>do is you could actually disallow, just like your example, just like with Bitcoin

00:46:48.860 --> 00:46:54.460
<v Ruben Somsen>Cash, you could disallow reorgs of longer than half a year on the soft chain. And

00:46:54.560 --> 00:46:57.980
<v Ruben Somsen>what this does is you create the exact same problem as Bitcoin Cash, right, where

00:46:57.980 --> 00:47:03.480
<v Ruben Somsen>if you have a half a year reorg, suddenly you you lose consensus but because you

00:47:03.480 --> 00:47:09.100
<v Ruben Somsen>do it after half a year not after a year the consensus issue appears on the soft

00:47:09.100 --> 00:47:13.620
<v Ruben Somsen>chain first. And then you still have half a year before that issue goes and comes

00:47:13.620 --> 00:47:17.260
<v Ruben Somsen>to the main chain. And then you could potentially do a soft fork or something

00:47:17.260 --> 00:47:21.520
<v Ruben Somsen>like that to mitigate that issue if it occurs. I don't think this is great

00:47:21.520 --> 00:47:25.040
<v Ruben Somsen>because you don't want to rely on soft forks, but I'm just throwing it out there.

00:47:25.280 --> 00:47:28.600
<v Sjors Provoost>So I think we talked about this long enough.

00:47:28.820 --> 00:47:29.040
<v Aaron van Wirdum>Yeah.

00:47:29.380 --> 00:47:30.620
<v Sjors Provoost>Let's get to the verdict.

00:47:31.260 --> 00:47:32.120
<v Ruben Somsen>Yeah, I think…

00:47:32.220 --> 00:47:33.860
<v Sjors Provoost>I say let's not do this.

00:47:34.140 --> 00:47:34.800
<v Ruben Somsen>I agree.

00:47:36.240 --> 00:47:41.400
<v Aaron van Wirdum>Yeah, I think we all agree, or at least I would say it's an interesting concept.

00:47:43.220 --> 00:47:49.160
<v Aaron van Wirdum>It's fairly well thought out, but part of that thinking it out includes

00:47:49.160 --> 00:47:54.840
<v Aaron van Wirdum>concluding that there are some trade-offs that probably make it not worth the

00:47:54.840 --> 00:47:56.700
<v Aaron van Wirdum>risks and the efforts for now.

00:47:57.060 --> 00:48:00.680
<v Ruben Somsen>Yeah, so I'm hopeful that maybe other people who are listening to this come up

00:48:00.680 --> 00:48:04.840
<v Ruben Somsen>with some ideas to make it more viable than it is today. I have a little chat

00:48:04.840 --> 00:48:08.080
<v Ruben Somsen>room that I actually created for space chains. So if people want to join me there

00:48:08.080 --> 00:48:13.960
<v Ruben Somsen>and try and think of ways of mitigating that, it's t.me slash space chains. I use

00:48:13.960 --> 00:48:18.340
<v Ruben Somsen>it for softchains as well. I mean, I don't want to create another chat room for

00:48:18.340 --> 00:48:23.240
<v Ruben Somsen>every proposal. So that's, you know, if people are interested in that, they can

00:48:23.240 --> 00:48:23.880
<v Ruben Somsen>come join me there.

00:48:24.120 --> 00:48:24.880
<v Aaron van Wirdum>That's on Telegram.

00:48:25.180 --> 00:48:26.040
<v Ruben Somsen>That's on Telegram. Yeah.

00:48:26.640 --> 00:48:27.020
<v Sjors Provoost>Okay.

00:48:27.400 --> 00:48:28.500
<v Aaron van Wirdum>I think that's it, Sjors.

00:48:28.680 --> 00:48:31.760
<v Sjors Provoost>Okay, then, thank you for listening to the Van Wirdum Sjorsnado.

00:48:32.180 --> 00:48:32.720
<v Aaron van Wirdum>There you go.

00:48:32.880 --> 00:48:33.340
<v Ruben Somsen>There you go.

