 Leonard asks, can you explain the mining process in detail? When are hashes calculated? How is the selection of transactions in the mempool? Does the client software automatically confirm correct blocks, etc? Leonard, let me try. All right, you're running a mining node connected to a mining computer. Let's call it an ASIC, which is a hardware hashing machine that's connected to your computer. Usually, that's a USB-connected device. More advanced ASICs, of course, are directly connected to Ethernet. But let's keep it simple for now. You have a computer, it's running a full node, let's say it's running Bitcoin Core as a full node. It's connected to the peer-to-peer network, and it's receiving transactions and blocks as they're happening. It also has this mining ASIC connected to it over USB, and it can send it a candidate block and say, go hash this and find a nonce that makes it valid. Calculate the proof of work for me. Now, the mining node that's running on the miner's computer is going to be receiving transactions, it's going to be receiving blocks. It will wait until it receives a valid block, meaning that somebody else won the competition. If somebody else managed to mine a block, as soon as it has a valid block that it's received, there are some new ones there. But let's say it just received a block, let's call it block ten. It's just received block ten. Now it knows that someone won the competition to construct block ten, and that means the race to construct block eleven is now on. First thing, validate that block. If you build on a block that is invalid, you're wasting your time, and you're wasting your energy and hashing power. So the first thing a miner must do is validate that block. Then construct a new candidate block. So the mining computer, the laptop that is running, let's say, the mining software and the node software, will construct a candidate block. That means it will construct, at first, an empty block, which contains a block header. In that block header, it will have the hash of the previous block, so block ten that just finished. That hash goes in my new candidate block, because that's the parent. Great. Put a timestamp in there. And now we've got the basis of a candidate block ready. Now it doesn't have any transactions in it. Next, I put one transaction. That's the coin-based transaction. So I write a check to myself. I pay myself 12.25 Bitcoin as a reward. Great. So I'm sorry, 12.5 Bitcoin as a reward. So I write myself a check for 12.5 Bitcoin, payable to my Bitcoin address. Let's keep it very simple. No mining pools, I'm doing this solo. So that's one coin-based transaction. I put that transaction in the block, and I calculate the merkle root, which will be the hash of that transaction. I put that in the block header. That's a valid block. That's all you need. One coin-based transaction, you've got a valid block header, you've got a valid merkle root, which we'll talk about in a subsequent section. We've got a timestamp, we've got the previous block, that's a valid block header. Now at this point, I can send it to my mining equipment so it can get a head start. So over USB, let's say, my computer sends to my mining hardware this block header and says, find me a nonce that works for this level of difficulty. And the mining hardware will start hashing, and hashing, and hashing, and trying as many nonces per second as it possibly can. Now this only contains one transaction, the coin-based transaction, so I'm not earning any fees. I can also add transactions to earn fees. So my computer will then look into the mempool, and it will start picking transactions from the mempool. Now, every computer can use a different strategy. Every miner can use a different strategy for picking transactions from the mempool. But obviously, if I'm smart about it, I want to maximize my income. So I have a limited amount of space, so what I probably want to do is pick the transactions that are paying the most amount in fees per the size of the transaction, meaning they're paying the highest level of satoshis per byte in fees. Because bytes are what I'm going to be using up in my block, and if I can get the maximum fee per byte, then by doing that I'm going to get the maximum fee possible for this one-megabyte block. There are some interesting calculations there that happen with Segwit and the discount, etc. Let's ignore that for a time being. So I look into the mempool, let's say I had a naive software program that looks at the mempool, and sorts all of the transactions by their size and their fee, so that I get the highest satoshi per byte at the top. Well, that's the first thing that goes into my block. So I start stuffing transactions into the block from the mempool, in the order of the highest fee per byte, until the block is full, and that's it. Now I can send the new header, which has a different Merkle route, because it has more transactions than just the Koi base, to my mining hardware, and my mining hardware will start hashing, trying to find the proof. At some point, let's say my mining hardware finds a valid nonce that produces valid proof of work. It sends me that result. My node then broadcasts this result onto the network. Everybody sees that block 11 has indeed been found that it is valid. I've carefully made sure that all of the transactions I put in are valid. I didn't want to waste my time. I made sure that every transaction was properly validated. It wasn't double-spending. It had the right amount of inputs and outputs, all of the scripts were correct, etc. So my block is valid. As soon as everybody else sees that, they're going to start working on block 12. My block 11 is now part of history. After about 100 blocks, I can spend that coin base. That's basically a summary of how mining works from the perspective of a miner. One little subtle detail there, you may have noticed that as soon as I had a valid block with just a coin-based transaction, I didn't wait to start putting transactions in it. I sent that empty block with just a coin base to my mining hardware, and had it mine while I was picking transactions from the mempool. While the node was picking and validating transactions from the mempool, it was already mining an empty block. There's a reason for that, because it might take me four, five, six seconds to validate the transactions that I want to put into the block, and to validate that the previous block and all of its transactions were correct. During that time, there's no reason to have my mining hardware sitting there doing nothing. Those four or five seconds could be enough time for it to accidentally find an ounce that's valid and proof of work. We want to have the mining hardware working all the time, which is why you sometimes see empty blocks on Bitcoin. They pop up every now and then, you'll see a block that just has a coin-based transaction. Usually, it comes right after, very shortly after, a block was found. You'll see two in a row, and the second one will be empty. That's exactly why that happens. It's because the hashing power was not sitting idle. It was mining while the node was trying to find and validate transactions to put into the candidate block. That's fine. In fact, it's great. That extra hashing power adds security to the Bitcoin network. It increases the amount of difficulty, the cumulative difficulty of the chain. It's a net positive, and it doesn't take away from the capacity of the network, because another block might be found in the next few seconds. There's no problem with that. It's a normal part of the network. If my node finds a block, are those verification automatic, or does a person need to do some manual work to enable it to go through? No, Susanna, this is entirely automated. There is no manual process whatsoever. The software mines, the software validates, the software verifies, the software propagates. There is no human involved at all. It would be impossible to have a human involved, because of the speeds we're talking about. A delay of milliseconds can cost hundreds of thousands of dollars a day. So absolutely not. No people are involved in this. You, as a person, choose what software to run, and by extension choose what consensus rules your software will follow, what policies the mining program will follow. But once you've made those choices, you run it, and that's it. Some say that a few miners control 70% of the hash power. Is this centralization? Yes, it is centralization on one axis of the system. It's not really clear that a few miners control 70% of the hash power. I think that's probably an overestimation. But it is possible that a few miners control more than 50% of the hash power. This is a problem, a form of centralization. I think it's a temporary phenomenon, and it has to do a lot with the rapid performance increases, from 40nm at A6, or even from CPU to GPU to FPGA, to 40nm at A6, and all the way down to 12nm at A6 that we saw over the past nine years. That very rapid increase in performance made it so that miners who controlled the ability to fabricate silicon chips gained an enormous advantage. But that enormous increase in performance is over. You cannot keep going down from 12nm, because that is now the cutting-edge technology that is available in fabrication, which means the level playing field has arrived. That means it's likely we're going to see less centralization in miners over time. Other forces, such as operational risks, geographic concentration risk, political risk, electricity availability risk, natural disaster risk, and all of these other risks work against centralization. If you have a warehouse with 100,000 miners pulling 10MW of electricity in one region, you have a lot of economy of scale advantages, but one lightning strike, one political move, one additional tax, one fire in your warehouse, one flood, one electrical interruption, and you lose all of those miners in one go. So there are disadvantages of having everything concentrated in one place. The question is, do the forces of decentralization and the forces of centralization balance out? That's a very difficult question to answer. Just because Bitcoin is centralized in one area doesn't mean it's not decentralized in other areas. So centralization and decentralization are not a yes-no question. You can't say, is this centralized or not. The more you have to think of it as a multi-dimensional scale, things can be somewhat centralized on some aspects of the system. The question is, is this system more decentralized on more aspects of the system than any other comparable system? I would say Bitcoin is the most decentralized, at-scale payment system that exists in the world in several different aspects. I think it's likely to get more decentralized over time. We'll see how that goes.