I believe mining pools are a core infrastructure. Many people don’t get what miners do. They think miners just siphon off electrical power in remote areas, hook up some machines, and then somehow safeguard the security of Bitcoin.”
That’s interesting. Why say miners are committing electricity theft but also protecting the security of Bitcoin?
There is a misunderstanding here. It is miners that safeguard the security of Bitcoin ledger by continuously monitoring the network to protect it from attacks (Miners here refers to block-producing servers) .
When do these kind of attacks happen? One time was when BCH miners tried to modify the Bitcoin protocol and Doctor Wright led a campaign using Bitcoin SV nodes to protect against the attack.
Protecting the ledger is pretty simple. It mostly entails using the `invalidateblock` command to reject attacking blocks. In such situations, miners cast votes using their hash rate to protect the real Bitcoin ledger.
Elaborate on that. What would people see in practice?
Early on in the Bitcoin world, there was a saying “transactions are safe after 6 confirmations”. That’s why many people focus on confirmations when they transfer or receive assets. Confirmations equals blocks. It means a transaction has been included in a certain block and written in a certain ledger that could end up as a fork. Why are 6 confirmations considered to be secure? It’s possible that at any time alternate forks appear on the blockchain. In those forks the user’s transaction might not have been included. If one of those becomes the leading chain with the most confirmed blocks, the user’s transaction would not be included, so they present a security concern for the users’ funds.
In this essential issue, I must to resolutely assert that in the Bitcoin world, transactions rather than blocks are the most important factor. This is because each transaction comes from the sender signed with a digital signature --- a genuine and reliable digital proof. This proof is guaranteed by the transaction itself, and does not rely on being in a block.
Miners play a significant role in selecting the different versions of a transaction. What is their role? Each miner can verify the transactions they receive to see if they are legitimate. Meanwhile, each miner broadcasts the transaction information they received to the others. There is an economic incentive driving this process. Why does the miner need to broadcast the transaction?
Because when he broadcasts transaction information to others at a higher speed, the created block will be transmitted to the other miners more efficiently. There is an economic incentive for miners to reduce the rate of orphan blocks.
Miners are incentivized to increase their earnings by maintaining both a competitive and cooperative relationship with the others. This is another economic driver.
At this point, let’s imagine that a double-spending transaction suddenly appears. The miner will compare the transaction with other versions, that is to check if the transaction was accepted by other mining pools. If a transaction is recognized by 99% of the computing power, we can be 99% sure that this transaction will be written into the ledger of the next block. If a transaction on the network doesn’t receive any double-spending notifications, the transaction will be written into the ledger. This is the “0 confirmation transaction” we often talk about.
Therefore, “0 confirmation” doesn’t mean that there can’t be any double-spending on the network. This is important. Many developers believe that “The real Bitcoin network should reject any double-spending transactions. We can’t let them exist.” However, this does not matter. What is important is that the receiving party should be aware of the risk of double spending in the received transaction. If so, the miner’s task is complete.
What could be the cause of double spending?
It is only possible that the person in this transaction is cheating, because he is the only person who can sign another version of the transaction. Therefore, developers should:
- Regard transactions, not confirmations as foundational.Block confirmations are actually not important.
- After receiving a transaction, one should confirm the transaction with all other miners as soon as possible to confirm whether there is another version of the transaction on the network. Many developers aren’t actually doing this now. Most of them still just rely on broadcasting transactions. I will explain the problems behind broadcasting later.
Imagine a situation where a certain transaction does not have a double-spending transaction on the network. However, after 10 minutes, we find a new block with a double-spend that overwrites the original one. This is known as mining attack. A malicious miner creates a block which double spent the user’s coins. This double-spending behavior can be detected by other miners. That’s because when a miner goes to accept a transaction, they will confirm it with all the other mining pools. The miner knows that this transaction is visible to everyone, recognized by everyone, and legitimate. However, when the next block suddenly appears on the network and includes a double-spending transaction that contradicts the transaction from the last block, it can only mean the Bitcoin network has been attacked. Let’s go back to the previous question, “what do miners do to protect the Bitcoin ledger?” The answer is miners detect possible double-spending transactions and reject blocks whose version of the ledger wasn’t accepted by other mining pools.
At this moment, network forks are inevitable, because us honest miners must stick to the most authentic ledger.
Therefore, we won’t agree with the attitude some others promote, saying ”If you receive a block that’s been attacked but it came out the fastest you should accept it. You should put your hash power behind it as well”. This is a big conceptual misunderstanding. If you are not familiar with the concept of mining, you may mistakenly think that the cost of double spending Bitcoin SV is very low as it only takes 1% or more of the computing power of the entire network to launch an attack, therefore you could run off with the BSV ledger and modify it at will.
If this is the case, I welcome any attacker to come attempt it. Us miners will stick to the honest ledger no matter how much computing power is behind it. We will stick to it until we go bankrupt. So it’s not as simple as “I just confirmed 6 blocks, and now all the other ledgers and transactions must follow me”.
Suppose you have seen two different versions of the ledger on the network. One ledger is honest, but its computing power is temporarily low, and the other is an attacking ledger with many illegal double-spent transactions. Then the question remains, will you choose a ledger with greater computing power or an honest ledger? I leave this question to all parties involved, all exchanges, and to all application developers. They will have their own judgment.
Let’s go back and explain the “broadcasting” mentioned earlier.
Broadcasting is actually a form of magic that has entranced many under its spell. What they think is that as a miner, I am on the stage making announcements to everyone. I will proclaim all the transactions I’ve received. It is like the whole world has instantly heard my words and naturally, they recorded the new transaction on the ledger. And now this transfer is magically complete. I just yell at the sky how much money I transfer to the other party, and then the other party receives the money. This is the magic that people imagine.
In the Bitcoin world, there’s no such thing as the ‘broadcast’ that everyone imagines. Traditionally, each node only maintains 6-7 connections to other nodes. Assuming you receive a transaction and you forward it to the next node, you can only broadcast to 6-7 other nodes at most. In essence, this is the transmission of transactions not broadcasting, but now many people misunderstand it as broadcasting.
In fact, there isn’t such a way for you to scream at the network to ensure it has been transmitted to all nodes on the network. This is very hard to achieve. Therefore, when we are developing, we need to remind ourselves that we cannot rely on the P2P network or broadcasting to deliver transactions. Using that incorrect way, the actual cost becomes borne by the receiver. The receiver first needs to filter through every message on the current network, then find the message related to himself and only then can he confirm the amount he received.
Let’s make an analogy. Say I want to transfer my money to Lise and I wrote it on a check. After that, I threw it on the ground, telling Lise that my money was transferred to her and it was already sent out. When will she receive the check? It depends on if, when, and who will pick up the check and put it in her hands.
Fundamentally, we use Bitcoin so it can reduce costs. So why would we want to deliver transactions in such an inefficient way? Why not just write the check directly and give it to her? This is another common misunderstanding in the Bitcoin world. They don’t realize that transactions are actually peer-to-peer.
What this means is that after the transaction is signed and sent to the other party, only the recipient cares whether or not she has received the money. She will be the one who is anxious about it, and will be motivated to send the transaction to all the miners she can contact, asking them to detect whether it was double spent on the network, and asking them to include this transaction into the ledger. This is the real proper procedure of a Bitcoin transaction.
If every transaction still relied on P2P network broadcasting and then used some other interface to monitor the transmission of P2P messages in order to receive transactions, the entire process would be extremely inefficient. This approach will become very difficult and costly in the future when we implement GB-level or even TB-level blocks.
Therefore, from now on, all developers should abandon the practice of broadcasting transactions. There won’t be the concept of broadcasting in the future. Instead, you’ll just sign the transaction and send it to directly to the other party. The payee will verify and submit the transaction. Only in this way can we achieve the expansion of Bitcoin and help our miners reach TB-level blocks at a higher speed. Otherwise it will break the whole infrastructure, and don’t come crying to us miners if it does.
At present, when we use wallets including DotWallet, there is a common issue: if a user frequently uses the wallet, there will be thousands of Bitcoin addresses used, and that will lead to a huge performance problem. We have to monitor the network to ensure that with so many receiving addresses, each amount received can be credited to the user safely and accurately. The whole thing looks quite strange. Still, we need to monitor to see who signed the check, then drop it on the ground, and figure out a way to pick it up. It has greatly increased transaction costs on the Bitcoin network. You can imagine that many wallets in the current ecosystem will gradually abandon this collection mode. All future transactions will adopt a peer-to-peer mode, and we will also provide a set of infrastructure including PKI(Public Key Infrastructure) and CA (Certification Authority) to assist our users in completing peer-to-peer transactions. In this way, transactions can be directly transferred to the other party.