1
1
use std:: { pin:: Pin , task:: Poll } ;
2
2
3
3
use crate :: MovementClient ;
4
- use crate :: { event_types:: MovementChainEvent , types:: MovementHash , utils:: MovementAddress } ;
4
+ use crate :: {
5
+ event_types:: { CounterpartyEventKind , MovementChainEvent } ,
6
+ types:: MovementHash ,
7
+ utils:: MovementAddress ,
8
+ } ;
5
9
use anyhow:: Result ;
6
10
use aptos_sdk:: rest_client:: Response ;
7
- use aptos_types:: contract_event:: { ContractEvent , ContractEventV1 , EventWithVersion } ;
11
+ use aptos_types:: contract_event:: EventWithVersion ;
8
12
use async_stream:: try_stream;
9
13
use bridge_shared:: bridge_monitoring:: {
10
14
BridgeContractCounterpartyEvent , BridgeContractCounterpartyMonitoring ,
11
15
} ;
12
- use bridge_shared:: types:: CounterpartyCompletedDetails ;
16
+ use bridge_shared:: types:: { CounterpartyCompletedDetails , LockDetails } ;
13
17
use futures:: { FutureExt , Stream , StreamExt } ;
14
18
use tokio:: sync:: mpsc:: UnboundedReceiver ;
15
19
@@ -51,20 +55,16 @@ impl Stream for MovementCounterpartyMonitoring<MovementAddress, MovementHash> {
51
55
"0x{}::atomic_bridge_counterpary::BridgeCounterpartyEvents" ,
52
56
client. counterparty_address. to_hex_literal( )
53
57
) ;
54
- let response = rest_client
58
+ let locked_response = rest_client
55
59
. get_account_events_bcs(
56
60
client. counterparty_address,
57
61
struct_tag. as_str( ) ,
58
62
"bridge_transfer_assets_locked" ,
59
63
Some ( 1 ) ,
60
64
None
61
65
) . await ?;
62
- let events = process_response( response) ;
63
- let bridge_transfer_details = bcs:: from_bytes:: <CounterpartyCompletedDetails <MovementAddress , MovementHash >>(
64
- & response. event_data
65
- ) ;
66
+ let events = process_response( locked_response) ?;
66
67
67
- // Yield the event
68
68
yield Ok ( events) ;
69
69
}
70
70
} ;
@@ -76,14 +76,25 @@ impl Stream for MovementCounterpartyMonitoring<MovementAddress, MovementHash> {
76
76
77
77
fn process_response (
78
78
res : Response < Vec < EventWithVersion > > ,
79
- ) -> Result < Vec < CounterpartyCompletedDetails < MovementAddress , MovementHash > > , bcs:: Error > {
79
+ kind : CounterpartyEventKind ,
80
+ ) -> Result < Vec < BridgeContractCounterpartyEvent < MovementAddress , MovementHash > > , bcs:: Error > {
80
81
res. into_inner ( )
81
82
. into_iter ( )
82
83
. map ( |e| {
83
- let event_data = e. event . event_data ( ) ; // Use the method from the trait
84
- bcs:: from_bytes :: < CounterpartyCompletedDetails < MovementAddress , MovementHash > > (
85
- event_data,
86
- )
84
+ let data = e. event . event_data ( ) ; // Use the method from the trait
85
+ match kind {
86
+ CounterpartyEventKind :: Locked => {
87
+ let locked_details =
88
+ bcs:: from_bytes :: < LockDetails < MovementAddress , [ u8 ; 32 ] > > ( data) ?;
89
+ Ok ( BridgeContractCounterpartyEvent :: Locked ( locked_details) )
90
+ }
91
+ CounterpartyEventKind :: Completed => {
92
+ let completed_details = bcs:: from_bytes :: <
93
+ CounterpartyCompletedDetails < MovementAddress , [ u8 ; 32 ] > ,
94
+ > ( data) ?;
95
+ Ok ( BridgeContractCounterpartyEvent :: Completed ( completed_details) )
96
+ }
97
+ }
87
98
} )
88
- . collect ( ) // Collect the results, handling potential errors
99
+ . collect ( )
89
100
}
0 commit comments