@@ -18,7 +18,7 @@ use std::collections::{HashMap, HashSet};
1818use std:: mem;
1919use std:: sync:: Arc ;
2020
21- use ctypes:: BlockHash ;
21+ use ctypes:: { BlockHash , Tracker } ;
2222use kvdb:: { DBTransaction , KeyValueDB } ;
2323use lru_cache:: LruCache ;
2424use parking_lot:: { Mutex , RwLock } ;
@@ -40,13 +40,13 @@ pub struct BodyDB {
4040 parcel_address_cache : RwLock < HashMap < H256 , TransactionAddress > > ,
4141 pending_parcel_addresses : RwLock < HashMap < H256 , Option < TransactionAddress > > > ,
4242
43- transaction_address_cache : Mutex < HashMap < H256 , TransactionAddresses > > ,
44- pending_transaction_addresses : Mutex < HashMap < H256 , Option < TransactionAddresses > > > ,
43+ transaction_address_cache : Mutex < HashMap < Tracker , TransactionAddresses > > ,
44+ pending_transaction_addresses : Mutex < HashMap < Tracker , Option < TransactionAddresses > > > ,
4545
4646 db : Arc < dyn KeyValueDB > ,
4747}
4848
49- type TransactionHashAndAddress = ( H256 , TransactionAddresses ) ;
49+ type TrackerAndAddress = ( Tracker , TransactionAddresses ) ;
5050
5151impl BodyDB {
5252 /// Create new instance of blockchain from given Genesis.
@@ -185,7 +185,7 @@ impl BodyDB {
185185 fn new_transaction_address_entries (
186186 & self ,
187187 best_block_changed : & BestBlockChanged ,
188- ) -> HashMap < H256 , Option < TransactionAddresses > > {
188+ ) -> HashMap < Tracker , Option < TransactionAddresses > > {
189189 let block_hash = if let Some ( best_block_hash) = best_block_changed. new_best_hash ( ) {
190190 best_block_hash
191191 } else {
@@ -197,8 +197,8 @@ impl BodyDB {
197197 } ;
198198
199199 let ( removed, added) : (
200- Box < dyn Iterator < Item = TransactionHashAndAddress > > ,
201- Box < dyn Iterator < Item = TransactionHashAndAddress > > ,
200+ Box < dyn Iterator < Item = TrackerAndAddress > > ,
201+ Box < dyn Iterator < Item = TrackerAndAddress > > ,
202202 ) = match best_block_changed {
203203 BestBlockChanged :: CanonChainAppended {
204204 ..
@@ -229,31 +229,31 @@ impl BodyDB {
229229 BestBlockChanged :: None => return Default :: default ( ) ,
230230 } ;
231231
232- let mut added_addresses: HashMap < H256 , TransactionAddresses > = Default :: default ( ) ;
233- let mut removed_addresses: HashMap < H256 , TransactionAddresses > = Default :: default ( ) ;
234- let mut hashes : HashSet < H256 > = Default :: default ( ) ;
235- for ( hash , address) in added {
236- hashes . insert ( hash ) ;
237- * added_addresses. entry ( hash ) . or_insert_with ( Default :: default) += address;
232+ let mut added_addresses: HashMap < Tracker , TransactionAddresses > = Default :: default ( ) ;
233+ let mut removed_addresses: HashMap < Tracker , TransactionAddresses > = Default :: default ( ) ;
234+ let mut trackers : HashSet < Tracker > = Default :: default ( ) ;
235+ for ( tracker , address) in added {
236+ trackers . insert ( tracker ) ;
237+ * added_addresses. entry ( tracker ) . or_insert_with ( Default :: default) += address;
238238 }
239- for ( hash , address) in removed {
240- hashes . insert ( hash ) ;
241- * removed_addresses. entry ( hash ) . or_insert_with ( Default :: default) += address;
239+ for ( tracker , address) in removed {
240+ trackers . insert ( tracker ) ;
241+ * removed_addresses. entry ( tracker ) . or_insert_with ( Default :: default) += address;
242242 }
243- let mut inserted_address: HashMap < H256 , TransactionAddresses > = Default :: default ( ) ;
244- for hash in hashes . into_iter ( ) {
245- let address: TransactionAddresses = self . db . read ( db:: COL_EXTRA , & hash ) . unwrap_or_default ( ) ;
246- inserted_address. insert ( hash , address) ;
243+ let mut inserted_address: HashMap < Tracker , TransactionAddresses > = Default :: default ( ) ;
244+ for tracker in trackers . into_iter ( ) {
245+ let address: TransactionAddresses = self . db . read ( db:: COL_EXTRA , & tracker ) . unwrap_or_default ( ) ;
246+ inserted_address. insert ( tracker , address) ;
247247 }
248248
249- for ( hash , removed_address) in removed_addresses. into_iter ( ) {
249+ for ( tracker , removed_address) in removed_addresses. into_iter ( ) {
250250 * inserted_address
251- . get_mut ( & hash )
251+ . get_mut ( & tracker )
252252 . expect ( "inserted addresses are sum of added_addresses and removed_addresses" ) -= removed_address;
253253 }
254- for ( hash , added_address) in added_addresses. into_iter ( ) {
254+ for ( tracker , added_address) in added_addresses. into_iter ( ) {
255255 * inserted_address
256- . get_mut ( & hash )
256+ . get_mut ( & tracker )
257257 . expect ( "inserted addresses are sum of added_addresses and removed_addresses" ) += added_address;
258258 }
259259
@@ -286,7 +286,7 @@ pub trait BodyProvider {
286286 /// Get the address of parcel with given hash.
287287 fn transaction_address ( & self , hash : & H256 ) -> Option < TransactionAddress > ;
288288
289- fn transaction_address_by_tracker ( & self , tracker : & H256 ) -> Option < TransactionAddress > ;
289+ fn transaction_address_by_tracker ( & self , tracker : & Tracker ) -> Option < TransactionAddress > ;
290290
291291 /// Get the block body (uncles and parcels).
292292 fn block_body ( & self , hash : & BlockHash ) -> Option < encoded:: Body > ;
@@ -303,7 +303,7 @@ impl BodyProvider for BodyDB {
303303 Some ( result)
304304 }
305305
306- fn transaction_address_by_tracker ( & self , tracker : & H256 ) -> Option < TransactionAddress > {
306+ fn transaction_address_by_tracker ( & self , tracker : & Tracker ) -> Option < TransactionAddress > {
307307 let addresses = self . db . read_with_cache ( db:: COL_EXTRA , & mut * self . transaction_address_cache . lock ( ) , tracker) ?;
308308 addresses. into_iter ( ) . next ( )
309309 }
@@ -348,7 +348,7 @@ fn parcel_address_entries(
348348fn transaction_address_entries (
349349 block_hash : BlockHash ,
350350 parcel_hashes : impl IntoIterator < Item = UnverifiedTransaction > ,
351- ) -> impl Iterator < Item = TransactionHashAndAddress > {
351+ ) -> impl Iterator < Item = TrackerAndAddress > {
352352 parcel_hashes. into_iter ( ) . enumerate ( ) . filter_map ( move |( parcel_index, parcel) | {
353353 parcel. tracker ( ) . map ( |tracker| {
354354 (
0 commit comments