Solana Network Upgrades

by Solana Foundation

Solana Network Upgrades

In order to strengthen the Solana network in the face of massive user growth and adoption, engineers have been working on a number of upgrades. This page will allow the greater Solana community to see how these upgrades are progressing.

Last updated 14 December 2022

QUIC

STATUS:  🟢 Live on Mainnet-beta.

Solana uses a custom raw UDP-based protocol to pass transactions between RPC nodes and the current leader. Since UDP is connectionless and lacks both flow control and receipt acknowledgments, there is no meaningful way to discourage or mitigate abusive behavior. In order to affect control over network traffic, Solana's transaction ingestion protocol is being reimplemented atop QUIC, a protocol built by Google, designed for fast asynchronous communication like UDP, but with sessions and flow control like TCP. Once adopted, there will be additional options available to adapt and optimize data ingestion.

QUIC is currently adopted by the majority of validators and RPC operators on Mainnet-beta. In the upcoming 1.13.4 release, QUIC will be the default transaction ingestion protocol over UDP. With 1.13.4, QUIC will be fully adopted.

Stake-weighted QoS

STATUS: 🟢 Live on Mainnet-beta.

Leader network bandwidth has a fixed capacity. To effectively use it, stake-weighting is needed to end the practice of indiscriminately accepting transactions on a first-come-first-served basis, without regard for source. Given that Solana is a proof of stake network, it is natural to extend the utility of stake-weighting to transaction quality of service. Under this model, for example, a node with 0.5% stake will have the right to transmit at least 0.5% of the packets to the leader, while the rest of the network – and no combination of the remaining stake – will be able to fully wash them out.

Stake-weighted QoS was built in parallel with QUIC and enabled before QUIC was adopted on Mainnet-beta.

Fee markets

STATUS: 🟢 Live on Mainnet-beta, with RPC and wallet support coming soon.

Follow progress on Github.

Once ingested, transactions still compete for modifying shared account data. This contention has been dealt with by a simple first-come-first-served similar to network data ingestions, leaving users no means to express the urgency of their transaction execution. Fee markets provide a way for a user to add an additional fee to their transactions to express urgency in comparison to other transactions modifying the same account. The first step of creating fee markets is implementing priority fees, which offer users the ability to specify an additional fee at their discretion to be collected upon the execution of a transaction and its inclusion in a block. Priority fees are calculated based on the amount of computing resources that a transaction is expected to require. For example, a simple token transfer would require a lower total priority fee than an NFT mint that expresses the same level of urgency.

Fee markets are currently being developed to include more functionality on the RPC, higher fees for highly contested accounts, and improvements to block scheduling.

Transaction size increase

STATUS: 🟡 Under development.

Transactions on the Solana network are currently limited to a maximum of 1,232 bytes. This limitation restricts that ability for programs to compose with each other as the transaction has a specific amount of data to fit. With the implementation of QUIC, the possibility of increasing transaction size is within reach.

Core engineers are currently testing larger transaction sizes.

Compact vote state

STATUS: 🟡 Live on Testnet.

Follow the feature on Github.

Vote transactions on the network are the most common transactions transmitted across all nodes. A large voting schema both increases the amount of bandwidth used by the network as well as the block size. Lowering the vote state even by a few bytes can lead to substantial improvements on the network, as less data is being transmitted and stored on the nodes.

The compact vote state is being tested in a feature, which is currently live on testnet.

Resources