The Tendermint Core team has decided to share our goals and roadmap for 2020. What follows is a list of our objectives for the year, organized around four high-level goals, which are themselves ordered by approximate priority. However, we plan to tackle pieces of each of these goals concurrently.
This list is ambitious: It is possible, even likely, that there’s more outlined here than we can achieve in a year. If you are interested in helping us reach these goals, we’ll be opening up a few new positions soon.
Goal 1: Increase the number of people who can make substantive contributions to Tendermint Core
We’d like to speed up Tendermint’s development process, and as part of that, we’d like to increase the number of people who can meaningfully contribute to Tendermint Core. This is a two-fold process: First, we plan to increase the number of potential contributors; and second, we need to make it as easy as possible for these engineers to contribute by lowering the “cost of entry” to the project.
Tendermint Core is an ambitious codebase. It can be a challenging one as well, combining a novel security model with aggressive requirements around throughput and performance. Additionally, Tendermint Core has accumulated some technical debt as it nears its sixth (!) birthday.
Increase the number of contributors
This is largely a hiring problem. We had two new engineers join the team in January, and we’ll continue to hire throughout the year.
Lower the “cost of entry” to the project
In order to make Tendermint Core as friendly as possible, we plan to refactor and simplify a number of components. We also intend to produce on-boarding documentation which will help new hires and community contributors understand the architecture and design of Tendermint Core more quickly.
The candidates for refactoring will all first need to be assessed: Does this component meet our needs from a testability perspective? From a performance perspective? From a legibility and maintainability perspective? If the answer to any of these questions is no, what would a better design look like?
Once a candidate component has been fully assessed — a process that may take a few weeks of developer time — the spec and implementation work can be more precisely mapped out. Until then, the implementation plans themselves are TODOs.
The following components are candidates for refactoring:
- Consensus Reactor
- P2P Module
- RPC Module
- Evidence Module
For details on the phases of these refactors, along with their current status, please see tracking issue tendermint/4630.
In addition to increasing the clarity and legibility of these modules and reactors, these refactors should increase their testability and modularity. One proposal is to ensure that all reactors adhere to a well-defined, per-reactor interface, in order to increase modularity and allow users to use their own implementations.
Goal 2: Ship features and fixes which help Tendermint Core retain its market-leading position
Tendermint has been a pioneer in the BFT consensus space. However, in the face of increasing competition, we need to prioritize the features and fixes which will help us maintain our market-leading position, and which will enable the Cosmos Network to fulfill its full vision:
These features, fixes and improvements include:
- Light Client (necessary for IBC)
- Fork Accountability Fixes
- State Sync (synchronizing application state without replaying every transaction)
- Evidence Handling (implicating “lunatic validators”)
- “Pipelining” the Tendermint Algorithm
Goal 3: Improve the developer- and user-experience for projects that use Tendermint Core
Tendermint has a healthy number of users, including validators and in-house “users” working on Cosmos. We’re lucky to have their feedback, and we are prioritizing a handful of features which will improve their user experience.
These features include:
- Amino/proto3 Compatibility
- Mempool Improvements
- Tendermint “Modes”
Goal 4: Expand and curate the number of technologies that can be integrated with Tendermint Core
Finally, we’d like to thoughtfully expand and curate the number of technologies — largely regarding cryptography and databases — which can be integrated with Tendermint Core. This will broaden the potential use cases and user base for Tendermint Core. However, it will also increase the maintenance burden, so we should be thoughtful about which technologies we incorporate. We may also want to audit our integrations and deprecate anything that is unused (or insufficiently used).
Candidates for inclusion include expanding cryptography choices:
- Abstract the choice of hash function used in consensus, so that users/operators can choose their own function (faster light clients are possible with BLAKE or algebraic hash functions)
- Introduce signature aggregation for block/vote signing (perhaps BLS)
- Allow people to use their own curves (i.e., expand beyond ed25519)
If you have questions, ideas, or would like to contribute, please open an issue or join our developer forum. We’re always happy to hear from you, and we’re looking forward to a great year at Tendermint!