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

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

00:00:22.820 --> 00:00:23.940
<v Sjors Provoost>Explained.

00:00:24.120 --> 00:00:24.460
<v Aaron van Wirdum>Hey Sjors.

00:00:24.860 --> 00:00:25.020
<v Sjors Provoost>Hello.

00:00:26.280 --> 00:00:30.820
<v Aaron van Wirdum>So Sjors, today we're going to talk about partially signed Bitcoin transactions.

00:00:31.120 --> 00:00:31.480
<v Sjors Provoost>That's right.

00:00:32.180 --> 00:00:37.830
<v Aaron van Wirdum>AKA PSBTs. Now, our dear avid listener.

00:00:38.390 --> 00:00:43.270
<v Aaron van Wirdum>As you probably, as you certainly know, we've already discussed this in probably

00:00:43.270 --> 00:00:49.210
<v Aaron van Wirdum>at least one or two, maybe even three episodes previously. But every time that

00:00:49.210 --> 00:00:53.950
<v Aaron van Wirdum>it came up, it was sort of in context of some other topic, like the actual topic

00:00:53.950 --> 00:00:59.250
<v Aaron van Wirdum>we were discussing. And we didn't really make any episode specifically about

00:00:59.250 --> 00:01:04.940
<v Aaron van Wirdum>partially signed Bitcoin transactions. So Sjors and I decided we should have an

00:01:04.940 --> 00:01:07.880
<v Aaron van Wirdum>episode that's really about partially signed Bitcoin transactions.

00:01:08.200 --> 00:01:08.760
<v Sjors Provoost>That's right.

00:01:09.720 --> 00:01:14.720
<v Aaron van Wirdum>I'm just sort of prefacing that because if you've heard us explain it in previous

00:01:14.720 --> 00:01:19.240
<v Aaron van Wirdum>transactions, you know, we won't blame you if you want to skip this episode.

00:01:19.340 --> 00:01:21.720
<v Aaron van Wirdum>We'll still be your friend. Isn't that right, Sjors?

00:01:21.920 --> 00:01:23.620
<v Sjors Provoost>No, I think you should just listen to it.

00:01:25.790 --> 00:01:30.550
<v Aaron van Wirdum>Sjors, Sjors and I don't always see eye to eye. Let's just get to our favorite

00:01:30.550 --> 00:01:31.430
<v Aaron van Wirdum>part of the episode.

00:01:31.690 --> 00:01:32.090
<v Sjors Provoost>That's right.

00:01:32.670 --> 00:01:37.250
<v Aaron van Wirdum>Sjors stacks sats, Sjors stacks sats, Sjors stacks sats.

00:01:37.590 --> 00:01:41.130
<v Sjors Provoost>Yeah. This is why you really wanted to have video because it's quite funny, but

00:01:41.130 --> 00:01:46.430
<v Sjors Provoost>I'll read two. One is from Eric 99 who says, stay humble stack sats.

00:01:47.190 --> 00:01:53.020
<v Sjors Provoost>And for 50,000 satoshis. and another one that's funny I think from

00:01:53.020 --> 00:01:57.960
<v Sjors Provoost>at vague 10 000 satoshis with this podcast has encrypted my heart.

00:01:57.960 --> 00:01:59.560
<v Aaron van Wirdum>Oh, that's so sweet.

00:01:59.560 --> 00:02:03.490
<v Sjors Provoost>And that's a reference to the last episode to the peer-to-peer encryption

00:02:03.490 --> 00:02:04.010
<v Sjors Provoost>episode.

00:02:04.010 --> 00:02:09.410
<v Aaron van Wirdum>Sjors, if people want their boostagrams read out loud in Bitcoin Explained and

00:02:09.410 --> 00:02:13.650
<v Aaron van Wirdum>pay you the sweet sats, what do they need to do where do they where do they go?

00:02:13.650 --> 00:02:19.140
<v Sjors Provoost>Oh, they need to google something like value for value or boostagrams and install

00:02:19.140 --> 00:02:24.220
<v Sjors Provoost>one of these modern podcasting 2.0 apps that allow you to stream sats per minute.

00:02:24.220 --> 00:02:28.800
<v Sjors Provoost>And also, if you like, do a shout out. There's no guarantee that I'll read it.

00:02:29.360 --> 00:02:34.330
<v Aaron van Wirdum>So that was Sjors Stacks Sats. Back to the episode.

00:02:35.260 --> 00:02:40.760
<v Aaron van Wirdum>Sjors, partially signed Bitcoin transactions. First of all, is this one of the

00:02:40.760 --> 00:02:45.620
<v Aaron van Wirdum>parts of Bitcoin that you've contributed to actively? Is that right?

00:02:46.460 --> 00:02:49.440
<v Sjors Provoost>I've definitely done testing of it, a little bit of review.

00:02:49.600 --> 00:02:53.900
<v Aaron van Wirdum>Because you've done a lot of work on hardware wallets integration, and I think

00:02:53.900 --> 00:02:55.820
<v Aaron van Wirdum>that probably has something to do with this.

00:02:55.820 --> 00:03:00.020
<v Sjors Provoost>That definitely uses PSBTs a lot, so I've definitely seen a lot of them, but I

00:03:00.020 --> 00:03:01.220
<v Sjors Provoost>don't write this particular code.

00:03:02.060 --> 00:03:07.860
<v Aaron van Wirdum>okay so let's as always start at the beginning what is

00:03:07.860 --> 00:03:13.820
<v Aaron van Wirdum>what what before there were partially signed Bitcoin transactions before this

00:03:13.820 --> 00:03:19.690
<v Aaron van Wirdum>existed Usually we start with the one sentence explanation of what it is. So

00:03:19.690 --> 00:03:23.450
<v Aaron van Wirdum>can you give us a one sentence explanation of what PSBTs are?

00:03:23.810 --> 00:03:28.130
<v Sjors Provoost>Yeah, it's basically a file that contains a draft transaction or even a complete

00:03:28.130 --> 00:03:33.170
<v Sjors Provoost>transaction and some extra information about the transaction. So the partially

00:03:33.170 --> 00:03:36.370
<v Sjors Provoost>signed stands for that it might not be signed at all or it might have one

00:03:36.370 --> 00:03:40.410
<v Sjors Provoost>signature if it's a multisig out of five, etc. So it's a place where you collect

00:03:40.410 --> 00:03:41.590
<v Sjors Provoost>all the components for a transaction.

00:03:42.030 --> 00:03:46.770
<v Aaron van Wirdum>Okay. so that's the one sentence explanation now let's go to the beginning so

00:03:46.770 --> 00:03:52.570
<v Aaron van Wirdum>before this existed what was the problem why did someone think

00:03:52.570 --> 00:03:53.910
<v Aaron van Wirdum>that this needed to exist?

00:03:53.910 --> 00:03:58.370
<v Sjors Provoost>Well, the problem is when you're trying to do anything other than just creating a

00:03:58.370 --> 00:04:01.350
<v Sjors Provoost>simple transaction where you know you have a wallet you're sending coins

00:04:01.350 --> 00:04:05.230
<v Sjors Provoost>somewhere and your wallet just makes a transaction signs it and it's done if you

00:04:05.230 --> 00:04:08.900
<v Sjors Provoost>want to do something more complicated like signing offline or if you want to use

00:04:08.900 --> 00:04:13.180
<v Sjors Provoost>a hardware wallet, maybe especially one that's somewhere else, or if you wanted

00:04:13.180 --> 00:04:16.700
<v Sjors Provoost>to do a multisig transaction, when we talked about multisig in earlier episodes,

00:04:17.420 --> 00:04:22.540
<v Sjors Provoost>then things became more complicated. You'd have to somehow ferry that transaction

00:04:22.540 --> 00:04:26.340
<v Sjors Provoost>around and make sure that all the other devices know what they need to do. And

00:04:26.340 --> 00:04:28.240
<v Sjors Provoost>there was only ad hoc solutions to that.

00:04:29.990 --> 00:04:35.740
<v Aaron van Wirdum>Hang on. Okay. So the key thing here is that sometimes

00:04:35.740 --> 00:04:40.980
<v Aaron van Wirdum>a Bitcoin transaction consists of you know, data,

00:04:41.340 --> 00:04:44.840
<v Sjors Provoost>inputs, signatures, outputs.

00:04:45.320 --> 00:04:50.320
<v Aaron van Wirdum>Well, that's the point though. So sometimes you want to create a signature on a

00:04:50.320 --> 00:04:54.500
<v Aaron van Wirdum>different device than you created the rest of the transaction with, right?

00:04:54.760 --> 00:04:55.080
<v Sjors Provoost>Yes.

00:04:55.300 --> 00:04:58.720
<v Aaron van Wirdum>And this was already possible even before PSBTs.

00:04:58.920 --> 00:04:59.440
<v Sjors Provoost>Yes, it was.

00:04:59.540 --> 00:05:04.850
<v Aaron van Wirdum>Like Electrum already allowed this and I think even Bitcoin Core

00:05:04.850 --> 00:05:10.230
<v Aaron van Wirdum>allowed this kind of stuff, but they did it in different ways.

00:05:11.120 --> 00:05:14.880
<v Sjors Provoost>Yeah, and it was a fairly ad hoc. Yeah, basically it was ad hoc. Yeah, and it was

00:05:14.880 --> 00:05:19.800
<v Sjors Provoost>not very flexible. So, for example, Bitcoin would create a transaction that would

00:05:19.800 --> 00:05:23.120
<v Sjors Provoost>just... I think it would just set all the signatures to zero. And then your other

00:05:23.120 --> 00:05:25.440
<v Sjors Provoost>wallet software would just have to guess what it has to do.

00:05:27.820 --> 00:05:30.240
<v Aaron van Wirdum>You said Bitcoin. I think you mean Bitcoin Core then?

00:05:30.400 --> 00:05:30.680
<v Sjors Provoost>Yes.

00:05:30.940 --> 00:05:31.060
<v Aaron van Wirdum>Right.

00:05:32.700 --> 00:05:37.930
<v Aaron van Wirdum>Okay, but that... I mean, that would still work if you use Bitcoin Core, right?

00:05:38.130 --> 00:05:42.530
<v Aaron van Wirdum>So it's only a problem, I would guess, if you want to create a transaction on

00:05:42.530 --> 00:05:46.350
<v Aaron van Wirdum>Bitcoin Core and then sign it with Electrum or something like that. Or if you

00:05:46.350 --> 00:05:50.430
<v Aaron van Wirdum>want to create a multisig and one person is using Bitcoin Core, someone else is

00:05:50.430 --> 00:05:54.510
<v Aaron van Wirdum>using Electrum, someone else is using whatever wallet they're using. That's when

00:05:54.510 --> 00:05:56.250
<v Aaron van Wirdum>it becomes a problem. Is that right?

00:05:56.450 --> 00:05:59.970
<v Sjors Provoost>I think it also becomes a problem if you want to use a wallet that's offline and

00:05:59.970 --> 00:06:05.060
<v Sjors Provoost>not caught up to the most recent blockchain. So because if you're not up to date

00:06:05.060 --> 00:06:09.400
<v Sjors Provoost>to the use blockchain, you don't necessarily know how to sign something because

00:06:09.400 --> 00:06:13.880
<v Sjors Provoost>the transaction itself, when you receive it, it has inputs and those inputs refer

00:06:13.880 --> 00:06:17.640
<v Sjors Provoost>to previous outputs. and you don't have those previous outputs unless your

00:06:17.640 --> 00:06:20.940
<v Sjors Provoost>blockchain is up to date so if you have some deep cold storage and you don't want

00:06:20.940 --> 00:06:23.120
<v Sjors Provoost>to sync it to the blockchain it was this is also quite annoying.

00:06:23.120 --> 00:06:28.140
<v Aaron van Wirdum>Okay, so that's that's and we did discuss this in a previous episode I remember I

00:06:28.140 --> 00:06:32.640
<v Aaron van Wirdum>don't remember what episode but this also so this so there are several issues

00:06:32.640 --> 00:06:34.260
<v Aaron van Wirdum>where it

00:06:35.990 --> 00:06:41.810
<v Aaron van Wirdum>could be an issue that there wasn't a unified protocol for figuring out this kind

00:06:41.810 --> 00:06:45.290
<v Aaron van Wirdum>of stuff. That's the core of that problem, right? Originally…

00:06:45.530 --> 00:06:49.610
<v Sjors Provoost>So there's another thing that is difficult to do. So it really depends on how

00:06:49.610 --> 00:06:55.510
<v Sjors Provoost>your wallet is set up. If you have your copy of Bitcoin Core somewhere else in an

00:06:55.510 --> 00:06:59.890
<v Sjors Provoost>offline place, but that has the same wallet as you do, then the following problem

00:06:59.890 --> 00:07:02.930
<v Sjors Provoost>is not a problem. But one of the things you want to do is you want to check that

00:07:02.930 --> 00:07:06.510
<v Sjors Provoost>your change address is actually real. So if we're doing a transaction together,

00:07:06.690 --> 00:07:11.890
<v Sjors Provoost>for example, I might say we might have a shared wallet of 10 Bitcoin and we want

00:07:11.890 --> 00:07:15.950
<v Sjors Provoost>to send one Bitcoin somewhere. Then I'll show you a transaction. Hey, just sign

00:07:15.950 --> 00:07:21.390
<v Sjors Provoost>this part and it'll show one Bitcoin and nine Bitcoin. And then

00:07:21.390 --> 00:07:26.310
<v Sjors Provoost>the problem is that you don't know that the original amount is 10 Bitcoin. Like I

00:07:26.310 --> 00:07:29.170
<v Sjors Provoost>might tell you that that is the case, but in order for you to check that, you

00:07:29.170 --> 00:07:31.390
<v Sjors Provoost>need to know a few other things about the wallet.

00:07:33.240 --> 00:07:37.760
<v Aaron van Wirdum>You know what? I think this is the very first episode we ever made is what we

00:07:37.760 --> 00:07:40.560
<v Aaron van Wirdum>discussed, what you're mentioning right now.

00:07:41.140 --> 00:07:45.540
<v Sjors Provoost>Yeah, exactly. In the first episode, we described some attacks related to change

00:07:45.540 --> 00:07:48.380
<v Sjors Provoost>addresses. So I guess there's two different things. I wasn't super clear there.

00:07:48.820 --> 00:07:51.920
<v Sjors Provoost>One is that you want to know that the change address that's listed in a

00:07:51.920 --> 00:07:57.000
<v Sjors Provoost>transaction is actually yours. So Bitcoin Core can easily check that. It sees an

00:07:57.000 --> 00:08:00.800
<v Sjors Provoost>address. It just checks out its 3,000 addresses that it has in memory and says,

00:08:00.900 --> 00:08:05.160
<v Sjors Provoost>okay, this is one of mine. So anything that goes there has really change. The

00:08:05.160 --> 00:08:08.340
<v Sjors Provoost>other is that you want to make sure that the total amount that you're spending...

00:08:08.990 --> 00:08:12.830
<v Sjors Provoost>so in this case one Bitcoin goes somewhere nine Bitcoin is change that that is

00:08:12.830 --> 00:08:17.270
<v Sjors Provoost>actually the total amount that you're spending so I could trick you and and spend

00:08:17.270 --> 00:08:21.990
<v Sjors Provoost>a 20 Bitcoin coin and have one Bitcoin going somewhere nine Bitcoin being change

00:08:21.990 --> 00:08:27.240
<v Sjors Provoost>and then 10 Bitcoin going to some miner that I'm collaborating with and in order

00:08:27.240 --> 00:08:30.380
<v Sjors Provoost>to prevent that you need to have the previous output so basically there's a bunch

00:08:30.380 --> 00:08:32.300
<v Sjors Provoost>of information that you want to know for your own safety.

00:08:34.380 --> 00:08:39.260
<v Aaron van Wirdum>All right I've now heard a lot of things and I want to I want to move on to the

00:08:39.260 --> 00:08:44.920
<v Aaron van Wirdum>next part of this podcast but also I want to make sure that this part was clear

00:08:45.300 --> 00:08:50.600
<v Aaron van Wirdum>so to reiterate even before

00:08:50.600 --> 00:08:56.530
<v Aaron van Wirdum>PSBTs you could sort of create transactions and sign them

00:08:56.530 --> 00:09:00.010
<v Aaron van Wirdum>somewhere else it was already possible but there were a number of problems with

00:09:00.010 --> 00:09:04.770
<v Aaron van Wirdum>that one is you're using different wallets to create the transaction and to sign

00:09:04.770 --> 00:09:09.540
<v Aaron van Wirdum>it that was a problem another one is multisig where different wallets want to

00:09:09.540 --> 00:09:15.420
<v Aaron van Wirdum>sign it in a different way and then the third is there are a couple of attacks is

00:09:15.420 --> 00:09:19.400
<v Aaron van Wirdum>that the best way to sort of bucket that one there's a couple of attacks and it

00:09:19.400 --> 00:09:23.260
<v Aaron van Wirdum>has to do with change addresses it has to do with previous

00:09:23.740 --> 00:09:29.520
<v Aaron van Wirdum>transactions and you not knowing how much money was involved so

00:09:29.520 --> 00:09:30.740
<v Aaron van Wirdum>overpaying fees.

00:09:30.740 --> 00:09:31.680
<v Sjors Provoost>Yep, exactly.

00:09:31.680 --> 00:09:36.400
<v Aaron van Wirdum>Okay, how about we just cut it there so we got…

00:09:36.860 --> 00:09:37.280
<v Sjors Provoost>Yeah.

00:09:37.540 --> 00:09:40.060
<v Aaron van Wirdum>The third bucket is all kinds of attacks.

00:09:40.420 --> 00:09:40.820
<v Sjors Provoost>Yeah.

00:09:41.300 --> 00:09:42.400
<v Aaron van Wirdum>Simple. All right.

00:09:43.870 --> 00:09:49.670
<v Aaron van Wirdum>So at some point, someone thought we need to improve this. Who was this when?

00:09:50.430 --> 00:09:53.510
<v Sjors Provoost>Well, many people probably thought it, but Andrew Chow actually wrote the

00:09:53.510 --> 00:09:56.750
<v Sjors Provoost>standard called PSBT in 2017, I think.

00:09:56.970 --> 00:10:00.210
<v Aaron van Wirdum>Okay, he started in 2017 and it's done now?

00:10:01.230 --> 00:10:03.130
<v Sjors Provoost>Yeah, it's been done for many years.

00:10:03.450 --> 00:10:08.010
<v Aaron van Wirdum>I guess you can always upgrade it or update it. Does that happen or is it kind of

00:10:08.010 --> 00:10:08.430
<v Aaron van Wirdum>just done?

00:10:08.590 --> 00:10:12.890
<v Sjors Provoost>No, there is a version 2 for PSBT, which came out a few years ago, but it's only

00:10:12.890 --> 00:10:18.310
<v Sjors Provoost>a very small change. So generally with PSBT, it's pretty flexible, so we can

00:10:18.310 --> 00:10:19.210
<v Sjors Provoost>explain how it works.

00:10:20.190 --> 00:10:24.990
<v Aaron van Wirdum>Yeah, how does it work, Sjors? So what is PSBT like concretely? What does it do?

00:10:25.250 --> 00:10:29.270
<v Sjors Provoost>Yeah, it's a bit boring. It's just a file. And the file contains the information

00:10:29.270 --> 00:10:33.990
<v Sjors Provoost>you need for a transaction. You could say the ingredients for a transaction. So

00:10:33.990 --> 00:10:39.510
<v Sjors Provoost>it contains the inputs that you're trying to spend. It creates the outputs that

00:10:39.510 --> 00:10:45.400
<v Sjors Provoost>you want to send to. It contains signatures. And, you know,

00:10:45.520 --> 00:10:48.240
<v Sjors Provoost>normally in a Bitcoin transaction, the signatures are right inside the input, but

00:10:48.240 --> 00:10:50.520
<v Sjors Provoost>here you would neatly separate all this stuff.

00:10:50.700 --> 00:10:51.820
<v Aaron van Wirdum>Well, they're in the witness, right?

00:10:53.060 --> 00:10:55.000
<v Sjors Provoost>Yeah, or depends on if it's SegWit or not.

00:10:55.660 --> 00:10:58.820
<v Aaron van Wirdum>Okay, does PSBT do both? Does it do non-SegWit? Okay.

00:10:59.280 --> 00:11:02.420
<v Sjors Provoost>Yeah, but the signatures are basically in a separate place or the witnesses are

00:11:02.420 --> 00:11:05.960
<v Sjors Provoost>in a separate place. The same with Taproot. I think it has its own place for

00:11:05.960 --> 00:11:11.530
<v Sjors Provoost>these things. But you can also put more in it. For example, you can put an xpub

00:11:11.530 --> 00:11:15.170
<v Sjors Provoost>in it, and this xpub can help the other wallet figure out which addresses it

00:11:15.170 --> 00:11:20.330
<v Sjors Provoost>owns. You can put BIP32 derivation paths in it, so you can see, okay, if I have

00:11:20.330 --> 00:11:25.550
<v Sjors Provoost>my wallet seed, what derivations do I do to actually get this change address, for

00:11:25.550 --> 00:11:30.290
<v Sjors Provoost>example, so that you can check that it's your own address. There can be Taproot

00:11:30.290 --> 00:11:34.370
<v Sjors Provoost>-specific things, so if you have multiple different possible scripts, you can...

00:11:34.580 --> 00:11:36.180
<v Sjors Provoost>You can provide the script in there.

00:11:36.400 --> 00:11:41.500
<v Aaron van Wirdum>Right. So here's how I would imagine this. And just correct me if this is too

00:11:41.500 --> 00:11:47.360
<v Aaron van Wirdum>simple. So it sounds like you're basically creating a file

00:11:47.360 --> 00:11:53.240
<v Aaron van Wirdum>which has fields which are dedicated for put the inputs in this field, put the

00:11:53.240 --> 00:11:57.680
<v Aaron van Wirdum>outputs in this field, put the signatures in this field, and so forth.

00:11:57.840 --> 00:11:58.300
<v Sjors Provoost>That's right.

00:11:59.220 --> 00:12:02.920
<v Aaron van Wirdum>and you don't have to fill them all you can just fill some of them and leave

00:12:02.920 --> 00:12:08.360
<v Aaron van Wirdum>others open and that's what you would send to whether it's your multisig partner

00:12:08.360 --> 00:12:12.380
<v Aaron van Wirdum>or your hardware wallet so you and then you're

00:12:14.670 --> 00:12:18.850
<v Aaron van Wirdum>your multisig partner would know, oh, this is a PSBT. So this is how I look at

00:12:18.850 --> 00:12:23.090
<v Aaron van Wirdum>this. This is what these fields mean. These are filled out. These are empty. Now

00:12:23.090 --> 00:12:24.110
<v Aaron van Wirdum>I know what to do with it.

00:12:24.310 --> 00:12:24.610
<v Sjors Provoost>Exactly.

00:12:24.850 --> 00:12:25.890
<v Aaron van Wirdum>This is basically what it is.

00:12:26.010 --> 00:12:29.050
<v Sjors Provoost>Yeah. And one of the other things that you can add to it is a previous

00:12:29.050 --> 00:12:32.830
<v Sjors Provoost>transaction. Right. So in the scenario where you don't know how

00:12:32.830 --> 00:12:38.010
<v Sjors Provoost>much money you're spending, the trick is to basically put in the previous

00:12:38.010 --> 00:12:42.350
<v Sjors Provoost>transaction because the previous transaction will say on the output side, what

00:12:42.350 --> 00:12:45.060
<v Sjors Provoost>the amount is. And therefore the signer can check that.

00:12:45.770 --> 00:12:48.670
<v Aaron van Wirdum>And the signer would check that by checking the blockchain essentially?

00:12:49.410 --> 00:12:54.130
<v Sjors Provoost>No, it would simply check that this transaction that it's spending that this has

00:12:54.130 --> 00:12:57.750
<v Sjors Provoost>the output. It doesn't necessarily care that this transaction really existed. It

00:12:57.750 --> 00:13:02.080
<v Sjors Provoost>depends on what you're trying to verify. But in this case, the idea is that you

00:13:02.080 --> 00:13:06.120
<v Sjors Provoost>can't make a fake transaction. I mean, you could make a fake transaction, but if

00:13:06.120 --> 00:13:09.760
<v Sjors Provoost>the fake transaction doesn't exist on the blockchain, then you're signing

00:13:09.760 --> 00:13:12.680
<v Sjors Provoost>something that is spending a transaction that does not exist on the blockchain.

00:13:12.820 --> 00:13:13.760
<v Aaron van Wirdum>And therefore is invalid.

00:13:13.980 --> 00:13:17.000
<v Sjors Provoost>So it won't get broadcast. So in that sense, you should be fine there.

00:13:17.240 --> 00:13:17.480
<v Aaron van Wirdum>Right.

00:13:17.620 --> 00:13:20.880
<v Sjors Provoost>But it is annoying to have to include the previous transaction. And we talked in

00:13:20.880 --> 00:13:25.420
<v Sjors Provoost>earlier episodes that SegWit reduced the need to include this previous

00:13:25.420 --> 00:13:29.880
<v Sjors Provoost>transaction, but there was a bug in SegWit. And so you still kind of have to

00:13:29.880 --> 00:13:33.480
<v Sjors Provoost>include the previous transaction and with Taproot hopefully you don't have to

00:13:33.480 --> 00:13:36.220
<v Sjors Provoost>include the previous transaction because you actually know what the amount is

00:13:36.220 --> 00:13:39.300
<v Sjors Provoost>without having to check the previous transaction so that's nice.

00:13:39.300 --> 00:13:44.880
<v Aaron van Wirdum>Okay, so just to sort of contextualize this the PSBT it's not

00:13:44.880 --> 00:13:49.680
<v Aaron van Wirdum>a consensus rule it's not it's not even part of the Bitcoin consensus or Bitcoin

00:13:49.680 --> 00:13:53.820
<v Aaron van Wirdum>protocol at all. No, I guess depending what you want to call part of the Bitcoin

00:13:53.820 --> 00:13:57.960
<v Aaron van Wirdum>protocol but it's really a convention that essentially

00:13:59.600 --> 00:14:02.820
<v Aaron van Wirdum>wallet developers can use right that's what it comes down to.

00:14:02.820 --> 00:14:07.060
<v Sjors Provoost>Yeah, it makes wallets more interoperable and makes it easier to do these more

00:14:07.060 --> 00:14:08.460
<v Sjors Provoost>complicated signings.

00:14:08.460 --> 00:14:13.920
<v Aaron van Wirdum>Right, that makes a lot of sense so what wallets use this right now?

00:14:14.150 --> 00:14:19.770
<v Sjors Provoost>Well, or yeah that's that's actually increasing so I think the first wallet that

00:14:19.770 --> 00:14:25.200
<v Sjors Provoost>actually ever supported it is the COLDCARD and the way the COLDCARD works is, or

00:14:25.200 --> 00:14:28.460
<v Sjors Provoost>it has different ways of working, but one way it works is completely separate

00:14:28.460 --> 00:14:33.370
<v Sjors Provoost>from your computer, air gap, as people would call it. You use Bitcoin Core on

00:14:33.370 --> 00:14:37.250
<v Sjors Provoost>your computer to create a transaction that has no signatures on it. Then you put

00:14:37.250 --> 00:14:41.850
<v Sjors Provoost>that on an SD card. You put the SD card in the device. The device signs it, spits

00:14:41.850 --> 00:14:45.950
<v Sjors Provoost>out the SD card, and you put the SD card back in the computer, and then Bitcoin

00:14:45.950 --> 00:14:50.280
<v Sjors Provoost>Core reads it, sees the signatures, and sends it. And so this is a nice, that's

00:14:50.280 --> 00:14:54.420
<v Sjors Provoost>kind of why it fits that model very well. But recently, I believe Ledger also

00:14:54.420 --> 00:15:00.310
<v Sjors Provoost>added it. And so actual support for it. And one of the things that, I

00:15:00.310 --> 00:15:03.890
<v Sjors Provoost>think they needed PSBT 2 for this because PSBT 2 made some things easier to

00:15:03.890 --> 00:15:08.130
<v Sjors Provoost>handle for the device. The problem with these hardware wallets is that they tend

00:15:08.130 --> 00:15:11.870
<v Sjors Provoost>to have very limited resources. So they cannot, especially in case of the Ledger,

00:15:11.990 --> 00:15:15.400
<v Sjors Provoost>they can't hold the whole transaction in memory. So if the transaction is very

00:15:15.400 --> 00:15:19.360
<v Sjors Provoost>big, especially if it has previous transactions that you also want to look at, it

00:15:19.360 --> 00:15:23.640
<v Sjors Provoost>cannot hold all of it in memory. And so I think they set up a whole ritual where

00:15:23.640 --> 00:15:27.220
<v Sjors Provoost>the computer would send the first part of the PSBT and then the wallet would

00:15:27.220 --> 00:15:31.680
<v Sjors Provoost>check it and would ask the computer for the next part of the PSBT or some other

00:15:31.680 --> 00:15:35.790
<v Sjors Provoost>part, et cetera, and then go through it. One of the other things hardware wallets

00:15:35.790 --> 00:15:38.830
<v Sjors Provoost>can do with this is, again, because they don't have so much memory, a hardware

00:15:38.830 --> 00:15:43.030
<v Sjors Provoost>wallet typically doesn't know which addresses it controls. So if you're saying

00:15:43.030 --> 00:15:46.170
<v Sjors Provoost>here's a change address, if you're doing that on a laptop, you can just check

00:15:46.170 --> 00:15:49.730
<v Sjors Provoost>your list of 3000 addresses and see that it's a change address. But for a

00:15:49.730 --> 00:15:55.030
<v Sjors Provoost>hardware wallet, keeping such a long list is not practical. So instead, the PSBT

00:15:55.030 --> 00:15:59.070
<v Sjors Provoost>says, hey, you know, this is how you derive your own change address. And then the

00:15:59.070 --> 00:16:03.190
<v Sjors Provoost>hardware wallet will actually do the derivation and say, yep, if I do this from

00:16:03.190 --> 00:16:06.370
<v Sjors Provoost>a seed, I get this address. And now I know that it's actually a change address.

00:16:07.170 --> 00:16:09.050
<v Sjors Provoost>So that's kind of what the devices do with it.

00:16:10.370 --> 00:16:14.750
<v Sjors Provoost>Others that use the device. I don't know of any other hardware wallets, how far

00:16:14.750 --> 00:16:18.870
<v Sjors Provoost>they are along, but there is a project called HWI, which we have covered in an

00:16:18.870 --> 00:16:21.430
<v Sjors Provoost>earlier episode, episode 30, I believe.

00:16:21.710 --> 00:16:24.090
<v Aaron van Wirdum>Yeah, maybe give a quick recap of what it is.

00:16:24.250 --> 00:16:30.090
<v Sjors Provoost>Yeah, it's called Hardware Wallet Integration. And what it does is it

00:16:30.090 --> 00:16:34.390
<v Sjors Provoost>basically is a bridge between Bitcoin Core and a whole bunch of different

00:16:34.390 --> 00:16:40.360
<v Sjors Provoost>hardware wallets. And that way, Bitcoin Core only needs to speak PSBT as a

00:16:40.360 --> 00:16:45.200
<v Sjors Provoost>language it can send a PSBT to a device it can receive a PSBT from the device but

00:16:45.200 --> 00:16:51.050
<v Sjors Provoost>if the device itself doesn't speak PSBT HWI can do the translation for it so then

00:16:51.050 --> 00:16:54.630
<v Sjors Provoost>it's HWI it's actually taking the PSBT and turning it into whatever obscure

00:16:54.630 --> 00:16:57.230
<v Sjors Provoost>format the device wants okay

00:16:59.310 --> 00:17:05.010
<v Aaron van Wirdum>is there a reason not to just

00:17:05.010 --> 00:17:10.410
<v Aaron van Wirdum>speak PSBT other than I haven't had the time to implement it yet are there any

00:17:10.410 --> 00:17:11.250
<v Aaron van Wirdum>downsides to it

00:17:11.730 --> 00:17:15.330
<v Sjors Provoost>Well, I think that's the biggest argument. So wallets haven't had times to

00:17:15.330 --> 00:17:18.490
<v Sjors Provoost>implement it. My guess is that any wallet that wants to do something fancy and

00:17:18.490 --> 00:17:23.010
<v Sjors Provoost>new, like say Miniscript, would be wise to just use PSBT because

00:17:23.010 --> 00:17:27.770
<v Sjors Provoost>just having to figure out yourself how to do these complicated things, it's

00:17:27.770 --> 00:17:30.590
<v Sjors Provoost>probably easier to just use something that's out there.

00:17:30.930 --> 00:17:36.630
<v Aaron van Wirdum>All right. But if you use a hardware wallet with Bitcoin Core, and the hardware

00:17:36.630 --> 00:17:40.370
<v Aaron van Wirdum>wallet speaks PSBT then you don't need HWI?

00:17:40.370 --> 00:17:44.390
<v Sjors Provoost>Well, you kind of still do because other than the format there's other things you

00:17:44.390 --> 00:17:47.750
<v Sjors Provoost>need to do to communicate to a hardware wallet you need to speak USB for example

00:17:47.750 --> 00:17:52.710
<v Sjors Provoost>and all the USB stuff that's also something that we don't want to put in Bitcoin

00:17:52.710 --> 00:17:57.230
<v Sjors Provoost>core because it creates a bunch of dependencies so the HWI will still you know

00:17:57.230 --> 00:18:01.030
<v Sjors Provoost>know where to find the hardware wallet physically like which port it's on and and

00:18:01.030 --> 00:18:05.180
<v Sjors Provoost>then talk over USB or some other protocol but it will not have to do any

00:18:05.180 --> 00:18:05.640
<v Sjors Provoost>translation.

00:18:09.620 --> 00:18:12.420
<v Aaron van Wirdum>Are you fluent in USB Sjors?

00:18:12.560 --> 00:18:16.020
<v Sjors Provoost>I am not. And also the example of the Ledger I just gave you, where the Ledger

00:18:16.020 --> 00:18:21.580
<v Sjors Provoost>cannot hold the whole PSBT in one, all of it in its memory, then what PSBT does

00:18:21.580 --> 00:18:25.800
<v Sjors Provoost>is basically helping with the back and forth. So it's able to send part of a PSBT

00:18:25.800 --> 00:18:30.640
<v Sjors Provoost>that the hardware wallet asks for. Bitcoin Core doesn't know how to do that. So

00:18:30.640 --> 00:18:33.220
<v Sjors Provoost>there's still a role for HWI or something similar.

00:18:35.060 --> 00:18:39.080
<v Sjors Provoost>Which I think brings us to the last user that we wanted to briefly talk about.

00:18:41.100 --> 00:18:45.960
<v Aaron van Wirdum>Yeah, so there's also... So recently we've seen,

00:18:46.430 --> 00:18:52.230
<v Aaron van Wirdum>for example, Bitcoin Magazine has been publishing these inscriptions and these

00:18:52.230 --> 00:18:57.720
<v Aaron van Wirdum>Ordinals, which we love because we're contractually

00:18:57.720 --> 00:18:59.820
<v Aaron van Wirdum>obligated to love it. Aren't we, Sjors?

00:19:00.040 --> 00:19:03.100
<v Sjors Provoost>I don't think I'm contractually obligated to love it. I didn't even know they had

00:19:03.100 --> 00:19:04.380
<v Sjors Provoost>them until like five minutes ago.

00:19:05.080 --> 00:19:08.740
<v Aaron van Wirdum>Oh, you didn't know? Yeah, Bitcoin Magazine has been publishing some inscriptions

00:19:08.740 --> 00:19:14.710
<v Aaron van Wirdum>and some Ordinals. And it is controversial. Like people are now not coming to the

00:19:14.710 --> 00:19:19.150
<v Aaron van Wirdum>conference in Miami. I mean, I don't think a lot of people, but you know, it's

00:19:19.150 --> 00:19:21.430
<v Aaron van Wirdum>like a Twitter controversy, you know.

00:19:21.970 --> 00:19:22.270
<v Sjors Provoost>Okay.

00:19:22.750 --> 00:19:28.560
<v Aaron van Wirdum>For the record, Ordinals are still retarded. I agree with that [unclear] as well,

00:19:28.560 --> 00:19:28.980
<v Aaron van Wirdum>I think.

00:19:28.980 --> 00:19:32.220
<v Sjors Provoost>But are they a cancelable offense? That's the question, right?

00:19:32.220 --> 00:19:34.540
<v Aaron van Wirdum>Yeah, that is the question I would say probably not.

00:19:34.540 --> 00:19:38.700
<v Sjors Provoost>Anyway, we we talked about inscriptions especially not so much Ordinals in

00:19:38.700 --> 00:19:43.010
<v Sjors Provoost>general in an earlier episode so we don't have to repeat that.

00:19:43.010 --> 00:19:48.510
<v Aaron van Wirdum>Yeah, and but there is something interesting so there's something interesting

00:19:48.510 --> 00:19:52.830
<v Aaron van Wirdum>about the way that Bitcoin Magazine did the sale and I don't think it's unique to

00:19:52.830 --> 00:19:57.010
<v Aaron van Wirdum>Bitcoin Magazine but there is something interesting there and it is using

00:19:59.430 --> 00:20:01.490
<v Aaron van Wirdum>PSBTs. So it's called a Dutch auction.

00:20:03.160 --> 00:20:06.580
<v Aaron van Wirdum>What is a Dutch auction, Sjors? And why is it called a Dutch auction?

00:20:06.760 --> 00:20:08.000
<v Sjors Provoost>Well, because the Dutch invented it.

00:20:08.610 --> 00:20:11.890
<v Aaron van Wirdum>I mean, is this how the tulips are still traded?

00:20:11.950 --> 00:20:17.250
<v Sjors Provoost>So usually when English people say Dutch something, it's an insult. Dutch courage

00:20:17.250 --> 00:20:20.910
<v Sjors Provoost>is like if you drink a lot of alcohol and then you have courage. But a Dutch

00:20:20.910 --> 00:20:23.910
<v Sjors Provoost>auction is actually not an insult. It's actually just the mechanics of an

00:20:23.910 --> 00:20:28.010
<v Sjors Provoost>auction. The idea is you, as the seller, you start at a high price and you say,

00:20:28.010 --> 00:20:31.910
<v Sjors Provoost>does anybody want to buy it at this price? And then you go down in price and you

00:20:31.910 --> 00:20:35.180
<v Sjors Provoost>go down in price until finally somebody... matches your order.

00:20:35.180 --> 00:20:38.980
<v Aaron van Wirdum>I mean I think that's still how it works right if you go to like the big auction

00:20:38.980 --> 00:20:42.300
<v Aaron van Wirdum>houses for the tulips and stuff like I've never been but I've seen it on

00:20:42.300 --> 00:20:44.920
<v Aaron van Wirdum>television I think that's actually how they do it.

00:20:44.920 --> 00:20:48.080
<v Sjors Provoost>I think so then so then they would have been doing it for about 400 years now,

00:20:48.080 --> 00:20:51.780
<v Sjors Provoost>so… right, it's a long tradition. so you can use PSBTs for this and apparently

00:20:51.780 --> 00:20:55.360
<v Sjors Provoost>that's what Bitcoin Magazine did they did a Dutch auction using PSBTs.

00:20:55.360 --> 00:21:01.310
<v Aaron van Wirdum>Yeah, so how does that work? What's the idea here? And how do PSBTs come in?

00:21:01.490 --> 00:21:04.650
<v Sjors Provoost>Yeah, so PSBTs even come in without an auction because there's also websites

00:21:04.650 --> 00:21:08.150
<v Sjors Provoost>where you can just buy, I think you can buy inscriptions or something like that.

00:21:08.250 --> 00:21:13.970
<v Sjors Provoost>And they also use PSBTs. So we should explain that mechanism first. The idea is

00:21:13.970 --> 00:21:19.630
<v Sjors Provoost>that basically you create a PSBT, so a draft transaction essentially,

00:21:19.910 --> 00:21:25.770
<v Sjors Provoost>that has on the input side, it takes your inscription or

00:21:25.770 --> 00:21:26.410
<v Sjors Provoost>[unclear], whatever.

00:21:29.340 --> 00:21:34.190
<v Sjors Provoost>And then on the output side, it's sending a certain amount of money to you. But

00:21:34.190 --> 00:21:37.070
<v Sjors Provoost>that's not the complete transaction. But that's the only part you care about.

00:21:37.310 --> 00:21:41.870
<v Sjors Provoost>What you want is to receive a bunch of money. So that's what you're specifying on

00:21:41.870 --> 00:21:46.210
<v Sjors Provoost>the output. And what you're willing to do for that is to send the inscription

00:21:46.210 --> 00:21:50.920
<v Sjors Provoost>slash ordinal slash whatever it is anywhere. You don't care where it goes. You

00:21:50.920 --> 00:21:56.020
<v Sjors Provoost>just care that you get the money. Now, you publish this PSBT on a website or an

00:21:56.020 --> 00:22:00.650
<v Sjors Provoost>exchange, whatever it is. somebody else can come in and say, hey, I think this is

00:22:00.650 --> 00:22:05.250
<v Sjors Provoost>a fair price. Let me take this PSBT and add an input,

00:22:05.900 --> 00:22:11.850
<v Sjors Provoost>namely my money, and add one or two outputs. Maybe you add an output

00:22:11.850 --> 00:22:17.520
<v Sjors Provoost>for change and an output for where you want the ordinal

00:22:17.520 --> 00:22:22.980
<v Sjors Provoost>inscription, whatever it is, to go. And then you sign that and you put it

00:22:22.980 --> 00:22:26.620
<v Sjors Provoost>yourself on the blockchain. So it's kind of a non-interactive thing where as a

00:22:26.620 --> 00:22:32.100
<v Sjors Provoost>seller, I can just, make this PSBT, sign my part of it, send it somewhere off to

00:22:32.100 --> 00:22:35.380
<v Sjors Provoost>a website and forget about it. And one day I wake up and there's money in my

00:22:35.380 --> 00:22:38.080
<v Sjors Provoost>wallet and the ordinal inscription, whatever it is, is gone.

00:22:38.300 --> 00:22:44.120
<v Aaron van Wirdum>Yeah, so we've mentioned the empty fields of a PSBT. And so you publish a

00:22:44.120 --> 00:22:45.860
<v Aaron van Wirdum>PSBT with some of these fields empty.

00:22:47.210 --> 00:22:50.550
<v Aaron van Wirdum>Actually, probably most of the fields are empty, right? Like really the only

00:22:50.550 --> 00:22:55.170
<v Aaron van Wirdum>field that's not empty is one of the outputs and the amount there.

00:22:54.980 --> 00:22:57.180
<v Sjors Provoost>Like you just—so the, the workflow…

00:22:56.030 --> 00:22:59.110
<v Aaron van Wirdum>And I guess one of the inputs, which has to be the ordinal.

00:22:59.870 --> 00:23:02.370
<v Sjors Provoost>Yeah, the workflow is a little bit different than you might be used to because

00:23:02.370 --> 00:23:05.950
<v Sjors Provoost>for a multisig, the transaction, if you're doing a multisig, the transaction is

00:23:05.950 --> 00:23:09.750
<v Sjors Provoost>generally complete, but it's missing signatures. And in this case, the

00:23:09.750 --> 00:23:13.800
<v Sjors Provoost>transaction is incomplete in the sense that it even misses inputs and outputs. So

00:23:13.800 --> 00:23:18.800
<v Sjors Provoost>because the thing I just published as a seller is not going to be accepted on the

00:23:18.800 --> 00:23:23.140
<v Sjors Provoost>blockchain. Because it is a transaction that is spending more than it's sending.

00:23:23.160 --> 00:23:27.500
<v Sjors Provoost>Because what it's sending is just some satoshi. So it's only spending one

00:23:27.500 --> 00:23:31.900
<v Sjors Provoost>satoshi. And it tries to have an output of, I don't know, 100 Bitcoin or whatever

00:23:31.900 --> 00:23:37.260
<v Sjors Provoost>I asked for my amazing NFT. So somebody will have to provide that input. Yeah,

00:23:37.340 --> 00:23:40.100
<v Sjors Provoost>and that's the buyer has to add their own inputs.

00:23:41.980 --> 00:23:46.400
<v Sjors Provoost>So then how do you make that into a Dutch auction? Well, the idea is very simple.

00:23:46.620 --> 00:23:51.880
<v Sjors Provoost>I, as a seller, create this transaction which has sent me one Bitcoin. And then

00:23:51.880 --> 00:23:55.060
<v Sjors Provoost>after some time, I create another transaction that says, okay, whatever,

00:23:54.920 --> 00:24:00.160
<v Sjors Provoost>send me 99—or send me 0.99 Bitcoin. And then a while later, I make one that says

00:24:00.160 --> 00:24:05.190
<v Sjors Provoost>send me 0.98 Bitcoin until somebody actually publishes something on the

00:24:05.190 --> 00:24:08.990
<v Sjors Provoost>blockchain. So I keep an eye on the mempool probably. And as soon as I see...

00:24:09.460 --> 00:24:14.580
<v Sjors Provoost>this money coming towards me I will stop making new PSBTs. Yes, unless of course

00:24:14.580 --> 00:24:16.080
<v Sjors Provoost>it's double spent and I just try again.

00:24:16.080 --> 00:24:20.340
<v Aaron van Wirdum>Yep, I think that's that's also how Bitcoin Magazine did it so they published a

00:24:20.340 --> 00:24:25.860
<v Aaron van Wirdum>new PSBT I think maybe every block or otherwise maybe it was every hour or

00:24:25.860 --> 00:24:31.380
<v Aaron van Wirdum>I don't remember exactly but yeah so the price for each new

00:24:31.380 --> 00:24:34.940
<v Aaron van Wirdum>PSBT went down and if someone wants to pick it up you know.

00:24:34.940 --> 00:24:39.300
<v Sjors Provoost>Yeah, so in theory you could publish a whole bunch of PSBTs in one go and use

00:24:39.300 --> 00:24:44.200
<v Sjors Provoost>time locks but this will create problems but what you could do is say well at you

00:24:44.200 --> 00:24:49.200
<v Sjors Provoost>can commit inside the PSBT or you can say okay this can only be spent after this

00:24:49.200 --> 00:24:53.540
<v Sjors Provoost>height this can only be spent after that height and that means whoever wants the

00:24:53.540 --> 00:24:58.920
<v Sjors Provoost>the NFT or whatever it is from you will have to you know take that transaction

00:24:58.920 --> 00:25:04.130
<v Sjors Provoost>and and make sure that it's confirmed before the next round because otherwise

00:25:04.130 --> 00:25:08.590
<v Sjors Provoost>some other person might take the lower fee It might take the lower price, sign

00:25:08.590 --> 00:25:09.690
<v Sjors Provoost>that, and pay a higher fee.

00:25:10.770 --> 00:25:16.230
<v Aaron van Wirdum>Wait, what you're saying is there are several things you could be saying, and I'm

00:25:16.230 --> 00:25:17.290
<v Aaron van Wirdum>not sure which one it is.

00:25:17.410 --> 00:25:17.630
<v Sjors Provoost>Okay.

00:25:17.750 --> 00:25:20.750
<v Aaron van Wirdum>But that's also because I wasn't paying attention because I was thinking about

00:25:20.750 --> 00:25:21.830
<v Aaron van Wirdum>the next step in the podcast.

00:25:22.130 --> 00:25:22.430
<v Sjors Provoost>All right.

00:25:22.750 --> 00:25:27.650
<v Aaron van Wirdum>So what you were saying is if... there's several people during the same block

00:25:27.650 --> 00:25:32.450
<v Aaron van Wirdum>that pick up, that both want to buy it, then it becomes a bidding war of fees,

00:25:32.570 --> 00:25:33.590
<v Aaron van Wirdum>right? Is that what you were saying?

00:25:33.690 --> 00:25:36.770
<v Sjors Provoost>No, we didn't cover that yet. That's actually interesting. No, I was covering a

00:25:36.770 --> 00:25:40.940
<v Sjors Provoost>scenario where you create multiple PSBTs. At the same time,

00:25:40.760 --> 00:25:41.100
<v Aaron van Wirdum>Yeah,

00:25:41.040 --> 00:25:44.580
<v Sjors Provoost>you put them all on the website and you just say the first one can only be spent

00:25:44.580 --> 00:25:46.420
<v Sjors Provoost>after this height. the second one…

00:25:46.140 --> 00:25:47.980
<v Aaron van Wirdum>With time locks, that's what you were saying.

00:25:47.940 --> 00:25:48.260
<v Sjors Provoost>Exactly.

00:25:48.140 --> 00:25:50.360
<v Aaron van Wirdum>See, I wasn't paying attention at all at

00:25:50.320 --> 00:25:51.260
<v Sjors Provoost>No, clearly [unclear].

00:25:50.360 --> 00:25:54.640
<v Aaron van Wirdum>this moment. Okay, you were talking about the time lock solution and the problem

00:25:54.640 --> 00:25:55.320
<v Aaron van Wirdum>with that was?

00:25:55.580 --> 00:26:00.880
<v Sjors Provoost>The problem with that is that as a buyer, let's say I'm okay with the highest

00:26:00.880 --> 00:26:05.700
<v Sjors Provoost>price, I sign it, but I put a very low fee on it. Now after a block or two or

00:26:05.700 --> 00:26:09.280
<v Sjors Provoost>whatever the next interval is, Some other person takes the second highest price

00:26:09.280 --> 00:26:13.480
<v Sjors Provoost>and puts a higher fee on it. And they might be able to get into a block earlier

00:26:13.480 --> 00:26:16.400
<v Sjors Provoost>than me. So even though they paid a lower price, they still win the auction.

00:26:16.600 --> 00:26:20.440
<v Aaron van Wirdum>Yeah. Well, yeah. So that's why you can only publish one PSBT at the time. You

00:26:20.440 --> 00:26:21.720
<v Aaron van Wirdum>really can't publish them all.

00:26:21.780 --> 00:26:24.140
<v Sjors Provoost>It just depends on how much chaos you're willing to accept. But as a seller, of

00:26:24.140 --> 00:26:28.240
<v Sjors Provoost>course, you have an incentive to get the highest price for it. So it's not a good

00:26:28.240 --> 00:26:31.320
<v Sjors Provoost>idea as a seller to publish a lower offer.

00:26:32.610 --> 00:26:34.890
<v Aaron van Wirdum>It's just a bad idea for the reason you just explained.

00:26:35.510 --> 00:26:35.670
<v Sjors Provoost>Yes.

00:26:35.520 --> 00:26:37.290
<v Aaron van Wirdum>[unclear] I mean…

00:26:37.260 --> 00:26:39.200
<v Sjors Provoost>No, I mean, the chaos is something… you may…

00:26:39.110 --> 00:26:40.850
<v Aaron van Wirdum>If that's the goal in itself, yeah.

00:26:41.170 --> 00:26:46.050
<v Sjors Provoost>You may not care about chaos, right? You may be ambivalent to it, but it's not to

00:26:46.050 --> 00:26:50.070
<v Sjors Provoost>your advantage to get a lower price. It's great for the miners, but it's not good for you.

00:26:50.210 --> 00:26:54.430
<v Aaron van Wirdum>Okay, and then the problem I mentioned, which is a real issue, is that...

00:26:54.430 --> 00:26:59.310
<v Aaron van Wirdum>Different people can say yes to the same price, but because a Bitcoin block is

00:26:59.310 --> 00:27:03.770
<v Aaron van Wirdum>only mined once per 10 minutes, as opposed to an actual tulip auction, which

00:27:03.770 --> 00:27:07.930
<v Aaron van Wirdum>really the first person to press the button will get it, a Bitcoin block is only

00:27:07.930 --> 00:27:13.430
<v Aaron van Wirdum>mined every 10 minutes. So now you can get a fee war before a block is actually

00:27:13.430 --> 00:27:17.730
<v Aaron van Wirdum>mined where people bid against each other. Does PSBT, I guess it doesn't even

00:27:17.730 --> 00:27:23.330
<v Aaron van Wirdum>matter anymore now that Bitcoin Core has completely [unclear], replace by fee.

00:27:24.460 --> 00:27:27.060
<v Aaron van Wirdum>or first seen is actually where they all [unclear], right?

00:27:27.060 --> 00:27:32.900
<v Sjors Provoost>I mean you can I think part of the PSBT is you can probably specify

00:27:32.900 --> 00:27:34.280
<v Sjors Provoost>whether or not it's…

00:27:34.280 --> 00:27:35.720
<v Aaron van Wirdum>Well, that was gonna be my…

00:27:34.300 --> 00:27:37.000
<v Sjors Provoost>RBF flag is on. I haven't looked at that.

00:27:37.000 --> 00:27:42.320
<v Aaron van Wirdum>That was gonna be my question yeah. However, now that Bitcoin Core has the full

00:27:42.320 --> 00:27:45.000
<v Aaron van Wirdum>replace by fee option and it doesn't even matter anymore does it, Sjors?

00:27:45.000 --> 00:27:48.740
<v Sjors Provoost>Well, I don't know if it mattered at all in the beginning so we did a whole

00:27:48.740 --> 00:27:50.560
<v Sjors Provoost>episode about that rather not rehash it.

00:27:50.560 --> 00:27:53.680
<v Aaron van Wirdum>I mean I was just trying to get a reaction which I didn't get

00:27:54.280 --> 00:27:56.660
<v Sjors Provoost>Go listen to the episode we did about RBF.

00:27:58.030 --> 00:28:03.960
<v Aaron van Wirdum>All right, so that was that. So I think we've explained PSBTs. We explained

00:28:03.960 --> 00:28:09.680
<v Aaron van Wirdum>where it came from. We explained... how it's being used now in dutch auctions and

00:28:09.680 --> 00:28:13.760
<v Aaron van Wirdum>I think so one of the links you mentioned is OpenOrdex so I guess that's where it

00:28:13.760 --> 00:28:16.640
<v Aaron van Wirdum>just happens all the time or that's where people can buy Ordinals? Yeah,

00:28:16.640 --> 00:28:18.640
<v Sjors Provoost>but that's not an auction I think that's just marketplace.

00:28:18.640 --> 00:28:23.420
<v Aaron van Wirdum>Okay, yeah for those who are wondering by the way so the Bitcoin Magazine

00:28:23.420 --> 00:28:25.780
<v Aaron van Wirdum>inscriptions and Ordinals that was like the first

00:28:27.020 --> 00:28:31.720
<v Aaron van Wirdum>The original Bitcoin Magazine covers were uploaded as an inscription on the

00:28:31.720 --> 00:28:36.660
<v Aaron van Wirdum>blockchain, and then the Ordinals give you the ownership rights of the covers.

00:28:37.220 --> 00:28:41.060
<v Aaron van Wirdum>Just kidding. That's obviously not true. That's not how ownership rights work, as

00:28:41.060 --> 00:28:45.420
<v Aaron van Wirdum>we also discussed in the previous episode, [unclear] just a satoshi, but you can

00:28:45.420 --> 00:28:51.390
<v Aaron van Wirdum>then pretend to own the cover. So that's... That part, I think we're kind

00:28:51.390 --> 00:28:54.650
<v Aaron van Wirdum>of done then, right? Is there anything else we need to discuss in this episode?

00:28:54.910 --> 00:28:57.730
<v Sjors Provoost>Yeah, the only thing I wanted to bring up is so the PSBT format is pretty

00:28:57.730 --> 00:29:01.570
<v Sjors Provoost>flexible. And one of the things that I don't think I put in the show notes, but

00:29:01.570 --> 00:29:06.010
<v Sjors Provoost>the idea is that when a new standard comes along, like Taproot or something else,

00:29:06.170 --> 00:29:11.210
<v Sjors Provoost>you can add fields to it. And so old wallets will not understand those fields.

00:29:11.350 --> 00:29:13.910
<v Sjors Provoost>They probably just don't know how to sign the Taproot transaction and it'll be

00:29:13.910 --> 00:29:17.640
<v Sjors Provoost>fine. And the other thing you can do, so this is like a soft fork, so everybody

00:29:17.640 --> 00:29:20.700
<v Sjors Provoost>wants those new fields. So you'd probably make a BIP and say, hey, these new

00:29:20.700 --> 00:29:25.920
<v Sjors Provoost>fields now belong to PSBT. But if you run your own company and you have some

00:29:25.920 --> 00:29:30.880
<v Sjors Provoost>process internally where the accountant needs to sign something, nobody outside

00:29:30.880 --> 00:29:36.260
<v Sjors Provoost>of you cares about the accountant's signature. But there's actual fields in PSBTs

00:29:36.260 --> 00:29:40.990
<v Sjors Provoost>that you can use for that called proprietary fields. So you can... within your

00:29:40.990 --> 00:29:45.510
<v Sjors Provoost>organization extend the PSBT format basically to include extra stuff that you

00:29:45.510 --> 00:29:48.150
<v Sjors Provoost>need for yourself and you don't bother anyone else with

00:29:49.240 --> 00:29:55.220
<v Aaron van Wirdum>right okay Sjors, this was clear to me I learned a lot

00:29:55.220 --> 00:29:56.480
<v Aaron van Wirdum>like always.

00:29:56.480 --> 00:29:59.500
<v Sjors Provoost>Sounds good in that case thank you for listening to Bitcoin

00:29:59.500 --> 00:30:00.280
<v Aaron van Wirdum>Explained.

