From ba7f40e6c33e6f5f3631a5d60e3a83b11a5e9a26 Mon Sep 17 00:00:00 2001 From: Richard Melkonian Date: Mon, 19 Aug 2024 21:09:43 +0100 Subject: [PATCH] update: refactor process_events --- .../chains/movement/src/event_monitoring.rs | 41 ++++++++++++------- .../bridge/chains/movement/src/event_types.rs | 5 +++ protocol-units/bridge/shared/src/types.rs | 2 +- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/protocol-units/bridge/chains/movement/src/event_monitoring.rs b/protocol-units/bridge/chains/movement/src/event_monitoring.rs index c241d2d95..bed8948c4 100644 --- a/protocol-units/bridge/chains/movement/src/event_monitoring.rs +++ b/protocol-units/bridge/chains/movement/src/event_monitoring.rs @@ -1,15 +1,19 @@ use std::{pin::Pin, task::Poll}; use crate::MovementClient; -use crate::{event_types::MovementChainEvent, types::MovementHash, utils::MovementAddress}; +use crate::{ + event_types::{CounterpartyEventKind, MovementChainEvent}, + types::MovementHash, + utils::MovementAddress, +}; use anyhow::Result; use aptos_sdk::rest_client::Response; -use aptos_types::contract_event::{ContractEvent, ContractEventV1, EventWithVersion}; +use aptos_types::contract_event::EventWithVersion; use async_stream::try_stream; use bridge_shared::bridge_monitoring::{ BridgeContractCounterpartyEvent, BridgeContractCounterpartyMonitoring, }; -use bridge_shared::types::CounterpartyCompletedDetails; +use bridge_shared::types::{CounterpartyCompletedDetails, LockDetails}; use futures::{FutureExt, Stream, StreamExt}; use tokio::sync::mpsc::UnboundedReceiver; @@ -51,7 +55,7 @@ impl Stream for MovementCounterpartyMonitoring { "0x{}::atomic_bridge_counterpary::BridgeCounterpartyEvents", client.counterparty_address.to_hex_literal() ); - let response = rest_client + let locked_response = rest_client .get_account_events_bcs( client.counterparty_address, struct_tag.as_str(), @@ -59,12 +63,8 @@ impl Stream for MovementCounterpartyMonitoring { Some(1), None ).await?; - let events = process_response(response); - let bridge_transfer_details = bcs::from_bytes::>( - &response.event_data - ); + let events = process_response(locked_response)?; - // Yield the event yield Ok(events); } }; @@ -76,14 +76,25 @@ impl Stream for MovementCounterpartyMonitoring { fn process_response( res: Response>, -) -> Result>, bcs::Error> { + kind: CounterpartyEventKind, +) -> Result>, bcs::Error> { res.into_inner() .into_iter() .map(|e| { - let event_data = e.event.event_data(); // Use the method from the trait - bcs::from_bytes::>( - event_data, - ) + let data = e.event.event_data(); // Use the method from the trait + match kind { + CounterpartyEventKind::Locked => { + let locked_details = + bcs::from_bytes::>(data)?; + Ok(BridgeContractCounterpartyEvent::Locked(locked_details)) + } + CounterpartyEventKind::Completed => { + let completed_details = bcs::from_bytes::< + CounterpartyCompletedDetails, + >(data)?; + Ok(BridgeContractCounterpartyEvent::Completed(completed_details)) + } + } }) - .collect() // Collect the results, handling potential errors + .collect() } diff --git a/protocol-units/bridge/chains/movement/src/event_types.rs b/protocol-units/bridge/chains/movement/src/event_types.rs index 1076b7bcb..5c61b1968 100644 --- a/protocol-units/bridge/chains/movement/src/event_types.rs +++ b/protocol-units/bridge/chains/movement/src/event_types.rs @@ -6,3 +6,8 @@ pub enum MovementChainEvent { CounterpartyContractEvent(SCCResult), Noop, } + +pub enum CounterpartyEventKind { + Locked, + Completed, +} diff --git a/protocol-units/bridge/shared/src/types.rs b/protocol-units/bridge/shared/src/types.rs index b62ab4505..517590203 100644 --- a/protocol-units/bridge/shared/src/types.rs +++ b/protocol-units/bridge/shared/src/types.rs @@ -165,7 +165,7 @@ impl Default for BridgeTransferDetails { } } -#[derive(Debug, PartialEq, Eq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)] pub struct LockDetails { pub bridge_transfer_id: BridgeTransferId, pub initiator_address: InitiatorAddress>,