From 5782b48b48ae30ce626bf3c8f569d63020f782f3 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Wed, 13 Mar 2024 13:03:38 +0100 Subject: [PATCH 01/10] Update sov-rollup-starter --- flake.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/flake.lock b/flake.lock index e88e0f09e..6ed199d38 100644 --- a/flake.lock +++ b/flake.lock @@ -3143,11 +3143,11 @@ "sovereign-sdk-src": "sovereign-sdk-src" }, "locked": { - "lastModified": 1709134386, - "narHash": "sha256-/O9TNbsJZ/2U/tJC4sF5Avk8dSYdqz0ybnu3R3QQfJU=", + "lastModified": 1710252359, + "narHash": "sha256-t3jP7cFDa3o9p+aqt/5WoYGa4pHlaxZQMYbS8r6eLbM=", "owner": "informalsystems", "repo": "sov-rollup-starter", - "rev": "e3ee5c99c976fc76957e048a8672c4d18cdaa595", + "rev": "26a8cce999d44d87a9e99715d20baf8eaa7fa491", "type": "github" }, "original": { @@ -3159,16 +3159,16 @@ "sovereign-sdk-src": { "flake": false, "locked": { - "lastModified": 1707405267, - "narHash": "sha256-Gz4JUsPoJW5t7u7Ahuf5qMkLtQhXbT6ySi6KDSSn8Qs=", + "lastModified": 1709835864, + "narHash": "sha256-k9jWxhyIaYYS7tFe2el3g3t323oT3JZJPpm69DEz8oM=", "ref": "refs/heads/nightly", - "rev": "a1d9ed80af46a0ea6e173204ca708c40ce592d3f", - "revCount": 800, + "rev": "3f94ceccae8f84eb191deeb97ce65a1af3c9fd1b", + "revCount": 859, "type": "git", "url": "ssh://git@github.com/informalsystems/sovereign-sdk-wip" }, "original": { - "rev": "a1d9ed80af46a0ea6e173204ca708c40ce592d3f", + "rev": "3f94ceccae8f84eb191deeb97ce65a1af3c9fd1b", "type": "git", "url": "ssh://git@github.com/informalsystems/sovereign-sdk-wip" } From e1cf2c2c8a8cc06e5239d363d6d9ae8e185a5c51 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Wed, 13 Mar 2024 13:05:35 +0100 Subject: [PATCH 02/10] Rename start_height to genesis_height in rollup node config --- .../src/bootstrap/impls/init_rollup_node_config.rs | 2 +- .../sovereign-test-components/src/types/rollup_node_config.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/sovereign/sovereign-test-components/src/bootstrap/impls/init_rollup_node_config.rs b/crates/sovereign/sovereign-test-components/src/bootstrap/impls/init_rollup_node_config.rs index 420a4398b..9ca165ab0 100644 --- a/crates/sovereign/sovereign-test-components/src/bootstrap/impls/init_rollup_node_config.rs +++ b/crates/sovereign/sovereign-test-components/src/bootstrap/impls/init_rollup_node_config.rs @@ -64,7 +64,7 @@ where path: Runtime::file_path_to_string(&data_path), }, runner: SovereignRunnerConfig { - start_height: 1, + genesis_height: 1, rpc_config: SovereignRpcConfig { bind_host: "127.0.0.1".into(), bind_port: rollup_rpc_port, diff --git a/crates/sovereign/sovereign-test-components/src/types/rollup_node_config.rs b/crates/sovereign/sovereign-test-components/src/types/rollup_node_config.rs index 94a4ed36c..e6622f2f6 100644 --- a/crates/sovereign/sovereign-test-components/src/types/rollup_node_config.rs +++ b/crates/sovereign/sovereign-test-components/src/types/rollup_node_config.rs @@ -23,7 +23,7 @@ pub struct SovereignStorageConfig { #[derive(Serialize)] pub struct SovereignRunnerConfig { - pub start_height: u64, + pub genesis_height: u64, pub rpc_config: SovereignRpcConfig, pub da_polling_interval_ms: u64, } From 71a65a1f162bd434d1ecbb93485dcd0b7c91a263 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Wed, 13 Mar 2024 14:01:28 +0100 Subject: [PATCH 03/10] Revert "Rename start_height to genesis_height in rollup node config" This reverts commit e1cf2c2c8a8cc06e5239d363d6d9ae8e185a5c51. --- .../src/bootstrap/impls/init_rollup_node_config.rs | 2 +- .../sovereign-test-components/src/types/rollup_node_config.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/sovereign/sovereign-test-components/src/bootstrap/impls/init_rollup_node_config.rs b/crates/sovereign/sovereign-test-components/src/bootstrap/impls/init_rollup_node_config.rs index 9ca165ab0..420a4398b 100644 --- a/crates/sovereign/sovereign-test-components/src/bootstrap/impls/init_rollup_node_config.rs +++ b/crates/sovereign/sovereign-test-components/src/bootstrap/impls/init_rollup_node_config.rs @@ -64,7 +64,7 @@ where path: Runtime::file_path_to_string(&data_path), }, runner: SovereignRunnerConfig { - genesis_height: 1, + start_height: 1, rpc_config: SovereignRpcConfig { bind_host: "127.0.0.1".into(), bind_port: rollup_rpc_port, diff --git a/crates/sovereign/sovereign-test-components/src/types/rollup_node_config.rs b/crates/sovereign/sovereign-test-components/src/types/rollup_node_config.rs index e6622f2f6..94a4ed36c 100644 --- a/crates/sovereign/sovereign-test-components/src/types/rollup_node_config.rs +++ b/crates/sovereign/sovereign-test-components/src/types/rollup_node_config.rs @@ -23,7 +23,7 @@ pub struct SovereignStorageConfig { #[derive(Serialize)] pub struct SovereignRunnerConfig { - pub genesis_height: u64, + pub start_height: u64, pub rpc_config: SovereignRpcConfig, pub da_polling_interval_ms: u64, } From 511cd775c552b58a752034200b04899b38a372da Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Wed, 13 Mar 2024 14:01:57 +0100 Subject: [PATCH 04/10] Downgrade sov-rollup-starter as latest is broken --- flake.lock | 36 +++++++++++++++++++++++++++--------- flake.nix | 2 +- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/flake.lock b/flake.lock index 6ed199d38..286a20089 100644 --- a/flake.lock +++ b/flake.lock @@ -2894,6 +2894,23 @@ "type": "github" } }, + "risc0-cycle-macros-src": { + "flake": false, + "locked": { + "lastModified": 1707815844, + "narHash": "sha256-tl6TvAUghcJvlnbD1iYH4mHjgSEtNKsAYN9ZZP69pyc=", + "owner": "Sovereign-Labs", + "repo": "risc0-cycle-macros", + "rev": "98948b8ee0e3edffcee7f3bd95a9d93c5c0941af", + "type": "github" + }, + "original": { + "owner": "Sovereign-Labs", + "repo": "risc0-cycle-macros", + "rev": "98948b8ee0e3edffcee7f3bd95a9d93c5c0941af", + "type": "github" + } + }, "root": { "inputs": { "cosmos-nix": "cosmos-nix", @@ -3139,36 +3156,37 @@ "flake-utils": "flake-utils_12", "gaia-src": "gaia-src", "nixpkgs": "nixpkgs_12", + "risc0-cycle-macros-src": "risc0-cycle-macros-src", "rust-overlay": "rust-overlay_3", "sovereign-sdk-src": "sovereign-sdk-src" }, "locked": { - "lastModified": 1710252359, - "narHash": "sha256-t3jP7cFDa3o9p+aqt/5WoYGa4pHlaxZQMYbS8r6eLbM=", + "lastModified": 1709935770, + "narHash": "sha256-Yj5zfVZ7qEAPZIqeMDKeSUav+wc7qvy/NY87Eczt1hw=", "owner": "informalsystems", "repo": "sov-rollup-starter", - "rev": "26a8cce999d44d87a9e99715d20baf8eaa7fa491", + "rev": "0ca6b94f9275be5efc5a685b164101e9e831b130", "type": "github" }, "original": { "owner": "informalsystems", "repo": "sov-rollup-starter", + "rev": "0ca6b94f9275be5efc5a685b164101e9e831b130", "type": "github" } }, "sovereign-sdk-src": { "flake": false, "locked": { - "lastModified": 1709835864, - "narHash": "sha256-k9jWxhyIaYYS7tFe2el3g3t323oT3JZJPpm69DEz8oM=", - "ref": "refs/heads/nightly", - "rev": "3f94ceccae8f84eb191deeb97ce65a1af3c9fd1b", - "revCount": 859, + "lastModified": 1708644201, + "narHash": "sha256-NN1uomkyqAxRyXkAvOl809gUhwXJON0WPFe1WZAinMI=", + "rev": "5a144d60eefaf9ce166bbfd66324b959aa4ae82b", + "revCount": 818, "type": "git", "url": "ssh://git@github.com/informalsystems/sovereign-sdk-wip" }, "original": { - "rev": "3f94ceccae8f84eb191deeb97ce65a1af3c9fd1b", + "rev": "5a144d60eefaf9ce166bbfd66324b959aa4ae82b", "type": "git", "url": "ssh://git@github.com/informalsystems/sovereign-sdk-wip" } diff --git a/flake.nix b/flake.nix index b899ef21d..07690c344 100644 --- a/flake.nix +++ b/flake.nix @@ -6,7 +6,7 @@ flake-utils.url = github:numtide/flake-utils; cosmos-nix.url = github:informalsystems/cosmos.nix; cosmos-nix-wasm.url = github:informalsystems/cosmos.nix/jonathan/ibc-go-wasm; - sovereign-nix.url = github:informalsystems/sov-rollup-starter; + sovereign-nix.url = github:informalsystems/sov-rollup-starter?rev=0ca6b94f9275be5efc5a685b164101e9e831b130; }; outputs = inputs: let From b55260e48d1331c5278ba44c0ae68be07566d541 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Wed, 13 Mar 2024 14:51:35 +0100 Subject: [PATCH 05/10] Use new events format --- .../src/sovereign/impls/transaction/event.rs | 31 ++----------------- .../impls/transaction/query_tx_response.rs | 4 +-- .../src/sovereign/types/event.rs | 17 ++-------- .../src/sovereign/types/rpc/tx_response.rs | 4 +-- .../tests/bootstrap.rs | 16 +++++----- 5 files changed, 17 insertions(+), 55 deletions(-) diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/event.rs b/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/event.rs index b4399fe3a..05fe3e847 100644 --- a/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/event.rs +++ b/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/event.rs @@ -1,13 +1,12 @@ use core::str::Utf8Error; use std::io::Error as IoError; -use borsh::BorshDeserialize; use cgp_core::CanRaiseError; use hermes_relayer_components::chain::traits::types::event::HasEventType; use hermes_relayer_components::transaction::traits::event::TxResponseAsEventsParser; use hermes_relayer_components::transaction::traits::types::HasTxResponseType; -use crate::sovereign::types::event::{RawEvent, SovereignEvent, SovereignEventDetail}; +use crate::sovereign::types::event::SovereignEvent; use crate::sovereign::types::rpc::tx_response::TxResponse; pub struct ParseSovTxResponseAsEvents; @@ -22,32 +21,6 @@ where fn parse_tx_response_as_events( response: TxResponse, ) -> Result>, Chain::Error> { - let events = response - .events - .iter() - .filter_map(|event| { - // By default, we discard events that we fail to parse, - // which may not be of interest by the relayer. - // In case if any expected event is missing, - // try changing this to return error - parse_event_response::(event).ok() - }) - .collect(); - - Ok(vec![events]) + Ok(vec![response.events]) } } - -pub fn parse_event_response(response: &RawEvent) -> Result -where - Chain: CanRaiseError + CanRaiseError, -{ - let key = core::str::from_utf8(&response.key) - .map_err(Chain::raise_error)? - .to_string(); - - let detail = SovereignEventDetail::deserialize(&mut response.value.as_slice()) - .map_err(Chain::raise_error)?; - - Ok(SovereignEvent { key, detail }) -} diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/query_tx_response.rs b/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/query_tx_response.rs index b13ddfe9b..5269ee3dc 100644 --- a/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/query_tx_response.rs +++ b/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/query_tx_response.rs @@ -10,7 +10,7 @@ use jsonrpsee::core::ClientError; use serde::Deserialize; use crate::sovereign::traits::rollup::json_rpc_client::HasJsonRpcClient; -use crate::sovereign::types::event::RawEvent; +use crate::sovereign::types::event::SovereignEvent; use crate::sovereign::types::rpc::tx_hash::TxHash; use crate::sovereign::types::rpc::tx_response::{TxEffect, TxResponse}; @@ -37,7 +37,7 @@ where if let Some(response) = response { let event_ids: Vec = response.event_range.collect(); - let events: Vec = chain + let events: Vec = chain .json_rpc_client() .request("ledger_getEvents", (event_ids,)) .await diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/types/event.rs b/crates/sovereign/sovereign-client-components/src/sovereign/types/event.rs index 42526dd12..4d5029092 100644 --- a/crates/sovereign/sovereign-client-components/src/sovereign/types/event.rs +++ b/crates/sovereign/sovereign-client-components/src/sovereign/types/event.rs @@ -4,19 +4,8 @@ use serde::Deserialize; use crate::sovereign::types::events::bank::BankEvent; #[derive(Debug, Deserialize)] -pub struct RawEvent { - pub key: Vec, - pub value: Vec, -} - -#[derive(Debug)] pub struct SovereignEvent { - pub key: String, - pub detail: SovereignEventDetail, -} - -#[derive(Debug, BorshDeserialize)] -pub enum SovereignEventDetail { - Accounts, - Bank(BankEvent), + pub event_value: serde_json::Value, + pub module_name: String, + pub module_address: String, } diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/types/rpc/tx_response.rs b/crates/sovereign/sovereign-client-components/src/sovereign/types/rpc/tx_response.rs index 29f3a9529..25d435fc6 100644 --- a/crates/sovereign/sovereign-client-components/src/sovereign/types/rpc/tx_response.rs +++ b/crates/sovereign/sovereign-client-components/src/sovereign/types/rpc/tx_response.rs @@ -1,12 +1,12 @@ use serde::Deserialize; -use crate::sovereign::types::event::RawEvent; +use crate::sovereign::types::event::SovereignEvent; use crate::sovereign::types::rpc::tx_hash::TxHash; #[derive(Debug, Deserialize)] pub struct TxResponse { pub hash: TxHash, - pub events: Vec, + pub events: Vec, pub custom_receipt: TxEffect, } diff --git a/crates/sovereign/sovereign-integration-tests/tests/bootstrap.rs b/crates/sovereign/sovereign-integration-tests/tests/bootstrap.rs index b1d876ca5..0a06d3c53 100644 --- a/crates/sovereign/sovereign-integration-tests/tests/bootstrap.rs +++ b/crates/sovereign/sovereign-integration-tests/tests/bootstrap.rs @@ -196,18 +196,18 @@ fn test_sovereign_bootstrap() -> Result<(), Error> { rollup.publish_transaction_batch(&[tx_bytes]).await?; - sleep(Duration::from_secs(2)).await; + // sleep(Duration::from_secs(5)).await; - let response = rollup - .query_tx_response(&tx_hash) - .await? - .ok_or_else(|| eyre!("expect tx response to be present"))?; + // let response = rollup + // .query_tx_response(&tx_hash) + // .await? + // .ok_or_else(|| eyre!("expect tx response to be present"))?; - println!("querty tx hash {} response: {:?}", tx_hash, response); + // println!("query tx hash {} response: {:?}", tx_hash, response); - let events = SovereignRollup::parse_tx_response_as_events(response)?; + // let events = SovereignRollup::parse_tx_response_as_events(response)?; - println!("events: {:?}", events); + // println!("events: {:?}", events); } } >::Ok(()) From e234c7d9ab2ef538c2a56faf9e080205c7c5d352 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Wed, 13 Mar 2024 14:57:55 +0100 Subject: [PATCH 06/10] Need to wait longer for a transaction to be processed --- .../sovereign/impls/transaction/publish_batch.rs | 4 +++- .../src/sovereign/types/event.rs | 3 --- .../tests/bootstrap.rs | 16 ++++++++-------- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/publish_batch.rs b/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/publish_batch.rs index dc2e034f8..a92d59fc5 100644 --- a/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/publish_batch.rs +++ b/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/publish_batch.rs @@ -22,11 +22,13 @@ where ) -> Result<(), Chain::Error> { let rpc_client = chain.json_rpc_client(); - let _response: serde_json::Value = rpc_client + let response: serde_json::Value = rpc_client .request("sequencer_publishBatch", transactions) .await .map_err(Chain::raise_error)?; + println!("sequencer_publishBatch response: {}", response); + Ok(()) } } diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/types/event.rs b/crates/sovereign/sovereign-client-components/src/sovereign/types/event.rs index 4d5029092..3c44fcc34 100644 --- a/crates/sovereign/sovereign-client-components/src/sovereign/types/event.rs +++ b/crates/sovereign/sovereign-client-components/src/sovereign/types/event.rs @@ -1,8 +1,5 @@ -use borsh::BorshDeserialize; use serde::Deserialize; -use crate::sovereign::types::events::bank::BankEvent; - #[derive(Debug, Deserialize)] pub struct SovereignEvent { pub event_value: serde_json::Value, diff --git a/crates/sovereign/sovereign-integration-tests/tests/bootstrap.rs b/crates/sovereign/sovereign-integration-tests/tests/bootstrap.rs index 0a06d3c53..99ed4e055 100644 --- a/crates/sovereign/sovereign-integration-tests/tests/bootstrap.rs +++ b/crates/sovereign/sovereign-integration-tests/tests/bootstrap.rs @@ -196,18 +196,18 @@ fn test_sovereign_bootstrap() -> Result<(), Error> { rollup.publish_transaction_batch(&[tx_bytes]).await?; - // sleep(Duration::from_secs(5)).await; + sleep(Duration::from_secs(8)).await; - // let response = rollup - // .query_tx_response(&tx_hash) - // .await? - // .ok_or_else(|| eyre!("expect tx response to be present"))?; + let response = rollup + .query_tx_response(&tx_hash) + .await? + .ok_or_else(|| eyre!("expect tx response to be present"))?; - // println!("query tx hash {} response: {:?}", tx_hash, response); + println!("query tx hash {} response: {:?}", tx_hash, response); - // let events = SovereignRollup::parse_tx_response_as_events(response)?; + let events = SovereignRollup::parse_tx_response_as_events(response)?; - // println!("events: {:?}", events); + println!("events: {:?}", events); } } >::Ok(()) From 5fc4a2b0ed6de3fea7d1642161ce6db6a2690089 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Thu, 14 Mar 2024 10:52:25 +0100 Subject: [PATCH 07/10] Refactor TxNoResponseError --- .../cosmos/cosmos-relayer/src/impls/error.rs | 11 ++++ .../src/impls/transaction/error.rs | 12 ---- .../src/impls/transaction/mod.rs | 1 - .../src/components/default/transaction.rs | 5 +- .../components/poll_tx_response.rs | 66 ++++++++++++------- .../impls/transaction/publish_batch.rs | 4 +- 6 files changed, 58 insertions(+), 41 deletions(-) delete mode 100644 crates/cosmos/cosmos-relayer/src/impls/transaction/error.rs diff --git a/crates/cosmos/cosmos-relayer/src/impls/error.rs b/crates/cosmos/cosmos-relayer/src/impls/error.rs index 438daf23c..04d5c82dc 100644 --- a/crates/cosmos/cosmos-relayer/src/impls/error.rs +++ b/crates/cosmos/cosmos-relayer/src/impls/error.rs @@ -1,6 +1,7 @@ use core::convert::Infallible; use core::num::ParseIntError; +use crate::contexts::transaction::CosmosTxContext; use crate::types::error::{HandleInfallible, ProvideCosmosError}; use alloc::string::FromUtf8Error; use cgp_core::prelude::*; @@ -11,6 +12,8 @@ use hermes_cosmos_client_components::impls::queries::abci::AbciQueryError; use hermes_protobuf_components::impls::any::TypeUrlMismatchError; use hermes_relayer_components::chain::traits::types::chain_id::HasChainIdType; use hermes_relayer_components::relay::impls::create_client::MissingCreateClientEventError; +use hermes_relayer_components::transaction::components::poll_tx_response::TxNoResponseError; +use hermes_relayer_components::transaction::traits::types::HasTransactionHashType; use hermes_relayer_runtime::types::error::TokioRuntimeError; use hermes_test_components::chain::impls::assert::poll_assert_eventual_amount::EventualAmountTimeoutError; use hermes_test_components::chain::impls::ibc_transfer::MissingSendPacketEventError; @@ -34,6 +37,7 @@ pub trait CheckErrorRaiser: ErrorRaiser + for<'a> ErrorRaiser + for<'a> ErrorRaiser> + + for<'a> ErrorRaiser> where Context: HasErrorType, { @@ -96,6 +100,13 @@ where type Delegate = DebugError; } +impl<'a, Chain> DelegateComponent> for HandleCosmosError +where + Chain: HasTransactionHashType, +{ + type Delegate = DebugError; +} + impl<'a, Chain, Counterparty> DelegateComponent> for HandleCosmosError where diff --git a/crates/cosmos/cosmos-relayer/src/impls/transaction/error.rs b/crates/cosmos/cosmos-relayer/src/impls/transaction/error.rs deleted file mode 100644 index 2aab06d4a..000000000 --- a/crates/cosmos/cosmos-relayer/src/impls/transaction/error.rs +++ /dev/null @@ -1,12 +0,0 @@ -use eyre::eyre; -use hermes_relayer_components::transaction::components::poll_tx_response::CanRaiseNoTxResponseError; -use tendermint::Hash as TxHash; - -use crate::contexts::transaction::CosmosTxContext; -use crate::types::error::Error; - -impl CanRaiseNoTxResponseError for CosmosTxContext { - fn tx_no_response_error(tx_hash: &TxHash) -> Error { - eyre!("failed to receive tx response for tx hash: {}", tx_hash).into() - } -} diff --git a/crates/cosmos/cosmos-relayer/src/impls/transaction/mod.rs b/crates/cosmos/cosmos-relayer/src/impls/transaction/mod.rs index d8857601d..c06d1dee5 100644 --- a/crates/cosmos/cosmos-relayer/src/impls/transaction/mod.rs +++ b/crates/cosmos/cosmos-relayer/src/impls/transaction/mod.rs @@ -1,6 +1,5 @@ pub mod component; pub mod components; -pub mod error; pub mod fields; pub mod log; pub mod types; diff --git a/crates/relayer/relayer-components/src/components/default/transaction.rs b/crates/relayer/relayer-components/src/components/default/transaction.rs index c95d78aec..973746cb4 100644 --- a/crates/relayer/relayer-components/src/components/default/transaction.rs +++ b/crates/relayer/relayer-components/src/components/default/transaction.rs @@ -1,4 +1,5 @@ use cgp_core::prelude::*; +use cgp_core::CanRaiseError; use crate::chain::traits::send_message::{CanSendMessages, MessageSenderComponent}; use crate::chain::traits::types::chain_id::HasChainId; @@ -13,7 +14,7 @@ use crate::transaction::components::allocate_nonce_and_send_messages::AllocateNo use crate::transaction::components::allocate_nonce_with_mutex::AllocateNonceWithMutex; use crate::transaction::components::estimate_fees_and_send_tx::EstimateFeesAndSendTx; use crate::transaction::components::poll_tx_response::{ - CanRaiseNoTxResponseError, HasPollTimeout, PollTxResponse, + HasPollTimeout, PollTxResponse, TxNoResponseError, }; use crate::transaction::components::send_messages_with_default_signer::SendMessagesWithDefaultSigner; use crate::transaction::traits::components::nonce_allocater::{ @@ -96,7 +97,7 @@ where + HasLogger + CanLogNonce + CanParseTxResponseAsEvents - + CanRaiseNoTxResponseError + + for<'a> CanRaiseError> + HasComponents, Chain::Runtime: HasMutex + HasTime + CanSleep, Chain::Logger: HasBaseLogLevels, diff --git a/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs b/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs index 99354e07a..116c71908 100644 --- a/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs +++ b/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs @@ -1,6 +1,7 @@ +use core::fmt::Debug; use core::time::Duration; -use cgp_core::HasErrorType; +use cgp_core::CanRaiseError; use crate::logger::traits::level::HasBaseLogLevels; use crate::runtime::traits::runtime::HasRuntime; @@ -11,8 +12,24 @@ use crate::transaction::traits::components::tx_response_querier::CanQueryTxRespo use crate::transaction::traits::logs::logger::CanLogTx; use crate::transaction::traits::types::HasTransactionHashType; -pub trait CanRaiseNoTxResponseError: HasTransactionHashType + HasErrorType { - fn tx_no_response_error(tx_hash: &Self::TxHash) -> Self::Error; +pub struct TxNoResponseError<'a, Chain> +where + Chain: HasTransactionHashType, +{ + pub chain: &'a Chain, + pub tx_hash: &'a Chain::TxHash, +} + +impl<'a, Chain> Debug for TxNoResponseError<'a, Chain> +where + Chain: HasTransactionHashType, + Chain::TxHash: Debug, +{ + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + f.debug_struct("TxNoResponseError") + .field("tx_hash", &self.tx_hash) + .finish() + } } pub trait HasPollTimeout { @@ -23,45 +40,48 @@ pub trait HasPollTimeout { pub struct PollTxResponse; -impl TxResponsePoller for PollTxResponse +impl TxResponsePoller for PollTxResponse where - Context: - CanLogTx + CanQueryTxResponse + HasPollTimeout + HasRuntime + CanRaiseNoTxResponseError, - Context::Runtime: HasTime + CanSleep, + Chain: CanLogTx + + CanQueryTxResponse + + HasPollTimeout + + HasRuntime + + for<'a> CanRaiseError>, + Chain::Runtime: HasTime + CanSleep, { async fn poll_tx_response( - context: &Context, - tx_hash: &Context::TxHash, - ) -> Result { - let runtime = context.runtime(); - let wait_timeout = context.poll_timeout(); - let wait_backoff = context.poll_backoff(); + chain: &Chain, + tx_hash: &Chain::TxHash, + ) -> Result { + let runtime = chain.runtime(); + let wait_timeout = chain.poll_timeout(); + let wait_backoff = chain.poll_backoff(); let start_time = runtime.now(); loop { - let response = context.query_tx_response(tx_hash).await; + let response = chain.query_tx_response(tx_hash).await; match response { Ok(None) => { - let elapsed = Context::Runtime::duration_since(&start_time, &runtime.now()); + let elapsed = Chain::Runtime::duration_since(&start_time, &runtime.now()); if elapsed > wait_timeout { - context.log_tx( - Context::Logger::LEVEL_ERROR, + chain.log_tx( + Chain::Logger::LEVEL_ERROR, "no tx response received, and poll timeout has recached. returning error", |log| { log.debug("elapsed", &elapsed).debug("wait_timeout", &wait_timeout); } ); - return Err(Context::tx_no_response_error(tx_hash)); + return Err(Chain::raise_error(TxNoResponseError { chain, tx_hash })); } else { runtime.sleep(wait_backoff).await; } } Ok(Some(response)) => { - context.log_tx( - Context::Logger::LEVEL_TRACE, + chain.log_tx( + Chain::Logger::LEVEL_TRACE, "received tx response, finish polling", |_| {}, ); @@ -69,8 +89,8 @@ where return Ok(response); } Err(e) => { - context.log_tx( - Context::Logger::LEVEL_ERROR, + chain.log_tx( + Chain::Logger::LEVEL_ERROR, "query_tx_response returned error", |log| { log.debug("error", &e); @@ -87,7 +107,7 @@ where we return the error we get from the query. */ - let elapsed = Context::Runtime::duration_since(&start_time, &runtime.now()); + let elapsed = Chain::Runtime::duration_since(&start_time, &runtime.now()); if elapsed > wait_timeout { return Err(e); } else { diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/publish_batch.rs b/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/publish_batch.rs index a92d59fc5..dc2e034f8 100644 --- a/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/publish_batch.rs +++ b/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/publish_batch.rs @@ -22,13 +22,11 @@ where ) -> Result<(), Chain::Error> { let rpc_client = chain.json_rpc_client(); - let response: serde_json::Value = rpc_client + let _response: serde_json::Value = rpc_client .request("sequencer_publishBatch", transactions) .await .map_err(Chain::raise_error)?; - println!("sequencer_publishBatch response: {}", response); - Ok(()) } } From f5a5f4d6fa9e3496eb6bd995ad71d23ea8859620 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Thu, 14 Mar 2024 11:04:45 +0100 Subject: [PATCH 08/10] Add provider trait for HasPollTimeout --- .../src/impls/transaction/mod.rs | 1 + .../src/impls/transaction/poll_timeout.rs | 15 +++++++ .../src/impls/transaction/component.rs | 4 ++ .../src/impls/transaction/fields.rs | 13 ------ .../components/poll_tx_response.rs | 2 + .../src/sovereign/context/mod.rs | 1 - .../context/sovereign_counterparty.rs | 40 ------------------- .../src/sovereign/mod.rs | 1 - .../src/contexts/sovereign_rollup.rs | 7 ++-- 9 files changed, 26 insertions(+), 58 deletions(-) create mode 100644 crates/cosmos/cosmos-client-components/src/impls/transaction/poll_timeout.rs delete mode 100644 crates/sovereign/sovereign-client-components/src/sovereign/context/mod.rs delete mode 100644 crates/sovereign/sovereign-client-components/src/sovereign/context/sovereign_counterparty.rs diff --git a/crates/cosmos/cosmos-client-components/src/impls/transaction/mod.rs b/crates/cosmos/cosmos-client-components/src/impls/transaction/mod.rs index 53f112654..33face02a 100644 --- a/crates/cosmos/cosmos-client-components/src/impls/transaction/mod.rs +++ b/crates/cosmos/cosmos-client-components/src/impls/transaction/mod.rs @@ -1 +1,2 @@ pub mod event; +pub mod poll_timeout; diff --git a/crates/cosmos/cosmos-client-components/src/impls/transaction/poll_timeout.rs b/crates/cosmos/cosmos-client-components/src/impls/transaction/poll_timeout.rs new file mode 100644 index 000000000..d3dbd6f23 --- /dev/null +++ b/crates/cosmos/cosmos-client-components/src/impls/transaction/poll_timeout.rs @@ -0,0 +1,15 @@ +use core::time::Duration; + +use hermes_relayer_components::transaction::components::poll_tx_response::PollTimeoutGetter; + +pub struct DefaultPollTimeout; + +impl PollTimeoutGetter for DefaultPollTimeout { + fn poll_timeout(_chain: &Chain) -> Duration { + Duration::from_secs(300) + } + + fn poll_backoff(_chain: &Chain) -> Duration { + Duration::from_millis(200) + } +} diff --git a/crates/cosmos/cosmos-relayer/src/impls/transaction/component.rs b/crates/cosmos/cosmos-relayer/src/impls/transaction/component.rs index 905b7e621..2b6a93915 100644 --- a/crates/cosmos/cosmos-relayer/src/impls/transaction/component.rs +++ b/crates/cosmos/cosmos-relayer/src/impls/transaction/component.rs @@ -3,6 +3,7 @@ use cgp_core::{ HasComponents, }; use hermes_cosmos_client_components::impls::transaction::event::ParseCosmosTxResponseAsEvents; +use hermes_cosmos_client_components::impls::transaction::poll_timeout::DefaultPollTimeout; use hermes_cosmos_client_components::impls::types::chain::ProvideCosmosChainTypes; use hermes_cosmos_client_components::impls::types::transaction::ProvideCosmosTransactionTypes; use hermes_relayer_components::chain::traits::types::chain_id::ChainIdTypeComponent; @@ -15,6 +16,7 @@ use hermes_relayer_components::logger::traits::has_logger::{ LoggerFieldComponent, LoggerTypeComponent, }; use hermes_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; +use hermes_relayer_components::transaction::components::poll_tx_response::PollTimeoutGetterComponent; use hermes_relayer_components::transaction::traits::event::TxResponseAsEventsParserComponent; use hermes_relayer_components::transaction::traits::types::{ FeeTypeComponent, NonceTypeComponent, SignerTypeComponent, TransactionHashTypeComponent, @@ -69,6 +71,8 @@ delegate_components! { LoggerFieldComponent, ]: ProvideTracingLogger, + PollTimeoutGetterComponent: + DefaultPollTimeout, TxResponseAsEventsParserComponent: ParseCosmosTxResponseAsEvents, } diff --git a/crates/cosmos/cosmos-relayer/src/impls/transaction/fields.rs b/crates/cosmos/cosmos-relayer/src/impls/transaction/fields.rs index e9195dd75..4db530ecd 100644 --- a/crates/cosmos/cosmos-relayer/src/impls/transaction/fields.rs +++ b/crates/cosmos/cosmos-relayer/src/impls/transaction/fields.rs @@ -1,9 +1,6 @@ -use core::time::Duration; - use futures::lock::Mutex; use hermes_relayer_components::chain::traits::types::chain_id::ChainIdGetter; use hermes_relayer_components::runtime::traits::mutex::MutexGuardOf; -use hermes_relayer_components::transaction::components::poll_tx_response::HasPollTimeout; use hermes_relayer_components::transaction::traits::fee::HasFeeForSimulation; use hermes_relayer_components::transaction::traits::nonce::mutex::HasMutexForNonceAllocation; use hermes_relayer_components::transaction::traits::signer::HasDefaultSigner; @@ -32,16 +29,6 @@ impl HasFeeForSimulation for CosmosTxContext { } } -impl HasPollTimeout for CosmosTxContext { - fn poll_timeout(&self) -> Duration { - Duration::from_secs(300) - } - - fn poll_backoff(&self) -> Duration { - Duration::from_millis(200) - } -} - impl HasMutexForNonceAllocation for CosmosTxContext { fn mutex_for_nonce_allocation(&self, _signer: &Secp256k1KeyPair) -> &Mutex<()> { &self.nonce_mutex diff --git a/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs b/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs index 116c71908..98cbffe96 100644 --- a/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs +++ b/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs @@ -1,6 +1,7 @@ use core::fmt::Debug; use core::time::Duration; +use cgp_core::prelude::*; use cgp_core::CanRaiseError; use crate::logger::traits::level::HasBaseLogLevels; @@ -32,6 +33,7 @@ where } } +#[derive_component(PollTimeoutGetterComponent, PollTimeoutGetter)] pub trait HasPollTimeout { fn poll_timeout(&self) -> Duration; diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/context/mod.rs b/crates/sovereign/sovereign-client-components/src/sovereign/context/mod.rs deleted file mode 100644 index 641abfdb3..000000000 --- a/crates/sovereign/sovereign-client-components/src/sovereign/context/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod sovereign_counterparty; diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/context/sovereign_counterparty.rs b/crates/sovereign/sovereign-client-components/src/sovereign/context/sovereign_counterparty.rs deleted file mode 100644 index d43b08489..000000000 --- a/crates/sovereign/sovereign-client-components/src/sovereign/context/sovereign_counterparty.rs +++ /dev/null @@ -1,40 +0,0 @@ -use cgp_core::prelude::*; -use hermes_cosmos_client_components::impls::types::chain::ProvideCosmosChainTypes; -use hermes_relayer_components::chain::traits::types::chain_id::ChainIdTypeComponent; -use hermes_relayer_components::chain::traits::types::client_state::{ - ClientStateDecoderComponent, ClientStateTypeComponent, -}; -use hermes_relayer_components::chain::traits::types::height::HeightTypeComponent; -use hermes_relayer_components::chain::traits::types::ibc::IbcChainTypesComponent; -use hermes_relayer_components::chain::traits::types::packet::IbcPacketTypesProviderComponent; -use hermes_relayer_components::chain::traits::types::status::ChainStatusTypeComponent; -use hermes_relayer_components::chain::traits::types::timestamp::TimestampTypeComponent; -use hermes_wasm_client_components::impls::decoders::client_state::DecodeSovereignClientStateFromAnyProto; - -use crate::sovereign::impls::types::client_state::ProvideSovereignClientState; - -pub struct SovereignCounterparty; - -pub struct SovereignCounterpartyComponents; - -impl HasComponents for SovereignCounterparty { - type Components = SovereignCounterpartyComponents; -} - -delegate_components! { - SovereignCounterpartyComponents { - [ - HeightTypeComponent, - TimestampTypeComponent, - ChainIdTypeComponent, - IbcChainTypesComponent, - IbcPacketTypesProviderComponent, - ChainStatusTypeComponent, - ]: - ProvideCosmosChainTypes, - ClientStateTypeComponent: - ProvideSovereignClientState, - ClientStateDecoderComponent: - DecodeSovereignClientStateFromAnyProto, - } -} diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/mod.rs b/crates/sovereign/sovereign-client-components/src/sovereign/mod.rs index f1ed83534..1b515b914 100644 --- a/crates/sovereign/sovereign-client-components/src/sovereign/mod.rs +++ b/crates/sovereign/sovereign-client-components/src/sovereign/mod.rs @@ -4,7 +4,6 @@ */ pub mod components; -// pub mod context; pub mod impls; pub mod traits; pub mod types; diff --git a/crates/sovereign/sovereign-cosmos-relayer/src/contexts/sovereign_rollup.rs b/crates/sovereign/sovereign-cosmos-relayer/src/contexts/sovereign_rollup.rs index e57b760df..c52562936 100644 --- a/crates/sovereign/sovereign-cosmos-relayer/src/contexts/sovereign_rollup.rs +++ b/crates/sovereign/sovereign-cosmos-relayer/src/contexts/sovereign_rollup.rs @@ -16,6 +16,7 @@ use hermes_relayer_components::encode::traits::has_encoding::EncodingGetterCompo use hermes_relayer_components::encode::traits::has_encoding::EncodingTypeComponent; use hermes_relayer_components::runtime::traits::runtime::ProvideRuntime; use hermes_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; +use hermes_relayer_components::transaction::traits::components::tx_response_querier::CanQueryTxResponse; use hermes_relayer_components::transaction::traits::components::tx_response_querier::TxResponseQuerierComponent; use hermes_relayer_components::transaction::traits::event::TxResponseAsEventsParserComponent; use hermes_relayer_components::transaction::traits::types::FeeTypeComponent; @@ -115,9 +116,9 @@ impl JsonRpcClientGetter for SovereignRollupComponents { } } -pub trait CheckSovereignRollupImpls: - CanQueryBalance + CanPublishTransactionBatch + CanAssertEventualAmount +pub trait CanUseSovereignRollup: + CanQueryBalance + CanPublishTransactionBatch + CanQueryTxResponse + CanAssertEventualAmount { } -impl CheckSovereignRollupImpls for SovereignRollup {} +impl CanUseSovereignRollup for SovereignRollup {} From f4f57f9654dc1f1b1b3c20715b5e7ba00863c776 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Thu, 14 Mar 2024 11:20:28 +0100 Subject: [PATCH 09/10] Implement CanPollTxResponse for SovereignRollup --- .../components/poll_tx_response.rs | 4 +-- .../src/sovereign/components/rollup.rs | 9 ++++++ .../src/sovereign/types/rollup_id.rs | 7 +---- .../src/contexts/sovereign_rollup.rs | 29 ++++++++++++++++++- .../tests/bootstrap.rs | 12 ++------ 5 files changed, 43 insertions(+), 18 deletions(-) diff --git a/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs b/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs index 98cbffe96..231d64916 100644 --- a/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs +++ b/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs @@ -13,6 +13,8 @@ use crate::transaction::traits::components::tx_response_querier::CanQueryTxRespo use crate::transaction::traits::logs::logger::CanLogTx; use crate::transaction::traits::types::HasTransactionHashType; +pub struct PollTxResponse; + pub struct TxNoResponseError<'a, Chain> where Chain: HasTransactionHashType, @@ -40,8 +42,6 @@ pub trait HasPollTimeout { fn poll_backoff(&self) -> Duration; } -pub struct PollTxResponse; - impl TxResponsePoller for PollTxResponse where Chain: CanLogTx diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/components/rollup.rs b/crates/sovereign/sovereign-client-components/src/sovereign/components/rollup.rs index f4688fbd5..6f4e07e71 100644 --- a/crates/sovereign/sovereign-client-components/src/sovereign/components/rollup.rs +++ b/crates/sovereign/sovereign-client-components/src/sovereign/components/rollup.rs @@ -1,4 +1,5 @@ use cgp_core::prelude::*; +use hermes_cosmos_client_components::impls::transaction::poll_timeout::DefaultPollTimeout; use hermes_relayer_components::chain::traits::types::chain_id::ChainIdTypeComponent; use hermes_relayer_components::chain::traits::types::channel::{ ChannelHandshakePayloadTypeComponent, InitChannelOptionsTypeComponent, @@ -16,6 +17,10 @@ use hermes_relayer_components::chain::traits::types::message::MessageTypeCompone use hermes_relayer_components::chain::traits::types::packet::IbcPacketTypesProviderComponent; use hermes_relayer_components::chain::traits::types::timestamp::TimestampTypeComponent; use hermes_relayer_components::chain::traits::types::update_client::UpdateClientPayloadTypeComponent; +use hermes_relayer_components::transaction::components::poll_tx_response::{ + PollTimeoutGetterComponent, PollTxResponse, +}; +use hermes_relayer_components::transaction::traits::components::tx_response_poller::TxResponsePollerComponent; use hermes_relayer_components::transaction::traits::components::tx_response_querier::TxResponseQuerierComponent; use hermes_relayer_components::transaction::traits::event::TxResponseAsEventsParserComponent; use hermes_relayer_components::transaction::traits::types::{ @@ -73,6 +78,10 @@ delegate_components! { PublishSovereignTransactionBatch, TxResponseQuerierComponent: QuerySovereignTxResponse, + TxResponsePollerComponent: + PollTxResponse, + PollTimeoutGetterComponent: + DefaultPollTimeout, TxResponseAsEventsParserComponent: ParseSovTxResponseAsEvents, } diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/types/rollup_id.rs b/crates/sovereign/sovereign-client-components/src/sovereign/types/rollup_id.rs index 4956a3cb0..4231ff434 100644 --- a/crates/sovereign/sovereign-client-components/src/sovereign/types/rollup_id.rs +++ b/crates/sovereign/sovereign-client-components/src/sovereign/types/rollup_id.rs @@ -1,12 +1,7 @@ use core::fmt::{Debug, Display}; -use ibc_relayer_types::core::ics24_host::identifier::ChainId; - #[derive(Debug, Eq, PartialEq)] -pub struct RollupId { - pub da_chain_id: ChainId, - pub da_namespace: String, -} +pub struct RollupId(pub u64); impl Display for RollupId { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { diff --git a/crates/sovereign/sovereign-cosmos-relayer/src/contexts/sovereign_rollup.rs b/crates/sovereign/sovereign-cosmos-relayer/src/contexts/sovereign_rollup.rs index c52562936..2c57325df 100644 --- a/crates/sovereign/sovereign-cosmos-relayer/src/contexts/sovereign_rollup.rs +++ b/crates/sovereign/sovereign-cosmos-relayer/src/contexts/sovereign_rollup.rs @@ -4,6 +4,7 @@ use cgp_core::ErrorTypeComponent; use cgp_core::HasComponents; use cgp_error_eyre::ProvideEyreError; use cgp_error_eyre::RaiseDebugError; +use hermes_relayer_components::chain::traits::types::chain_id::ChainIdGetter; use hermes_relayer_components::chain::traits::types::chain_id::ChainIdTypeComponent; use hermes_relayer_components::chain::traits::types::event::EventTypeComponent; use hermes_relayer_components::chain::traits::types::height::HeightTypeComponent; @@ -14,8 +15,13 @@ use hermes_relayer_components::chain::traits::types::timestamp::TimestampTypeCom use hermes_relayer_components::encode::traits::has_encoding::DefaultEncodingGetterComponent; use hermes_relayer_components::encode::traits::has_encoding::EncodingGetterComponent; use hermes_relayer_components::encode::traits::has_encoding::EncodingTypeComponent; +use hermes_relayer_components::logger::traits::has_logger::LoggerFieldComponent; +use hermes_relayer_components::logger::traits::has_logger::LoggerTypeComponent; use hermes_relayer_components::runtime::traits::runtime::ProvideRuntime; use hermes_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; +use hermes_relayer_components::transaction::components::poll_tx_response::PollTimeoutGetterComponent; +use hermes_relayer_components::transaction::traits::components::tx_response_poller::CanPollTxResponse; +use hermes_relayer_components::transaction::traits::components::tx_response_poller::TxResponsePollerComponent; use hermes_relayer_components::transaction::traits::components::tx_response_querier::CanQueryTxResponse; use hermes_relayer_components::transaction::traits::components::tx_response_querier::TxResponseQuerierComponent; use hermes_relayer_components::transaction::traits::event::TxResponseAsEventsParserComponent; @@ -25,6 +31,7 @@ use hermes_relayer_components::transaction::traits::types::SignerTypeComponent; use hermes_relayer_components::transaction::traits::types::TransactionHashTypeComponent; use hermes_relayer_components::transaction::traits::types::TransactionTypeComponent; use hermes_relayer_components::transaction::traits::types::TxResponseTypeComponent; +use hermes_relayer_runtime::impls::logger::components::ProvideTracingLogger; use hermes_relayer_runtime::impls::types::runtime::ProvideTokioRuntimeType; use hermes_relayer_runtime::types::runtime::HermesRuntime; use hermes_sovereign_client_components::sovereign::components::rollup::SovereignRollupClientComponents; @@ -32,6 +39,7 @@ use hermes_sovereign_client_components::sovereign::traits::rollup::json_rpc_clie use hermes_sovereign_client_components::sovereign::traits::rollup::json_rpc_client::JsonRpcClientTypeComponent; use hermes_sovereign_client_components::sovereign::traits::rollup::publish_batch::CanPublishTransactionBatch; use hermes_sovereign_client_components::sovereign::traits::rollup::publish_batch::TransactionBatchPublisherComponent; +use hermes_sovereign_client_components::sovereign::types::rollup_id::RollupId; use hermes_sovereign_test_components::rollup::components::SovereignRollupTestComponents; use hermes_test_components::chain::traits::assert::eventual_amount::CanAssertEventualAmount; use hermes_test_components::chain::traits::assert::eventual_amount::EventualAmountAsserterComponent; @@ -65,6 +73,11 @@ delegate_components! { RaiseDebugError, RuntimeTypeComponent: ProvideTokioRuntimeType, + [ + LoggerTypeComponent, + LoggerFieldComponent, + ]: + ProvideTracingLogger, [ EncodingTypeComponent, EncodingGetterComponent, @@ -88,6 +101,8 @@ delegate_components! { JsonRpcClientTypeComponent, TransactionBatchPublisherComponent, TxResponseQuerierComponent, + TxResponsePollerComponent, + PollTimeoutGetterComponent, TxResponseAsEventsParserComponent, ]: SovereignRollupClientComponents, @@ -116,8 +131,20 @@ impl JsonRpcClientGetter for SovereignRollupComponents { } } +impl ChainIdGetter for SovereignRollupComponents { + fn chain_id(_chain: &SovereignRollup) -> &RollupId { + static DUMMY_ROLLUP_ID: RollupId = RollupId(0); + + &DUMMY_ROLLUP_ID + } +} + pub trait CanUseSovereignRollup: - CanQueryBalance + CanPublishTransactionBatch + CanQueryTxResponse + CanAssertEventualAmount + CanQueryBalance + + CanPublishTransactionBatch + + CanQueryTxResponse + + CanPollTxResponse + + CanAssertEventualAmount { } diff --git a/crates/sovereign/sovereign-integration-tests/tests/bootstrap.rs b/crates/sovereign/sovereign-integration-tests/tests/bootstrap.rs index 99ed4e055..ffd58a638 100644 --- a/crates/sovereign/sovereign-integration-tests/tests/bootstrap.rs +++ b/crates/sovereign/sovereign-integration-tests/tests/bootstrap.rs @@ -1,6 +1,5 @@ #![recursion_limit = "256"] -use core::time::Duration; use std::sync::Arc; use std::time::{SystemTime, UNIX_EPOCH}; @@ -10,6 +9,7 @@ use hermes_celestia_integration_tests::contexts::bootstrap::CelestiaBootstrap; use hermes_celestia_test_components::bootstrap::traits::bootstrap_bridge::CanBootstrapBridge; use hermes_cosmos_relayer::contexts::builder::CosmosBuilder; use hermes_cosmos_relayer::types::error::Error; +use hermes_relayer_components::transaction::traits::components::tx_response_poller::CanPollTxResponse; use hermes_relayer_components::transaction::traits::components::tx_response_querier::CanQueryTxResponse; use hermes_relayer_components::transaction::traits::event::CanParseTxResponseAsEvents; use hermes_relayer_runtime::types::runtime::HermesRuntime; @@ -28,7 +28,6 @@ use hermes_test_components::bootstrap::traits::chain::CanBootstrapChain; use hermes_test_components::chain::traits::assert::eventual_amount::CanAssertEventualAmount; use hermes_test_components::chain::traits::queries::balance::CanQueryBalance; use tokio::runtime::Builder; -use tokio::time::sleep; #[test] fn test_sovereign_bootstrap() -> Result<(), Error> { @@ -161,7 +160,7 @@ fn test_sovereign_bootstrap() -> Result<(), Error> { ) .await?; - let response = rollup.query_tx_response(&tx_hash).await?; + let response = rollup.poll_tx_response(&tx_hash).await?; println!("querty tx hash {} response: {:?}", tx_hash, response); } @@ -196,12 +195,7 @@ fn test_sovereign_bootstrap() -> Result<(), Error> { rollup.publish_transaction_batch(&[tx_bytes]).await?; - sleep(Duration::from_secs(8)).await; - - let response = rollup - .query_tx_response(&tx_hash) - .await? - .ok_or_else(|| eyre!("expect tx response to be present"))?; + let response = rollup.poll_tx_response(&tx_hash).await?; println!("query tx hash {} response: {:?}", tx_hash, response); From d06e8e034efd2150f311c18dfafaefe376c8fe9a Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Thu, 14 Mar 2024 11:37:26 +0100 Subject: [PATCH 10/10] Use ledger_getEventsByTxnHash to query for transaction events --- .../src/transaction/components/poll_tx_response.rs | 2 ++ .../src/sovereign/impls/transaction/query_tx_response.rs | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs b/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs index 231d64916..8491e2cec 100644 --- a/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs +++ b/crates/relayer/relayer-components/src/transaction/components/poll_tx_response.rs @@ -107,6 +107,8 @@ where However, if the query still returns error after the wait timeout exceeded, we return the error we get from the query. + + TODO: check whether the error is retryable before re-polling. */ let elapsed = Chain::Runtime::duration_since(&start_time, &runtime.now()); diff --git a/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/query_tx_response.rs b/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/query_tx_response.rs index 5269ee3dc..1eebc2259 100644 --- a/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/query_tx_response.rs +++ b/crates/sovereign/sovereign-client-components/src/sovereign/impls/transaction/query_tx_response.rs @@ -5,6 +5,7 @@ use hermes_relayer_components::transaction::traits::components::tx_response_quer use hermes_relayer_components::transaction::traits::types::{ HasTransactionHashType, HasTxResponseType, }; +use hex::ToHex; use jsonrpsee::core::client::ClientT; use jsonrpsee::core::ClientError; use serde::Deserialize; @@ -35,11 +36,11 @@ where .map_err(Chain::raise_error)?; if let Some(response) = response { - let event_ids: Vec = response.event_range.collect(); + let tx_hash_str = tx_hash.0.encode_hex::(); let events: Vec = chain .json_rpc_client() - .request("ledger_getEvents", (event_ids,)) + .request("ledger_getEventsByTxnHash", (tx_hash_str,)) .await .map_err(Chain::raise_error)?;