From f90bdcd1e549c9ef1ee328f2c9fc19ce54d2d7c8 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Tue, 22 Aug 2017 15:51:01 +0200 Subject: [PATCH] [beta] Backporting (#6352) * Better check the created accounts before showing Startup Wizard * Tweaked snapshot params --- ethcore/src/engines/null_engine.rs | 2 +- ethcore/src/ethereum/ethash.rs | 7 ++++-- ethcore/src/snapshot/consensus/work.rs | 27 +++++++++++++++------ ethcore/src/snapshot/tests/proof_of_work.rs | 2 +- js/src/views/Application/store.js | 25 +++++++++++++------ parity/run.rs | 2 +- sync/src/chain.rs | 2 +- 7 files changed, 47 insertions(+), 20 deletions(-) diff --git a/ethcore/src/engines/null_engine.rs b/ethcore/src/engines/null_engine.rs index 3bdef480c..552154580 100644 --- a/ethcore/src/engines/null_engine.rs +++ b/ethcore/src/engines/null_engine.rs @@ -62,6 +62,6 @@ impl Engine for NullEngine { } fn snapshot_components(&self) -> Option> { - Some(Box::new(::snapshot::PowSnapshot(10000))) + Some(Box::new(::snapshot::PowSnapshot::new(10000, 10000))) } } diff --git a/ethcore/src/ethereum/ethash.rs b/ethcore/src/ethereum/ethash.rs index 1fbd711c9..48117b832 100644 --- a/ethcore/src/ethereum/ethash.rs +++ b/ethcore/src/ethereum/ethash.rs @@ -36,7 +36,10 @@ pub const PARITY_GAS_LIMIT_DETERMINANT: U256 = U256([37, 0, 0, 0]); /// Number of blocks in an ethash snapshot. // make dependent on difficulty incrment divisor? -const SNAPSHOT_BLOCKS: u64 = 30000; +const SNAPSHOT_BLOCKS: u64 = 5000; +/// Maximum number of blocks allowed in an ethash snapshot. +const MAX_SNAPSHOT_BLOCKS: u64 = 30000; + /// Ethash params. #[derive(Debug, PartialEq)] @@ -416,7 +419,7 @@ impl Engine for Arc { } fn snapshot_components(&self) -> Option> { - Some(Box::new(::snapshot::PowSnapshot(SNAPSHOT_BLOCKS))) + Some(Box::new(::snapshot::PowSnapshot::new(SNAPSHOT_BLOCKS, MAX_SNAPSHOT_BLOCKS))) } } diff --git a/ethcore/src/snapshot/consensus/work.rs b/ethcore/src/snapshot/consensus/work.rs index 4975203b7..2bf154fc4 100644 --- a/ethcore/src/snapshot/consensus/work.rs +++ b/ethcore/src/snapshot/consensus/work.rs @@ -37,11 +37,24 @@ use rand::OsRng; /// Snapshot creation and restoration for PoW chains. /// This includes blocks from the head of the chain as a /// loose assurance that the chain is valid. -/// -/// The field is the number of blocks from the head of the chain -/// to include in the snapshot. #[derive(Clone, Copy, PartialEq)] -pub struct PowSnapshot(pub u64); +pub struct PowSnapshot { + /// Number of blocks from the head of the chain + /// to include in the snapshot. + pub blocks: u64, + /// Number of to allow in the snapshot when restoring. + pub max_restore_blocks: u64, +} + +impl PowSnapshot { + /// Create a new instance. + pub fn new(blocks: u64, max_restore_blocks: u64) -> PowSnapshot { + PowSnapshot { + blocks: blocks, + max_restore_blocks: max_restore_blocks, + } + } +} impl SnapshotComponents for PowSnapshot { fn chunk_all( @@ -57,7 +70,7 @@ impl SnapshotComponents for PowSnapshot { current_hash: block_at, writer: chunk_sink, preferred_size: preferred_size, - }.chunk_all(self.0) + }.chunk_all(self.blocks) } fn rebuilder( @@ -66,7 +79,7 @@ impl SnapshotComponents for PowSnapshot { db: Arc, manifest: &ManifestData, ) -> Result, ::error::Error> { - PowRebuilder::new(chain, db, manifest, self.0).map(|r| Box::new(r) as Box<_>) + PowRebuilder::new(chain, db, manifest, self.max_restore_blocks).map(|r| Box::new(r) as Box<_>) } fn min_supported_version(&self) -> u64 { ::snapshot::MIN_SUPPORTED_STATE_CHUNK_VERSION } @@ -218,7 +231,7 @@ impl Rebuilder for PowRebuilder { trace!(target: "snapshot", "restoring block chunk with {} blocks.", item_count - 3); if self.fed_blocks + num_blocks > self.snapshot_blocks { - return Err(Error::TooManyBlocks(self.snapshot_blocks, self.fed_blocks).into()) + return Err(Error::TooManyBlocks(self.snapshot_blocks, self.fed_blocks + num_blocks).into()) } // todo: assert here that these values are consistent with chunks being in order. diff --git a/ethcore/src/snapshot/tests/proof_of_work.rs b/ethcore/src/snapshot/tests/proof_of_work.rs index e7d0a0964..a6c0166f5 100644 --- a/ethcore/src/snapshot/tests/proof_of_work.rs +++ b/ethcore/src/snapshot/tests/proof_of_work.rs @@ -30,7 +30,7 @@ use util::kvdb::{self, KeyValueDB, DBTransaction}; use std::sync::Arc; use std::sync::atomic::AtomicBool; -const SNAPSHOT_MODE: ::snapshot::PowSnapshot = ::snapshot::PowSnapshot(30000); +const SNAPSHOT_MODE: ::snapshot::PowSnapshot = ::snapshot::PowSnapshot { blocks: 30000, max_restore_blocks: 30000 }; fn chunk_and_restore(amount: u64) { let mut canon_chain = ChainGenerator::default(); diff --git a/js/src/views/Application/store.js b/js/src/views/Application/store.js index 8d2093d45..9008997b8 100644 --- a/js/src/views/Application/store.js +++ b/js/src/views/Application/store.js @@ -28,11 +28,18 @@ export default class Store { this._migrateStore(); this._api = api; - // Show the first run if it hasn't been shown before - // (thus an undefined value) - this.firstrunVisible = store.get(LS_FIRST_RUN_KEY) === undefined; - this._checkAccounts(); + // Show the first run the storage doesn't hold `false` value + const firstrunVisible = store.get(LS_FIRST_RUN_KEY) !== false; + + // Only check accounts if we might show the first run + if (firstrunVisible) { + api.transport.once('open', () => { + this._checkAccounts(); + }); + } else { + this.firstrunVisible = false; + } } @action closeFirstrun = () => { @@ -50,7 +57,7 @@ export default class Store { } /** - * Migrate the old LocalStorage ket format + * Migrate the old LocalStorage key format * to the new one */ _migrateStore () { @@ -70,12 +77,16 @@ export default class Store { this._api.parity.allAccountsInfo() ]) .then(([ vaults, info ]) => { - const accounts = Object.keys(info).filter((address) => info[address].uuid); + const accounts = Object.keys(info) + .filter((address) => info[address].uuid) + // In DEV mode, the empty phrase account is already added + .filter((address) => address.toLowerCase() !== '0x00a329c0648769a73afac7f9381e08fb43dbea72'); + // Has accounts if any vaults or accounts const hasAccounts = (accounts && accounts.length > 0) || (vaults && vaults.length > 0); // Show First Run if no accounts and no vaults - this.toggleFirstrun(this.firstrunVisible || !hasAccounts); + this.toggleFirstrun(!hasAccounts); }) .catch((error) => { console.error('checkAccounts', error); diff --git a/parity/run.rs b/parity/run.rs index 00db46b37..4322f21fb 100644 --- a/parity/run.rs +++ b/parity/run.rs @@ -56,7 +56,7 @@ use signer; use url; // how often to take periodic snapshots. -const SNAPSHOT_PERIOD: u64 = 10000; +const SNAPSHOT_PERIOD: u64 = 5000; // how many blocks to wait before starting a periodic snapshot. const SNAPSHOT_HISTORY: u64 = 100; diff --git a/sync/src/chain.rs b/sync/src/chain.rs index b3ca25328..bc4985d09 100644 --- a/sync/src/chain.rs +++ b/sync/src/chain.rs @@ -131,7 +131,7 @@ const MAX_TRANSACTION_PACKET_SIZE: usize = 8 * 1024 * 1024; // Maximal number of transactions in sent in single packet. const MAX_TRANSACTIONS_TO_PROPAGATE: usize = 64; // Min number of blocks to be behind for a snapshot sync -const SNAPSHOT_RESTORE_THRESHOLD: BlockNumber = 100000; +const SNAPSHOT_RESTORE_THRESHOLD: BlockNumber = 10000; const SNAPSHOT_MIN_PEERS: usize = 3; const STATUS_PACKET: u8 = 0x00;