# A Brief History of Money - nakamoto.com

• A Brief History of Money - nakamoto.com
• Unsere Produkte | House of Nakamoto
• Satoshi Nakamoto Tee – The Store at Bitcoin.com
• Bitcoin Vision – The Original vision of Satoshi Nakamoto
• What are Bitcoins: Scam or real London Business News
##### Bitcoin - The Internet of Money

/btc was created to foster and support free and open Bitcoin discussion, Bitcoin news, and exclusive AMA (Ask Me Anything) interviews from top Bitcoin industry leaders! Bitcoin is the currency of the Internet. A distributed, worldwide, decentralized digital money. Unlike traditional currencies such as dollars, bitcoins are issued and managed without the need for any central authority whatsoever.

##### Any bitcoin ATMs available in San Francisco, CA?

Had been planning to try the one at Workshop Cafe in d/t, but found out today that they've removed it.
Nakamoto's Bitcoin Store isn't answering their phone, so I can't find out if they have theirs yet (website says coming soon).
I figure this town's got to have at least one bitcoin ATM available; anyone know where it is?

##### Since they're calling for r/btc to be banned...

Maybe it's time to discuss bitcoin's history again. Credit to u/singularity87 for the original post over 3 years ago.

People should get the full story of bitcoin because it is probably one of the strangest of all reddit subs.
bitcoin, the main sub for the bitcoin community is held and run by a person who goes by the pseudonym u/theymos. Theymos not only controls bitcoin, but also bitcoin.org and bitcointalk.com. These are top three communication channels for the bitcoin community, all controlled by just one person.
For most of bitcoin's history this did not create a problem (at least not an obvious one anyway) until around mid 2015. This happened to be around the time a new player appeared on the scene, a for-profit company called Blockstream. Blockstream was made up of/hired many (but not all) of the main bitcoin developers. (To be clear, Blockstream was founded before mid 2015 but did not become publicly active until then). A lot of people, including myself, tried to point out there we're some very serious potential conflicts of interest that could arise when one single company controls most of the main developers for the biggest decentralised and distributed cryptocurrency. There were a lot of unknowns but people seemed to give them the benefit of the doubt because they were apparently about to release some new software called "sidechains" that could offer some benefits to the network.
Not long after Blockstream came on the scene the issue of bitcoin's scalability once again came to forefront of the community. This issue came within the community a number of times since bitcoins inception. Bitcoin, as dictated in the code, cannot handle any more than around 3 transactions per second at the moment. To put that in perspective Paypal handles around 15 transactions per second on average and VISA handles something like 2000 transactions per second. The discussion in the community has been around how best to allow bitcoin to scale to allow a higher number of transactions in a given amount of time. I suggest that if anyone is interested in learning more about this problem from a technical angle, they go to btc and do a search. It's a complex issue but for many who have followed bitcoin for many years, the possible solutions seem relatively obvious. Essentially, currently the limit is put in place in just a few lines of code. This was not originally present when bitcoin was first released. It was in fact put in place afterwards as a measure to stop a bloating attack on the network. Because all bitcoin transactions have to be stored forever on the bitcoin network, someone could theoretically simply transmit a large number of transactions which would have to be stored by the entire network forever. When bitcoin was released, transactions were actually for free as the only people running the network were enthusiasts. In fact a single bitcoin did not even have any specific value so it would be impossible set a fee value. This meant that a malicious person could make the size of the bitcoin ledger grow very rapidly without much/any cost which would stop people from wanting to join the network due to the resource requirements needed to store it, which at the time would have been for very little gain.
Towards the end of the summer last year, this bitcoin scaling debate surfaced again as it was becoming clear that the transaction limit for bitcoin was semi regularly being reached and that it would not be long until it would be regularly hit and the network would become congested. This was a very serious issue for a currency. Bitcoin had made progress over the years to the point of retailers starting to offer it as a payment option. Bitcoin companies like, Microsoft, Paypal, Steam and many more had began to adopt it. If the transaction limit would be constantly maxed out, the network would become unreliable and slow for users. Users and businesses would not be able to make a reliable estimate when their transaction would be confirmed by the network.
Users, developers and businesses (which at the time was pretty much the only real bitcoin subreddit) started to discuss how we should solve the problem bitcoin. There was significant support from the users and businesses behind a simple solution put forward by the developer Gavin Andreesen. Gavin was the lead developer after Satoshi Nakamoto left bitcoin and he left it in his hands. Gavin initially proposed a very simple solution of increasing the limit which was to change the few lines of code to increase the maximum number of transactions that are allowed. For most of bitcoin's history the transaction limit had been set far far higher than the number of transactions that could potentially happen on the network. The concept of increasing the limit one time was based on the fact that history had proven that no issue had been cause by this in the past.
A certain group of bitcoin developers decided that increasing the limit by this amount was too much and that it was dangerous. They said that the increased use of resources that the network would use would create centralisation pressures which could destroy the network. The theory was that a miner of the network with more resources could publish many more transactions than a competing small miner could handle and therefore the network would tend towards few large miners rather than many small miners. The group of developers who supported this theory were all developers who worked for the company Blockstream. The argument from people in support of increasing the transaction capacity by this amount was that there are always inherent centralisation pressure with bitcoin mining. For example miners who can access the cheapest electricity will tend to succeed and that bigger miners will be able to find this cheaper electricity easier. Miners who have access to the most efficient computer chips will tend to succeed and that larger miners are more likely to be able to afford the development of them. The argument from Gavin and other who supported increasing the transaction capacity by this method are essentially there are economies of scale in mining and that these economies have far bigger centralisation pressures than increased resource cost for a larger number of transactions (up to the new limit proposed). For example, at the time the total size of the blockchain was around 50GB. Even for the cost of a 500GB SSD is only $150 and would last a number of years. This is in-comparison to the$100,000's in revenue per day a miner would be making.
Various developers put forth various other proposals, including Gavin Andresen who put forth a more conservative increase that would then continue to increase over time inline with technological improvements. Some of the employees of blockstream also put forth some proposals, but all were so conservative, it would take bitcoin many decades before it could reach a scale of VISA. Even though there was significant support from the community behind Gavin's simple proposal of increasing the limit it was becoming clear certain members of the bitcoin community who were part of Blockstream were starting to become increasingly vitriolic and divisive. Gavin then teamed up with one of the other main bitcoin developers Mike Hearn and released a coded (i.e. working) version of the bitcoin software that would only activate if it was supported by a significant majority of the network. What happened next was where things really started to get weird.
While this was all going on, Blockstream and it's employees started lobbying the community by paying for conferences about scaling bitcoin, but with the very very strange rule that no decisions could be made and no complete solutions could be proposed. These conferences were likely strategically (and successfully) created to stunt support for the scaling software Gavin and Mike had released by forcing the community to take a "lets wait and see what comes from the conferences" kind of approach. Since no final solutions were allowed at these conferences, they only served to hinder and splinter the communities efforts to find a solution. As the software Gavin and Mike released called BitcoinXT gained support it started to be attacked. Users of the software were attack by DDOS. Employees of Blockstream were recommending attacks against the software, such as faking support for it, to only then drop support at the last moment to put the network in disarray. Blockstream employees were also publicly talking about suing Gavin and Mike from various different angles simply for releasing this open source software that no one was forced to run. In the end Mike Hearn decided to leave due to the way many members of the bitcoin community had treated him. This was due to the massive disinformation campaign against him on bitcoin. One of the many tactics that are used against anyone who does not support Blockstream and the bitcoin developers who work for them is that you will be targeted in a smear campaign. This has happened to a number of individuals and companies who showed support for scaling bitcoin. Theymos has threatened companies that he will ban any discussion of them on the communication channels he controls (i.e. all the main ones) for simply running software that he disagrees with (i.e. any software that scales bitcoin).
As time passed, more and more proposals were offered, all against the backdrop of ever increasing censorship in the main bitcoin communication channels. It finally come down the smallest and most conservative solution. This solution was much smaller than even the employees of Blockstream had proposed months earlier. As usual there was enormous attacks from all sides and the most vocal opponents were the employees of Blockstream. These attacks still are ongoing today. As this software started to gain support, Blockstream organised more meetings, especially with the biggest bitcoin miners and made a pact with them. They promised that they would release code that would offer an on-chain scaling solution hardfork within about 4 months, but if the miners wanted this they would have to commit to running their software and only their software. The miners agreed and the ended up not running the most conservative proposal possible. This was in February last year. There is no hardfork proposal in sight from the people who agreed to this pact and bitcoin is still stuck with the exact same transaction limit it has had since the limit was put in place about 6 years ago. Gavin has also been publicly smeared by the developers at Blockstream and a plot was made against him to have him removed from the development team. Gavin has now been, for all intents an purposes, expelled from bitcoin development. This has meant that all control of bitcoin development is in the hands of the developers working at Blockstream.
There is a new proposal that offers a market based approach to scaling bitcoin. This essentially lets the market decide. Of course, as usual there has been attacks against it, and verbal attacks from the employees of Blockstream. This has the biggest chance of gaining wide support and solving the problem for good.

##### The attempted come back of CoinEx, China's forked-Bitcoin exchange

Written by Shuyao Kong
An interview with Haipo Yang, a crypto OG who’s trying to reposition his Bitcoin Cash-based CoinEx exchange. And more, in this week’s da bing.
https://preview.redd.it/h5f3i3lldv051.jpg?width=3200&format=pjpg&auto=webp&s=09b8696303ae5c6170753cc438929ebe520d4605
Haipo Yang, founder of ViaBTC, one of the largest mining pools in the world, and CoinEx, a crypto exchange known for its focus on Bitcoin Cash-based trading, is a well-known but relatively quiet character in China’s crypto circle. Typically, Yang doesn’t talk that much about his journey launching the mining pool, nor about CoinEx, which launched in December 2017.
And he almost never speaks about his fervent support for BCH, a hard fork of Bitcoin, and his now even more enthusiastic belief in BSV.
Yet that’s changing of late. Yang has been more active in recent months, participating in interviews about CoinEx and tweeting more frequently on Weibo, China’s Twitter. He’s been making controversial statements predicting the death of BTC, while supporting BCH and BSV on social media.
Recently, Yang told me that as a developer rather than a business person, he’s never been comfortable speaking in public. However he’s making an effort now to help publicize his renovation of CoinEx. So, for this week’s da bing, I decided to chat with him and get a peek into the mind of a veteran crypto entrepreneur who’s trying to make a personal, as well as a platform, comeback.

# CoinEx’s golden opportunity

The first hard fork of Bitcoin occurred in August, 2017 and created a new cryptocurrency called Bitcoin Cash. The fork was prompted by partisans, including Yang, who wanted bigger block sizes on the blockchain — the basic idea was that bigger blocks would enable more transactions per second and make Bitcoin Cash something people would actually use to buy things, rather than Bitcoin’s more commonly perceived use as a store of value.
Yang added a tremendous amount of value to the mining scene in China. As a technical founder with has years of experience in big tech firms such as Tencent, Yang is proud of his #buidl skills. He developed most of the code in the early days of VicBTC, which became one of the biggest mining pools to this day.
Not satisfied with owning just a mining pool,Yang conceived of CoinEx, which was born in December of that year, specifically to carry on the mission of the newly forked Bitcoin Cash blockchain. As he got swept up in Bitcoin Cash enthusiasm, he even said that “BCH is bitcoin.”
CoinEx’s strategy was BCH-focused from day one; BCH was its base currency, meaning you could use it to buy and sell other currencies, such as Ethereum and Litecoin.
Interestingly, Jihan Wu, the co-founder of Bitcoin Exchange — himself a famous BCH supporter — was a big investor in the exchange. That made me wonder why he, Yang, and many other OG crypto miners, were so passionate about BCH. Was it just about bigger block sizes?
“Bigger block size means more users and use cases,” Yang explained. The move to bigger block sizes was attractive to miners because they would facilitate more transactions. Miners make money on transaction fees, as well as mining blocks. Likewise, the network would arguably be more useful to people, who were looking for digital cash for every day use.
That especially resonated with many early hardcore Bitcoiners. Said Yang: “We really believe that Bitcoin should be a P2P cash vehicle rather than a store of value.”
This view probably sounds outdated to people who believe that Bitcoin’s value as cash is long gone, with solutions such as Lightning Network fulfilling that role. Instead, the new narrative for Bitcoin resides in its value, rather than utility. Yet Yang believed that the forked network would create far more opportunity
“We could invite influential companies to establish nodes and contribute to the network. This cannot be done with the original Bitcoin architecture,” he said.

# CoinEx pivots

But from its inception, CoinEx struggled with adoption and was dwarfed by the bigger exchanges. Part of that had to do with the fact that BCH and “Bitcoin Satoshi’s Vision,” another Bitcoin hard fork, were both controversial. Critics pointed out that these networks are centralized in a few big mining pools, and 51% attacks are not out of the question.
So over time, though Yang’s exchange still maintains strong support for BCH and BSV, it began to add support for all the major currencies.
Finally, in January of this year, it announced a major upgrade, of… well, just about everything. It started to offer futures trading, leveraged trading, options trading, and over 100 token projects available to traders. It even rolled out its own blockchain, “CoinEx Chain” to support a new DEX, “CoinEx DEX.”
https://preview.redd.it/3okoy5mudv051.png?width=1432&format=png&auto=webp&s=7099249da4a95db873d268f2dfc95d8db93a368e
The seemingly sudden publicity of CoinEx should not come as a surprise, then. As BCH/BSV was being marginalized, Yang shifted his focus. He’s now trying to ride the wave of building a bigger, more dynamic exchange.
“Crypto exchanges are where value is discovered,” Yang told me.

# CoinEx: TNG

Building an exchange isn’t done overnight, nor is re-building one. CoinEx is still competing with the giants such as Binance.
However Yang thinks his exchange will thrive by zigging when his competitors zag. As usual, CoinEx is taking a slightly different route, he told me.
Like what? “We will be listing 小币种,” he said, using the expression for “small token projects.” I cannot help but wonder if these “small token projects” are simply shitcoins, the trading of which is certainly not new.
Indeed, Yang said that he’s banking on the success of his new, public blockchain. “We are building a CoinEx Chain, a layer one protocol for DEX alone. Using our public blockchain, anyone can issue any token, at any time,” he said. He described the blockchain as “a real decentralized, token-issuance and transaction platform.”
This is the core of Yang’s plan and vision. He believes that centralized exchanges will be a bottleneck for crypto adoption because it contradicts crypto’s nature as a completely free and open infrastructure. Essentially anyone should be able to launch a token and trade it with anyone. Only by building DEXes can we achieve full decentralization, he says.

# The Religious nature of Bitcoin, and forked Bitcoin

It’s his belief that Bitcoin should adhere to Satoshi’s original vision that led Yang to send yet another controversial tweet last week, which I will translate: “The early days of Bitcoin expansion are similar to religion. The religious fervor brings prosperity to the industry.”
By extension, Yang believes that the next generation of Bitcoin should provoke a similar “religious” fervor. That’s why he has slowly become more of a BSV advocate than a fan of Bitcoin Cash. Yang believes that “BSV has more religious connotations, despite its negative image.” (As most crypto people know, the controversial Craig Wright, who claims to be Satoshi Nakamoto, led the hard fork which created BSV. Consequently it is often met with skepticism and derision.)
“The early days of Bitcoin expansion are similar to religion,” said Yang. “The religious fervor brings prosperity to the industry.”
Crypto is famous for its tribalism. Many people choose one camp over another not for practical reasons but because of simple faith. Talking to Yang and reading his tweet brings a historic texture to the Bitcoin narrative. But crypto cannot survive on religion alone. One has to build. Hash might have been worshipped in the old days but now the crypto religion is all about the size of the congregation.
Original article

##### BSoV: The Minable and Deflationary ERC20

The year 2020 exposed many of the negative aspects of the current financial construct which the world relies on. On 4/9/2020, the Federal Reserve announced that they would inject another $2,300,000,000,000 (2.3 Trillion, you read that right) into the U.S. economy. With the threat of Covid-19 essentially shutting down the daily operations of the economy overnight, something HAD to be done, right? Were there any other options? Many people are expecting a$1,200 stimulus check to cushion the pockets of people affected by the mass layoffs and market collapses. I myself asked a simple question, "What are the long term consequences of diluting the market with the USD?"
This question is one that should be asked over, and over, and over by every single person who receives a paycheck from their employer or government regardless of where you reside in the world. The U.S. dollar is the dominant monetary force in the global economy, and it dictates much of the value of all things being bought, sold, and utilized in said economy. It is common and public knowledge that the dollar has been subject to inflation: in 1913, the same $100 you had then would only have the purchasing power of a about$26 today. One could expect, in theory, that this number will diminish even more because of the drastic amount of USD injection occuring because of this pandemic. Most people cant afford basic necessities because of this ridiculous level of inflation caused at the hands of the Fed.
As many of you know, Satoshi Nakamoto had a response to this type of stimulus and bailout system the Federal Reserve has created and enlisted at any opportunity to respond to a crisis. It was called Bitcoin, and today it has become a financial power to be reckoned with. It has brought governments to terms with the fact that their systems are not efficient, along with putting power back into the peoples hands when it comes to controlling and utilizing their own money. There are no restrictions on how much Bitcoin you can send. There are no restrictions on whom you can send it to, and there are no ways to hide whom you've sent it to using blockchain technology and cryptography to secure its network and create a database of all transactions. The creation of Bitcoin was an answer to many of the problems with the financial system.
On June 17th, 2019, a person under the pseudonym "Mundo" also tried to provide an answer to some of these problems with a laser focus on inflation. The solution he proposed (we have not seen the long term benefits, so the solution is not quite yet an answer) is BSoV, or BitcoinSoV (Bitcoin Store of Value). BSoV is an ERC20 token which utilizes the EIP918 protocol first utilized by a similar token called 0xBTC. EIP918 allows both BSoV and 0xBTC to be minable on the Ethereum blockhain via a smart contract. Following the same distribution model, consensus mechanism, and total supply of Bitcoin (Fair Start, meaning no ICO, Premine, or developers fees; Mined using PoW, specifically Solidity SHA3; 21,000,000 total supply, 3.6 million mined thus far, divisible to 8 decimal points, with the same amount of halving eras as BTC) BSoV differs in one very different way: a 1% transaction burn built into its code.
With BSoV, every transaction is subject to a mandatory 1% transaction burn when a transaction is sent and confirmed on the Ethereum blockchain. The deflationary mechanism is the solution that Mundo proposed as an answer to the inflation the peoples money is exposed to because of the negligent actions of the Fed. This inflation is created out of the control of the people, and their purchasing power is diminished. With BSoV, the deflationary aspect is out of there control, but the end result is the opposite; an increase in its value due to scarcity and exchange of resources from its consensus mechanism. (This is a great scholarly article which details how mining provides a bottom value to PoW coins/tokens due to resource exchange, ie. Computing power, electricity, etc. https://www.sciencedirect.com/science/article/abs/pii/S0736585315301118)
It's important to note that the project has not been around long enough to see its end goal or vision come to fruition. This is precisely why I am writing this article. More is needed to help study and analyze if this is the answer to this problem. What I can say is that this is one of the few real potential answers that have been proposed, created and implemented to try and combat the Fed. With mass adoption, can we have a true store of value solution that protects itself from the self burdening negligence of the powers that be? Do we have to keep loaning our money to banks to invest for free, only for them to need a bailout every 10-20 years due to poor monetary management and investing sprees? An immutable smart contract that cannot be 51% attacked or controlled by those in power might be worth pursuing.
I'd like to end this article on a more transparent note about myself and my involvement with the project to help shed light on any apparent bias or misconceptions that some may have about my intentions here. I am one of 950 current holders and community members. I mined BSoV after I joined the telegram group and got involved on July 4th, 2019. I have never been paid for my work here, and it is strictly something that I believe in and want to help shed light on to those who might be interested in what the project has to offer. Just like many of the cryptocurrency enthusiast on the on P2P mailing list in 2009, many of us are working together tirelessly to bring one of the few tokens with integrity, transparency and ethics to those who want to experiment and see what may happen.
Something that I have also asked my self is "Whats the worst that can happen?" when it comes to my involvement here.
If the worst is a little time wasted on something I believed in, I will sleep fine at night. But if I am so fortunate to be apart of something that could truly change lives and alter the never-ending downtrend of inflation which has made life so difficult for the average human being, I will have a better nights sleep than I could have ever imagined.
Thank you for your time. I wish all of you health, wealth, and safety during this difficult time.
Sincerely,
BSoV_Chris
(You can find out more @ BSoV.io)

Watch the new episode of the Bitcoin.com Weekly News Show with Roger Ver here:
https://bit.ly/3bGsnfA
Find out why you are not watching this Weekly News Show episode on YouTube; how did the recent BCH Upgrade go, and more about NFC payments with BCH on be.cash!
►►►Hit the follow button to subscribe to our LBRY.tv channel:
https://lbry.tv/@Bitcoincom:c
Timestamps:
0:05 - BCH Upgrade Complete: 3 New Features Added to Consensus Rules
1:05 - Thoughts on the ‘Bitcoin - Unmasking Satoshi Nakamoto’ video
2:00 - There is an attempt to rewrite the history of BCH
2:53 - The average Bitcoin transaction fees are high again
3:01 - YouTube gave a strike to the Bitcoin.com - Official Channel
3:47 - There's more Bitcoin on Ethereum than in the Lightning Network
5:20 - NFC payments with Bitcoin Cash on be.cash
Unconfirmed transaction chain limit has increased from 25 to 50. New opcode support, and improved counting of signature operations were also added.Source:
►Watch ‘Bitcoin - Unmasking Satoshi Nakamoto’:https://youtu.be/XfcvX0P1b5g
►Follow btc for open and free discussions on Bitcoin:https://www.reddit.com/btc/
►Check the average next block fees of BCH and BTC:https://bitcoinfees.cash/
►Watch our video banned banned from YouTube at LBRY.tv:
‘What do miners think about the Bitcoin.com Mining Pool?’:
►There's more Bitcoin on Ethereum than in the Lightning Network:
Source:https://decrypt.co/28414/theres-more-bitcoin-on-ethereum-than-in-the-lightning-network
►NFC payments with Bitcoin Cash on the be.cash register app:
Visit:https://be.cash/https://t.me/be_cash
►Are you a developer? Change the world with Bitcoin Cash:https://developer.bitcoin.com/
Follow our other social media channels:
►Instagram: https://www.instagram.com/bitcoin.com_official/
►Uptrennd: https://www.uptrennd.com/usebitcoincom
iOS: https://apple.co/2VlAHfC
Android: https://bit.ly/2VWDYkX
►Discover merchants accepting BCH near you: https://map.bitcoin.com/
►If you’re a merchant and want to accept BCH visit: https://www.bitcoin.com/bitcoin-cash-register
iOs: https://apple.co/39GvALh
Android: https://bit.ly/2VMHsGk
►Get instant privacy with CashFusion: https://www.bitcoin.com/cashfusion-fund/
►Get the latest crypto-related news: https://news.bitcoin.com/
►Shop our merch at the Bitcoin.com Store: https://store.bitcoin.com
► Listen to our Podcast on these platforms:
https://the.roger.ver.show.buzzsprout.com/
https://podcast.bitcoin.com/

##### Dive Into Tendermint Consensus Protocol (I)

This article is written by the CoinEx Chain lab. CoinEx Chain is the world’s first public chain exclusively designed for DEX, and will also include a Smart Chain supporting smart contracts and a Privacy Chain protecting users’ privacy.
longcpp @ 20200618
This is Part 1 of the serialized articles aimed to explain the Tendermint consensus protocol in detail.
Part 1. Preliminary of the consensus protocol: security model and PBFT protocol
Part 2. Tendermint consensus protocol illustrated: two-phase voting protocol and the locking and unlocking mechanism
Part 3. Weighted round-robin proposer selection algorithm used in Tendermint project
Any consensus agreement that is ultimately reached is the General Agreement, that is, the majority opinion. The consensus protocol on which the blockchain system operates is no exception. As a distributed system, the blockchain system aims to maintain the validity of the system. Intuitively, the validity of the blockchain system has two meanings: firstly, there is no ambiguity, and secondly, it can process requests to update its status. The former corresponds to the safety requirements of distributed systems, while the latter to the requirements of liveness. The validity of distributed systems is mainly maintained by consensus protocols, considering the multiple nodes and network communication involved in such systems may be unstable, which has brought huge challenges to the design of consensus protocols.

## The semi-synchronous network model and Byzantine fault tolerance

Researchers of distributed systems characterize these problems that may occur in nodes and network communications using node failure models and network models. The fail-stop failure in node failure models refers to the situation where the node itself stops running due to configuration errors or other reasons, thus unable to go on with the consensus protocol. This type of failure will not cause side effects on other parts of the distributed system except that the node itself stops running. However, for such distributed systems as the public blockchain, when designing a consensus protocol, we still need to consider the evildoing intended by nodes besides their failure. These incidents are all included in the Byzantine Failure model, which covers all unexpected situations that may occur on the node, for example, passive downtime failures and any deviation intended by the nodes from the consensus protocol. For a better explanation, downtime failures refer to nodes’ passive running halt, and the Byzantine failure to any arbitrary deviation of nodes from the consensus protocol.
Compared with the node failure model which can be roughly divided into the passive and active models, the modeling of network communication is more difficult. The network itself suffers problems of instability and communication delay. Moreover, since all network communication is ultimately completed by the node which may have a downtime failure or a Byzantine failure in itself, it is usually difficult to define whether such failure arises from the node or the network itself when a node does not receive another node's network message. Although the network communication may be affected by many factors, the researchers found that the network model can be classified by the communication delay. For example, the node may fail to send data packages due to the fail-stop failure, and as a result, the corresponding communication delay is unknown and can be any value. According to the concept of communication delay, the network communication model can be divided into the following three categories:
• The synchronous network model: There is a fixed, known upper bound of delay $\Delta$ in network communication. Under this model, the maximum delay of network communication between two nodes in the network is $\Delta$. Even if there is a malicious node, the communication delay arising therefrom does not exceed $\Delta$.
• The asynchronous network model: There is an unknown delay in network communication, with the upper bound of the delay known, but the message can still be successfully delivered in the end. Under this model, the network communication delay between two nodes in the network can be any possible value, that is, a malicious node, if any, can arbitrarily extend the communication delay.
• The semi-synchronous network model: Assume that there is a Global Stabilization Time (GST), before which it is an asynchronous network model and after which, a synchronous network model. In other words, there is a fixed, known upper bound of delay in network communication $\Delta$. A malicious node can delay the GST arbitrarily, and there will be no notification when no GST occurs. Under this model, the delay in the delivery of the message at the time $T$ is $\Delta + max(T, GST)$.
The synchronous network model is the most ideal network environment. Every message sent through the network can be received within a predictable time, but this model cannot reflect the real network communication situation. As in a real network, network failures are inevitable from time to time, causing the failure in the assumption of the synchronous network model. Yet the asynchronous network model goes to the other extreme and cannot reflect the real network situation either. Moreover, according to the FLP (Fischer-Lynch-Paterson) theorem, under this model if there is one node fails, no consensus protocol will reach consensus in a limited time. In contrast, the semi-synchronous network model can better describe the real-world network communication situation: network communication is usually synchronous or may return to normal after a short time. Such an experience must be no stranger to everyone: the web page, which usually gets loaded quite fast, opens slowly every now and then, and you need to try before you know the network is back to normal since there is usually no notification. The peer-to-peer (P2P) network communication, which is widely used in blockchain projects, also makes it possible for a node to send and receive information from multiple network channels. It is unrealistic to keep blocking the network information transmission of a node for a long time. Therefore, all the discussion below is under the semi-synchronous network model.
The design and selection of consensus protocols for public chain networks that allow nodes to dynamically join and leave need to consider possible Byzantine failures. Therefore, the consensus protocol of a public chain network is designed to guarantee the security and liveness of the network under the semi-synchronous network model on the premise of possible Byzantine failure. Researchers of distributed systems point out that to ensure the security and liveness of the system, the consensus protocol itself needs to meet three requirements:
• Validity: The value reached by honest nodes must be the value proposed by one of them
• Agreement: All honest nodes must reach consensus on the same value
• Termination: The honest nodes must eventually reach consensus on a certain value
Validity and agreement can guarantee the security of the distributed system, that is, the honest nodes will never reach a consensus on a random value, and once the consensus is reached, all honest nodes agree on this value. Termination guarantees the liveness of distributed systems. A distributed system unable to reach consensus is useless.

## The CAP theorem and Byzantine Generals Problem

In a semi-synchronous network, is it possible to design a Byzantine fault-tolerant consensus protocol that satisfies validity, agreement, and termination? How many Byzantine nodes can a system tolerance? The CAP theorem and Byzantine Generals Problem provide an answer for these two questions and have thus become the basic guidelines for the design of Byzantine fault-tolerant consensus protocols.
Lamport, Shostak, and Pease abstracted the design of the consensus mechanism in the distributed system in 1982 as the Byzantine Generals Problem, which refers to such a situation as described below: several generals each lead the army to fight in the war, and their troops are stationed in different places. The generals must formulate a unified action plan for the victory. However, since the camps are far away from each other, they can only communicate with each other through the communication soldiers, or, in other words, they cannot appear on the same occasion at the same time to reach a consensus. Unfortunately, among the generals, there is a traitor or two who intend to undermine the unified actions of the loyal generals by sending the wrong information, and the communication soldiers cannot send the message to the destination by themselves. It is assumed that each communication soldier can prove the information he has brought comes from a certain general, just as in the case of a real BFT consensus protocol, each node has its public and private keys to establish an encrypted communication channel for each other to ensure that its messages will not be tampered with in the network communication, and the message receiver can also verify the sender of the message based thereon. As already mentioned, any consensus agreement ultimately reached represents the consensus of the majority. In the process of generals communicating with each other for an offensive or retreat, a general also makes decisions based on the majority opinion from the information collected by himself.
According to the research of Lamport et al, if there are 1/3 or more traitors in the node, the generals cannot reach a unified decision. For example, in the following figure, assume there are 3 generals and only 1 traitor. In the figure on the left, suppose that General C is the traitor, and A and B are loyal. If A wants to launch an attack and informs B and C of such intention, yet the traitor C sends a message to B, suggesting what he has received from A is a retreat. In this case, B can't decide as he doesn't know who the traitor is, and the information received is insufficient for him to decide. If A is a traitor, he can send different messages to B and C. Then C faithfully reports to B the information he received. At this moment as B receives conflicting information, he cannot make any decisions. In both cases, even if B had received consistent information, it would be impossible for him to spot the traitor between A and C. Therefore, it is obvious that in both situations shown in the figure below, the honest General B cannot make a choice.
According to this conclusion, when there are $n$ generals with at most $f$ traitors (n≤3f), the generals cannot reach a consensus if $n \leq 3f$; and with $n > 3f$, a consensus can be reached. This conclusion also suggests that when the number of Byzantine failures $f$ exceeds 1/3 of the total number of nodes $n$ in the system $f \ge n/3$ , no consensus will be reached on any consensus protocol among all honest nodes. Only when $f < n/3$, such condition is likely to happen, without loss of generality, and for the subsequent discussion on the consensus protocol, $n \ge 3f + 1$ by default.
The conclusion reached by Lamport et al. on the Byzantine Generals Problem draws a line between the possible and the impossible in the design of the Byzantine fault tolerance consensus protocol. Within the possible range, how will the consensus protocol be designed? Can both the security and liveness of distributed systems be fully guaranteed? Brewer provided the answer in his CAP theorem in 2000. It indicated that a distributed system requires the following three basic attributes, but any distributed system can only meet two of the three at the same time.
1. Consistency: When any node responds to the request, it must either provide the latest status information or provide no status information
2. Availability: Any node in the system must be able to continue reading and writing
3. Partition Tolerance: The system can tolerate the loss of any number of messages between two nodes and still function normally

https://preview.redd.it/1ozfwk7u7m851.png?width=1400&format=png&auto=webp&s=fdee6318de2cf1c021e636654766a7a0fe7b38b4
A distributed system aims to provide consistent services. Therefore, the consistency attribute requires that the two nodes in the system cannot provide conflicting status information or expired information, which can ensure the security of the distributed system. The availability attribute is to ensure that the system can continuously update its status and guarantee the availability of distributed systems. The partition tolerance attribute is related to the network communication delay, and, under the semi-synchronous network model, it can be the status before GST when the network is in an asynchronous status with an unknown delay in the network communication. In this condition, communicating nodes may not receive information from each other, and the network is thus considered to be in a partitioned status. Partition tolerance requires the distributed system to function normally even in network partitions.
The proof of the CAP theorem can be demonstrated with the following diagram. The curve represents the network partition, and each network has four nodes, distinguished by the numbers 1, 2, 3, and 4. The distributed system stores color information, and all the status information stored by all nodes is blue at first.
1. Partition tolerance and availability mean the loss of consistency: When node 1 receives a new request in the leftmost image, the status changes to red, the status transition information of node 1 is passed to node 3, and node 3 also updates the status information to red. However, since node 3 and node 4 did not receive the corresponding information due to the network partition, the status information is still blue. At this moment, if the status information is queried through node 2, the blue returned by node 2 is not the latest status of the system, thus losing consistency.
2. Partition tolerance and consistency mean the loss of availability: In the middle figure, the initial status information of all nodes is blue. When node 1 and node 3 update the status information to red, node 2 and node 4 maintain the outdated information as blue due to network partition. Also when querying status information through node 2, you need to first ask other nodes to make sure you’re in the latest status before returning status information as node 2 needs to follow consistency, but because of the network partition, node 2 cannot receive any information from node 1 or node 3. Then node 2 cannot determine whether it is in the latest status, so it chooses not to return any information, thus depriving the system of availability.
3. Consistency and availability mean the loss of the partition tolerance: In the right-most figure, the system does not have a network partition at first, and both status updates and queries can go smoothly. However, once a network partition occurs, it degenerates into one of the previous two conditions. It is thus proved that any distributed system cannot have consistency, availability, and partition tolerance all at the same time.

The discovery of the CAP theorem seems to declare that the aforementioned goals of the consensus protocol is impossible. However, if you’re careful enough, you may find from the above that those are all extreme cases, such as network partitions that cause the failure of information transmission, which could be rare, especially in P2P network. In the second case, the system rarely returns the same information with node 2, and the general practice is to query other nodes and return the latest status as believed after a while, regardless of whether it has received the request information of other nodes. Therefore, although the CAP theorem points out that any distributed system cannot satisfy the three attributes at the same time, it is not a binary choice, as the designer of the consensus protocol can weigh up all the three attributes according to the needs of the distributed system. However, as the communication delay is always involved in the distributed system, one always needs to choose between availability and consistency while ensuring a certain degree of partition tolerance. Specifically, in the second case, it is about the value that node 2 returns: a probably outdated value or no value. Returning the possibly outdated value may violate consistency but guarantees availability; yet returning no value deprives the system of availability but guarantees its consistency. Tendermint consensus protocol to be introduced is consistent in this trade-off. In other words, it will lose availability in some cases.
The genius of Satoshi Nakamoto is that with constraints of the CAP theorem, he managed to reach a reliable Byzantine consensus in a distributed network by combining PoW mechanism, Satoshi Nakamoto consensus, and economic incentives with appropriate parameter configuration. Whether Bitcoin's mechanism design solves the Byzantine Generals Problem has remained a dispute among academicians. Garay, Kiayias, and Leonardos analyzed the link between Bitcoin mechanism design and the Byzantine consensus in detail in their paper The Bitcoin Backbone Protocol: Analysis and Applications. In simple terms, the Satoshi Consensus is a probabilistic Byzantine fault-tolerant consensus protocol that depends on such conditions as the network communication environment and the proportion of malicious nodes' hashrate. When the proportion of malicious nodes’ hashrate does not exceed 1/2 in a good network communication environment, the Satoshi Consensus can reliably solve the Byzantine consensus problem in a distributed environment. However, when the environment turns bad, even with the proportion within 1/2, the Satoshi Consensus may still fail to reach a reliable conclusion on the Byzantine consensus problem. It is worth noting that the quality of the network environment is relative to Bitcoin's block interval. The 10-minute block generation interval of the Bitcoin can ensure that the system is in a good network communication environment in most cases, given the fact that the broadcast time of a block in the distributed network is usually just several seconds. In addition, economic incentives can motivate most nodes to actively comply with the agreement. It is thus considered that with the current Bitcoin network parameter configuration and mechanism design, the Bitcoin mechanism design has reliably solved the Byzantine Consensus problem in the current network environment.

## Practical Byzantine Fault Tolerance, PBFT

It is not an easy task to design the Byzantine fault-tolerant consensus protocol in a semi-synchronous network. The first practically usable Byzantine fault-tolerant consensus protocol is the Practical Byzantine Fault Tolerance (PBFT) designed by Castro and Liskov in 1999, the first of its kind with polynomial complexity. For a distributed system with $n$ nodes, the communication complexity is $O(n2$.) Castro and Liskov showed in the paper that by transforming centralized file system into a distributed one using the PBFT protocol, the overwall performance was only slowed down by 3%. In this section we will briefly introduce the PBFT protocol, paving the way for further detailed explanations of the Tendermint protocol and the improvements of the Tendermint protocol.
The PBFT protocol that includes $n=3f+1$ nodes can tolerate up to $f$ Byzantine nodes. In the original paper of PBFT, full connection is required among all the $n$ nodes, that is, any two of the n nodes must be connected. All the nodes of the network jointly maintain the system status through network communication. In the Bitcoin network, a node can participate in or exit the consensus process through hashrate mining at any time, which is managed by the administrator, and the PFBT protocol needs to determine all the participating nodes before the protocol starts. All nodes in the PBFT protocol are divided into two categories, master nodes, and slave nodes. There is only one master node at any time, and all nodes take turns to be the master node. All nodes run in a rotation process called View, in each of which the master node will be reelected. The master node selection algorithm in PBFT is very simple: all nodes become the master node in turn by the index number. In each view, all nodes try to reach a consensus on the system status. It is worth mentioning that in the PBFT protocol, each node has its own digital signature key pair. All sent messages (including request messages from the client) need to be signed to ensure the integrity of the message in the network and the traceability of the message itself. (You can determine who sent a message based on the digital signature).
The following figure shows the basic flow of the PBFT consensus protocol. Assume that the current view’s master node is node 0. Client C initiates a request to the master node 0. After the master node receives the request, it broadcasts the request to all slave nodes that process the request of client C and return the result to the client. After the client receives f+1 identical results from different nodes (based on the signature value), the result can be taken as the final result of the entire operation. Since the system can have at most f Byzantine nodes, at least one of the f+1 results received by the client comes from an honest node, and the security of the consensus protocol guarantees that all honest nodes will reach consensus on the same status. So, the feedback from 1 honest node is enough to confirm that the corresponding request has been processed by the system.

https://preview.redd.it/sz8so5ly7m851.png?width=1400&format=png&auto=webp&s=d472810e76bbc202e91a25ef29a51e109a576554
For the status synchronization of all honest nodes, the PBFT protocol has two constraints on each node: on one hand, all nodes must start from the same status, and on the other, the status transition of all nodes must be definite, that is, given the same status and request, the results after the operation must be the same. Under these two constraints, as long as the entire system agrees on the processing order of all transactions, the status of all honest nodes will be consistent. This is also the main purpose of the PBFT protocol: to reach a consensus on the order of transactions between all nodes, thereby ensuring the security of the entire distributed system. In terms of availability, the PBFT consensus protocol relies on a timeout mechanism to find anomalies in the consensus process and start the View Change protocol in time to try to reach a consensus again.
The figure above shows a simplified workflow of the PBFT protocol. Where C is the client, 0, 1, 2, and 3 represent 4 nodes respectively. Specifically, 0 is the master node of the current view, 1, 2, 3 are slave nodes, and node 3 is faulty. Under normal circumstances, the PBFT consensus protocol reaches consensus on the order of transactions between nodes through a three-phase protocol. These three phases are respectively: Pre-Prepare, Prepare, and Commit:
• The master node of the pre-preparation node is responsible for assigning the sequence number to the received client request, and broadcasting the message to the slave node. The message contains the hash value of the client request d, the sequence number of the current viewv, the sequence number n assigned by the master node to the request, and the signature information of the master nodesig. The scheme design of the PBFT protocol separates the request transmission from the request sequencing process, and the request transmission is not to be discussed here. The slave node that receives the message accepts the message after confirming the message is legitimate and enter preparation phase. The message in this step checks the basic signature, hash value, current view, and, most importantly, whether the master node has given the same sequence number to other request from the client in the current view.
• In preparation, the slave node broadcasts the message to all nodes (including itself), indicating that it assigns the sequence number n to the client request with the hash value d under the current view v, with its signaturesig as proof. The node receiving the message will check the correctness of the signature, the matching of the view sequence number, etc., and accept the legitimate message. When the PRE-PREPARE message about a client request (from the main node) received by a node matches with the PREPARE from 2f slave nodes, the system has agreed on the sequence number requested by the client in the current view. This means that 2f+1 nodes in the current view agree with the request sequence number. Since it contains information from at most fmalicious nodes, there are a total of f+1 honest nodes that have agreed with the allocation of the request sequence number. With f malicious nodes, there are a total of 2f+1 honest nodes, so f+1represents the majority of the honest nodes, which is the consensus of the majority mentioned before.
• After the node (including the master node and the slave node) receives a PRE-PREPARE message requested by the client and 2f PREPARE messages, the message is broadcast across the network and enters the submission phase. Th