Skip to content

Commit 1a3d3ea

Browse files
authored
refactor(eth-gear): Refactor main loop of the TxManager in eth-gear relayer (#813)
1 parent cafed5d commit 1a3d3ea

File tree

8 files changed

+181
-203
lines changed

8 files changed

+181
-203
lines changed

Cargo.lock

Lines changed: 52 additions & 51 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ members = [
4444
resolver = "2"
4545

4646
[workspace.package]
47-
version = "1.0.4"
47+
version = "1.0.5"
4848
edition = "2021"
4949

5050
[workspace.dependencies]

gear-common/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ use sails_rs::{calls::*, gclient::calls::*, prelude::*};
44
use vft_client::traits::*;
55
use vft_manager_client::{traits::*, Order};
66

7+
// The constant is intentionally duplicated since vara-runtime is too heavy dependency.
8+
pub const UNITS: u128 = 1_000_000_000_000;
9+
710
/// Asynchronously migrates balances from an old VFT contract to a new one.
811
///
912
/// This function performs a batched migration of token balances between two VFT contracts.

relayer/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ ethereum_beacon_client.workspace = true
3131
ethereum-common.workspace = true
3232
futures.workspace = true
3333
gear-core.workspace = true
34+
gear-common.workspace = true
3435
gclient.workspace = true
3536
humantime.workspace = true
3637
hex.workspace = true

relayer/src/ethereum_checkpoints/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ mod sync_update;
2727
const SIZE_CHANNEL: usize = 100_000;
2828
const COUNT_FAILURE: usize = 3;
2929
const DELAY_SECS_UPDATE_REQUEST: u64 = 30;
30-
// The constant is intentionally duplicated since vara-runtime is too heavy dependency.
31-
const UNITS: u128 = 1_000_000_000_000;
3230

3331
struct SyncUpdate {
3432
sync_update: SyncCommitteeUpdate,
@@ -219,11 +217,12 @@ impl Relayer {
219217
async fn update_total_balance(client: &GearApi, update_metrics: &metrics::Updates) {
220218
match client.total_balance(client.account_id()).await {
221219
Ok(total_balance) => {
222-
let total_balance = total_balance / UNITS;
220+
let total_balance = total_balance / gear_common::UNITS;
223221
let total_balance: i64 = total_balance.try_into().unwrap_or(i64::MAX);
224222

225223
update_metrics.account_total_balance.set(total_balance);
226224
}
225+
227226
Err(e) => log::error!("Unable to get total balance: {e:?}"),
228227
}
229228
}

relayer/src/message_relayer/eth_to_gear/message_sender.rs

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
use crate::message_relayer::eth_to_gear::api_provider::ApiProviderConnection;
12
use alloy_primitives::FixedBytes;
23
use eth_events_electra_client::EthToVaraEvent;
34
use futures::executor::block_on;
45
use gclient::GearApi;
6+
use gear_common::UNITS;
57
use historical_proxy_client::{traits::HistoricalProxy as _, HistoricalProxy};
68
use primitive_types::H256;
79
use prometheus::{
@@ -14,15 +16,13 @@ use sails_rs::{
1416
Encode,
1517
};
1618
use tokio::{
17-
sync::mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender},
19+
sync::mpsc::{error::TryRecvError, unbounded_channel, UnboundedReceiver, UnboundedSender},
1820
task::spawn_blocking,
1921
};
2022
use utils_prometheus::{impl_metered_service, MeteredService};
2123
use uuid::Uuid;
2224
use vft_manager_client::vft_manager::io::SubmitReceipt;
2325

24-
use crate::message_relayer::eth_to_gear::api_provider::ApiProviderConnection;
25-
2626
pub struct MessageSenderIo {
2727
requests_channel: UnboundedSender<Request>,
2828
responses_channel: UnboundedReceiver<Response>,
@@ -55,8 +55,8 @@ impl MessageSenderIo {
5555
.is_ok()
5656
}
5757

58-
pub async fn recv(&mut self) -> Option<Response> {
59-
self.responses_channel.recv().await
58+
pub fn try_recv(&mut self) -> Result<Response, TryRecvError> {
59+
self.responses_channel.try_recv()
6060
}
6161
}
6262

@@ -161,6 +161,7 @@ impl MessageSender {
161161
responses: &mut UnboundedSender<Response>,
162162
) -> anyhow::Result<()> {
163163
let gear_api = self.api_provider.gclient_client(&self.suri)?;
164+
self.update_balance_metric(&gear_api).await?;
164165

165166
if let Some(request) = self.last_request.take() {
166167
match self.process(responses, &gear_api, &request).await {
@@ -329,6 +330,7 @@ impl MessageSender {
329330
}
330331
}
331332
}
333+
332334
Ok(true)
333335
}
334336

@@ -338,7 +340,7 @@ impl MessageSender {
338340
.await
339341
.map_err(|e| anyhow::anyhow!("Unable to get total balance: {e:?}"))?;
340342

341-
let balance = balance / 1_000_000_000_000;
343+
let balance = balance / UNITS;
342344
let balance: i64 = balance.try_into().unwrap_or(i64::MAX);
343345

344346
self.metrics.fee_payer_balance.set(balance);
@@ -358,24 +360,20 @@ async fn task(
358360
break;
359361
}
360362

361-
match this.run_inner(&mut requests, &mut responses).await {
362-
Ok(()) => {
363-
log::warn!("Transaction manager connection terminated, exiting...");
364-
break;
363+
let Err(err) = this.run_inner(&mut requests, &mut responses).await else {
364+
log::warn!("Transaction manager connection terminated, exiting...");
365+
break;
366+
};
367+
368+
log::error!("Gear message sender got an error: {err:?}");
369+
match this.api_provider.reconnect().await {
370+
Ok(_) => {
371+
log::info!("Reconnected to Gear API");
365372
}
366373

367374
Err(err) => {
368-
log::error!("Gear message sender got an error: {err:?}");
369-
match this.api_provider.reconnect().await {
370-
Ok(()) => {
371-
log::info!("Reconnected to Gear API");
372-
}
373-
374-
Err(err) => {
375-
log::error!("Failed to reconnect to Gear API: {err:?}");
376-
break;
377-
}
378-
}
375+
log::error!("Failed to reconnect to Gear API: {err:?}");
376+
break;
379377
}
380378
}
381379
}

0 commit comments

Comments
 (0)