Stay vigilant against phishing attacks. Chorus One sends emails exclusively to contacts who have subscribed. If you are in doubt, please don’t hesitate to reach out through our official communication channels.

Blog

Transaction Latency on Solana: Do swQoS, Priority Fees, and Jito Tips Make Your Transactions Land Faster?

Chorus One
Chorus One
December 3, 2024
5 min read
December 3, 2024
5 min read
TL;DR
  • Transaction inclusion is one of the biggest challenges for Solana today.
  • We’ve explored how different solutions impact transaction inclusion times:
    • Priority Fees minimally affect landing times.
    • Jito Tips also have negligible latency benefits.
    • swQoS is the most effective at reducing latency for all transaction types.
Introduction

Solana processes thousands of transactions per second, which creates intense competition for transaction inclusion in the limited space of a slot. The high throughput and low block time (~400ms) require transactions to be propagated, prioritized, and included in real-time.

High throughput on Solana comes with another advantage: low transaction costs. Transaction fees have been minimal, at just 0.000005 SOL per signature. While this benefits everyone, it comes with a minor trade-off—it makes spam inexpensive.

For end-users, spam means slower transaction finalization, higher costs, and unreliable performance. It can even halt the network with a DDoS attack, as in 2021, or with an NFT mint, as in 2022.

Against this backdrop, Solana introduced significant updates in 2022: stake-weighted quality of service (swQoS) and priority fees. Both are designed to ensure the network prioritizes higher-value transactions, albeit through different approaches.

Another piece of infrastructure that can help reduce transaction latency is Jito MEV. It enables users to send tips to validators in exchange for ensuring that transaction bundles are prioritized and processed by them.

This article will explore these solutions, break down their features, and assess their effectiveness in transaction landing latency.

Solana Transaction Anatomy

Let’s start with a basic building block—a transaction.

Solana has two types of transactions: voting and non-voting (regular). Voting transactions achieve consensus, while non-voting transactions change the state of the network's accounts.

Solana transaction consists of several components that define how data is structured and processed on the blockchain¹:

  1. Accounts, which represent the state of Solana.
  2. Instructions, which define the operations to be executed in the transaction (e.g. transfer SOL, read account state, write account state).
  3. Message, which includes:
    • Information on accounts invovled in the transation.
    • The most recent blockhash at the time when the transaction was created.
  4. Signatures, which cryptographically guarantee the authenticity of the transaction.

A single transaction can have multiple accounts, instructions, and signatures.

Below is an example of a non-voting transaction, including the components mentioned above:

On Solana, a transaction can be initiated by a user or a smart contract (a program). Once initiated, the transaction is sent to an RPC node, which acts as a bridge between users, applications, and the blockchain.

The RPC node forwards the transaction to the current leader—a validator responsible for building the next block. Solana uses a leader schedule, where validators take turns proposing blocks. During their turn, the leader collects transactions and produces four consecutive blocks before passing the role to the next validator.

Validators and RPC nodes are two types of nodes on Solana. Validators actively participate in consensus by voting, while RPC nodes do not. Aside from this, their structure is effectively the same.

So, why are RPCs needed? They offload non-consensus tasks from validators, allowing validators to focus on voting. Meanwhile, RPC nodes handle interactions with applications and wallets, such as fetching balances, submitting transactions, and providing blockchain data.

The main difference is that validators are staked, securing the network, while RPC nodes are not.

Transaction flow on Solana

After reaching the validator, the transactions are processed in a few stages, which include²³:

  1. Fetch, where the validator parses incoming packets for valid transactions.
  2. Verification, where the transaction signatures are verified.
  3. Banking, the core stage of the entire pipeline, where:
    • Accounts are locked to ensure no conflicting transactions execute simultaneously.
    • The transaction is executed in SVM, which processes program instructions and updates account states.
    • The results of the transaction (success or failure) are validated.
    • Transactions are processed in parallel in two voting and four non-voting threads using Solana's runtime.
    • Based on the leader schedule, a validator handles transactions as follows:
      • Process, if it is the leader.
      • Hold if it is two slots away from being the leader.
      • Forward to the current leader and next two leaders if more than two slots away.
  4. Proof of History, where transaction data and previous hash are hashed to determine the transaction ordering.
  5. Broadcast, where valid transactions are shared with the networks in groups called shreds.
Based on the Solana documentation

The transaction is considered confirmed if it is voted for by ⅔ of the total network stake. It is finalized after 31 blocks.

In this setup, all validators and RPC nodes compete for the same limited bandwidth to send transactions to leaders. This creates inefficiencies, as any node can overwhelm the leader by spamming more transactions than the leader can handle.

To improve network resilience and enhance user experience, Solana introduced QUIC, swQoS, and priority fees, as outlined in this December 2022 post:

  • QUIC Protocol: The QUIC protocol transfers data between two network nodes. It enables parallelization of data streams and requires establishing a connection between validators and RPC nodes.
  • Stake-weighted Quality of Service: swQoS is a mechanism that prioritizes network traffic based on the stake held by validators. It ensures that validators with more stake can send more transactions to the leader.
  • Priority Fees: In addition to the base fee of 5K lamports per signature, users can include an additional priority fee, to speed up the inclusion of their transactions.

Stake-weighted QoS⁴

With the adoption of the QUIC protocol, trusted connections between nodes are required to send transactions. The swQoS system prioritizes these connections based on stake. In this framework, non-staked RPC nodes have limited opportunities to send transactions directly to the leader. Instead, they primarily rely on staked validators to forward their transactions.

Technically, a validator must configure swQoS individually for each RPC node, establishing a trusted peer relationship. When this service is enabled, any packets the RPC node sends are treated as though they originate from the validator configuring swQoS.

Validators are allocated a portion of the leader’s bandwidth proportional to their stake. For example, a validator holding 1% of the total stake can send up to 1% of the transaction packets during each leader’s slot.

From the leader’s perspective, 80% of available connections are reserved for staked nodes, while the remaining 20% are allocated to RPC nodes. To qualify as a staked node, a validator must maintain a minimum stake of 15,000 SOL.

While swQoS does not guarantee immediate inclusion of all transactions, it significantly increases the likelihood of inclusion for transactions submitted through nodes connected to high-stake validators.

Priority Fees

Priority fees serve the same role as swQoS by increasing the chances of transaction inclusion, though they use a completely different mechanism.

There are two types of fees on Solana⁵:

  • Base Fee: This is a fixed 5,000 lamports (0.000005 SOL) per signature, typically one per transaction. It does not depend on the compute units (CUs) required to process the transaction.
  • Priority Fee: This fee is optional and specified by users for each transaction. It depends on the CUs requested by the transaction. CUs are used to estimate the computational cost, similar to gas on Ethereum.

Of the total fees from a transaction, 50% is burned, while 50% is received by the leader processing the transaction. A proposal to award the validator 100% of the priority fee has been passed and is expected to be activated in 2025 (see SIMD-0096).

Priority fees help validators prioritize transactions, particularly during high congestion periods when many transactions compete for the leader's bandwidth. Since fees are collected before transactions are executed, even failed transactions pay them.

During the banking stage of Solana’s transaction processing, transactions are non-deterministically assigned to queues within different execution threads. Within each queue, transactions are ranked by their priority fee and arrival time⁶. While a higher priority fee doesn’t guarantee that a transaction will be executed first, it does increase its chances.

Jito MEV

The final puzzle of transaction prioritization is Jito. This modified Solana client allows searchers to send tips to validators in exchange for including groups of transactions, known as bundles, in the next block.

It could be argued that the Jito infrastructure prioritizes transactions using a tipping mechanism, as users can send a single transaction with a tip to improve its chances of landing fast.

For a deeper explanation of how Jito works, check out our previous article on the Paladin bot, which provides more details.

swQoS, Priority Fees, and Jito Tips in Action

We now have a clearer understanding of how all three solutions contribute to transaction inclusion and prioritization. But how do they affect latency? Let’s find out.

Methodology

To calculate the time to inclusion of a transaction, we measure the difference between the time it is included in a block and the time it is generated. On Solana, the generation time can be determined from the timestamp of the transaction’s recent blockhash. Transactions with a recent blockhash older than 150 slots—approximately 90 seconds—expire.

The latest blockhash is assigned to the transaction before it is signed, so transactions signed by bots will be included faster than transactions generated by normal users. This method is not perfect, but still allows us to collect valuable information about latency and user topology.

Other factors beyond the swQoS and priority fees, such as the geographical proximity of nodes to the leader or validator and RPC performance, also impact inclusion times—we are not fully accounting for those.

To reduce the possible biases, we consider only slots proposed by our main identity from November 18th to November 25th, 2024.

Time to Inclusion

The time to inclusion across all transactions, without any filtering, has a trimodal distribution suggesting at least three transaction types. The highest peak is at 63 seconds, followed by another at 17 seconds, and a smaller one is at 5 seconds.

The second and third peaks are likely from regular users. This double peak could occur because general users don't set maxRetries to zero when generating the transaction. The first peak, at around 5s, is probably related to bots, where the delay between generating and signing a transaction is marginally zero.

We can classify users based on their 95th percentile time to inclusion:

  • Fast: Less than 10 seconds.
  • Normal: Between 10 and 40 seconds.
  • Slow: Greater than 40 seconds.

Most users fall into the “normal” and “slow” classifications. Only a small fraction of submitted transactions originate from “fast” users.

Let’s now break down transactions by source.

Priority Fee

Transactions can be categorized based on their priority fee (PF) with respect to the PF distribution in the corresponding slot. Precisely, we can compare the PF with the 95th percentile (95p) of the distribution:

  • Cheap: PF is less than 10% of the 95p PF within the block.
  • Normal: PF is between 10% and 50% of the 95p PF within the block.
  • Expensive: PF is greater than 50% of the 95p PF within the block.

The size of the priority fee generally doesn’t influence a transaction’s time to inclusion. There isn’t a clear threshold where transactions with higher PF are consistently included more quickly. The result remains stable even when accounting for PF per compute unit.

Jito Tippers

We can restrict the analysis to users sending transactions via the Jito MEV infrastructure, excluding addresses of known swQoS consumers. Interestingly, most Jito transactions originate from “slow” users.

We categorize tippers by siże of tips in the block, analogously to what we did for PF:

  • Cheap: Tip is less than 10% of 95p in the block.
  • Normal: Tip is between 10% and 50% of 95p in the block.
  • Expensive: Tip exceeds 50% of 95p in the block.

When we compute the probability density function (PDF) of time to inclusion based on this classification, we find that the tip size doesn’t significantly impact the time to inclusion, suggesting that to build a successful MEV bot, one doesn’t have to pay more in tips!

Within the Jito framework, a bundle can consist of:

  • A single transaction that includes the user operations along with the Jito tip (e.g. here).
  • Separate transactions, where one of them is a payment to the Jito program (e.g. here).

In both cases, the time it takes for the entire bundle to be included is determined by the inclusion time of the tip transaction. However, when a tip is paid in a separate transaction, we don’t track the other leg. This reduction in volume explains why the PDF of tippers differs from that of Jito consumers.

swQoS

It’s impossible to fully disentangle transaction time to inclusion from swQoS for general users, meaning some transactions in the analysis may still utilize swQoS. However, we can classify users based on addresses associated with our swQoS clients.

When we do this and apply the defined user topology classification, it becomes clear that swQoS consumers experience significantly reduced times to inclusion.

The peak around 60 seconds is much smaller for swQoS consumers, indicating they are far less likely to face such high inclusion times

The highest impact of using swQoS is seen in the reduction of the time to inclusion for “slow” users. By computing the cumulative distribution function (CDF) for this time, we observe a 30% probability of these transactions being included in less than 13 seconds.

When comparing the corresponding CDFs:

  • For Jito, “slow” users have only a 10% probability of being included in less than 13 seconds and 60% in less than 50 seconds.
  • For swQoS, “slow” users have 25% of probability of inclusion within 13 seconds and 86% in 50 seconds.

'Normal' users also benefit from swQoS. There's an additional peak in the PDF for these users between 9s and 13s, showing that some of “normal” users process transactions in less than 20s. Additionally, another peak appears around 40s, indicating that part of the slower users now see their 95th percentile falling in the left tail end of 'normal' users. This suggests that the overall spread of the time-to-inclusion distribution is reduced.

There is no statistically significant difference between the analyzed samples for “fast” users. However, some Jito consumers may also use swQoS, which complicates the ability to draw definitive conclusions.

Despite this, the improvements for “slow” and “norma”' users highlights swQoS's positive impact on transaction inclusion times. If swQoS explains the PDF shape for “fast” users, it increases the likelihood of inclusion within 10s from ~30% to ~100%, a 3x improvement. A similar 3x improvement is observed for “slow” users being included within 13s.

Summary

Transaction inclusion is arguably Solana's most pressing challenge today. Efforts to address this have been made at the core protocol level with swQoS and priority fees and through third-party solutions like Jito (remembering that the main Jito use is MEV).

Solana’s latest motto is to increase throughput and reduce latency. In this article, we have examined how these three solutions improve landing time. Or, more simply, do they actually reduce latency? We found out that:

  • swQoS delivers the highest latency reductions. This is evident for all types of transactions, but, especially for “slow”. For "fast" transactions, swQoS and Jito have similar performance, though comparing them can be tricky as overlapping use is hard to detect.
  • Priority fees, while helpful for transaction inclusion, have a minuscule effect on landing times.
  • Jito tips’ impact on latency is insignificant, especially for slow transactions.

Among the three, swQoS is the most reliable for reducing latency. Jito and priority fees can be used when the time to inclusion is less important.

References:

  1. Solana documentation: transactions
  2. Solana documentation: TPU
  3. Helius, Stake-weighted Quality of Service, Everything You Need to Know
  4. Solana documentation: swQoS
  5. Solana documentation: fees
  6. Umbra Research, Lifecyle of a Solana Transaction

About Chorus One

Chorus One is one of the largest institutional staking providers globally, operating infrastructure for over 60 Proof-of-Stake (PoS) networks, including Ethereum, Cosmos, Solana, Avalanche, Near, and others. Since 2018, we have been at the forefront of the PoS industry, offering easy-to-use, enterprise-grade staking solutions, conducting industry-leading research, and investing in innovative protocols through Chorus One Ventures. As an ISO 27001 certified provider, Chorus One also offers slashing and double-signing insurance to its institutional clients. For more information, visit chorus.one or follow us on LinkedIn, X (formerly Twitter), and Telegram.