Skip to content

Commit 2e45da3

Browse files
Seulgi Kimmajecty
authored andcommitted
Distinguish Tracker from H256
And rename some variables that was misnamed as tx_hash.
1 parent 7e26767 commit 2e45da3

33 files changed

+379
-244
lines changed

core/src/blockchain/blockchain.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
use std::sync::Arc;
1818

19-
use ctypes::{BlockHash, BlockNumber};
19+
use ctypes::{BlockHash, BlockNumber, Tracker};
2020
use kvdb::{DBTransaction, KeyValueDB};
2121
use parking_lot::RwLock;
2222
use primitives::H256;
@@ -415,7 +415,7 @@ impl BodyProvider for BlockChain {
415415
self.body_db.transaction_address(hash)
416416
}
417417

418-
fn transaction_address_by_tracker(&self, tracker: &H256) -> Option<TransactionAddress> {
418+
fn transaction_address_by_tracker(&self, tracker: &Tracker) -> Option<TransactionAddress> {
419419
self.body_db.transaction_address_by_tracker(tracker)
420420
}
421421

@@ -430,7 +430,7 @@ impl InvoiceProvider for BlockChain {
430430
self.invoice_db.is_known_error_hint(hash)
431431
}
432432

433-
fn error_hints_by_tracker(&self, tracker: &H256) -> Vec<(H256, Option<String>)> {
433+
fn error_hints_by_tracker(&self, tracker: &Tracker) -> Vec<(H256, Option<String>)> {
434434
self.invoice_db.error_hints_by_tracker(tracker)
435435
}
436436

core/src/blockchain/body_db.rs

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use std::collections::{HashMap, HashSet};
1818
use std::mem;
1919
use std::sync::Arc;
2020

21-
use ctypes::BlockHash;
21+
use ctypes::{BlockHash, Tracker};
2222
use kvdb::{DBTransaction, KeyValueDB};
2323
use lru_cache::LruCache;
2424
use 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

5151
impl 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(
348348
fn 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
(

core/src/blockchain/extras.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
use std::ops::{Add, AddAssign, Deref, Sub, SubAssign};
1818

19-
use ctypes::{BlockHash, BlockNumber};
19+
use ctypes::{BlockHash, BlockNumber, Tracker};
2020
use primitives::{H256, H264, U256};
2121

2222
use crate::db::Key;
@@ -31,8 +31,8 @@ enum ExtrasIndex {
3131
BlockHash = 1,
3232
/// Parcel address index
3333
ParcelAddress = 2,
34-
/// Transaction address index
35-
TransactionAddress = 3,
34+
/// Transaction addresses index
35+
TransactionAddresses = 3,
3636
// (Reserved) = 4,
3737
// (Reserved) = 5,
3838
}
@@ -85,11 +85,11 @@ impl Key<TransactionAddress> for H256 {
8585
}
8686
}
8787

88-
impl Key<TransactionAddresses> for H256 {
88+
impl Key<TransactionAddresses> for Tracker {
8989
type Target = H264;
9090

9191
fn key(&self) -> H264 {
92-
with_index(self, ExtrasIndex::TransactionAddress)
92+
with_index(self, ExtrasIndex::TransactionAddresses)
9393
}
9494
}
9595

core/src/blockchain/invoice_db.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use std::collections::HashMap;
1818
use std::ops::{Deref, DerefMut};
1919
use std::sync::Arc;
2020

21+
use ctypes::Tracker;
2122
use kvdb::{DBTransaction, KeyValueDB};
2223
use parking_lot::RwLock;
2324
use primitives::{H256, H264};
@@ -30,7 +31,7 @@ use crate::db::{self, CacheUpdatePolicy, Key, Readable, Writable};
3031
/// **Does not do input data verification.**
3132
pub struct InvoiceDB {
3233
// tracker -> transaction hashe + error hint
33-
tracker_cache: RwLock<HashMap<H256, TrackerInvoices>>,
34+
tracker_cache: RwLock<HashMap<Tracker, TrackerInvoices>>,
3435
// transaction hash -> error hint
3536
hash_cache: RwLock<HashMap<H256, Option<String>>>,
3637

@@ -55,7 +56,7 @@ impl InvoiceDB {
5556
&self,
5657
batch: &mut DBTransaction,
5758
hash: H256,
58-
tracker: Option<H256>,
59+
tracker: Option<Tracker>,
5960
error_hint: Option<String>,
6061
) {
6162
if self.is_known_error_hint(&hash) {
@@ -82,7 +83,7 @@ pub trait InvoiceProvider {
8283
fn is_known_error_hint(&self, hash: &H256) -> bool;
8384

8485
/// Get error hints
85-
fn error_hints_by_tracker(&self, tracker: &H256) -> Vec<(H256, Option<String>)>;
86+
fn error_hints_by_tracker(&self, tracker: &Tracker) -> Vec<(H256, Option<String>)>;
8687

8788
/// Get error hint
8889
fn error_hint(&self, hash: &H256) -> Option<String>;
@@ -93,7 +94,7 @@ impl InvoiceProvider for InvoiceDB {
9394
self.db.exists_with_cache(db::COL_ERROR_HINT, &self.hash_cache, hash)
9495
}
9596

96-
fn error_hints_by_tracker(&self, tracker: &H256) -> Vec<(H256, Option<String>)> {
97+
fn error_hints_by_tracker(&self, tracker: &Tracker) -> Vec<(H256, Option<String>)> {
9798
self.db
9899
.read_with_cache(db::COL_ERROR_HINT, &mut *self.tracker_cache.write(), tracker)
99100
.map(|hashes| (*hashes).clone())
@@ -175,7 +176,7 @@ impl Key<Option<String>> for H256 {
175176
}
176177
}
177178

178-
impl Key<TrackerInvoices> for H256 {
179+
impl Key<TrackerInvoices> for Tracker {
179180
type Target = H264;
180181

181182
fn key(&self) -> H264 {

core/src/client/client.rs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use cstate::{
2828
};
2929
use ctimer::{TimeoutHandler, TimerApi, TimerScheduleError, TimerToken};
3030
use ctypes::transaction::{AssetTransferInput, PartialHashing, ShardTransaction};
31-
use ctypes::{BlockHash, BlockNumber, CommonParams, ShardId};
31+
use ctypes::{BlockHash, BlockNumber, CommonParams, ShardId, Tracker};
3232
use cvm::{decode, execute, ChainTimeInfo, ScriptResult, VMConfig};
3333
use hashdb::AsHashDB;
3434
use journaldb;
@@ -239,7 +239,7 @@ impl Client {
239239
}
240240
}
241241

242-
fn transaction_addresses(&self, tracker: &H256) -> Option<TransactionAddress> {
242+
fn transaction_addresses(&self, tracker: &Tracker) -> Option<TransactionAddress> {
243243
self.block_chain().transaction_address_by_tracker(tracker)
244244
}
245245

@@ -366,7 +366,13 @@ impl AssetClient for Client {
366366
}
367367
}
368368

369-
fn get_asset(&self, tracker: H256, index: usize, shard_id: ShardId, id: BlockId) -> TrieResult<Option<OwnedAsset>> {
369+
fn get_asset(
370+
&self,
371+
tracker: Tracker,
372+
index: usize,
373+
shard_id: ShardId,
374+
id: BlockId,
375+
) -> TrieResult<Option<OwnedAsset>> {
370376
if let Some(state) = Client::state_at(&self, id) {
371377
Ok(state.asset(shard_id, tracker, index)?)
372378
} else {
@@ -379,7 +385,7 @@ impl AssetClient for Client {
379385
/// It returns None if such an asset never existed in the shard at the given block.
380386
fn is_asset_spent(
381387
&self,
382-
tracker: H256,
388+
tracker: Tracker,
383389
index: usize,
384390
shard_id: ShardId,
385391
block_id: BlockId,
@@ -629,7 +635,7 @@ impl BlockChainTrait for Client {
629635
self.transaction_address(id).map(|addr| addr.block_hash)
630636
}
631637

632-
fn transaction_header(&self, tracker: &H256) -> Option<::encoded::Header> {
638+
fn transaction_header(&self, tracker: &Tracker) -> Option<::encoded::Header> {
633639
self.transaction_addresses(tracker).map(|addr| addr.block_hash).and_then(|hash| self.block_header(&hash.into()))
634640
}
635641
}
@@ -796,13 +802,13 @@ impl BlockChainClient for Client {
796802
chain.error_hint(hash)
797803
}
798804

799-
fn transaction_by_tracker(&self, tracker: &H256) -> Option<LocalizedTransaction> {
805+
fn transaction_by_tracker(&self, tracker: &Tracker) -> Option<LocalizedTransaction> {
800806
let chain = self.block_chain();
801807
let address = self.transaction_addresses(tracker);
802808
address.and_then(|address| chain.transaction(&address))
803809
}
804810

805-
fn error_hints_by_tracker(&self, tracker: &H256) -> Vec<(H256, Option<String>)> {
811+
fn error_hints_by_tracker(&self, tracker: &Tracker) -> Vec<(H256, Option<String>)> {
806812
let chain = self.block_chain();
807813
chain.error_hints_by_tracker(tracker)
808814
}
@@ -919,11 +925,11 @@ impl MiningBlockChainClient for Client {
919925
}
920926

921927
impl ChainTimeInfo for Client {
922-
fn transaction_block_age(&self, tracker: &H256, parent_block_number: BlockNumber) -> Option<u64> {
928+
fn transaction_block_age(&self, tracker: &Tracker, parent_block_number: BlockNumber) -> Option<u64> {
923929
self.transaction_block_number(tracker).map(|block_number| parent_block_number - block_number)
924930
}
925931

926-
fn transaction_time_age(&self, tracker: &H256, parent_timestamp: u64) -> Option<u64> {
932+
fn transaction_time_age(&self, tracker: &Tracker, parent_timestamp: u64) -> Option<u64> {
927933
self.transaction_block_timestamp(tracker).map(|block_timestamp| parent_timestamp - block_timestamp)
928934
}
929935
}

core/src/client/mod.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ use cmerkle::Result as TrieResult;
3737
use cnetwork::NodeId;
3838
use cstate::{AssetScheme, FindActionHandler, OwnedAsset, StateResult, Text, TopLevelState, TopStateView};
3939
use ctypes::transaction::{AssetTransferInput, PartialHashing, ShardTransaction};
40-
use ctypes::{BlockHash, BlockNumber, CommonParams, ShardId};
40+
use ctypes::{BlockHash, BlockNumber, CommonParams, ShardId, Tracker};
4141
use cvm::ChainTimeInfo;
4242
use kvdb::KeyValueDB;
4343
use primitives::{Bytes, H160, H256, U256};
@@ -75,13 +75,13 @@ pub trait BlockChainTrait {
7575
/// Get the hash of block that contains the transaction, if any.
7676
fn transaction_block(&self, id: &TransactionId) -> Option<BlockHash>;
7777

78-
fn transaction_header(&self, tracker: &H256) -> Option<::encoded::Header>;
78+
fn transaction_header(&self, tracker: &Tracker) -> Option<::encoded::Header>;
7979

80-
fn transaction_block_number(&self, tracker: &H256) -> Option<BlockNumber> {
80+
fn transaction_block_number(&self, tracker: &Tracker) -> Option<BlockNumber> {
8181
self.transaction_header(tracker).map(|header| header.number())
8282
}
8383

84-
fn transaction_block_timestamp(&self, tracker: &H256) -> Option<u64> {
84+
fn transaction_block_timestamp(&self, tracker: &Tracker) -> Option<u64> {
8585
self.transaction_header(tracker).map(|header| header.timestamp())
8686
}
8787
}
@@ -253,9 +253,9 @@ pub trait BlockChainClient: Sync + Send + AccountData + BlockChainTrait + Import
253253
fn error_hint(&self, hash: &H256) -> Option<String>;
254254

255255
/// Get the transaction with given tracker.
256-
fn transaction_by_tracker(&self, tracker: &H256) -> Option<LocalizedTransaction>;
256+
fn transaction_by_tracker(&self, tracker: &Tracker) -> Option<LocalizedTransaction>;
257257

258-
fn error_hints_by_tracker(&self, tracker: &H256) -> Vec<(H256, Option<String>)>;
258+
fn error_hints_by_tracker(&self, tracker: &Tracker) -> Vec<(H256, Option<String>)>;
259259
}
260260

261261
/// Result of import block operation.
@@ -300,11 +300,17 @@ pub trait DatabaseClient {
300300
pub trait AssetClient {
301301
fn get_asset_scheme(&self, asset_type: H160, shard_id: ShardId, id: BlockId) -> TrieResult<Option<AssetScheme>>;
302302

303-
fn get_asset(&self, tracker: H256, index: usize, shard_id: ShardId, id: BlockId) -> TrieResult<Option<OwnedAsset>>;
303+
fn get_asset(
304+
&self,
305+
tracker: Tracker,
306+
index: usize,
307+
shard_id: ShardId,
308+
id: BlockId,
309+
) -> TrieResult<Option<OwnedAsset>>;
304310

305311
fn is_asset_spent(
306312
&self,
307-
tracker: H256,
313+
tracker: Tracker,
308314
index: usize,
309315
shard_id: ShardId,
310316
block_id: BlockId,

0 commit comments

Comments
 (0)