 Jen asks, Is the following scenario possible? Could a hacker change the client's software of Bitcoin Core so that it would accept fraudulent updates? Then everybody downloads the new update, then the majority of honest miners, without knowing, become dishonest miners and propagate fraudulent transactions. Which is the real Bitcoin then? Is it the chain with more proof-of-work or the one without fraudulent transactions? Jen, this scenario is not possible. The reason it's not possible is because of several safeguards that are in place. First of all, updates to Bitcoin Core software are not done automatically. You don't have the client downloading an update to itself. That would provide a vector for someone to compromise all of the mining nodes and all of the network nodes in the network in one go. Which is why there isn't an option like that. Miners have to manually download and update or upgrade their mining software and their node software when they decide they want to update it. Clearly, since miners are spending hundreds of thousands of dollars of electricity, or even millions of dollars of electricity mining, they're not going to risk that with any old software that might produce invalid blocks, and therefore cause them to lose all of this money. There are incentives in place to make sure that miners are very careful about upgrading their software. If they introduce a bug, they lose a lot of money, and they lose money every hour that they're mining with this buggy software. All of their blocks will get invalidated by everybody else. Honest miners remain honest by carefully checking their software. That means testing that software extensively before pushing it into the mining rigs. Effectively, software updates are not done in one step. They're done on test networks, then validated with some of the miners, and then pushed gradually out to the infrastructure. At the same time, the same thing happens for network nodes. Operators of network nodes, users, people running exchanges, people running merchant services, people running all of these other infrastructure services, do not just willy-nilly upgrade the nodes whenever they decide without validating those nodes and making sure that the software still operates correctly, so it has to go through a series of... The upgrades don't happen simultaneously. The network at any point in time runs five or six different versions of the software. At any moment in time right now, let's say my node is running version 0.17.2 of Bitcoin Core. There are going to be nodes out there running 17.1, 17.0. There's probably some nodes running v16. There might even be some nodes running v15, which is two versions behind, as well as other implementations of the Bitcoin software than a not Bitcoin Core. All of these are following the same rules, which means that if one of them went astray, the rest of the network would reject those blocks and transactions and keep it in check, forking it off, if necessary, and disconnecting it from the network, simply by rejecting its transactions and blocks. Because the ecosystem has some diversity, diversity of versions, as well as diversity of clients, and because upgrades don't happen simultaneously in a coordinated fashion, but instead they roll out, with every party that has economic incentives doing due diligence and testing, the scenario where someone can compromise this is impossible to pull off. That's not even counting the fact that all releases of the Bitcoin Core software are PGP-signed by the maintainers. All of the Git commits are PGP-signed, and there's a system called a deterministic build system that produces executables that contain digital signatures that can be validated, where you can run software to build the Bitcoin Core software with a standard configuration, a deterministic build as it's known, and then you can prove that the resulting binary is the same as the binary that everybody else built, and therefore hasn't been compromised in any way. So you can basically trace trust in the software from the binary to the source code, to the commits that were made by various maintainers, to the commits that were made by various developers, and identify what changes were introduced by whom. So there's a lot of infrastructure to prevent this kind of compromise. Jen asks, are non-mining nodes validating transactions if, guess, what prevents them from validating fraudulent transactions? That's a great question, Jan. All nodes are validating transactions. All nodes are validating blocks. All transactions get validated by all nodes. A node does not propagate a transaction unless it validates it first, meaning that if you send a transaction into the network, the first node you give it to will validate it before forwarding it on to anybody else. The truth propagates, lies stop propagating. The first node to find a transaction that is invalid the moment they receive it and fail to validate it by the rules they are following, they will reject that and not propagate it. But here's the important trick, they will not only reject it and fail to propagate it, they will punish the node that sent them that transaction. They will say, according to my rules, you sent me a lie. So your node is now going into a timeout. I'm not talking to you for 12 hours. Bye! I don't know what the timeout characteristics are, but there is a mechanism within Bitcoin Core clients, but most nodes software out there progressively makes the timeout worse. The first time you lie to another node, it may assume that you haven't upgraded recently, and it will reject your transactions or blocks and say, your propagating lies, I'm not talking to you, timeout. The second time you do it, it will give you a longer timeout. The third time it might kick you off the network completely. Basically, stop talking to you, disconnect, and not accept connections from your IP address again. This mechanism ensures that nodes that try to propagate transactions that other nodes consider a violation of the rules, find themselves very, very quickly isolated from the network. We've seen, in fact, during forks in the network, where the network will automatically split in half, where the nodes that are supporting one fork versus another stop talking to each other, because the moment they try to propagate to each other something that the other side doesn't consider valid, the other side stops talking to them. For example, if you have a fork where a group of nodes decide to use new rules that are not valid to the rest of the network, they will find themselves cut off from the rest of the network. The rest of the network will ignore all transactions, so that's what prevents any node from validating fraudulent transactions and propagating on the network. The other nodes stop trusting it. If nodes could propagate fraudulent transactions, couldn't there be another Bitcoin blockchain where the miners just aren't truthful and write a higher mining difficulty in the block, therefore making it appear that their chain has more proof of work? What I just said about how transactions propagate also applies to blocks. Those miners, when they try to propagate these blocks, which have a different set of difficulty than what is expected by the rest of the network, or they have fraudulent proof of work in them, that is not validated, then every node they try to propagate this new block will not only fail to validate it and reject that block and therefore ignore it, but they will also penalize the node that sent them that block and say, you're a liar, time out, which means that the miners trying to propagate these blocks out are held in check by the nodes that refuse to propagate those blocks further. This is a really important concept because it underpins the ability of non-mining nodes to be participants in consensus, especially non-mining nodes that form economic interests within the network, such as, for example, the nodes of merchants and exchanges in large wallets. If you can't propagate your blocks to these nodes, that also means you can't sell your coins on exchanges in order to pay for electricity. Therefore, even nodes that you have at home on your low machine, checking blocks and propagating them, or refusing to propagate them, has an impact on consensus. If all of those nodes decided that a block was not real, was not valid, and refused to propagate it, that miner would either have to try to propagate their blocks directly to the nodes of an exchange, or find an exchange that still believes them that this is a valid block. Otherwise, they mine the block, they spend the electricity, but nobody propagates it anywhere.