Yes Dude, Solana is Halting!
SOLANA..
Perhaps the most demonized project in 15 years of Blockchain history.
And what is the reason for this prejudice?
The Solana network stopped six times. SIX.
Do not rely on sources that write 8, they define 2 performance drops in the network as a stop. I have listed all stalls below.
- January 21, 2022 -> 1.8.12 Update to Node software caused a problem, solved with 1.8.14 Update.
- March 28, 2022 -> RPC Nodes created a fork in the network due to the v1.8 release in the RPC Node Software. Solved with v1.9 Update.
- April 30, 2022 -> The network stopped for 7 hours. The reason is unclear.
- June 1, 2022 -> The network stopped for 4.5 hours due to a bug in the Node software.
- September 30, 2022 -> Unknown cause.
- February 25, 2023 -> Due to a bug in the Node software, the economic activity in the network stopped, validator voting continued (Vote-Only Mode). Nodes that updated the Validator Node software from 1.13 to 1.14 failed to finalize blocks. Rollback to version 1.13.6.
What has Solana changed from yesterday to today?
1. TCP x UDP x QUIC
You are writing an application to send data over any network. You need to make an important choice.
How are you going to communicate?
Normally you can use an already existing application-layer like HTTP.
But what if you are writing a “blockchain”?
At this point you are writing your own application-layer. You have 3 options to communicate over this new protocol.
TCP, UDP and QUIC.
How do you know which one to choose?
1.1) TCP (Transmission Control Protocol)
TCP is the most reliable protocol you can choose between these 3 options. It makes sure that the transmitted file is complete and corrects errors/missing files.
You want to distribute your last block between blockchain nodes.
TCP will deliver this data for you between 2 nodes to the best of its ability.
- Block data is missing from a node? It will resend the data and make sure the node received everything.
- Is there some corruption in the transmitted block data? TCP adds a sequence number to each data. This way, the block data can be merged in the correct order.
- Do you want to make a very fast blockchain network? That would be a strain on the nodes. Maybe you’ll overload the system? NO! TCP tries to prevent this with techniques called “Flow and Congestion Control”.
Before data can be sent on a network using TCP, nodes must establish an approved connection between themselves. We call this a “three-way handshake”. Data transmission cannot start until an agreement is reached.
1.2) UDP (User Datagram Protocol)
UDP is the fastest and simplest of these 3 options. If you want to send data using UDP, the data just goes.
How did it go, is the other person listening to me, should I send it fast or slow, is it getting through?????
I DON’T CARE ABOUT ANYTHING.
I sent it, dude. My duty ends here. Whether the data is lost or corrupted, I give a warning, maybe I throw the data in the trash.
This is a huge problem for blockchain networks.
The best use case for UDP would be latency-sensitive applications such as live broadcasts, video chats, etc. Thanks to its indifferent nature, latency is close to zero.
UDP does not try to fix corrupted data. Corrupted data is either transmitted with a warning or discarded.
But UDP has an AMAZING feature. It can send data to multiple recipients at the same time.
Well, if you’re printing almost 3 blocks per second, you need to be able to send them to the nodes as fast as possible, dude.
Solana was using UDP. Solana made this mistake because Solana developers told that 1 time won’t hurt, and Solana stopped 6 times. Solana realized it was a bad habit and quit. And what’s Solana doing now?,
1.3) QUIC (Quick UDP Internet Connections)
It has a habit very similar to UDP. But wait, don’t be angry with Solana. QUIC is much more reliable. Let’s take a look.
QUIC offers everything TCP offers, with less latency and extra features. It’s as secure and consistent as TCP. It provides less latency than TCP.
TCP is a protocol that emerged in the 1970s. Its dough is well leavened with years of work. QUIC, like the little brother-in-law, emerged in 2012. And as the name suggests, it was not built from scratch.
By building on top of UDP, it maximizes backward compatibility. QUIC is also a Google product. It’s been in active use since 2013. Is there a youtube video or song on in the background? If so, yes, you are using a platform that uses QUIC.
QUIC assumes that you always want your communication to be encrypted. For secure communication over TCP you need a three-phase TCP negotiation, followed by a three-phase TLS negotiation (I’m not going over TLS, just know that it is used for encryption).
QUIC, on the other hand, integrates the TLS negotiation into the connection setup and takes the data encryption task itself. You only need to do 1 three-way handshake.
Welcome to a secure connection.
Each sent data is encrypted individually, so the receiver can start decrypting it as soon as possible.
I will continue to praise QUIC for a while. If you understand the logic of QUIC, please skip ahead.
You are downloading a large file over TCP. But suddenly you realize you are on Mobile Data. Ooops. You immediately turn on WiFi and you are momentarily disconnected. TCP will now reconnect to check the previously downloaded files… If you are using QUIC, everything is fine. There is a “Connection Migration” feature that keeps you connected even if you change networks.
— — —
So, the result? The result is this:
Solana was a protocol using UDP. This meant that the communication between the nodes was happening without any interrogation. Any overload in the network increased the amount of missing/erroneous data as a result of UDP’s indifference. Also, some nodes could not process incoming data and catch the network at the same time. The biggest problem with BFT consensus is that if 33+1% of the nodes fall off the network, the consensus stops. This is what happened to Solana.
Solana now uses QUIC. Communication between nodes is guaranteed and secured. This improves the accuracy and reliability of the data.
2. Stake-weighted QoS
Let’s examine how Proof of Stake (PoS) systems work.
- In PoS networks, a Leader is elected per block.
- Nodes send incoming transactions to the Leader Node.
- The Leader Node receives these transactions and creates a block.
This is enough for us. Let’s not get confused.
To become a validator in Ethereum, you need to stake 32 Ether. On Avalanche this number is 2000 AVAX, on Solana it is ZERO SOL. Yes, zero.
You don’t need to stake SOL to set up a validator node on Solana. But there is a problem with this system.
Anyone who knows how to rent a server or can afford to buy a Supercomputer can install a Solana Validator Node.
Do you sense a problem?
The network is vulnerable to spam. You can set up a node and send as many transactions as you want through this node to the Leader Node.
+ What happened?
- The network is down.
+ Why?
- Because Nodes have a network capacity. If too many transactions come in, the network bandwidth can’t handle it and BOOOM. Due to the BFT Consensus problem I mentioned above, the nodes that can’t keep up with the network fall and the network stops if there is no majority vote.
Solana engineers have developed a very clever system to solve this. Let’s go straight to the example.
Let’s say you are running a Validator Node with 1% of the staking in the network. At least 1% of the available block will be made up of transactions you send. No one will be able to suppress your traffic on the network until your 1% is full.
What about Validator Nodes that don’t have any stakes, or RPC Nodes that can never have a stake in software?
These nodes will send transactions to a validator node that takes up space at the stake rate.
This is what we call Stake-Weight Quality of Service (Stake-Weight QoS). We avoid overloading the network.
3. Fee Markets
On Solana, the fees users paid were fixed, 0.000005 SOL per transaction. That’s what we’re changing.
+ What is Fee Market?
- In short, it means that users can pay as much as they want for their transactions and get their transactions first in the block. So by overpaying for your transaction, you are buying space in the block.
+ How does this benefit the network?
- Because the transaction fees are fixed and low, anyone can spam the network and nodes are disconnected from the network due to the aforementioned network bandwidth issue. BOOOM.
As you can see from the image, the Fee Market (Priority Fees) is currently active on the network. However, you cannot use it on Mainnet as ordinary users using cryptocurrency wallets. Because the wallets have not been updated yet. Wallet updates are only active on Devnet.
The reason why it is not active is that under current conditions, the average transaction fees on the network will not be known and the network will become unusable for ordinary users with everyone pricing from their heads. APIs are currently being developed to track Solana Gas Fees in the same way that Ethereum Gas Fees can be tracked (https://github.com/solana-labs/solana/pull/27278). Solana Wallets will make the necessary updates when the average gas price can be determined.
— — —
QUIC solved network issues with Stake-Weight QoS and Fee Market. On April 20, 2023, MadLads NFT Mint went public, the network was at its busiest and there were no issues.
The most important reason for the network downtime is that there is only one validator client. A single line of code error causes problems for the whole network. There are currently FOUR new consensus clients being developed in Solana.
Two of them are active.
1. Developed by Solana Labs,
2. Developed by Jito Labs.
3 others are under development.
The one I am most looking forward to is FireDancer. On November 2023, I think it will be activated during Breakpoint and Solana Mainnet will be announced as Solana 2.0, leaving the beta process.
— — —
Thank you for reading this far. I hope you enjoyed it.
You can support by sharing the article.
Alperen Tunçkıran
Solana University Ambassador
Twitter: @BlockofChain