Skip to content

Rollback to Tendermint 0.34 #1271

@redshiftzero

Description

@redshiftzero

We would like to roll back to Tendermint 0.34 due to instability of the p2p layer, which caused Tendermint 0.35 (and 0.36) to be abandoned.

However, this is fairly difficult for us, because we depend on tendermint-rs to speak ABCI to Tendermint. The ABCI implementation was written a year and a half ago, targeting 0.35 (which was about to be released at the time). However, because of issues with the tendermint-rs release process (which will hopefully be resolved by cometbft/tendermint-rs#1128), this code never made it into a published release, only prereleases, and can't be used drop-in with Tendermint 0.34, which has a different format of the length delimiter for ABCI messages.

Moreover, because we use tendermint-rs and ibc-rs (and tower-abci), which are interlinked, it's complicated to change one of them without changing both, especially because we cannot use semver to unify versions in git dependencies. Our options are:

  1. Wait for a 1.0 release of tendermint-rs and ibc-rs that has the ABCI domain types we wrote;
  2. Move completely to our own forks of tendermint-rs and ibc-rs, and also fork any other crates in our dep tree that use either to use our versions.

It's unfortunate that the plan for Tendermint is to wait for new features before doing an 0.37 release, because that pushes out the timeline for (1) and a return to a "normal" release process for tendermint-rs where we could use published versions with semver resolution and actually get PRs included in them. However, that decision was made already, so it seems like the next best option for us to get off of 0.34 would be to deeply fork the crates.

Beyond that decision, the steps are:

  • Backporting ABCI domain types changes
  • Edit all transitive dependents of tendermint-rs to use a version with those changes
  • Propagate those changes through tower-abci
  • Edit docker compose files to use the 0.34 version
  • Check to see if there's other API changes e.g. in RPC

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions