-
Notifications
You must be signed in to change notification settings - Fork 358
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Investigate new event structure of tendermint-go v0.35 #1560
Comments
No opportunity to check this with a build of Gaia yet, but from the changes referenced above it looks as though the difference will be limited to the format of the event structure, with the events retrieved explicitly as |
Two updates we received from upstream dependencies:
Unclear which is more appropriate for our tests between the WIP gaia and the WIP simapp from ibc-go, we should investigate and try with both probably. |
As cosmos-sdk has switched to buf for code generation, it would make sense to investigate usage of protoc-gen-prost, as prost-build can no longer easily catch up to the details of the build process for the .proto files. |
There is also cosmos-sdk-proto, and I think we should replace |
After negotiating with Mikhail, we agreed on this battle plan:
|
I have failed early on step 1 as described in informalsystems/ibc-rs#425 (comment), so proceeding with step 4. |
I see, the derive tags seem to be the main issue. Thank you for keeping us in the loop Mikhail, sounds like a plan! |
Working on #2213, still can't build the relayer due to more work needed on tendermint-rs 0.24 API changes. |
Adaptations to An attempt to accommodate RPC nodes using 0.34 and 0.35 side-by-side has been started with informalsystems/tendermint-rs#1143, but we also have a choice to emulate 0.35 subscription API for all RPC clients, as described in informalsystems/tendermint-rs#1143 (comment). |
Thanks for the wrap-up Mikhail!
What would be your recommendation between the side-by-side approach vs. emulate 0.35 API approach? I read the informalsystems/tendermint-rs#1143 (comment) but it's unclear to me if the "emulate v0.35 API" solution is the better. |
I would favour the 0.35 emulation approach because it simplifies code of the relayer (as well as any other application using This, however, rests on the assumption that nodes producing 0.34 subscription events always encode them from a source list of uniform ABCI-ish events (where each event of a particular type always carries tags with the same set of names), so they can be recovered without corruption or data loss. As far as I can see, the relayer already relies on this assumption here: https://github.com/informalsystems/ibc-rs/blob/0afaea644f69819e6f53cbc35c9a651c50a7ffa9/relayer/src/event/rpc.rs#L181. |
I don't think the spec requires any particular order or separation between types and attribute names, but I believe in practice applications generally are at least self-consistent. The change of representation doesn't add (or remove) any constraints, so unless an app developer intentionally changes the ABCI metadata scheme the app uses the results should be the same. |
@thanethomson Will this still be needed now that 0.35 is going to be yanked? |
As per tendermint/tendermint#9091, @cmwaters recommended that we look at reintroducing this at some point in future (specifically this PR: tendermint/tendermint#6634). There's no clear timeline for this at present. Given more recent conversations around this event structure, @romac and @adizere does it perhaps make sense to first have a design session around this with the Tendermint Core team to see if there's a more appropriate/useful way to represent events for IBC? |
We will discuss this synchronously as part of a design session. |
Context
This issue is about a certain breaking change in one of our dependencies.
For a full picture of Hermes dependencies, refer to https://github.com/informalsystems/ibc-rs/discussions/2030.
Problem Definition
Tendermint-go has changed the structure of the events they emit through the websocket.
Ref: tendermint/tendermint#6634
This feature is released in the tendermint-go 0.35.x line (changelog), which will appear in SDK v0.46.x line (milestone). This probably means
late Q1 2022late Q2 2022.Further context on the upstream changes, thanks to @creachadair:
More context: the
events
field structure changes from a hash-map to a vector:https://github.com/informalsystems/tendermint-rs/blob/master/rpc/src/event.rs#L21
Proposal
We need to run Hermes against a chain with SDK 0.46 (once that is released) and make sure any breaking changes in the event system of tendermint-go do not affect Hermes. If those changes break event parsing in Hermes, we have to adapt our code to the upstream changes.
Currently, marking this issue as blocked until an SDK 0.46 appears.
Acceptance Criteria
ensure backwards compatibility with SDK pre-0.46.xAZ: This should be fine: we should be backwards compat.For Admin Use
The text was updated successfully, but these errors were encountered: