@@ -30,7 +30,6 @@ use sui_types::object::Object;
30
30
use sui_types:: transaction:: SenderSignedData ;
31
31
use sui_types:: transaction:: TransactionDataAPI ;
32
32
use sui_types:: transaction:: { EndOfEpochTransactionKind , TransactionKind } ;
33
- use tracing:: error;
34
33
35
34
/// This trait defines the interfaces for fetching data from some local or remote store
36
35
#[ async_trait]
@@ -85,6 +84,12 @@ pub(crate) trait DataFetcher {
85
84
) -> Result < Vec < SuiEvent > , ReplayEngineError > ;
86
85
87
86
async fn get_chain_id ( & self ) -> Result < String , ReplayEngineError > ;
87
+
88
+ async fn get_child_object (
89
+ & self ,
90
+ object_id : & ObjectID ,
91
+ version_upper_bound : VersionNumber ,
92
+ ) -> Result < Object , ReplayEngineError > ;
88
93
}
89
94
90
95
#[ derive( Clone ) ]
@@ -223,6 +228,16 @@ impl DataFetcher for Fetchers {
223
228
Fetchers :: NodeStateDump ( q) => q. get_chain_id ( ) . await ,
224
229
}
225
230
}
231
+ async fn get_child_object (
232
+ & self ,
233
+ object_id : & ObjectID ,
234
+ version_upper_bound : VersionNumber ,
235
+ ) -> Result < Object , ReplayEngineError > {
236
+ match self {
237
+ Fetchers :: Remote ( q) => q. get_child_object ( object_id, version_upper_bound) . await ,
238
+ Fetchers :: NodeStateDump ( q) => q. get_child_object ( object_id, version_upper_bound) . await ,
239
+ }
240
+ }
226
241
}
227
242
228
243
const VERSIONED_OBJECT_CACHE_CAPACITY : Option < NonZeroUsize > = NonZeroUsize :: new ( 1_000 ) ;
@@ -378,6 +393,20 @@ impl DataFetcher for RemoteFetcher {
378
393
} )
379
394
}
380
395
396
+ async fn get_child_object (
397
+ & self ,
398
+ object_id : & ObjectID ,
399
+ version_upper_bound : VersionNumber ,
400
+ ) -> Result < Object , ReplayEngineError > {
401
+ let response = self
402
+ . rpc_client
403
+ . read_api ( )
404
+ . try_get_object_before_version ( * object_id, version_upper_bound)
405
+ . await
406
+ . map_err ( |q| ReplayEngineError :: SuiRpcError { err : q. to_string ( ) } ) ?;
407
+ convert_past_obj_response ( response)
408
+ }
409
+
381
410
async fn multi_get_latest (
382
411
& self ,
383
412
objects : & [ ObjectID ] ,
@@ -441,29 +470,9 @@ impl DataFetcher for RemoteFetcher {
441
470
442
471
async fn get_loaded_child_objects (
443
472
& self ,
444
- tx_digest : & TransactionDigest ,
473
+ _ : & TransactionDigest ,
445
474
) -> Result < Vec < ( ObjectID , SequenceNumber ) > , ReplayEngineError > {
446
- let loaded_child_objs = match self
447
- . rpc_client
448
- . read_api ( )
449
- . get_loaded_child_objects ( * tx_digest)
450
- . await
451
- {
452
- Ok ( objs) => objs,
453
- Err ( e) => {
454
- error ! ( "Error getting dynamic fields loaded objects: {}. This RPC server might not support this feature yet" , e) ;
455
- return Err ( ReplayEngineError :: UnableToGetDynamicFieldLoadedObjects {
456
- rpc_err : e. to_string ( ) ,
457
- } ) ;
458
- }
459
- } ;
460
-
461
- // Fetch the refs
462
- Ok ( loaded_child_objs
463
- . loaded_child_objects
464
- . iter ( )
465
- . map ( |obj| ( obj. object_id ( ) , obj. sequence_number ( ) ) )
466
- . collect :: < Vec < _ > > ( ) )
475
+ Ok ( vec ! [ ] )
467
476
}
468
477
469
478
async fn get_latest_checkpoint_sequence_number ( & self ) -> Result < u64 , ReplayEngineError > {
@@ -806,4 +815,12 @@ impl DataFetcher for NodeStateDumpFetcher {
806
815
async fn get_chain_id ( & self ) -> Result < String , ReplayEngineError > {
807
816
unimplemented ! ( "get_chain_id for state dump is not implemented" )
808
817
}
818
+
819
+ async fn get_child_object (
820
+ & self ,
821
+ _object_id : & ObjectID ,
822
+ _version_upper_bound : VersionNumber ,
823
+ ) -> Result < Object , ReplayEngineError > {
824
+ unimplemented ! ( "get child object is not implemented for state dump" ) ;
825
+ }
809
826
}
0 commit comments