Aaron van Wirdum Live from Utrecht, this is Bitcoin.
Transcript
Sjors Provoost Explained.
Aaron van Wirdum Sjors, are we still making a bi-weekly podcast?
Sjors Provoost I mean, it depends on what you mean by bi. It's more like a feeling, right?
Aaron van Wirdum We make a podcast when we feel about it these days. Is that the rule?
Sjors Provoost No, it's also when we're not traveling or sick or whatever.
Aaron van Wirdum Or we don't have a good idea for a podcast. This is a good moment actually to maybe make a call to our audience. Like we will take requests for topics or at least we will consider requests for topics. If any of our listeners have good ideas of things that they want to have explained by us, just let us know on Twitter and we will consider it. Okay. Right, Sjors?
Sjors Provoost Oh, that's true.
Aaron van Wirdum All right. So, yeah, last one was, I guess, a month ago. I don't know when this one is going to be published because I think our editor is now traveling. He's in Amsterdam.
Sjors Provoost Oh, okay.
Aaron van Wirdum He's coming to our meetup tonight. We're recording this on, what is it, Wednesday?
Sjors Provoost Wednesday, 20th of April.
Aaron van Wirdum Yeah, and there will be the biggest meetup in Europe, in all of Europe, in Amsterdam tonight, Sjors. Okay. Isn't that exciting? We recently discovered that it's probably the biggest one in Europe. So now that's our main marketing push.
Sjors Provoost Interesting. I guess that's because there's nothing happening in Prague at the moment?
Aaron van Wirdum Because they have pretty big meetups. I mean, we didn't fact check it, but I think it's the biggest one in Europe.
Sjors Provoost But you mean the biggest Bitcoin meetup, which then meets some narrow definition of Bitcoiner. Or Bitcoin?
Aaron van Wirdum Just the biggest Bitcoin meetup we know of. I don't think we're doing very narrow definitions.
Sjors Provoost I mean, there's Bitcoin Wednesday, which has nothing to do with Bitcoin.
Aaron van Wirdum Right. Yeah, that's also an Amsterdam. I mean, is that bigger than ours?
Sjors Provoost I don't know.
Aaron van Wirdum Who knows?
Sjors Provoost Could be.
Aaron van Wirdum All right, let's get to the actual meat of this episode.
Sjors Provoost Indeed.
Aaron van Wirdum We are going to discuss... We'll probably have this published, I think, on the day that Bitcoin Core 23 is released because that's what we're going to be discussing. Bitcoin Core 23.
Sjors Provoost That's always a bit of a risky statement because it can take a while before it gets released. But hopefully it'll be at the same time.
Aaron van Wirdum At the time we're recording this, we're on release candidate 5. I don't think there's been many Bitcoin Core releases that required more than 5 release candidates, right?
Sjors Provoost Indeed.
Aaron van Wirdum By the way, this is not in the show notes, but maybe that's a good starting point. Sjors, what is actually a release candidate?
Sjors Provoost Well, it's a candidate for a release. To put it simply, so basically it's a way for the Bitcoin Core developers or really any software project to give experienced user a chance to test the software.
Aaron van Wirdum Right. And what are they testing it for?
Sjors Provoost Well, they're testing something that's going to be as close to the final version as possible. In fact, the very last release candidate is eventually copied and called the actual release.
Aaron van Wirdum Yeah, so in this case, release candidate 5, I think they're basically guys like you, Bitcoin Core developers and other expert users maybe, they're sort of trying out the software looking for bugs.
Sjors Provoost Yeah, exactly. Or changes that are not correctly documented. So for example, if you're running a... say, a Bitcoin ATM or something, and you're relying on a Bitcoin Core node to do all sorts of automated stuff, then you would test the new release candidate to make sure that all the automated stuff you were relying on still works and there's not some subtle change that causes your ATM to send free money to its users.
Aaron van Wirdum Right. And that lasts for like about a week. And then if no issues are found, the latest release candidate is essentially rebranded to whatever the new Bitcoin Core release is.
Sjors Provoost I mean, there is an actual new release made. But it has the same code in it. The only thing that changes then is the version number. So yeah.
Aaron van Wirdum Right. Okay. So Bitcoin Core 23, that's where we're at. For those that don't know this, Bitcoin Core releases a new Bitcoin Core release every six months, more or less. And the new Bitcoin Core release will basically just include whatever was ready at that time. Bitcoin Core doesn't wait for specific features. It's just once every six months, whatever's ready is in there, right?
Sjors Provoost Yeah, that's right.
Aaron van Wirdum Okay, so we're going to discuss some of the most notable changes. Let's begin. First, we're going to begin with... There's something about ports.
Sjors Provoost Yes. Yeah, so as you may or may not know, Bitcoin Core listens to other nodes, if it's on a public network, on port number 8333.
Aaron van Wirdum Yeah, and by listens, you basically mean just communicate with, right? Or what’s [unclear]…
Sjors Provoost Listening means that it is listening to the outside world, so you can actually connect to it if you're in the outside world. A node could also just be on the internet, but not listen to anyone in the world, so you might not know where it is, and even if you send a message to it, it won't hear you.
Aaron van Wirdum Right. So if I'm running a Bitcoin Core node and it's a listening node, which is like a setting.
Sjors Provoost It's actually the default. However, in your home situation, it's not going to listen by default.
Aaron van Wirdum Right.
Sjors Provoost That's not because of a setting in Bitcoin Core, but other reasons we'll probably get into.
Aaron van Wirdum Yeah, we'll get into that in a bit. But essentially, if I'm running a Bitcoin Core listening node, let's just call it that for now. And you, Sjors, you're also running a node, and if you want to communicate with my node, if you want to connect with my node then you're going to connect with my node on port 8333 right? So far so good?
Sjors Provoost That's right.
Aaron van Wirdum Okay, so what is a port? What does this actually mean?
Sjors Provoost So a port is part of the I believe it's a TCP protocol, The TCP IP protocol, basically. So the idea is an IP address is where the computer is. That's what it tells you. And the port is actually just a thing inside of the messages that you're sending it to it. So, you know, the internet uses packages. And these packages, they have a certain structure, and the beginning of the package says, okay, this is the port I want to communicate on. So it's just a convention, a kind of a way to talk to different services on the same machine. So one server on the internet might run a web server, and it might also run an email server, and it might run a Bitcoin node. And so one convention you'll use is if you want to talk to the web server, talk to port 80 or port 443. If you want to talk to the FTP server, talk to port 21. If you want to talk to the Bitcoin node, talk to port 8333. So it's just, it's kind of like if you're sending somebody a letter and you write down the number of whatever the, you know, the office they're in.
Aaron van Wirdum Or the name in that case, right? You know, there's several people living on the same address and then the name actually specifies who it's for.
Sjors Provoost Yeah, maybe two. Yeah. And these are conventions, right? So IP addresses are a scarce resource. They're distributed across the world. So there are some centralization involved there. But when it comes to ports, there are standards and conventions out there, but your machine decides what it does on which port. There's nobody on the outside can tell you what to do. It's just a very bad idea to use the wrong port.
Aaron van Wirdum So your computer connects with my computer. It tells my computer I'm going to use port 8333, which is just conventionally specification of something we chose. And at that point, my computer knows, oh, that means he wants to connect to Bitcoin Core, right?
Sjors Provoost Yeah, because Bitcoin Core told your computer that it wants to listen on that port.
Aaron van Wirdum Right, and that's the convention, but there's a problem with this?
Sjors Provoost Yeah, so one thing is that internet providers and others can filter the internet traffic. And one way you can filter the internet traffic is just by looking at which port a package is going to, because that's very easy to see, it's at the start of each package, and you usually have to check that anyway for other reasons. So one thing an internet provider could do is to say well, we don't like Bitcoin, let's just block port 8333 specifically.
Aaron van Wirdum Right so in a very sort of Bitcoin hostile future where perhaps Bitcoin is banned or whatever and ISPs want to stop people from using Bitcoin this would be one way for them to do it.
Sjors Provoost Yeah this would be the easiest the lowest hanging fruit way to do it. It's certainly not um A very effective way to do it. But it's one start. It's certainly also not the only thing they can do.
Aaron van Wirdum And the reason it's not very effective is because we have the option to just use different ports. Is that right?
Sjors Provoost So that's the cat and mouse game. So if they make that move, then the second move is okay. We just start using other ports. But in order to prepare for that situation, I guess, one of the changes that are in the new version is that... Bitcoin nodes will connect to other nodes that have a different port.
Aaron van Wirdum So they don't do that now?
Sjors Provoost They will do it if you tell it to. But one thing we talked about in the earlier episode is that your node keeps a list of other nodes that it could connect to. And from that list, it tends to pick nodes that have port 8333, and only if that fails after a long time, then it'll try other ports. And that's the preference that's being removed now. So it'll just try any other node, regardless of what port it has. Which means that if we move to such a future where nodes are listening on different ports... it's not, you know, it's going to be less friction.
Aaron van Wirdum Right. So right now you're running a node Sjors, and by default, your node will try to connect to other nodes and then we'll prioritize port 8333 nodes. And so if I'm running a node on another port, then, and everyone is like you, then I will just not have any inbound connections from other nodes because everyone's sort of ignoring me because I'm not using 8333. Is that right?
Sjors Provoost Yeah.
Aaron van Wirdum Right. And this is changing now. This is changing new Bitcoin Core where you won't prioritize 8333. You'll just connect to whatever node.
Sjors Provoost Yeah, exactly. And there is, I think, a list of nodes, a list of ports that we don't connect to because it could be perceived as an attack. But I think that list is pretty short.
Aaron van Wirdum Right. Okay. So this is basically preparing for a potential dystopian future where Bitcoin is very much...
Sjors Provoost I mean, Bitcoin is... always preparing for potentially dystopian issues
Aaron van Wirdum Yeah but just to clarify that for listeners…
Sjors Provoost Yeah but also to clarify this you know this is not gonna make the difference. It's like just one chess move, and and the counter move is pretty obvious. So there's all sorts of ways for internet providers to see that you're running a Bitcoin node not just the port you're on. Okay but that's the easiest way, and you know uh enemies are lazy.
Aaron van Wirdum So okay well so that covers that change correct? Yeah all right Let's move on to the next point. CJ... Sorry, I'm mispronouncing it already. CJDNS.
Sjors Provoost Yeah. Yeah, I have no idea what it really is, to be honest. It's kind of in the list of you have Tor and I2P that we talked about. And it's not a complete replacement of these things, but it's sort of similar-ish.
Aaron van Wirdum So it's some kind of anonymity network that you can use if you want to use the internet more privately.
Sjors Provoost Exactly. And so if you know what that is, now you can use it with Bitcoin Core. I think that will be the first step to put it.
Aaron van Wirdum So Bitcoin Core has included support for CJDNS.
Sjors Provoost That's right. And so in the beginning, so a couple of episodes ago, we talked about the address gossip messages and how it used to be that we could communicate IPv4 addresses, IPv6 addresses and... tor v2 addresses and that you know it wasn't possible to communicate Tor v3 addresses because they were too long, and so they come up with a new standard called address message format number two, which was which allowed you to send addresses of very different sizes and very easily add new networks to that, and this is just one of the new networks that's added to it. So these nodes can you can't just use it, You can also gossip them around and things like that.
Aaron van Wirdum Right. Details about CJDNS itself is not something that we can provide to the listener, I think. No. That's sort of outside of our, or at least outside of my expertise and I think outside of yours as well.
Sjors Provoost Yeah.
Aaron van Wirdum Okay. But it's, Bitcoin Core supports a new privacy or is it new? Do you know if it's new?
Sjors Provoost I don't think it's new.
Aaron van Wirdum Okay. It just supports an additional privacy network if you want to use it. Great.
Sjors Provoost Yep.
Aaron van Wirdum I like it, Sjors.
Sjors Provoost Next.
Aaron van Wirdum Next. Yeah, so there's an upgrade in the fee estimation algorithm in Bitcoin Core. Yep. So obviously, whenever you want to make a transaction, Bitcoin Core has this option to increase or decrease the fee depending on how fast you want your transaction to confirm, which depends on things like how many transactions are in the mempool or how many... how high fees were in recent blocks, I think. These are sort of some of the inputs.
Sjors Provoost Yeah, I think it looks at... Yeah, exactly. I think it looks at how high fees were in recent blocks, but it also checks how long it took before it first saw it in a mempool and when it was in a block. I'm not exactly sure.
Aaron van Wirdum Right. So that has been upgraded to include RBF, replaced by fee transactions is that right?
Sjors Provoost Yeah you could call it an upgrade I mean initially it would just consider all transactions in the mempool but then when RBF was introduced I think it was decided to not to ignore those RBF fee bumps so fee bump is like you increase the fee of an existing transaction And in the beginning, I guess developers were not sure whether miners would actually play along with that game. So like actually replace the transactions. And so because they weren't sure about that, it was a bit risky to take those fees into account because you didn't know if those fees actually mattered or not. But they do. And more people are using RBF. So now the fee estimation takes into account the fees of the transactions whose fee was bumped.
Aaron van Wirdum Right and so to be more or to be very clear about that, the the fees we're talking about here the RBF transactions we're talking about here are essentially other people's RBF transactions. Yeah right so to reiterate that really quick, RBF you know you send a transaction, and it's taking longer to confirm than you anticipated or for some reason you're in more of a rush all of a sudden, then you have the option to basically resend the same transaction to the network but include a higher fee this time, and that newer transaction should sort of override the older transaction. The miners should pick that one because it has higher fee essentially. Exactly so then So the transactions that are going to be confirmed in blocks essentially have higher fees now if all miners will adopt or accept these RBF transactions. And therefore, your own transaction, if you're going to send it, would also require a bit of a higher fee. And that's now taken into account.
Sjors Provoost Yeah. I mean, just the one nuance there is not necessarily that the fees will actually go up, right? Because people will make more conservative estimates and then increase them. Effectively, fees might be lower. But yeah, basically you have to take them into account. You have to look at what transactions actually go into the block.
Aaron van Wirdum Well, your own estimate, the estimates that your Bitcoin Core client makes, like let's say I want to have my fee... Sorry, I want to have my transaction confirmed within 24 hours. Now that it is taken into account RBF transactions from other people should mean that my fee estimation will be slightly higher now, right?
Sjors Provoost Well, that's what I thought yesterday too. But now that I think about it, I think that's not actually true. Because RBF transactions, what it's saying is it's now including transactions that have been fee bumped. But I don't know if it previously excluded those transactions or excluded transactions that were using the RBF flag, but were not fee bumped.
Aaron van Wirdum I don't get that at all.
Sjors Provoost So there's three kinds of transactions, right? There's transactions that don't use RBF at all. There's transactions that set the RBF flag, but don't bump the fee. And there's transactions that have now a higher fee.
Aaron van Wirdum Yes.
Sjors Provoost Yeah, so the transactions that now have a higher fee are always higher than the ones that don't. So yeah, I guess you're right. It would increase the price, the fee estimates slightly.
Aaron van Wirdum It would have to, right? There's no way it can be lower if it's going to take into account RBF transactions.
Sjors Provoost Yeah.
Aaron van Wirdum You know, it might stay the same in some cases. It's either the same or higher.
Sjors Provoost It depends. If it was discounting all RBF transactions, regardless of whether the fee was bumped or not, then it's different. Because if the algorithm was only looking at transactions that don't have the RBF flag at all, And now it's also looking at transactions that do have the RBF flag. Well, those might be all systematically lower.
Aaron van Wirdum Yeah, I guess that's true. But that would be a strange policy if that was the case.
Sjors Provoost It may be, but that would be a good reason to revert it. So I guess we should have read the pull request a bit better. You can do so yourself.
Aaron van Wirdum In either case, that's kind of a detail. The important thing is RBF transactions are now taken into account for fee estimation. Essentially, to summarize that in one sentence, Fee estimation should be a bit better now.
Sjors Provoost Yep.
Aaron van Wirdum All right.
Sjors Provoost Let's talk about Tether.
Aaron van Wirdum Let's talk about Tether. Sjors, you want to talk about Tether?
Sjors Provoost Yeah. Is it actually Tether? USDC?
Aaron van Wirdum Oh, you know, that's another one, right? Tether should be USDT or something like that.
Sjors Provoost Well, anyway. Oh, it is USDT. I actually just wrote it wrong in the show notes. Yeah, it's USDT. But it doesn't stand for Tether. It stands for User Space Statically Defined Tracing for Bitcoin Core.
Aaron van Wirdum Aha, it's only now that I understand your pun then. You made a pun in the show notes. That's great. We're back to puns. We need more puns in our show, but make the pun again because maybe people didn't get it.
Sjors Provoost No, that's fine. They can re-listen to the episode. And I kind of ruined it anyway. So anyway, so the basic idea here is that I don't really understand what the basic idea is, but trace points are tools that developers can use, but also people who want to monitor their own node can use to get really fine-grained statistics out of their node. So for example, you can ask your node for things. You can call the node RPC. You can say, okay, give me the list of blocks you have or give me the list of peers you have. There's a RPC call for that. And you can read log files, and that tells you something. But this is just another way to get more detailed information. So one of the details you can get is every message that every node ever sends to you. So all of your peers keep sending you all sorts of messages. And now there's a better tool that you can use to kind of track those messages in a database.
Aaron van Wirdum Okay, well, let's... break this down a little bit. First of all this seems to me this sounds like something this is useful for developers specifically right? Or is this something users are going to use for some reason?
Sjors Provoost I would say developers but also say researchers, like you know Jameson Lopp for example when he does all these analysis of whatever is going on. He could use this or I think security researchers might find this interesting because they could run a bunch of nodes and check all the message traffic that's coming at those nodes and maybe identify attacks by something subtle, right? So sometimes, like we talked about an attack on the Bitcoin peer-to-peer network a few episodes ago where people were announcing fake nodes. And that's something you probably wouldn't be able to detect if you just... looked at you know if you just start your Bitcoin Core GUI it doesn't get hot, or it doesn't scream at you, yet there is an attack going on. So these kind of tools would make it much easier to see that this attack is going on.
Aaron van Wirdum Okay, so one small step back just for my own understanding and I guess the listeners as well, since they're listening.
Sjors Provoost Hopefully that's why we explain things.
Aaron van Wirdum First of all you just mentioned log files. So a log file basically keeps track of every action your Bitcoin Core nodes does, right?
Sjors Provoost Depending on how you configure it, you can tell it to keep track of quite a lot of detail, yes. But it's just a long text file and each line starts with the timestamp and then it says, okay, this happened, okay, this happened. And then if you want to process that data, it can be quite tedious. And not everything goes into the log file either.
Aaron van Wirdum Okay, but this was already possible.
Sjors Provoost Yes.
Aaron van Wirdum And so now we're talking about user space statistically defined tracing, and if I saw if I'm trying to understand you, it's like a more specific type of log file? It tracks more specific things or…
Sjors Provoost Yeah that's that's what I understand too, but I don't completely understand it either, but I guess it it really ties better into the operating system, and it's a way to to communicate this information in a more structured way than just a text file.
Aaron van Wirdum Right, so the example you gave was something related to the peer-to-peer network you give it a very specific instruction. You don't have to log everything. You just log whatever other nodes are communicating with you or whatever data other nodes are sending to you. And that's sort of... Bitcoin Core now has the option to keep track of that in a way that's easy to understand by other types of software, perhaps.
Sjors Provoost Yeah, exactly.
Aaron van Wirdum Right. So, yeah. As you mentioned, useful for developers, useful for researchers. Not something a regular user will use in general.
Sjors Provoost No, I don't think so.
Aaron van Wirdum Okay. That's pretty clear to me. I completely lost access to our show notes. There we go. I'm back. You're back? I'm back. Next point is yours. Are you ready?
Sjors Provoost Yeah, I'm ready.
Aaron van Wirdum “Back” 32. How do I pronounce “back”? Is that how I pronounce it? That's probably a very Dutch way of pronouncing it.
Sjors Provoost Yeah, I would say “back” 32, but others say “batch” 32.
Aaron van Wirdum “Batch”, yeah. B-E-C-H 32. “batch” 32 um I forgot why this is in the show notes.
Sjors Provoost Well, I'm sure you remember. As you may remember the Bech32 checksum has some nice properties. One of them is that it allows you locate where your typos are.
Aaron van Wirdum Yeah oh yeah so Bech32 is a type of address.
Sjors Provoost Yep
Aaron van Wirdum And this type of address has nice… we did a previous episode on addresses Sjors, which episode is that?
Sjors Provoost Yes we addressed this.
Aaron van Wirdum Oh great.
Sjors Provoost I think it was probably episode 2 or something.
Aaron van Wirdum It was pretty early, I think, yeah.
Sjors Provoost And one of the things we explained indeed is that this new address format that starts with BC1 will have the nice property that if you make a typo in it, you can actually find out where it was to do mathematical magic. And so that was already possible in theory, but it wasn't supported in practice. And now Bitcoin Core will let you do it, at least if you use the command line in this release, and then maybe in a future release, there's already some work for that. You can do it in the GUI.
Aaron van Wirdum Right. So if someone for some reason would type out an address instead of just copy and paste and they make a typo, then your Bitcoin Core client will tell you there's a typo in it and it's there, right?
Sjors Provoost Yeah.
Aaron van Wirdum That's basically what will happen.
Sjors Provoost And there's some discussion about up to what point that's safe because it could be situations where you make too many typos. And then... it might think you actually meant another address and it might actually help you accidentally change the address into a different address, which is even worse than the address not working.
Aaron van Wirdum Sure. It's kind of like autocorrect in that sense.
Sjors Provoost Yeah. But if you're using the command line, then you should know what you're doing. So it's easier to introduce these features there.
Aaron van Wirdum Nice. All right. Next point. We're getting there?
Sjors Provoost Yeah.
Aaron van Wirdum Two or three more to go, right? All right. Wallet support for Taproot.
Sjors Provoost That's right. I think more precisely, new wallets will support Taproot. So if you create a new wallet, it will have Taproot support. It won't use it by default. So the other change there is that there's a little drop-down menu where the checkbox used to be for Bech32. Now there's going to be a dropdown menu where you can choose, where it still uses SegWit by default, but you can actually select Taproot as well.
Aaron van Wirdum So what does that exactly mean? Like what does it mean to use Taproot in this context?
Sjors Provoost Well, you'll get an address that starts with BC1P instead of BC1Q.
Aaron van Wirdum Right.
Sjors Provoost And it's a Taproot single signature. A pay-to-public-key.
Aaron van Wirdum Right. So it doesn't mean that you're somehow automatically using all the fancy multi-sig options and time lock options that are all sort of hidden in this tree. It's still a regular single key transaction, but you are using a Taproot address.
Sjors Provoost Which has almost no benefit, but you can do it.
Aaron van Wirdum Yeah, it has a little bit of benefit for yourself. The point in this case, I guess, is that anyone monitoring the blockchain, you know, that's sort of one of the nice things about Taproot. They won't be able to tell if it was, in fact, just a single key transaction or maybe that was like a fancy script hidden behind it. It looks the same.
Sjors Provoost That's right.
Aaron van Wirdum Right. So we're kind of working towards this future. Like that's part of the vision of Taproot where every transaction kind of looks the same.
Sjors Provoost Yeah.
Aaron van Wirdum And people won't know what kind of transaction is really sort of hidden behind it and by moving in this direction. I'm repeating myself, but we're moving in this direction.
Sjors Provoost The transition phase is always a bit risky.
Aaron van Wirdum Right.
Sjors Provoost Because now, you know, how many wallets actually can do this? Not that many. So it might actually tell people that you're using Bitcoin Core. But yeah, that's something to think about. But it's not the default yet. And the other reason it's not the default is because some wallets cannot send to a Taproot address.
Aaron van Wirdum Yeah, in the short term, in the transition phase, you're arguably a bit worse off privacy-wise. But then once people migrate to this new standard, then everyone should benefit. That's basically the short version of the story here, right?
Sjors Provoost Yeah.
Aaron van Wirdum Okay, so we're heading in that direction. Next point, in case I wasn't clear, we're moving to the next point. You can now freeze coins in your wallets.
Sjors Provoost Yeah, so it was already possible when you're using the Bitcoin Core GUI to send coins, you have something called manual coin selection that you can turn on if you like to actually decide which specific coins you want to spend. And it'll give you a nice, well, nice, depending on who you ask, graphical picture, graphical display of which coins you have. And you can select boxes and say, I want to use this coin. I want to use this coin. And it also had the opposite feature where you could say, well, I don't care which coin to use, but don't use this one and this one and this one because they come from some bad source that I don't want to mix with my other coins.
Aaron van Wirdum Well, that's the new thing, right?
Sjors Provoost No, it was already there. The only problem is you have to do it every time you want to make a new transaction. It didn't remember it.
Aaron van Wirdum Right, right. Yeah. At least not between
Sjors Provoost startups of the Bitcoin Core.
Aaron van Wirdum Right. So you're saying coins, which is also what I often use, it's [unclear] easy to understand thing. Technically, they're UTXOs, of course. They're just, you know, the fractions of Bitcoin that you received over time that are in your wallet. And it was always possible if you make a transaction that you tell your Bitcoin Core wallet, I want to use these fractions to create a new transaction. Or like you said, don't use these fractions to create my new transaction. So don't use these fractions to make a new transaction. That feature is now... you can basically tell your node, don't use these fractions until I tell you otherwise.
Sjors Provoost That's right.
Aaron van Wirdum For the rest of time.
Sjors Provoost Yeah, exactly. It remembers it.
Aaron van Wirdum Right.
Sjors Provoost And that can be nice. Like, you know, there's a couple of reasons. Like I said, you might, maybe your wallet has lots of coins from KYC places, KYC free places, I mean, but it has one coin that you got from Coinbase. And you just never want to use that coin from Coinbase because then Coinbase can [unclear] all your other coins as they're spying on you probably right? So that's you know, so you can basically mark that coin as toxic until you decide to spend it. Yeah it remembers that. But it can also be if you have something like a dust attack. So somebody like an analytics company might be sending very small amounts of dust, those very small amounts basically, to Bitcoin addresses that it knows about. And then it's hoping that your wallet will automatically grab those coins and combine them with the other coins in your wallet, therefore by revealing that you own that old address and as well as the new address. So now you can disable those two if you see this attack. It's pretty advanced stuff, but it's nice that it works.
Aaron van Wirdum So freezing them is like a manual thing. You click a button. Oh, sorry. Freezing is like a manual thing. You click a button. Now they're frozen. And then unfreezing is also a manual thing. Or could you also say, don't use them for a year. And after a year, they're automatically…
Sjors Provoost No, it's not that advanced. You just select it and you deselect it.
Aaron van Wirdum Right. All right.
Sjors Provoost We have a bonus item.
Aaron van Wirdum Exciting. This is very exciting, a bonus item. I cannot wait to hear what the bonus item is.
Sjors Provoost So as we mentioned, there were multiple release candidates. And then there was release candidate number four. And somebody on Windows found a bug. And it was a very obscure bug. It's like, if I go to this screen and then this other screen, and I wait a few seconds, my node crashes. So this is something many people would not even test. Because when there's a new release, you generally test things that are new in that release. But in this case, somebody was just testing existing functionality and ran into this crash. And people investigated it and it turned out to be some really obscure Windows-only bug in the C compiler that Bitcoin Core is using. And so people actually had to fix a C compiler in order to fix Bitcoin Core. And that took another couple of weeks.
Aaron van Wirdum Right. So the C compiler, that's not even part of Bitcoin Core. That's just a separate program in Windows that will compile your code into binaries, right?
Sjors Provoost Yeah. Or a program on Linux probably that will compile your code so that it runs on Windows.
Aaron van Wirdum Right. And there was a bug in that separate piece of software, in the compiler, and therefore a bug pops up in Bitcoin Core.
Sjors Provoost Yeah, but only in Windows and only in that specific place. So it was very lucky that people even ran into it. I mean, that specific bug wasn't the end of the world. It's very annoying. But, you know, if there's a bug in a compiler that can cause things to crash... You don't want to think about what other things that bug could cause. So it's better to just deal with it.
Aaron van Wirdum Right. We've also made an episode about this, Sjors. Which episode was that?
Sjors Provoost The episode about Guix, basically, where we talked about dependencies and the dependency circus.
Aaron van Wirdum Right. So here we have a concrete example of essentially a dependency of a bug and therefore causing problems in Bitcoin Core. So how was this solved then? Is this solved?
Sjors Provoost Yeah, I believe it's solved. So I think there was a... So there's two things usually that happen at the same time. One is once you figure out what it is, you go to the developers of this dependency project, so the compiler people probably, and you tell them this is broken and here's how you can fix it. And then they will put that into their normal flow and eventually they'll release an update where it's fixed. But you may not want to wait for that. So there's something called patches where in Bitcoin Core there's a bunch of these small snippets of code that before Bitcoin Core is compiled, it first patches whatever needs to be patched and then it compiles. So basically Bitcoin Core creates a little patch that fixes the compiler before it builds Bitcoin Core.
Aaron van Wirdum Who creates these patches? Bitcoin Core developers, actually.
Sjors Provoost Whoever fixes the original issue, right? So it could be a Bitcoin Core developer that fixes the issue for the compiler people. It could be the compiler people that fix the issue themselves, but they haven't published the fix yet. They haven't published a new binary for the fix yet. So then you would just copy-paste their fix. It doesn't really matter who does it.
Aaron van Wirdum Right. But in this case, do you know who created the patch by any chance?
Sjors Provoost Probably fanquake, but I'm not sure.
Aaron van Wirdum Right. So someone created this patch, fixed the upstream problem, or is it downstream? Is it upstream or downstream?
Sjors Provoost I think it's upstream. Yeah.
Aaron van Wirdum I would say upstream, right?
Sjors Provoost Yeah, I would say upstream.
Aaron van Wirdum Yeah, it has to be upstream. So someone fixed the upstream problem. And now Bitcoin Core should be compiled without the bug. So that's release candidate 5.
Sjors Provoost Exactly.
Aaron van Wirdum Well, we're testing that now, I guess, while we're recording this podcast.
Sjors Provoost Yeah. And then hopefully nothing else is broken and then it can be released.
Aaron van Wirdum Great. Where do people find this software if they want to download it?
Sjors Provoost I think if they want to test a release candidate, they should go to the probably the Bitcoin developer email list where there's an announcement that says, hey, you can download the release candidate here. If you just want to wait for the real thing, it'll show up on Bitcoincore.org eventually.
Aaron van Wirdum All right, great. I think that covers it, Sjors.
Sjors Provoost Cool. Well, thank you for listening to Bitcoin Explained.