Skip to content

Commit

Permalink
Adapt to RPC changes in CometBFT 0.38 (#3372)
Browse files Browse the repository at this point in the history
* Adapt to RPC changes in CometBFT 0.38

* Update tendermint-rpc to the latest of 0.38 branch

* Bump tendermint-rs and ibc-proto to 0.33

* Changelog entries for #3372

* Apply suggestions from code review

Signed-off-by: Romain Ruetschi <[email protected]>

* Reference issue instead of PR in changelog entries

---------

Signed-off-by: Romain Ruetschi <[email protected]>
Co-authored-by: Romain Ruetschi <[email protected]>
Co-authored-by: Romain Ruetschi <[email protected]>
  • Loading branch information
3 people authored Aug 21, 2023
1 parent 92e0ac0 commit 9646762
Show file tree
Hide file tree
Showing 18 changed files with 146 additions and 123 deletions.
2 changes: 2 additions & 0 deletions .changelog/unreleased/breaking-changes/3548-cometbft-0.38.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- Update to tendermint-rs 0.33 and ibc-proto 0.33
([\#3548](https://github.com/informalsystems/hermes/issues/3548))
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- Regard the `finalize_block_events` field of the `block_results` RPC endpoint, added in CometBFT 0.38
([\#3548](https://github.com/informalsystems/hermes/issues/3548))
36 changes: 18 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 7 additions & 7 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ overflow-checks = true

[patch.crates-io]
# ibc-proto = { git = "https://github.com/cosmos/ibc-proto-rs.git", branch = "main" }
# tendermint = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "romac/new-misbehavior-detector" }
# tendermint-rpc = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "romac/new-misbehavior-detector" }
# tendermint-proto = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "romac/new-misbehavior-detector" }
# tendermint-light-client = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "romac/new-misbehavior-detector" }
# tendermint-light-client-verifier = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "romac/new-misbehavior-detector" }
# tendermint-light-client-detector = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "romac/new-misbehavior-detector" }
# tendermint-testgen = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "romac/new-misbehavior-detector" }
# tendermint = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "main" }
# tendermint-rpc = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "main" }
# tendermint-proto = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "main" }
# tendermint-light-client = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "main" }
# tendermint-light-client-verifier = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "main" }
# tendermint-light-client-detector = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "main" }
# tendermint-testgen = { git = "https://github.com/informalsystems/tendermint-rs.git", branch = "main" }
7 changes: 5 additions & 2 deletions crates/chain-registry/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@ description = """
"""

[dependencies]
ibc-proto = { version = "0.32.1" }
ibc-proto = { version = "0.33.0" }
ibc-relayer-types = { version = "0.25.0", path = "../relayer-types" }
tendermint-rpc = { version = "0.32.0", features = ["http-client", "websocket-client"] }
tendermint-rpc = { version = "0.33.0", features = [
"http-client",
"websocket-client",
] }

async-trait = "0.1.72"
flex-error = { version = "0.4.4", default-features = false }
Expand Down
6 changes: 3 additions & 3 deletions crates/relayer-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,15 @@ tracing-subscriber = { version = "0.3.14", features = ["fmt", "env-filter"
time = "0.3"

[dependencies.tendermint]
version = "0.32.0"
version = "0.33.0"
features = ["secp256k1"]

[dependencies.tendermint-rpc]
version = "0.32.0"
version = "0.33.0"
features = ["http-client", "websocket-client"]

[dependencies.tendermint-light-client-verifier]
version = "0.32.0"
version = "0.33.0"

[dependencies.abscissa_core]
version = "=0.6.0"
Expand Down
14 changes: 7 additions & 7 deletions crates/relayer-types/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ mocks = ["tendermint-testgen", "clock"]

[dependencies]
# Proto definitions for all IBC-related interfaces, e.g., connections or channels.
ibc-proto = { version = "0.32.1" }
ibc-proto = { version = "0.33.0" }
ics23 = { version = "0.10.1", features = ["std", "host-functions"] }
time = { version = "0.3" }
serde_derive = { version = "1.0.104" }
Expand All @@ -44,24 +44,24 @@ dyn-clone = "1.0.12"
num-rational = "0.4.1"

[dependencies.tendermint]
version = "0.32.0"
version = "0.33.0"
features = ["clock"]

[dependencies.tendermint-proto]
version = "0.32.0"
version = "0.33.0"

[dependencies.tendermint-light-client-verifier]
version = "0.32.0"
version = "0.33.0"
features = ["rust-crypto"]

[dependencies.tendermint-testgen]
version = "0.32.0"
version = "0.33.0"
optional = true

[dev-dependencies]
env_logger = "0.10.0"
tracing = { version = "0.1.36", default-features = false }
tracing-subscriber = { version = "0.3.14", features = ["fmt", "env-filter", "json"] }
test-log = { version = "0.2.10", features = ["trace"] }
tendermint-rpc = { version = "0.32.0", features = ["http-client", "websocket-client"] }
tendermint-testgen = { version = "0.32.0" } # Needed for generating (synthetic) light blocks.
tendermint-rpc = { version = "0.33.0", features = ["http-client", "websocket-client"] }
tendermint-testgen = { version = "0.33.0" } # Needed for generating (synthetic) light blocks.
1 change: 1 addition & 0 deletions crates/relayer-types/src/test_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ pub fn default_consensus_params() -> consensus::Params {
pub_key_types: vec![Algorithm::Ed25519],
},
version: Some(consensus::params::VersionParams::default()),
abci: consensus::params::AbciParams::default(),
}
}

Expand Down
12 changes: 6 additions & 6 deletions crates/relayer/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ default = ["flex-error/std", "flex-error/eyre_tracer"]
telemetry = ["ibc-telemetry"]

[dependencies]
ibc-proto = { version = "0.32.1" }
ibc-proto = { version = "0.33.0" }
ibc-telemetry = { version = "0.25.0", path = "../telemetry", optional = true }
ibc-relayer-types = { version = "0.25.0", path = "../relayer-types", features = ["mocks"] }

Expand Down Expand Up @@ -84,20 +84,20 @@ version = "0.4.1"
features = ["num-bigint", "serde"]

[dependencies.tendermint]
version = "0.32.0"
version = "0.33.0"
features = ["secp256k1"]

[dependencies.tendermint-rpc]
version = "0.32.0"
version = "0.33.0"
features = ["http-client", "websocket-client"]

[dependencies.tendermint-light-client]
version = "0.32.0"
version = "0.33.0"
default-features = false
features = ["rpc-client", "secp256k1", "unstable"]

[dependencies.tendermint-light-client-detector]
version = "0.32.0"
version = "0.33.0"
default-features = false

[dev-dependencies]
Expand All @@ -108,4 +108,4 @@ tracing-subscriber = { version = "0.3.14", features = ["fmt", "env-filter", "jso
test-log = { version = "0.2.10", features = ["trace"] }

# Needed for generating (synthetic) light blocks.
tendermint-testgen = { version = "0.32.0" }
tendermint-testgen = { version = "0.33.0" }
41 changes: 23 additions & 18 deletions crates/relayer/src/chain/cosmos.rs
Original file line number Diff line number Diff line change
Expand Up @@ -762,9 +762,6 @@ impl CosmosSdkChain {
);
crate::telemetry!(query, self.id(), "query_block");

let mut begin_block_events = vec![];
let mut end_block_events = vec![];

let tm_height =
tendermint::block::Height::try_from(block_height.revision_height()).unwrap();

Expand All @@ -775,24 +772,32 @@ impl CosmosSdkChain {
let response_height = ICSHeight::new(self.id().version(), u64::from(response.height))
.map_err(|_| Error::invalid_height_no_source())?;

begin_block_events.append(
&mut response
.begin_block_events
.unwrap_or_default()
.iter()
.filter_map(|ev| filter_matching_event(ev, request, seqs))
.map(|ev| IbcEventWithHeight::new(ev, response_height))
.collect(),
);
let begin_block_events = response
.begin_block_events
.unwrap_or_default()
.iter()
.filter_map(|ev| filter_matching_event(ev, request, seqs))
.map(|ev| IbcEventWithHeight::new(ev, response_height))
.collect();

let mut end_block_events: Vec<_> = response
.end_block_events
.unwrap_or_default()
.iter()
.filter_map(|ev| filter_matching_event(ev, request, seqs))
.map(|ev| IbcEventWithHeight::new(ev, response_height))
.collect();

end_block_events.append(
&mut response
.end_block_events
.unwrap_or_default()
// Since CometBFT 0.38, block events are returned in the
// finalize_block_events field and the other *_block_events fields
// are no longer present. We put these in place of the end_block_events
// in older protocol.
end_block_events.extend(
response
.finalize_block_events
.iter()
.filter_map(|ev| filter_matching_event(ev, request, seqs))
.map(|ev| IbcEventWithHeight::new(ev, response_height))
.collect(),
.map(|ev| IbcEventWithHeight::new(ev, response_height)),
);

Ok((begin_block_events, end_block_events))
Expand Down
45 changes: 22 additions & 23 deletions crates/relayer/src/chain/cosmos/query/tx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,47 +198,46 @@ pub async fn query_packets_from_block(
.await
.map_err(|e| Error::rpc(rpc_address.clone(), e))?;

let mut tx_events = vec![];
let mut begin_block_events = vec![];
let mut end_block_events = vec![];
let mut events: Vec<_> = block_results
.begin_block_events
.unwrap_or_default()
.iter()
.filter_map(|ev| filter_matching_event(ev, request, &request.sequences))
.map(|ev| IbcEventWithHeight::new(ev, height))
.collect();

if let Some(txs) = block_results.txs_results {
for tx in txs {
tx_events.append(
&mut tx
.events
events.extend(
tx.events
.iter()
.filter_map(|ev| filter_matching_event(ev, request, &request.sequences))
.map(|ev| IbcEventWithHeight::new(ev, height))
.collect(),
.map(|ev| IbcEventWithHeight::new(ev, height)),
)
}
}

begin_block_events.append(
&mut block_results
.begin_block_events
events.extend(
block_results
.end_block_events
.unwrap_or_default()
.iter()
.filter_map(|ev| filter_matching_event(ev, request, &request.sequences))
.map(|ev| IbcEventWithHeight::new(ev, height))
.collect(),
.map(|ev| IbcEventWithHeight::new(ev, height)),
);

end_block_events.append(
&mut block_results
.end_block_events
.unwrap_or_default()
// Since CometBFT 0.38, block events are returned in the
// finalize_block_events field and the other *_block_events fields
// are no longer present. We put these in place of the end_block_events
// in older protocol.
events.extend(
block_results
.finalize_block_events
.iter()
.filter_map(|ev| filter_matching_event(ev, request, &request.sequences))
.map(|ev| IbcEventWithHeight::new(ev, height))
.collect(),
.map(|ev| IbcEventWithHeight::new(ev, height)),
);

let mut events = begin_block_events;
events.append(&mut tx_events);
events.append(&mut end_block_events);

Ok(events)
}

Expand Down
4 changes: 3 additions & 1 deletion crates/relayer/src/event/source/websocket/extract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,9 @@ pub fn extract_events(
let events = events.ok_or("missing events")?;

match data {
RpcEventData::NewBlock { block, .. } if query == queries::new_block().to_string() => {
RpcEventData::NewBlock { block, .. } | RpcEventData::LegacyNewBlock { block, .. }
if query == queries::new_block().to_string() =>
{
let height = Height::new(
ChainId::chain_version(chain_id.to_string().as_str()),
u64::from(block.as_ref().ok_or("tx.height")?.header.height),
Expand Down
2 changes: 1 addition & 1 deletion crates/telemetry/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,5 @@ tokio = "1.26.0"
tracing = "0.1.36"

[dependencies.tendermint]
version = "0.32.0"
version = "0.33.0"
default-features = false
Loading

0 comments on commit 9646762

Please sign in to comment.