Gulf Stream: Solana’s Mempool-less Transaction Forwarding Protocol

Understand 1 of 8 key technologies that make Solana’s 50,000 TPS blockchain network possible.

Solana is the most performant permissionless blockchain in the world. On current iterations of the Solana Testnet, a network of 200 physically distinct nodes supports a sustained throughput of more than 50,000 transactions per second when running with GPUs.

There are 8 key technical innovations that make this possible:

In this blog post, we’ll explore Gulf Stream, Solana’s mempool management solution for a high performance adversarial network. In further blog posts, we’ll lay out all 7 of these key innovations.

Mempools Explained

A mempool is a set of transactions that have been submitted, but have not yet been processed by the network. You can see the Bitcoin and Ethereum mempools live right now.

30-day Bitcoin mempool as measured in bytes.30-day Bitcoin mempool as measured in bytes.

30-day Ethereum mempool as measured in transactions30-day Ethereum mempool as measured in transactions

For Bitcoin and Ethereum, the number of unconfirmed transactions is typically on the order of 20K-100K as shown above. The size of the mempool — which is most often measured as number of unconfirmed transactions — depends on supply and demand for blockspace. Even in these early days of the blockchain era, that results in significant bottleneck effects on entire networks when the mempool rises.

So, how does Solana do better? Without increasing network throughput, Solana validators can manage a mempool size of 100,000. That means that with network throughput of 50,000 TPS, a 100,000 transaction mempool is executed in a matter of seconds. That’s what makes Solana the most performant permissionless blockchain in the world.

Impressive, right? But this simple analysis ignores a lot of important factors…

Mempools in Ethereum and Bitcoin are propagated between random nodes in peer-to-peer fashion using a gossip protocol. Nodes in the network periodically construct a bloom filter representing a local mempool and request any transactions that do not match that filter (along with a few others such as a minimal fee) from other nodes on the network. Propagation of a single transaction to the rest of the network will take at least log(N) steps, consumes bandwidth, memory and computational resources required to filter it.

When the benchmark client starts generating 100,000 transactions per second, the gossip protocols simply get overwhelmed. The cost of computing the filter, and applying the filter between machines while maintaining all the transactions in memory become prohibitively high. Leaders (block producers) also have to re-transmit the same transactions in a block, which means that every transaction is propagated at least twice through the network. That’s neither efficient nor functional.

Introducing Gulf Stream

Our solution to this problem on the Solana network is to push transaction caching and forwarding to the edge of the network. We call it Gulf Stream. Since every validator knows the order of upcoming leaders, clients and validators forward transactions to the expected leader ahead of time. This allows validators to execute transactions ahead of time, reduce confirmation times, switch leaders faster, and reduce the memory pressure on validators from the unconfirmed transaction pool. This solution is not possible in networks that have a non-deterministic leader

So how does it work? Clients, such as wallets, sign transactions that reference a specific block-hash. Clients select a fairly recent block-hash that has been fully confirmed by the network. Blocks are proposed roughly every 800ms, and require an exponentially increasing timeout to unroll with every additional block. Using our default timeout curve, a fully confirmed block-hashes are, in the worst case, 32 blocks old. The transaction is valid only in the children of the referenced block, and is only valid for X blocks. While X is not yet finalized, we expect that a block-hash has a TTL (time to live) of about 32 blocks. Assuming block times of 800 ms, that equates to 24 seconds.

Once a transaction is forwarded to any validator, the validator forwards it to one of the upcoming leaders. Clients can subscribe to transaction confirmations from validators. Clients know that a block-hash expires in a finite period of time, or the transaction is confirmed by the network. This allows clients to sign transactions that are guaranteed to execute or fail. Once the network moves past the rollback point such that the blockhash the transaction reference has expired, clients have a guarantee that the transaction is now invalid and will never be executed on chain.
‎Off the Chain: Anatoly Yakovenko, CEO and Co-Founder of Solana: What “Sharding” Actually Means on…
‎Anatoly Yakovenko is the CEO and Co-Founder of Solana. In this conversation, Anatoly and Anthony Pompliano discuss…podcasts.apple.com

There are a number of positive side effects inherent within this architecture. First, under load validators can execute transactions ahead of time and drop any that fail. Second, leaders can prioritize processing transactions based on stake weight of the validator that forwarded the transaction. This allows the network to degrade gracefully during a large scale denial of service.

By now, it’s become markedly clear that a blockchain network is only as functional as its mempool is minimal. While networks with limited transactional throughput undertake the noble endeavor of attempting to retrofit wholly new scaling technologies to address ever-growing mempools, Solana has been engineered since conception with optimizations like Proof of History, Gulf Stream, and Pipeline VM to solve the problems of first generation blockchain networks and enable huge transactional throughput. That’s blazing speed at global scale from the onset, and a fundamental development in creating a highly functional decentralized infrastructure for businesses, economies, and people all over the world.