Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

Commit

Permalink
Move DatabaseExtras to ethcore-blockchain
Browse files Browse the repository at this point in the history
  • Loading branch information
dvdplm committed Jul 7, 2019
1 parent e23cb6a commit de2aa80
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 50 deletions.
15 changes: 10 additions & 5 deletions ethcore/blockchain/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,18 @@ mod cache;
mod config;
mod import_route;
mod update;
mod database_extras;

pub mod generator;

pub use self::blockchain::{BlockProvider, BlockChain, BlockChainDB, BlockChainDBHandler};
pub use self::cache::CacheSize;
pub use self::config::Config;
pub use self::import_route::ImportRoute;
pub use self::update::ExtrasInsert;
pub use crate::{
blockchain::{BlockProvider, BlockChain, BlockChainDB, BlockChainDBHandler},
cache::CacheSize,
config::Config,
database_extras::DatabaseExtras,
import_route::ImportRoute,
update::ExtrasInsert,
};
pub use ethcore_db::keys::{BlockReceipts, BlockDetails, TransactionAddress, BlockNumberKey};
pub use common_types::tree_route::TreeRoute;

26 changes: 4 additions & 22 deletions ethcore/trace/src/db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ use ethereum_types::{H256, H264};
use kvdb::DBTransaction;
use parking_lot::RwLock;
use common_types::BlockNumber;
use ethcore_blockchain::{BlockChain, BlockChainDB, BlockProvider, TransactionAddress};
use ethcore_blockchain::{BlockChainDB, DatabaseExtras};

use crate::{
LocalizedTrace, Config, Filter, Database as TraceDatabase, ImportRequest, DatabaseExtras,
LocalizedTrace, Config, Filter, Database as TraceDatabase, ImportRequest,
flat::{FlatTrace, FlatBlockTraces, FlatTransactionTraces},
};

Expand Down Expand Up @@ -336,39 +336,21 @@ impl<T> TraceDatabase for TraceDB<T> where T: DatabaseExtras {
}
}

/// Bridge between TraceDb and Blockchain.
impl DatabaseExtras for BlockChain {
fn block_hash(&self, block_number: BlockNumber) -> Option<H256> {
(self as &dyn BlockProvider).block_hash(block_number)
}

fn transaction_hash(&self, block_number: BlockNumber, tx_position: usize) -> Option<H256> {
(self as &dyn BlockProvider).block_hash(block_number)
.and_then(|block_hash| {
let tx_address = TransactionAddress {
block_hash,
index: tx_position
};
self.transaction(&tx_address)
})
.map(|tx| tx.hash())
}
}

#[cfg(test)]
mod tests {
use std::{
collections::HashMap,
sync::Arc,
};
use common_types::BlockNumber;
use ethcore_blockchain::DatabaseExtras;
use ethcore::test_helpers::new_db;
use ethereum_types::{H256, U256, Address};
use evm::CallType;
use kvdb::DBTransaction;

use crate::{
Config, TraceDB, Database as TraceDatabase, DatabaseExtras, ImportRequest,
Config, TraceDB, Database as TraceDatabase, ImportRequest,
Filter, LocalizedTrace, AddressesFilter, TraceError,
trace::{Call, Action, Res},
flat::{FlatTrace, FlatBlockTraces, FlatTransactionTraces}
Expand Down
40 changes: 17 additions & 23 deletions ethcore/trace/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
//! Tracing

use common_types::BlockNumber;
use ethereum_types::{H256, U256, Address};
use ethereum_types::{U256, Address};
use kvdb::DBTransaction;
use vm::{Error as VmError, ActionParams};
// The MallocSizeOf derive looks for this in the root
Expand All @@ -30,18 +30,22 @@ mod import;
mod noop_tracer;
mod types;

pub use self::config::Config;
pub use self::db::TraceDB;
pub use self::noop_tracer::{NoopTracer, NoopVMTracer};
pub use self::executive_tracer::{ExecutiveTracer, ExecutiveVMTracer};
pub use self::import::ImportRequest;
pub use self::localized::LocalizedTrace;

pub use self::types::{filter, flat, localized, trace, Tracing};
pub use self::types::error::Error as TraceError;
pub use self::types::trace::{VMTrace, VMOperation, VMExecutedOperation, MemoryDiff, StorageDiff, RewardType};
pub use self::types::flat::{FlatTrace, FlatTransactionTraces, FlatBlockTraces};
pub use self::types::filter::{Filter, AddressesFilter};
pub use crate::{
config::Config,
db::TraceDB,
localized::LocalizedTrace,
executive_tracer::{ExecutiveTracer, ExecutiveVMTracer},
import::ImportRequest,
noop_tracer::{NoopTracer, NoopVMTracer},
types::{
Tracing,
error::Error as TraceError,
localized,
trace::{self, VMTrace, VMOperation, VMExecutedOperation, MemoryDiff, StorageDiff, RewardType},
flat::{self, FlatTrace, FlatTransactionTraces, FlatBlockTraces},
filter::{self, Filter, AddressesFilter},
}
};

/// This trait is used by executive to build traces.
pub trait Tracer: Send {
Expand Down Expand Up @@ -101,16 +105,6 @@ pub trait VMTracer: Send {

}

/// `DbExtras` provides an interface to query extra data which is not stored in tracesdb,
/// but necessary to work correctly.
pub trait DatabaseExtras {
/// Returns hash of given block number.
fn block_hash(&self, block_number: BlockNumber) -> Option<H256>;

/// Returns hash of transaction at given position.
fn transaction_hash(&self, block_number: BlockNumber, tx_position: usize) -> Option<H256>;
}

/// Db provides an interface to query tracesdb.
pub trait Database {
/// Returns true if tracing is enabled. Otherwise false.
Expand Down

0 comments on commit de2aa80

Please sign in to comment.