Tendermint v0.35 introduces Prioritized Mempool, a makeover to the Peer-to-peer Network, & more

Callum Waters
Tendermint Blog
4 min readNov 5, 2021

--

Our new release, v0.35, came out yesterday. It’s packed with some eagerly awaited and much requested features. It contains no block protocol breaking changes and has been carefully designed to be easy to integrate for our users. This post provides a quick overview of what’s new in v0.35. For a full list of changes, jump over to the changelog or check out our notes on upgrading.

Prioritized Mempool 🚤

As the transactional load on networks increases, so too does the need to effectively shed load and to do so in a way that can support the economics of the system. Adding priority to transactions goes a long way to solve this and has been in the crosshairs of the Tendermint team for a while. This opt-in feature allows applications to add a priority and a sender to the response of CheckTx . Transactions will then be proposed in blocks based on that priority.

The new mempool also includes a TTL (time-to-live) setting. TTLs are local to each node and can be set in the config, based on a combination of height and time. Transactions that exceed the TTL will be automatically removed, preventing transactions from being stuck in the mempool. For more direct control, node operators can also use the new remove_tx RPC endpoint to remove a specific transaction.

New P2P Framework 💬

The legacy p2p stack, which has been around since the inception of Tendermint, has been refactored to achieve cleaner, decoupled abstractions, improved peer lifecycle management, peer address handling, and pluggable transports. The refactored p2p stack in v0.35 is backwards-compatible with v0.34 so that both the new and legacy p2p stacks can be used side by side. These changes have helped open the doors for further performance and reliability improvements planned for both v0.36 and v0.37. More on the roadmap for the p2p stack can be found here.

StateSync Improvements 📈

The last release saw the very first implementation of StateSync, a service that allows nodes to quickly bootstrap to a height near the head of the chain. Based on continuing feedback from live networks that put the new service through its paces, the team continued to tweak and improve state sync. This includes introducing p2p based verification as an alternative to requiring RPC endpoints, adding a service that fetches data for potential evidence validation, new config parameters for adjusting the throughput and a multitude of other minor fixes.

Go API Internalization and Stability ⚖️

The Tendermint team is working to further improve the stability and reliability of Tendermint as part of the greater ambition to make it the standard in the blockchain space. Part of this is offering stable API’s that great products and services can rely on without a large maintenance burden. Toward this end, we’re taking a hard look at our current API surface and have looked to simplify and better document the flows in using Tendermint.

In this release, we have internalized several reactors, stores, and other loose ends, exporting instead a clean and minimal Node interface. These changes are part of longer discussions on versioning semantics and an ongoing effort to understand how people use Tendermint and how we can best accommodate such variety in usage.

Other Good Stuff 🍭

There’s a plethora of small improvements and fixes that unfortunately don’t make the headlines in articles like these but we feel a few of these nevertheless deserve a mention:

  • Custom transaction indexing is now possible via an EventSink interface. This comes with a PostgreSQL implementation and includes the addition of BeginBlock and EndBlock events.
  • We introduced a lightweight “seed” node type that only runs peer discovery services.
  • The database now uses order-preserving varint key encoding for faster range scans. This comes with a migration script to update the existing Tendermint database.
  • Greater visibility and tracking of nodes during startup. This includes emitting new blocksync and statesync events as well as more syncing information in the status RPC endpoint.

Looking Onwards and Upwards 🔭

Tendermint v0.35 has been released today, but our engineering team are continuing to work towards the 1.0 milestone. If you’re interested in seeing and offering feedback on what that looks like, set aside a coffee break to have a look at our roadmap located in the Tendermint repo.

That’s all for now! We’ll keep you posted with some of the more exciting things coming just around the corner. As always, if you have any problems you’d like help with or want to be part of the conversation going forward then either open an issue on the repo or zoom on over to our Discord channel.

--

--