We’ve shown 0.8996BTC going back to the original address. (Imagine going into a store with a ten-dollar bill, and paying $1 for something. What happens? You take $10 out of your pocket, hand it to the clerk, the clerk gives you $9 back, and you put the $9 back into your pocket.)
We’ve shown the change coming back to the same address used for the Input, and that’s certainly possible. However, most wallet software will use a different address, or a change address , for the second of these outputs. Either way, you get the change back to an address owned by you, managed by your wallet software.
Note that nothing is stated in the outputs regarding the fee. That’s because the transaction sent by your wallet doesn’t explicitly state the fee. Rather, it says, “send 0.1BTC to the first address, send 0.89996BTC to the second address, and keep the change!” And that’s just what the miner who wins the right to add this transaction to the blockchain will do: The mining rig will keep the change as a transaction fee.
Cryptography is the crypto in cryptocurrency; it uses what’s known as public key encryption . It’s how you prove that you own the money associated with an address. The person spending the cryptocurrency uses a private key to encrypt the message and then bundles the associated public key with the message. The miner can determine that the address from which the cryptocurrency is coming is associated with the public key, and thus if the public key can decrypt the message, the message must have been created by the person controlling the associated private key. (All three — private key, public key, and address — are mathematically and uniquely associated.) See Chapter 2for more details.
This transaction information is put into a script, a text message that will be sent out over the crypto network. Your wallet software uses your private key to sign the transaction — that is, it encrypts the transaction information using the private key. It then adds the associated public key to the message and sends the transaction out onto the Bitcoin network. Within seconds, a node will receive the transaction; just as, when you send an email, within seconds your email will be received by a mail server. (You can think of your wallet program as a special form of messaging software, in fact.)
Verifying the transaction
The first thing the node does when receiving the transaction is to use the public key to decrypt the message so that it can read it. It must then verify the transaction. This process ensures that the transaction is valid, based on a number of different criteria. We won’t go into all the details, but essentially the node asks itself (and answers) questions like these:
Is the message properly structured and not exceeding the maximum message size?
Does the message contain valid information — for example, does it contain valid input and output addresses and sums, within valid ranges, assigned to the addresses?
Does the input address exist in the blockchain with a valid balance?
Is a sufficient transaction fee associated with the transaction?
Does the wallet sending the transaction have a right to send the transaction — that is, is the public key sent with the message associated with the address from which the cryptocurrency is being sent?
What happens if the message is not valid in some way? The node throws it away because there’s no point sending it on to the next node. But if it’s valid, the node adds it to a pool of valid transactions (a memory pool or mempool ), and sends it to other nodes on the network. These other nodes will do the same: decrypt and verify the transaction and add to their mempool if they find it valid. (That’s part of the consensus process, ensuring that everyone agrees.) Thus the message, in a matter of seconds, propagates (spreads) across the crypto network, being picked up by node after node.
So the mempool is a collection of transactions waiting to be confirmed, solidified, and included into a block. The size of the mempool ebbs and flows depending on the current number of transactions hitting the network, and, of course, as the network congestion goes up, transaction fees go up. (You can find a very useful site for inspecting the current backlog of transactions in the mempool and current transaction fees at https://jochen-hoenicke.de/queue/#0,all
.)
Some nodes are mining nodes. These nodes add blocks to the blockchain, in a competition to earn Bitcoin. These nodes are also creating memory pools, collections of transactions that need to be added to the blockchain.
Competing for Bitcoin, the ten-minute contest
Here’s how the mining competition works. We’ll begin at the point at which a miner has just won the right to add a block to the blockchain. When this happens, the winner sends the winning block out across the network, and it gets picked up by the nodes and added to their versions of the blockchain. That’s when the next competition begins.
Each round of this game is designed to last around ten minutes; remember, one purpose of mining is to dribble new Bitcoin into the blockchain at a set rate; currently 12.5 Bitcoin every ten minutes. On average, a miner will succeed at the game every ten minutes, will be rewarded cryptocurrency, and the game restarts.
A miner receiving the new block first compares the block to the miner’s mempool and removes transactions from the mempool that have been added to the latest block, leaving only transactions that have not yet been added to the blockchain.
The miner then gathers together transactions from the mempool into a new block, which is known as a candidate block . This block can be added to the blockchain, if the miner can win the competition.
A hash is a long number that is a kind of fingerprint for a set of data. That data, when passed through the same hashing algorithm, will always produce the same hash, and that hash cannot match any other set of data. The hash identifies the data uniquely. For more on hashing, see Chapter 2.
The miner creates a block header for the block, which includes a timestamp, a software version number, the hash of the previous block, and the hash of the block’s transaction’s Merkle tree root (never mind, you don’t have to know about Merkle trees). The block header contains another couple of things that are related to the game that the miner has to play to compete against the other miners.
So now thousands of mining computers around the world that have created candidate blocks of data — records of transactions — are eager to add their own blocks to the blockchain. So the system has a choice to make: Which block, from which miner, will be added to the blockchain? That decision is based on a combination of chance and computing power. The Bitcoin network uses something called a proof of work task. All the miners are given the same task to undertake, and the first one to accomplish it wins, adds their block to the blockchain, and takes home the block reward: the combined transaction fees and block subsidy.
Читать дальше