diff --git a/crates/sui-json-rpc/src/balance_changes.rs b/crates/sui-json-rpc/src/balance_changes.rs index ff4e445713623..ed6259605f08f 100644 --- a/crates/sui-json-rpc/src/balance_changes.rs +++ b/crates/sui-json-rpc/src/balance_changes.rs @@ -182,55 +182,49 @@ impl

ObjectProviderCache

{ } } - pub fn new_with_cache( - provider: P, - written_objects: BTreeMap, - ) -> Self { - let mut object_cache = BTreeMap::new(); - let mut last_version_cache = BTreeMap::new(); + pub fn insert_objects_into_cache(&mut self, objects: Vec) { + let object_cache = self.object_cache.get_mut(); + let last_version_cache = self.last_version_cache.get_mut(); - for (object_id, (object_ref, object, _)) in written_objects { - let key = (object_id, object_ref.1); + for object in objects { + let object_id = object.id(); + let version = object.version(); + + let key = (object_id, version); object_cache.insert(key, object.clone()); match last_version_cache.get_mut(&key) { Some(existing_seq_number) => { - if object_ref.1 > *existing_seq_number { - *existing_seq_number = object_ref.1 + if version > *existing_seq_number { + *existing_seq_number = version } } None => { - last_version_cache.insert(key, object_ref.1); + last_version_cache.insert(key, version); } } } - - Self { - object_cache: RwLock::new(object_cache), - last_version_cache: RwLock::new(last_version_cache), - provider, - } } - pub fn new_with_output_objects(provider: P, output_objects: Vec) -> Self { + pub fn new_with_cache( + provider: P, + written_objects: BTreeMap, + ) -> Self { let mut object_cache = BTreeMap::new(); let mut last_version_cache = BTreeMap::new(); - for object in output_objects { - let object_id = object.id(); - let version = object.version(); - - let key = (object_id, version); + for (object_id, (object_ref, object, _)) in written_objects { + let key = (object_id, object_ref.1); object_cache.insert(key, object.clone()); match last_version_cache.get_mut(&key) { Some(existing_seq_number) => { - if version > *existing_seq_number { - *existing_seq_number = version + if object_ref.1 > *existing_seq_number { + *existing_seq_number = object_ref.1 } } None => { - last_version_cache.insert(key, version); + last_version_cache.insert(key, object_ref.1); } } } diff --git a/crates/sui-json-rpc/src/transaction_execution_api.rs b/crates/sui-json-rpc/src/transaction_execution_api.rs index d38a70be4c553..a6623dc438efa 100644 --- a/crates/sui-json-rpc/src/transaction_execution_api.rs +++ b/crates/sui-json-rpc/src/transaction_execution_api.rs @@ -202,9 +202,15 @@ impl TransactionExecutionApi { None }; - let object_cache = response.output_objects.map(|output_objects| { - ObjectProviderCache::new_with_output_objects(self.state.clone(), output_objects) - }); + let object_cache = match (response.input_objects, response.output_objects) { + (Some(input_objects), Some(output_objects)) => { + let mut object_cache = ObjectProviderCache::new(self.state.clone()); + object_cache.insert_objects_into_cache(input_objects); + object_cache.insert_objects_into_cache(output_objects); + Some(object_cache) + } + _ => None, + }; let balance_changes = match &object_cache { Some(object_cache) if opts.show_balance_changes => Some(