Save pending local transactions in the database (#4566)
* Create new column family for local node info
* remove DBTransaction::new reliance on DB
* KeyValueDB trait
* InMemory KeyValueDB implementation
* journaldb generic over KVDB
* make most of `ethcore` generic over KVDB
* fix json tests compilation
* get all tests compiling
* implement local store (just for transactions)
* finish local store API, test
* put everything into place
* better test for skipping bad transactions
* fix warning
* update local store every 15 minutes
* remove superfluous `{}`s
This commit is contained in:
committed by
Gav Wood
parent
00351374e4
commit
62b340f2b9
@@ -62,7 +62,6 @@ fn authority_round() {
|
||||
ap.insert_account(s1.secret().clone(), "").unwrap();
|
||||
|
||||
let mut net = TestNet::with_spec_and_accounts(2, SyncConfig::default(), Spec::new_test_round, Some(ap));
|
||||
let mut net = &mut *net;
|
||||
let io_handler0: Arc<IoHandler<ClientIoMessage>> = Arc::new(TestIoHandler { client: net.peer(0).chain.clone() });
|
||||
let io_handler1: Arc<IoHandler<ClientIoMessage>> = Arc::new(TestIoHandler { client: net.peer(1).chain.clone() });
|
||||
// Push transaction to both clients. Only one of them gets lucky to produce a block.
|
||||
@@ -121,7 +120,6 @@ fn tendermint() {
|
||||
ap.insert_account(s1.secret().clone(), "").unwrap();
|
||||
|
||||
let mut net = TestNet::with_spec_and_accounts(2, SyncConfig::default(), Spec::new_test_tendermint, Some(ap));
|
||||
let mut net = &mut *net;
|
||||
let io_handler0: Arc<IoHandler<ClientIoMessage>> = Arc::new(TestIoHandler { client: net.peer(0).chain.clone() });
|
||||
let io_handler1: Arc<IoHandler<ClientIoMessage>> = Arc::new(TestIoHandler { client: net.peer(1).chain.clone() });
|
||||
// Push transaction to both clients. Only one of them issues a proposal.
|
||||
|
||||
@@ -23,13 +23,11 @@ use ethcore::snapshot::SnapshotService;
|
||||
use ethcore::spec::Spec;
|
||||
use ethcore::account_provider::AccountProvider;
|
||||
use ethcore::miner::Miner;
|
||||
use ethcore::db::NUM_COLUMNS;
|
||||
use sync_io::SyncIo;
|
||||
use io::IoChannel;
|
||||
use api::WARP_SYNC_PROTOCOL_ID;
|
||||
use chain::ChainSync;
|
||||
use ::SyncConfig;
|
||||
use devtools::{self, GuardedTempResult};
|
||||
|
||||
pub trait FlushingBlockChainClient: BlockChainClient {
|
||||
fn flush(&self) {}
|
||||
@@ -271,7 +269,7 @@ impl TestNet<EthPeer<TestBlockChainClient>> {
|
||||
}
|
||||
|
||||
impl TestNet<EthPeer<EthcoreClient>> {
|
||||
pub fn with_spec_and_accounts<F>(n: usize, config: SyncConfig, spec_factory: F, accounts: Option<Arc<AccountProvider>>) -> GuardedTempResult<Self>
|
||||
pub fn with_spec_and_accounts<F>(n: usize, config: SyncConfig, spec_factory: F, accounts: Option<Arc<AccountProvider>>) -> Self
|
||||
where F: Fn() -> Spec
|
||||
{
|
||||
let mut net = TestNet {
|
||||
@@ -279,21 +277,15 @@ impl TestNet<EthPeer<EthcoreClient>> {
|
||||
started: false,
|
||||
disconnect_events: Vec::new(),
|
||||
};
|
||||
let dir = devtools::RandomTempPath::new();
|
||||
|
||||
for _ in 0..n {
|
||||
let mut client_dir = dir.as_path().clone();
|
||||
client_dir.push(devtools::random_filename());
|
||||
|
||||
let db_config = DatabaseConfig::with_columns(NUM_COLUMNS);
|
||||
|
||||
let spec = spec_factory();
|
||||
let client = EthcoreClient::new(
|
||||
ClientConfig::default(),
|
||||
&spec,
|
||||
client_dir.as_path(),
|
||||
Arc::new(::util::kvdb::in_memory(::ethcore::db::NUM_COLUMNS.unwrap_or(0))),
|
||||
Arc::new(Miner::with_spec_and_accounts(&spec, accounts.clone())),
|
||||
IoChannel::disconnected(),
|
||||
&db_config
|
||||
).unwrap();
|
||||
|
||||
let ss = Arc::new(TestSnapshotService::new());
|
||||
@@ -307,10 +299,8 @@ impl TestNet<EthPeer<EthcoreClient>> {
|
||||
peer.chain.add_notify(peer.clone());
|
||||
net.peers.push(peer);
|
||||
}
|
||||
GuardedTempResult {
|
||||
_temp: dir,
|
||||
result: Some(net)
|
||||
}
|
||||
|
||||
net
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user