Episode 102: Bitcoin Core 32.1 — Live
Ep. 102

Episode 102: Bitcoin Core 32.1 — Live

•

Episode description

Aaron and Sjors discuss Bitcoin Core 32.1 and its updated security disclosure policy in this live conference recording, followed by audience questions.

Links

Pull requests and discussion

Chapters

00:00:00 Live introduction
00:05:00 Tor proof-of-work defenses and CJDNS
00:12:06 Removing libevent: dependencies and the RPC server
00:15:40 More inbound block-relay connections
00:19:16 Faster validation with parallel input fetching
00:25:16 Wallet RPCs and watch-only exports
00:28:59 AI and the security disclosure policy
00:34:19 Undo-file overflow and chain reorganizations
00:41:15 TCP urgent data and memory exhaustion
00:48:11 Audience Q&A: watch-only wallets and descriptors

Aaron’s Nostr: npub1art8cs66ffvnqns5zs5qa9fwlctmusj5lj38j94lv0ulw0j54wjqhpm0w5

Sjors’ Nostr: npub1v25jqj332n630klwtqeqxgyrjl4alw4phmluhu2x6lcxzwy9m03suqexw3

If you’d like to sponsor the show, please email info at bitcoinexplainedpodcast.com.

https://bitcoinexplainedpodcast.com/

Transcript

Download transcript (.vtt)
0:13

Sjors Provoost So with that, I think we should say...

0:16

Aaron van Wirdum Live from Amsterdam, this is Bitcoin.

0:17

Sjors Provoost Explained.

0:18

Aaron van Wirdum Hey, Sjors.

0:20

Sjors Provoost Hello.

0:20

Aaron van Wirdum This is the first time I can say that without lying.

0:24

Sjors Provoost Hey, Sjors?

0:25

Aaron van Wirdum No, yeah well, no, that we're live. That's that.

0:28

Sjors Provoost Oh, okay. Yes.

0:29

Aaron van Wirdum So I don't know if you even remember why I started saying that.

0:33

Sjors Provoost Why, you said live from Utrecht?

0:34

Aaron van Wirdum Yeah, I mean, we never actually record live, right?

0:35

Sjors Provoost Yes.

0:38

Aaron van Wirdum It's always recorded and even edited and... But yeah, CK at the time, our manager at Bitcoin Magazine, he said we needed a... That was the only pointer we got from him when we made our podcast. He said you need a way, like a standard way to open the podcast and a standard way to close the podcast. And otherwise, you know, you have free reign. And we didn't prepare anything. And I think at the time was just the first thing that came to mind. So we stuck with it.

1:03

Sjors Provoost Well, the first episode we ever recorded was a complete flop because we didn't prepare it. Because we thought like, ah, PSBT bugs in hardware wallets, that's not too complicated. We can explain it off the cuff. And like within two sentences, it was like, I have no idea how this works.

1:18

Aaron van Wirdum Oh, that's right. And also... I think the original concept for our podcast, we wanted to do two topics per episode. We want to do two topics per episode and because I at that time I was still kind of working as technical editor I was still on my late sort of stage of being the technical editor before writing a book and becoming editor-in-chief and and so I was still covering technical stuff like very regularly and I think the original idea was I will explain a topic you will explain a topic to me and I'll explain a topic to you because sometimes maybe I had something that you didn't know

1:55

Sjors Provoost You had an idea of explaining a topic to me?

1:58

Aaron van Wirdum Yeah, you don't even remember. That's how far we drifted from that. We completely abandoned that concept and now it's just me. Sjors knows everything and I know nothing basically.

2:09

Sjors Provoost Well, you do know a lot, but the recipe is usually we have like a call before and we did that today as well. to kind of go through it a bit and then hopefully the real thing will be better, but we'll see how it goes.

2:22

Aaron van Wirdum Yeah, and just out of interest. So I assume most people have at least listened to it. Is there anyone in the room that has never listened to our podcast? That doesn't know our podcast? Okay, that's actually unsurprisingly, but it's still a big number.

2:38

Sjors Provoost It also doesn't add up because I asked the opposite question and we got like 10 hands.

2:42

Aaron van Wirdum so a lot of neutrals is there anyone who knew that we do

2:43

Sjors Provoost So a lot of people have good OPSEC.

2:48

Aaron van Wirdum still make a podcast sometimes because we used to make it like weekly at one point and now it's three or four a year maybe anyway okay so

2:57

Sjors Provoost Yeah, I mean, part of the problem was just it became exponentially... In the beginning, we did episodes about topics that I already knew something about,

3:04

Aaron van Wirdum yeah yeah

3:04

Sjors Provoost but at some point you run out, and then I had to spend like a day preparing the podcast, which makes no sense unless you're like Peter McCormack famous.

3:13

Aaron van Wirdum yeah yeah and and also we want to make it in person and I haven't been living in

3:16

Sjors Provoost Yes,

3:18

Aaron van Wirdum the netherlands for the last year and a half two years so that doesn't help So anyways, we'll make a new episode. So yeah, the general concept for those to know basically every episode we pick a topic about Bitcoin, a technical topic that we then explain. And or we've also made, so now actually most of our podcasts are if there's a new Bitcoin Core release and then we kind of go over what's new in the new Bitcoin Core release. That's what we'll be doing today, right?

3:47

Sjors Provoost exactly.

3:48

Aaron van Wirdum So we're going to talk about Bitcoin Core 32. I don't even, is it even, is it released?

3:50

Sjors Provoost Point one, yes.

3:54

Aaron van Wirdum I don't even know that. When was it released?

3:55

Sjors Provoost So v32.0 was never released. V32.1 was released, I don't know, two weeks ago, one week ago.

4:03

Aaron van Wirdum Okay, so we actually, I didn't even know this, but it's a good timing to make this podcast.

4:07

Sjors Provoost Yes.

4:08

Aaron van Wirdum That's right, because we planned it a while ago.

4:09

Sjors Provoost Yes.

4:10

Aaron van Wirdum But we, Bitcoin Core comes out every like six months is, so we could at least make a good estimate. Yeah, so the way we make these episodes is we go through the release notes of Bitcoin Core, we write down the... four or five maybe six topics that sort of are more interesting because there's always a bunch of bug fixes and there's always a bunch of stuff that you can't really talk much about although in this episode we will talk about some bug fixes

4:36

Sjors Provoost Yes.

4:39

Aaron van Wirdum because they're particularly relevant but we'll start out So we, again, we picked

4:41

Sjors Provoost Yes.

4:45

Aaron van Wirdum out like a handful of topics that are interesting enough, at least for those that are interested in this kind of stuff, to talk about a bit. And then mostly Sjors will do the explaining and I'll do the asking questions.

4:58

Sjors Provoost Sounds good.

4:58

Aaron van Wirdum Good? You're ready?

4:59

Sjors Provoost Go for it.

4:59

Aaron van Wirdum Okay. So the first one we wrote down is proof of work. I can't even read my own handwriting.

5:07

Sjors Provoost Proof work with Tor.

5:07

Aaron van Wirdum Proof of work defenses. Yeah, so there's, okay, go on.

5:09

Sjors Provoost Yeah. So.

5:11

Aaron van Wirdum I'll hand you the floor.

5:13

Sjors Provoost So everybody presumably knows the Tor network. They've been under attack quite a lot in recent years by, well, they have some suspicions of who these people are, but it doesn't really matter. Their network is constantly under attack.

5:27

Aaron van Wirdum What is the attack?

5:29

Sjors Provoost Basically a DOS, denial of service, so your Tor node, especially your hidden service sites, becomes unreachable or you can't connect to something, and that's kind of annoying. And remember that...

5:39

Aaron van Wirdum Yeah, so you're running a Tor node or a Bitcoin node, I guess, over Tor and you just get tons of connection requests.

5:44

Sjors Provoost Yeah, so on Tor you are you know as a consumer you are browsing stuff on Tor network or outside and There are websites on Tor called the darknet But a Bitcoin node can actually be like a darknet website as in you can be reachable on Tor as a hidden service And yeah, so the Tor project itself came up with a solution, or at least a partial solution, called Proof of Work. We're familiar with this idea. It's not one difficulty, I believe. It's just every node for themselves decides how much they want the clients to work. And that's sort of a way for them to rate limit the attack. Makes the attack just more expensive, because the attacker has to do a bunch of work. Whereas the legitimate users can do it.

6:26

Aaron van Wirdum And the work like in Bitcoin, it just means you have to make a bunch of hashes until you come up with like a valid hash as determined by your node, like how many

6:33

Sjors Provoost Yeah, I don't know if it's a hash.

6:35

Aaron van Wirdum zeros it needs.

6:36

Sjors Provoost Yeah, I don't know what exactly the proof of work they use. Probably not SHA-256 or something else. But yeah, that's the idea. And now Bitcoin Core, because it can also be a listening Tor node, if you have that installed, it will turn that feature on. So there's nothing that Bitcoin Core is doing other than telling the Tor software, like, use this.

6:57

Aaron van Wirdum Right, okay, so I'm using Bitcoin Core over Tor and you are using Bitcoin Core over Tor, let's say I want to connect to your node and now I have to do some, my node has to do some work in order for that connection to be accepted by you.

7:11

Sjors Provoost Yeah, your Tor software has to do some work for my Tor software to

7:12

Aaron van Wirdum Yeah, right.

7:16

Sjors Provoost let the nodes talk to each other. So the nodes don't really bother with any of this. It's the underlying Tor software that's doing it.

7:26

Aaron van Wirdum Why do you think because I wrote a book right on the prehistory of Bitcoin so also about the invention of proof-of-work which Adam Back at least a Bitcoin version of it was invented by Adam Back and for him at the time he saw proof-of-work kind of as a stopgap until digital cash was invented as a way to make a payment basically right but you have to prove work so wouldn't it be much cooler if Tor actually starts to use Bitcoin now that Bitcoin exists and then you send a couple of sats to a node in order to be connected so we can skip that proof of work aspect.

8:01

Sjors Provoost If I take your question...

8:02

Aaron van Wirdum Why don't you lobby the Tor project to implement that?

8:05

Sjors Provoost Well, your question was, would it be cooler?

8:08

Aaron van Wirdum Yes, agreed.

8:08

Sjors Provoost And the answer is yes. The question is, would it be easier? And the answer is absolutely not. So the Bitcoin proof of work itself is ridiculously simple, right? You just count the number of zeros before the hash or some equivalent problem. And like I said in the introduction here, we don't need... global coordination of the proof of work. So in Bitcoin, the complexity is in coordinating all the nodes to agree on what the proof of work is, what the difficulty is. As far as I know, for Tor, it's a local thing. Your node is getting dosed. It just increases the proof of work. until the DOS becomes manageable. That's not a coordination problem, so it's just much easier to do that way. I could imagine one day perhaps them using something like ecash because, yes, they could use Lightning, but the problem with Lightning is now you need to have your Tor network, have the Lightning channels routing across the Tor network, but you have this chicken-egg problem. If your Tor network goes down, you can't pay somebody to bypass the DOS, but ecash would bypass it, but ecash, as in Cashu, is... custodial. But it could help here. And I think there's also a philosophical difference, which could be a legal difference. Right now, the Tor network is entirely volunteer run. As soon as you start paying people, governments have opinions about that that are different than when you're not paying people. Although, you know, we've seen that not always work out.

9:33

Aaron van Wirdum Yeah, okay. TLDR, it's just much easier to use proof of work and that's new.

9:36

Sjors Provoost In theory, your nodes on Tor should now be better reachable when there's a DOS attack. But I haven't looked at any measurements here.

9:43

Aaron van Wirdum Right. Okay, next point then. I believe this isn't even a new thing, but we decided to include it anyways. So it has to do with CJDNS.

9:56

Sjors Provoost That's right.

9:56

Aaron van Wirdum Okay, explain.

9:58

Sjors Provoost I have no idea what it is.

9:59

Aaron van Wirdum Yeah.

10:00

Sjors Provoost Apparently it's something like Tor and I2P, like a privacy network, using a different mechanism. The main issue, and Bitcoin Core added support for that years ago, and apparently very few people use it, and it does add complexity to the code base. So the call to action to Bitcoin Core users is, if you like this feature, speak out, because otherwise we might disappear it.

10:25

Aaron van Wirdum Right, okay. So it's another potential privacy layer for Bitcoin Core that you can use. It is available now, but because it's so little use, there's now an open question like, should we even keep this?

10:37

Sjors Provoost Yeah, so if you have like three peers on the network, it's not...

10:37

Aaron van Wirdum And so what if one person says, I love cjdns. Is it then going to stay or what's the... How is this decision going to be made?

10:45

Sjors Provoost My guess is then that person would have to fix all the bugs related to it. And if they do that, then it might stay.

10:52

Aaron van Wirdum All right.

10:52

Sjors Provoost I haven't looked into details, but that's typically how it goes.

10:53

Aaron van Wirdum So it's part...

10:55

Sjors Provoost If you want a feature to stay, then you should take some responsibility. If you want a feature to stay and you're not willing to do the work, then it will definitely go away. If you are willing to do the work, then it might not go away.

11:06

Aaron van Wirdum Right. Yeah.

11:08

Sjors Provoost This is also how Windows survives and the wallet survives and the GUI survives and all these things that there's always people that want to get rid of it because it's extra stuff But then there's people say no don't take it away from me and I'll maintain it and then that's how it stays in Then

11:21

Aaron van Wirdum Yeah, I told you this in the preparation, but I think I randomly know this guy from years ago. I was at a conference and I just slept at his place. He offered me... I had no idea what CJDNS was. I had no idea who the guy was. But it's like now 10 years later, I come across this. I know that guy. I think his name is Caleb. Maybe I should reach out to him and ask about this.

11:41

Sjors Provoost you should maybe talk to him. Yeah, exactly.

11:43

Aaron van Wirdum Should I? Is that something you would want?

11:47

Sjors Provoost It sounds like...

11:47

Aaron van Wirdum I think I know the guy.

11:48

Sjors Provoost He should pitch it.

11:48

Aaron van Wirdum I think I have his number randomly again.

11:51

Sjors Provoost Yeah.

11:52

Aaron van Wirdum Okay, let's move on to the next topic.

11:52

Sjors Provoost Okay. Oh,

11:56

Aaron van Wirdum Increase... Jeez, my handwriting and the light also does help. Increase inbound activity.

12:05

Sjors Provoost you're going slightly different.

12:06

Aaron van Wirdum Is that the next one?

12:06

Sjors Provoost You're not doing lib event or is that later on your list?

12:09

Aaron van Wirdum What's that?

12:09

Sjors Provoost There should be one about libevent still, HTTP.

12:12

Aaron van Wirdum Am I skipping one?

12:13

Sjors Provoost Yes, there's another.

12:14

Aaron van Wirdum Sorry, what am I skipping?

12:16

Sjors Provoost Removing libevent in favor of HTTP ourselves.

12:21

Aaron van Wirdum That's the next one on my list.

12:22

Sjors Provoost Well, it's in the theme of removing things. Okay.

12:26

Aaron van Wirdum Okay, yeah, go. Okay, sure. We can skip.

12:28

Sjors Provoost So we have a bunch of dependencies in Bitcoin Core. One of them is called libevent. It's a very old library. It helps us... to HTTP stuff. You might ask yourself, what is Bitcoin Core doing that has anything to do with HTTP? Well, we have something called the RPC, which is the way your node talks to any kind of other software, typically.

12:49

Aaron van Wirdum Yeah. Which could be wallets, which could be applications, which could be...

12:52

Sjors Provoost Which could be external wallets, can be your lightning node, probably.

12:56

Aaron van Wirdum Yeah, just if you want your node to talk with anything else and that's what you would use

13:01

Sjors Provoost Anything else on your computer?

13:02

Aaron van Wirdum Yeah,

13:02

Sjors Provoost Yes. So your computer, so your Bitcoin node spins up a little web server that speaks JSON and it gets a command like get blockchain info and it replies, you know, this is the height, this is etc. So it's a very simple web server and that web server is powered by LibEvent. I think LibEvent was also doing some other things. But now we've taken the essence. that we need, the HTTP part. We implemented that and threw away lib event. So fewer dependencies. Now we have to maintain some HTTP server code. But apparently, that trade-off is worth it.

13:36

Aaron van Wirdum yeah, explain why is few I mean for those that don't know why is fewer dependencies better? Why are dependencies a problem?

13:43

Sjors Provoost We did a whole episode about dependencies in general, with multiple reasons. Dependencies are software maintained by other people, and other people could put backdoors in them, so that's one reason. But also, our software, Bitcoin Core, keeps modernizing in terms of the code, so using newer versions of C++, etc. And if your dependencies are not also modernizing, then you kind of have a problem, because you have to maintain compatibility with some older ways of doing things. That can be a reason, or it can just cause all sorts of bugs that are difficult to debug. So a reason to get rid of dependencies can be security, can be easier maintenance, and just reducing complexity, those kind of arguments. I'm not sure about the exact argument here, but yeah.

14:28

Aaron van Wirdum Yes Yeah, so as much as possible we would want Bitcoin Core to be standalone software that doesn't require Right,

14:38

Sjors Provoost Yeah, but there is a trade-off because if you implement everything yourself, that is more work, first of all, but also you might not be the best at it, right? You have specialization of labor in the world. Some people are very good at writing HTTP servers and other people are not. And the HTTP server in Bitcoin Core that we have written now is not the best one in the world. In fact, it is the worst one in the world because it is trying to do only what it needs to talk to these other pieces of software. It is not trying to power, I don't know, NSA.gov or some super popular website. So it's not designed to be fast or amazing. It's just designed to be simple.

15:19

Aaron van Wirdum okay in any case Right,

15:19

Sjors Provoost And to run on a somewhat trusted environment because RPC is usually not something you expose to the internet. You just expose it on your own computer to your own software or your own Docker container or something like that.

15:31

Aaron van Wirdum okay in any case so this this dependency is now removed in the new version of

15:35

Sjors Provoost Gone.

15:36

Aaron van Wirdum Bitcoin it's gone yes all right and so then let's so then I

15:37

Sjors Provoost It's gone.

15:42

Aaron van Wirdum have the increase inbound activity point

15:46

Sjors Provoost Yes. Okay, so Bitcoin Core connects to nodes when you start it up. It tries to connect to about eight peers in general for everything, and then two peers just for blocks, not for mempool stuff.

15:56

Aaron van Wirdum mm-hmm yeah so eight peers for

15:59

Sjors Provoost And

16:02

Aaron van Wirdum blocks and transactions and two for only blocks

16:03

Sjors Provoost depending on if you're on a data center or at home and your router allows it, it also listens to peers. We've done some episodes about that. It will listen to at most 125. peers that can connect to you. Again, if they can get through your router and to you, it is up to 125. That number has now gone up to 200. So number go up, even if the market doesn't go up, number go up. There is a catch. These extra nodes are only used for block relay, not for mempool relay.

16:38

Aaron van Wirdum the 75 extra block peers are only used for blocks that you will only share blocks

16:43

Sjors Provoost Yeah, exactly.

16:44

Aaron van Wirdum with them no transactions right and why was this change made or why wasn't it already the case or why now yeah

16:51

Sjors Provoost So relaying blocks takes a lot less bandwidth, because most of the time nothing happens, and then suddenly something happens. And these block announcements are the most important things. You really need to know what the next block is. If you miss a few mempool transactions, this is not a big deal, or if you get them a bit later. But the reason why we're doing this now is because later on we want to start connecting to more of these nodes. So remember we have now eight, I believe it's eight regular outbounds and then two ones that are blocks only. We want to increase that to maybe 10 blocks only so we get a better view of the network. But you don't want to do that until the listening side is actually able to because right now a lot of nodes are just full. You connect to them and they just say like, sorry, or they hang up on somebody else.

17:39

Aaron van Wirdum it still sounds very out of out of whack almost so you have 10 outgoing connections and 200 incoming now

17:46

Sjors Provoost Yeah, but keep in mind that the number of nodes that are listening is much smaller than the number of nodes that are connecting outwards because a lot of nodes are running on home networks that are protected by a router. So there's an asymmetry there. That's why the number has to be asymmetric too.

17:59

Aaron van Wirdum right okay and but as a [unclear: boiler] right

18:01

Sjors Provoost And there's a big trust difference. So you might say, well, if you just have all these incoming nodes that give you blocks, you're happy. But in general, we trust nodes that we connect to more than nodes that connect to us. If you go to a strange city and some guy approaches you and says, hey, I'm your tour guide, you don't trust that guy. But if you approach somebody randomly and say, where is the New York Stock Exchange? You will trust the answer from that person because you selected them and not the other way around.

18:29

Aaron van Wirdum right

18:29

Sjors Provoost But they might trick you into thinking you selected them. And that gets to the whole issue of eclipse attacks that we talked about many, many episodes ago.

18:37

Aaron van Wirdum Yeah, well, without going into that in detail, if we boil down the benefit here, that is the benefit, right? If you connect to more nodes, there's a smaller chance that all nodes are lying and therefore that you're being censored and somehow that you're not seeing all the new

18:53

Sjors Provoost Yes.

18:54

Aaron van Wirdum blocks or all the new transactions or something like that.

18:56

Sjors Provoost Yes.

18:57

Aaron van Wirdum So in that sense, number go up is in fact actually better.

19:01

Sjors Provoost Yes.

19:01

Aaron van Wirdum Correct?

19:01

Sjors Provoost Yeah. But we have to make the listening number go up before we can increase the number of

19:02

Aaron van Wirdum That's ultimately the benefit.

19:06

Sjors Provoost nodes that we connect to. So that'll be in some later release.

19:09

Aaron van Wirdum right right okay yeah we're moving past our topics swiftly which I like the next point I have is oh yeah this one so fetch inputs in parallel this one gets pretty technical but it's a meaningful thing I

19:25

Sjors Provoost Yes.

19:25

Aaron van Wirdum think yeah

19:26

Sjors Provoost So when a new block comes in, we have to check that whole block. And we basically check every transaction in a row or in sequence.

19:35

Aaron van Wirdum do the signatures check out

19:36

Sjors Provoost And for every transaction, we check the inputs first and then the outputs, roughly, anyway. How do you check an input, is then the question. An input refers to a previous transaction, which was from a previous block. And it has a script pub key, and that is stored in our UTXO set, at least in Bitcoin Core. So there's a file on our disk that is like 10 gigabytes these days, that has all the still unspent outputs, basically, and the scripts.

20:04

Aaron van Wirdum It basically says who owns what without names of course, but just what is this

20:05

Sjors Provoost Yeah, it just

20:09

Aaron van Wirdum current state of balances on Bitcoin.

20:09

Sjors Provoost says...

20:12

Aaron van Wirdum I'm putting that in quote marks.

20:12

Sjors Provoost Yeah, the balance and the conditions that you can spend it with. And those, we have to load them. And right now, or before this change, what we would do is we would look at the first transaction, the first input, we would fetch it, we would check it, then we would load the second, and we would check it, and we would load the third, and we'd check it. And this change basically says we're going to optimistically, we're just going to fetch all of them in a row, and while we're fetching them, we start checking them. So it's like a zipper, basically. And that just makes it much faster to validate a block. I haven't looked at the numbers, but I think it's like tens of percents faster. Because we're being less serial about things. We're doing things more in parallel.

20:55

Aaron van Wirdum By doing more things at the same time, it's faster to check if a block is valid,

20:55

Sjors Provoost Yeah,

21:01

Aaron van Wirdum right?

21:02

Sjors Provoost exactly.

21:02

Aaron van Wirdum And the main benefit here... I assume if you're syncing a node in particular. So if you're starting out a new Bitcoin node, it can take hours or days depending on your computer.

21:15

Sjors Provoost Exactly.

21:16

Aaron van Wirdum And this would speed that up by 10%.

21:19

Sjors Provoost Exactly.

21:19

Aaron van Wirdum Or roughly, you made a 10% estimate.

21:20

Sjors Provoost I don't know the number, but yeah, pretty dramatically. The ultimate... parallel software there, I think, is libbitcoin by Eric Voskuil.

21:29

Aaron van Wirdum Right.

21:29

Sjors Provoost He's always been sort of nagging Bitcoin Core about you guys are not doing things in parallel enough. And one way you can see that is if you have your node sync from the Genesis block to now, and you look at it, and you look at the bandwidth it's using compared to your internet speed. So maybe you have a gigabit fiber connection, and maybe it's only downloading at 50 megabytes per second. So you're like, well, it's definitely not limited by the bandwidth. And you look at your CPUs, and you have 16 cores, and it's only using three at a time, so it's not using all the cores. And you're looking at your hard disk, and it's like a super fast SSD drive, but it's not spinning at its maximum speed either. So it's not using all its powers combined. You'd want one of those three. to be completely full. So if you have a fast internet connection, then, you know, you would want to see

22:16

Aaron van Wirdum Ideally.

22:21

Sjors Provoost that internet connection just downloading blocks as fast as it can. Or if, you know, your internet is very fast, but your CPU is not the fastest, then you want your CPUs to be 100% with one of those three, and it's not. And changes like this are making things more parallel, so that hopefully we can max out at least one of the three.

22:37

Aaron van Wirdum Yeah. I want to point out and emphasize that over the years, this is one of Bitcoin's biggest challenges. You have to... Download the entire blockchain, validate every block, every transaction. It's, you know, it's a hard problem. And I think over the years, the work that Bitcoin Core developers do have made it, have kept that a possibility, even for regular users.

23:04

Sjors Provoost Yeah, so

23:04

Aaron van Wirdum I think over the years, syncing has not become much slower just because constant optimizations that I'm going to use this opportunity.

23:12

Sjors Provoost in 2017 I made a chart, okay?

23:15

Aaron van Wirdum Sure. I'm going to use this opportunity as a live show to get the audience involved because I do think this is the type of boring work that Bitcoin Core developers do that keep Bitcoin absolutely usable for everyone. And I think that deserves appreciation and really an applause for Sjors,

23:34

Sjors Provoost the [unclear: core devs?],

23:36

Aaron van Wirdum for guys like Sjors, for Bitcoin Core developers that are constantly working on improving this type of work.

23:44

Sjors Provoost the excellent boring stuff.

23:46

Aaron van Wirdum Yeah, the boring stuff that no one else pays attention to, but it's so

23:46

Sjors Provoost Yeah,

23:51

Aaron van Wirdum vital that it happens.

23:53

Sjors Provoost and it's been going on for a long time. So in 2017, I made a chart where what I did is I rented a bunch of these Amazon machines, and I installed the oldest possible Bitcoin Core versions I could find, or that I could still build, like 0.5, 0.6, 0.7, et cetera. And I would just have it sync the whole blockchain. And this was 10 years ago, so the blockchain was tiny relative to now, but it was already considered big. And, you know, the oldest node would not even sync ever, like, it would just not make it. But then eventually it might take, like, a whole day to sync the blockchain, and the fastest nodes could do it in six hours. So even then you could see the improvements. But we kind of thought we'd maxed out on that, but we still haven't. I think we can still sync two or three times faster. But then, you know, at some point it's done. At some point you have to deal with the fact that the blockchain keeps growing. But back then, yeah, every time the blockchain kept getting bigger, but the node kept getting faster, and it was sort of in balance there.

24:52

Aaron van Wirdum Yeah,

24:53

Sjors Provoost Like a Moore's law for Bitcoin core code.

24:55

Aaron van Wirdum right.

24:55

Sjors Provoost And then, of course, the critics would say, oh, we've got to increase the block size. It's like, well, we can barely keep up with this thing.

25:02

Aaron van Wirdum There was one more thing I want to say about this,

25:03

Sjors Provoost So maybe hold off a bit.

25:09

Aaron van Wirdum which I'm now forgetting.

25:10

Sjors Provoost Okay.

25:14

Aaron van Wirdum No, I think I'm blanking now. Anyways, next topic then. Okay, SEND is no longer experimental.

25:25

Sjors Provoost This is such a shameless plug of my own pull request.

25:26

Aaron van Wirdum Oh no, the thing I want to say is, so yeah, you mentioned that we do still have a

25:29

Sjors Provoost Oh,

25:31

Aaron van Wirdum lot of room for growth, right? This is still a major, you know, part of the Bitcoin Core codebase, even now that

25:37

Sjors Provoost yes.

25:38

Aaron van Wirdum can, you know, be improved significantly, you think?

25:41

Sjors Provoost Yes, yeah, I think so.

25:42

Aaron van Wirdum Yeah. Yeah.

25:43

Sjors Provoost And we know because libbitcoin is still faster.

25:46

Aaron van Wirdum Right. Yeah.

25:47

Sjors Provoost But we'll catch up.

25:48

Aaron van Wirdum Eventually. Okay. SEND is no longer experimental.

25:52

Sjors Provoost Yeah, this is just a shameless plug for a simple pull request that I wrote.

25:56

Aaron van Wirdum Yeah.

25:56

Sjors Provoost Many, many years ago, I introduced the send RPC, which was just a more modern way of doing what sendmany and sendtoaddress was doing, and also was sort of a stepping stone towards working with hardware wallets. And I marked it as experimental because we may want to break it, so people that are relying on it should keep an eye on breaking changes. But we haven't been making breaking changes in a long time, so I decided we should not make it experimental, and people agree. So nothing changed, it's just not experimental.

26:28

Aaron van Wirdum Right. So that means it's staying,

26:33

Sjors Provoost It might be deleted entirely, but it's... yeah.

26:38

Aaron van Wirdum not frivolously or what?

26:38

Sjors Provoost Things can still be deleted, but typically, when something is no longer experimental, we're a little bit more like, okay, in this release we're deprecating it, in the next release we're deleting it. When something is experimental, things can happen more suddenly. I don't think this is going away because it's useful. Sending coins is something people like to do, even though they prefer to receive them.

26:58

Aaron van Wirdum Then the last point of improvements when it comes to Bitcoin Core and then after that we'll discuss some of the bugs that were found which is also interesting. The last point of improvements which surprised me, it surprised me that this was not a thing yet but there's now a watch-only function in Bitcoin Core,

27:17

Sjors Provoost Well, an export watch-only.

27:17

Aaron van Wirdum it has been added. Yeah, yeah, right.

27:20

Sjors Provoost So, Bitcoin Cores had watch-only wallets for a very long time.

27:26

Aaron van Wirdum Watch-only wallet is basically a wallet that shows your balance and how many coins you have, but you just can't spend from it. Which also means that if you're running that on your computer and someone hacks into your computer, they can't spend from it either. It's really a window in your wallet without being a wallet, right?

27:42

Sjors Provoost So a setup you could imagine is you take a laptop, you install Bitcoin Core on it, You take it to the mountains, you generate your entropy correctly with whatever you use and you leave it in the mountain and the laptop never goes online again. But you want to watch your balance, receive transactions, etc. And for that you want a watch-only wallet. And so the new thing is that in the GUI there is a button that says export watch -only wallet and it produces for you, this watch-only wallet that you put on your USB stick and take home and then use it to watch.

28:20

Aaron van Wirdum Yeah.

28:21

Sjors Provoost And you could already do this.

28:22

Aaron van Wirdum Well, you can also receive coins through it, right?

28:22

Sjors Provoost You could export the script. Yeah, yeah, for sure.

28:25

Aaron van Wirdum You still have like a list of your addresses and yeah, so you can do that, you just

28:26

Sjors Provoost You can generate addresses. Exactly.

28:29

Aaron van Wirdum can't spend.

28:30

Sjors Provoost Yeah.

28:30

Aaron van Wirdum So it's a way to, yeah, like I said, keep track of what you own, have a window and

28:33

Sjors Provoost But you can make, for example, a PSBT and then take the PSBT to the mountains, sign it, and then take the PSBT back and send it to the internet.

28:39

Aaron van Wirdum then... Right, right, yeah, okay. So yeah, and the exact thing that's new is that you can now easily export it from your GUI. Yeah, cool. Okay, yeah, so these were the main improvements of Bitcoin Core 32 that we decided to highlight. And then there's the whole, it's been a hot topic, right? Recently in Bitcoin in general, the AI revolution is upon us. Everything and everyone is getting hacks left and right. And that has also, apart from Bitcoin Core, I should add, so far,

29:18

Sjors Provoost So far.

29:20

Aaron van Wirdum well, I mean, not just Bitcoin Core, by the way, but at least Bitcoin Core seems mostly fine. Although there were some bugs, which we'll discuss. But before we get to the actual bugs, there's also a new disclosure policy.

29:36

Sjors Provoost Yes.

29:36

Aaron van Wirdum So Bitcoin Core developers have... Well, maybe start by explaining what even is a disclosure policy for those that don't know. How would it usually have worked if a bug is found?

29:47

Sjors Provoost Yeah, well, you can go back a little bit further. Bitcoin cores often have bugs in the past. that were fixed. And often those fixes were done a little bit covertly so that people would have updated by the time they would learn about it. But then we often just forgot to actually disclose them. So a couple of years ago, we systematized the disclosure process where there's actually people that keep lists and analyze these disclosures at the right time. What is the right time? There was a policy for that, the disclosure policy. If it's a high severity issue, It's disclosed after the release is end of life. So that's typically two years after the release that contains a fix.

30:28

Aaron van Wirdum Yeah, so the bug is fixed, but it's only made public really.

30:29

Sjors Provoost Years

30:32

Aaron van Wirdum Like by the way, that was this pretty bad bad bug in older Bitcoin Core and

30:33

Sjors Provoost later.

30:38

Aaron van Wirdum this is what it was.

30:39

Sjors Provoost Yeah.

30:40

Aaron van Wirdum So the software, the patch was out, but the actual explanation was not yet,

30:46

Sjors Provoost Exactly.

30:46

Aaron van Wirdum right? Yeah, and that's and that's for severe bugs.

30:47

Sjors Provoost Yeah. And there's different severity levels. So for lower severity bugs, they might be announced like two weeks after the release itself. Anyway, that was systematized. But this was in the age before LLMs. And the problem that we started seeing is that, and we'll have an example of that soon, is that three people in a row reporting the same vulnerability, all found with different LLMs.

31:14

Aaron van Wirdum Yeah, so there was a bug and somehow it got reported multiple

31:15

Sjors Provoost So basically, the LLMs are...

31:20

Aaron van Wirdum times, which is very unusual.

31:22

Sjors Provoost Which is an indication that this bug is way too easy to find because the number of

31:24

Aaron van Wirdum Right.

31:25

Sjors Provoost people that report it is not all the people that could see it. Another way to judge that is if you know about a bug, somebody reports a bug, you ask a subtle question to your LLM and it finds it. You're like, okay, this is too easy to find. So that is now a new class or a new category where we say

31:45

Aaron van Wirdum You could clearly see after the release of some new AI, Kimi I believe.

31:50

Sjors Provoost Kimi K3, the sort of Belgian-Korean K-pop band.

31:52

Aaron van Wirdum And then all of a sudden there were like several bug reports. So that posed a challenge.

31:59

Sjors Provoost Yeah, so there the strategy of disclosing after two years is actually wrong because all the bad guys will know about it and all the users won't know about it.

32:07

Aaron van Wirdum So what I just explained that the bug was fixed but it was not explained yet. That doesn't really work anymore because now if there's some sort of fix someone it will just... people will pay attention or it's just easy to see something changed let's throw my LLM at it and then all of a sudden everyone finds it so sort of keeping it a secret

32:28

Sjors Provoost Yeah, this comes back to...

32:29

Aaron van Wirdum doesn't really do anything anymore is that yeah

32:32

Sjors Provoost Roughly. So one of the things is that when we fix something, usually the fixes are just done on master and then every six months we make a new major release like we just discussed version 32. And so you can just, you know, if the bug is unknown, then it's fine to wait several months and have the major release. And everybody gradually upgrades in the coming year. And then two years later, you announce it. That timeline works. But if you want people to upgrade faster, you're going to have to backport it, which means that we ship a release like 31.2 or 30.3. But those backports are smaller changes. So when you see a .release, yeah, there's only a few commits you need to look at as an attacker to realize where the possible exploit was. There was already a problem, but with LLMs, it's even worse. So anyway, the trade-off now is, for some bugs, it's better to just immediately announce it, have a fix, and encourage people to deploy the fix.

33:32

Aaron van Wirdum but so and that's only so the the qualification for that is

33:37

Sjors Provoost Easily discoverable.

33:39

Aaron van Wirdum Yeah, so there's basically a new category. There's a new category where Bitcoin Core developers will say, okay, this bug is easily discoverable by an LLM, by AI in particular, and therefore there's no point keeping it secret. We're just immediately going to tell you what it is and everyone basically just now

33:54

Sjors Provoost It

33:56

Aaron van Wirdum has to upgrade, right? That's what it comes down to. And this new policy really was installed because there were easily discoverable bugs found.

34:07

Sjors Provoost seems to me rather coincident that a week after announcing this new policy, there were three such bugs.

34:14

Aaron van Wirdum yeah yeah

34:15

Sjors Provoost So we could go into those.

34:19

Aaron van Wirdum yeah so the first bug okay let's uh so the first bug was undo undo file overflow under extreme conditions undo file overflow under extreme conditions

34:27

Sjors Provoost Yes. And before I explain the actual bug, this bug has a timeline, and the timeline

34:30

Aaron van Wirdum so what yeah

34:35

Sjors Provoost basically says in August, sorry, in July 8th this year, Project Loupe reported it. Project Loupe is a project by Spiral, I believe, that scans a bunch of these open source projects. They've been doing that for a while. Then L0rinc, one of the contributors... reported the same issue on August 21, independently. And then Andrew Dorman on October 23, disclosed the same issue. So we clearly have something that three people found independently.

35:02

Aaron van Wirdum yeah yeah

35:06

Sjors Provoost So this is a very classic example. Now what is the bug has to do with something called the undo file. So we talked about earlier today about how we synchronize a block. We check what's in the block, and then we have to check that every previous input is correct, et cetera. And then once the block is correct, we update our UTXO set. So our database on disk is now changed.

35:32

Aaron van Wirdum right

35:34

Sjors Provoost The question is, what happens if there's a reorg? How do we go back? Because we don't know what it was before. And the block itself does not tell you what it was before, because the block has inputs that are referring to something that's in the UTXO set. So we don't know what was in the UTXO set because we just changed the UTXO set.

35:54

Aaron van Wirdum Yeah, you basically you basically have to apply in case of a reorg in order to

35:55

Sjors Provoost We deleted these coins.

35:59

Aaron van Wirdum switch to the new chain you have to basically do the last block in reverse but because of the how the UTXO set works that's not actually possible. So then instead Bitcoin Core creates a different file an undo file in case of such a scenario then it knows exactly what to do and how to jump back a little bit in

36:17

Sjors Provoost So for every block we have the undo file

36:20

Aaron van Wirdum order to rebuild the chain.

36:23

Sjors Provoost and they're grouped. So I think it's 128 or so. So for every undo file contains 128 blocks, I believe. And now the problem is that the size of the undo file can be surprisingly large. You'd think they would be the same size or smaller than blocks, but they're actually, they can be much bigger because we're spending inputs.

36:46

Aaron van Wirdum Yeah, so even if a block is at most 4 megabytes the undo file for that block can be way bigger.

36:54

Sjors Provoost Yes.

36:54

Aaron van Wirdum Yeah,

36:54

Sjors Provoost And since there's 128 blocks in a single undo file, you might get them too big. A simple example is you have inputs that are 10 kilobytes scriptPubKeys. Then every input is 10 kilobytes. And you have like 1,000 inputs per transaction times. Anyway, it adds up. And it could add up to over 2 gigabytes or over 4 megabytes. Sorry, 4 gigabytes.

37:19

Aaron van Wirdum the undo file can be over 4 gigabytes potentially.

37:21

Sjors Provoost Yes. And then you say, why is that a problem? Well, because in the undo file, we track where things are. And we track that with a 32-bit number. And a 32-bit number only goes up to 4 gigabytes. And then it circles around. So what you end up doing is... You're saying, oh, this information is in the undo file at position 5 billion, but that's actually position 1 billion, and now you've either overwritten it or you're pointing to the wrong place. And that's not a problem immediately. At that point, your disk is corrupt, right? You've overwritten part of your undo information. But that's fine, as long as there's no reorg. So the attack would be somebody creating these blocks. that fill up your undo file, and then they cause a reorg, your node tries to unwind, it hits this data that doesn't exist, and it just crashes.

38:12

Aaron van Wirdum Yeah, so just in order to successfully pull off this attack

38:13

Sjors Provoost And then it...

38:18

Aaron van Wirdum you first need to feed a node essentially with transactions that... make the undo file that big right which is not organic use it would have to be

38:27

Sjors Provoost Yes.

38:29

Aaron van Wirdum someone that's actually trying to achieve that for for yeah maybe like a hundred

38:30

Sjors Provoost No, you'd have to fill out quite a few blocks.

38:35

Aaron van Wirdum blocks time you just fill it with like specific types of transactions that stuff

38:40

Sjors Provoost Yes, and not every node has the same undo files, because it depends

38:40

Aaron van Wirdum the undo file right that yeah

38:46

Sjors Provoost on some coincidences on historically how your node grew. So it's not easy to get an attack that would hit every node. And then you have to create this one block that spends them all, and then you have to reorg either that block or a similar block. And if any of that fails, you just have to start from scratch. So it's not the most practical attack.

39:04

Aaron van Wirdum yeah Yeah, but just to run this one more time, if I'm an attacker and I want to do this, I first have to stuff 100 blocks full with these transactions and then I basically myself have to cause a reorg, so mine a block myself that's in conflict with another block so that miners or maybe even two blocks in order to get longer and only

39:25

Sjors Provoost Yeah, I guess...

39:26

Aaron van Wirdum then the attack will be triggered and then what happens? So what happens to the nodes?

39:30

Sjors Provoost At that point, your node tries to reorg, but it can't because the undo file is corrupt.

39:34

Aaron van Wirdum Right.

39:35

Sjors Provoost And so it just crashes.

39:37

Aaron van Wirdum It crashes or it stays on the old chain?

39:39

Sjors Provoost No, I think it crashes.

39:40

Aaron van Wirdum It crashes, okay.

39:41

Sjors Provoost And by extension, you know, it's never...

39:41

Aaron van Wirdum So what's

39:44

Sjors Provoost Yeah, and then by extension, I guess you'd have to somehow bring it back and ignore

39:45

Aaron van Wirdum that?

39:49

Sjors Provoost the new block or something, but it'd be annoying.

39:51

Aaron van Wirdum Right, right. Okay, so that's a bug. It's unlikely to be exploited and that's because it's also classified as medium or

39:59

Sjors Provoost Yeah, it was classified as low severity, but easily discoverable.

40:00

Aaron van Wirdum something, right? Low severity even, yeah, okay. Right. But and this bug was now fixed, yes?

40:07

Sjors Provoost Yes, and this block was probably not worth doing a new release for. But there were three bugs at the same time, so they were kind of all fixed.

40:16

Aaron van Wirdum Right.

40:16

Sjors Provoost The other one,

40:17

Aaron van Wirdum and it was immediately as pointed out was immediately disclosed for the reasons because it was easy to find yeah

40:22

Sjors Provoost immediately once we had the new policy, because remember, it's been reported three

40:25

Aaron van Wirdum right right right yeah it does not cover that bug

40:26

Sjors Provoost times in three months. Yep.

40:31

Aaron van Wirdum should we get into how it was fixed or does it get very like technical and it come

40:35

Sjors Provoost It gets fixed by using a 64-bit number, but that still leaves Windows

40:37

Aaron van Wirdum okay right

40:41

Sjors Provoost vulnerable. And FAT32 system. So if you have an ancient FAT32 file system, that's a 32-bit file system. So files cannot be bigger than, I think, 2 gigabytes. And so once your undo file is bigger than 2 gigabytes, your node just crashes. But then the reasoning is nobody runs an important node on Windows. And so the attack is just really not worth doing. And it will be fixed, hopefully,

41:07

Aaron van Wirdum so it takes a ton of effort and then even then the only node you'll affect yeah

41:10

Sjors Provoost to crash a bunch of Windows nodes. Yeah.

41:14

Aaron van Wirdum okay then there's another bug was this higher severity

41:18

Sjors Provoost Yes, the second one we're discovering is medium severity.

41:22

Aaron van Wirdum Can you just read what it's called? Because I can't read my own.

41:24

Sjors Provoost You can't read your handwriting. The bug is called unbounded memory growth through TCP urgent data on non-Linux systems. Many words.

41:37

Aaron van Wirdum Yes, too many for me. That's too complicated already. Okay, what is it?

41:41

Sjors Provoost Okay, so the first words are unbounded memory growth.

41:43

Aaron van Wirdum What's this bug?

41:45

Sjors Provoost That is bad. So we're talking about RAM here. If you start using up more RAM than you have, if a program tries to use more RAM than you have, the program crashes. And if the node crashes, then you can do all sorts of shenanigans, like, you know, plunder the lightning or whatever, if they don't detect your... Because you just keep crashing it, and they never get a chance to see the new blocks, or their lightning node just doesn't react. Things like that. So we don't want that. So that's the first three words. Then something called TCP urgent data. We should talk about that, I guess. So TCP is one of the lower layers of the internet, just the messages between different IP addresses. The Bitcoin P2P protocol kind of lives on top of that. So when you ask for a block, it's like a four megabyte message. That message is chunked into little bits, and that's what TCP does that. And then there is a... At this TCP protocol, there is something called an urgent flag or some exception protocol. That's like a meta protocol. I think it was introduced in the very early days of the Internet. I think it was something like if you're downloading a big file and you decide halfway you don't want to do it, you set this flag and that's how you tell the other side to stop. And so you're distinguishing this from the content because the other node is just seeing bytes. But there's a special byte that says stop what you're doing and then you continue. That has no purpose in Bitcoin. And so... We didn't really deal with it specifically. But apparently it allowed an attack to happen. And then we get to why that happens. We get to the sort of lower level traffic control of the Bitcoin node. Let's say our nodes are connected. I am sending you stuff. You are sending me stuff. And if you are sending me stuff, I get these bytes and I have to park them somewhere and then process them. For example, I get four megabytes of bytes from you, and then I see the first, maybe first megabyte of that is a block. So I take that block, I do something with the block, and then I look at the next bytes you've been sending me. But that parking lot takes up memory, and if that parking lot gets bigger than my own memory, then I crash. So there's a rate limiting in Bitcoin Core that says, if there's too much stuff on the parking lot, I will not accept new bytes from you. I will just simply ignore them. that TCP protocol makes sure that you're not sending bytes. That was a good safety mechanism. But unfortunately, when somebody sets this urgent byte, this urgent flag in the protocol level, we would accidentally also start reading bytes, even though the traffic light was on red. So it's kind of a way to bypass the red traffic light.

44:40

Aaron van Wirdum Right. Yeah.

44:43

Sjors Provoost And so a very easy way to crash nodes.

44:46

Aaron van Wirdum Yeah. And so as I understand it, this is really a bug in kind of the really lower level code of Bitcoin Core.

44:54

Sjors Provoost Yeah, this is like 15 year old code that two people understand and they're all

44:55

Aaron van Wirdum That's the type two

45:00

Sjors Provoost not that active Yeah, no two Bitcoin Core developers plus the attackers Probably

45:00

Aaron van Wirdum Bitcoin Core developers or just two people? Okay.

45:06

Sjors Provoost a few more but not a lot It's one of those areas of the code that you you know kind of don't want to look at unless unless you have to and we have to

45:11

Aaron van Wirdum Yeah. Yeah. It's kind of, it's almost not, well it's kind of not Bitcoin related. It's just deeper in there and that's where the bug...

45:20

Sjors Provoost Well, yeah, this is one of those cases where we could have used a library, but we didn't use a library. We wrote our own networking code, but then you are responsible for doing it correctly, and it's a hard problem.

45:29

Aaron van Wirdum Right. Maybe you said this, but if the attack is exploited, what's the worst thing? It brings down your node.

45:37

Sjors Provoost Yeah, it crashes your node.

45:38

Aaron van Wirdum Yeah, it crashes your node. You did mention that. Right. And this is also, I think, a very typical AI, LLM type of thing to find, right? Because you guys, as mentioned, it's kind of not really what you're working on or thinking about even.

45:53

Sjors Provoost Yeah, so the AI looks at the [unclear: agent/ancient] code and is like, oh, I think

45:54

Aaron van Wirdum Right.

45:57

Sjors Provoost this could be crashed in this and this way because it remembers the details of the TCP protocol or all of that stuff. Yeah.

46:05

Aaron van Wirdum Okay, and so this was fixed. Again, is it worth going into what the fix is or do you even know?

46:10

Sjors Provoost The fix boils down to... ignoring this emergency signal.

46:16

Aaron van Wirdum Right.

46:16

Sjors Provoost So there's like three, kind of whenever the node is working, it's doing three things in a row. It's sending what it needs to send, it's receiving what it needs to receive, and it's checking this urgent flag. And we just ignore the urgent flag. So then when you set it, nothing happens, roughly. But then on Windows, there's a deep rabbit hole.

46:34

Aaron van Wirdum Yeah.

46:34

Sjors Provoost But for now, we've fixed it. But yeah, it's kind of annoying.

46:37

Aaron van Wirdum Yeah.

46:38

Sjors Provoost And I think the only reason why this is...

46:38

Aaron van Wirdum And it's kind of the type of code you don't like touching because it's...

46:43

Sjors Provoost Yeah.

46:43

Aaron van Wirdum Yeah.

46:44

Sjors Provoost So the good news is there's only a problem on Mac OS and Windows and not on Linux. And most of the critical infrastructure runs on Linux. Because otherwise I think this would have been a high severity one. Because if you can crash every node in the Bitcoin network, that's pretty bad.

46:58

Aaron van Wirdum Do you know why Linux is unaffected?

47:02

Sjors Provoost Because there are two, I would say, network traffic control systems. One is called Select and the other is called Poll. And on Linux we use one and on the other systems we use the other.

47:15

Aaron van Wirdum Right.

47:16

Sjors Provoost And I think that one of them is more modern, and we kind of want to switch over to the modern version everywhere, but that's a whole separate big refactor that somebody needs to do, which means somebody needs to be motivated to look at this horrible low-level network code.

47:29

Aaron van Wirdum Yeah. You did mention three bugs, but we only wrote down two or at least I only wrote...

47:34

Sjors Provoost Yeah, there was a third one that was a bit similar to this one, but we're not going to go into that.

47:38

Aaron van Wirdum We're skipping the third one. Was that high, low, that was low severity?

47:40

Sjors Provoost That was low. I believe it was low.

47:42

Aaron van Wirdum Right, but still easy to find, yeah?

47:44

Sjors Provoost It was also a way to make somebody run out of memory, but it would take much longer.

47:48

Aaron van Wirdum Right, okay. Awesome, how long have we been recording Sjors?

47:52

Sjors Provoost About 48 minutes. So I think in terms of the normal episode we're good. But unless you have any other questions.

47:55

Aaron van Wirdum That's roughly what an episode is, so...

47:58

Sjors Provoost Then I say thank you for listening to Bitcoin.

48:01

Aaron van Wirdum Explained. Thanks for being here. Now that we're here, do we... We're not recording anymore, but... You already did a Q&A session, right?

48:16

Sjors Provoost I'll leave it on but. Yes.

48:19

Aaron van Wirdum Could be fun. Does anyone have a question for Sjors? This is like a good opportunity, maybe?

48:23

Sjors Provoost Or for Aaron.

48:24

Aaron van Wirdum Yeah.

48:25

Audience member You guys were talking about the watch-only wallet. What is the difference with just a regular xpub

48:28

Sjors Provoost Yes. The wallet comes with all the stuff. So it comes with your transaction, history, the labels you've added, the descriptors. An xpub is just one thing. In general, we prefer descriptors over xpub because descriptors tell you what to do with the xpub. But yeah, in principle, you could already do these things by just ferrying an XPUB around. Now you just ferry all the extra metadata.

48:58

Audience member Yeah, because there are some things you could do with a watch-only wallet that you mentioned, like creating transactions and seeing your history, but you can do this with like [unclear] wallet and xpub. You can do the same thing.

49:08

Sjors Provoost You can because there are conventions on what you can do with an XPUB. But these conventions are also foot guns. Because if you take an XPUB that was supposed to be used for the legacy one blah blah blah address, and then you decide to use it to create a SegWit address, Then you import your mnemonic, and your mnemonic is actually looking in the wrong place, and you think your coins are gone. They're not actually gone, but they're like, you will spend a bunch of time figuring out where they are. So descriptors are there. The descriptors is just a bunch of text around the XPUB saying, this is a legacy address. This is a taproot address. This is a derivation from, if you [unclear: start at the seed?], do this derivation, do this derivation, do this derivation. Then it says, this is the XPUB. And then everything else. So that's what descriptors do. But you could already export descriptors, too, in read-only format. And then manually import them again. But this is quite tedious. So now you just copy the whole wallet file, just that one file or directory.

50:09

Off-mic speaker Sounds like a great feature.

50:11

Sjors Provoost I think so, too.

50:13

Aaron van Wirdum Alright, should we wrap it or we can do like one more question if anyone has one? But I don't think so. Okay, then let's just wrap it.

50:20

Sjors Provoost Cool. Thank you.

50:22

Aaron van Wirdum Sjors, thanks. Everyone, thanks for being here.