Extract engines to own crates (#10966)

* Add client-traits crate
Move the BlockInfo trait to new crate

* New crate `machine`
Contains code extracted from ethcore that defines `Machine`, `Externalities` and other execution related code.

* Use new machine and client-traits crates in ethcore

* Use new crates machine and client-traits instead of ethcore where appropriate

* Fix tests

* Don't re-export so many types from ethcore::client

* Fixing more fallout from removing re-export

* fix test

* More fallout from not re-exporting types

* Add some docs

* cleanup

* import the macro edition style

* Tweak docs

* Add missing import

* remove unused ethabi_derive imports

* Use latest ethabi-contract

* Move many traits from ethcore/client/traits to client-traits crate
Initial version of extracted Engine trait

* Move snapshot related traits to the engine crate (eew)

* Move a few snapshot related types to common_types
Cleanup Executed as exported from machine crate

* fix warning

* Gradually introduce new engine crate: snapshot

* ethcore typechecks with new engine crate

* Sort out types outside ethcore

* Add an EpochVerifier to ethash and use that in Engine.epoch_verifier()
Cleanup

* Document pub members

* Sort out tests
Sort out default impls for EpochVerifier

* Add test-helpers feature and move EngineSigner impl to the right place

* Sort out tests

* Sort out tests and refactor verification types

* Fix missing traits

* More missing traits
Fix Histogram

* Fix tests and cleanup

* cleanup

* Put back needed logger import

* Don't rexport common_types from ethcore/src/client
Don't export ethcore::client::*

* Remove files no longer used
Use types from the engine crate
Explicit exports from engine::engine

* Get rid of itertools

* Move a few more traits from ethcore to client-traits: BlockChainReset, ScheduleInfo, StateClient

* Move ProvingBlockChainClient to client-traits

* Don't re-export ForkChoice and Transition from ethcore

* Address grumbles: sort imports, remove commented out code

* Fix merge resolution error

* Extract the Clique engine to own crate

* Extract NullEngine and the block_reward module from ethcore

* Extract InstantSeal engine to own crate

* Extract remaining engines

* Extract executive_state to own crate so it can be used by engine crates

* Remove snapshot stuff from the engine crate

* Put snapshot traits back in ethcore

* cleanup

* Remove stuff from ethcore

* Don't use itertools

* itertools in aura is legit-ish

* More post-merge fixes

* Re-export less types in client

* cleanup

* Update ethcore/block-reward/Cargo.toml

Co-Authored-By: Tomasz Drwięga <tomusdrw@users.noreply.github.com>

* Update ethcore/engines/basic-authority/Cargo.toml

Co-Authored-By: Tomasz Drwięga <tomusdrw@users.noreply.github.com>

* Update ethcore/engines/ethash/Cargo.toml

Co-Authored-By: Tomasz Drwięga <tomusdrw@users.noreply.github.com>

* Update ethcore/engines/clique/src/lib.rs

Co-Authored-By: Tomasz Drwięga <tomusdrw@users.noreply.github.com>

* signers is already a ref

* Add an EngineType enum to tighten up Engine.name()

* Introduce Snapshotting enum to distinguish the type of snapshots a chain uses

* Rename supports_warp to snapshot_mode

* Missing import

* Update ethcore/src/snapshot/consensus/mod.rs

Co-Authored-By: Tomasz Drwięga <tomusdrw@users.noreply.github.com>

* remove double-semicolons
This commit is contained in:
David 2019-08-22 18:25:49 +02:00 committed by GitHub
parent efb390eb60
commit 2af3140a26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
81 changed files with 1205 additions and 610 deletions

385
Cargo.lock generated
View File

@ -35,7 +35,7 @@ dependencies = [
"pod 0.1.0",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp_compress 0.1.0",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"trace 0.1.0",
"trie-db 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-vm-factories 0.1.0",
@ -161,6 +161,38 @@ dependencies = [
"winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "authority-round"
version = "0.1.0"
dependencies = [
"block-reward 0.1.0",
"client-traits 0.1.0",
"common-types 0.1.0",
"engine 0.1.0",
"env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"ethcore 1.12.0",
"ethcore-accounts 0.1.0",
"ethcore-io 1.12.0",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethjson 0.1.0",
"ethkey 0.3.0",
"itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
"keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"machine 0.1.0",
"macros 0.1.0",
"parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"state-db 0.1.0",
"time-utils 0.1.0",
"unexpected 0.1.0",
"validator-set 0.1.0",
]
[[package]]
name = "autocfg"
version = "0.1.4"
@ -209,6 +241,27 @@ dependencies = [
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "basic-authority"
version = "0.1.0"
dependencies = [
"client-traits 0.1.0",
"common-types 0.1.0",
"engine 0.1.0",
"ethcore 1.12.0",
"ethcore-accounts 0.1.0",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethjson 0.1.0",
"ethkey 0.3.0",
"keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"machine 0.1.0",
"parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"validator-set 0.1.0",
]
[[package]]
name = "bincode"
version = "1.1.4"
@ -216,7 +269,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -296,6 +349,22 @@ dependencies = [
"byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "block-reward"
version = "0.1.0"
dependencies = [
"common-types 0.1.0",
"engine 0.1.0",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-contract 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethcore 1.12.0",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"machine 0.1.0",
"trace 0.1.0",
]
[[package]]
name = "blooms-db"
version = "0.1.0"
@ -366,7 +435,7 @@ name = "chainspec"
version = "0.1.0"
dependencies = [
"ethjson 0.1.0",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -432,6 +501,31 @@ dependencies = [
"vm 0.1.0",
]
[[package]]
name = "clique"
version = "0.1.0"
dependencies = [
"client-traits 0.1.0",
"common-types 0.1.0",
"engine 0.1.0",
"ethcore 1.12.0",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethjson 0.1.0",
"ethkey 0.3.0",
"keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"machine 0.1.0",
"macros 0.1.0",
"parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"state-db 0.1.0",
"time-utils 0.1.0",
"unexpected 0.1.0",
]
[[package]]
name = "cloudabi"
version = "0.0.3"
@ -503,9 +597,9 @@ dependencies = [
"itertools 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)",
"itertools-num 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"simplelog 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
"walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -603,7 +697,7 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"csv-core 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -713,7 +807,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -727,7 +821,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
name = "eip-712"
version = "0.1.0"
dependencies = [
"ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -737,9 +831,9 @@ dependencies = [
"lunarity-lexer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"toolshed 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"validator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"validator_derive 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -795,6 +889,18 @@ dependencies = [
"termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "env_logger"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"humantime 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "error-chain"
version = "0.12.0"
@ -816,15 +922,15 @@ dependencies = [
[[package]]
name = "ethabi"
version = "8.0.0"
version = "8.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -838,7 +944,7 @@ name = "ethabi-derive"
version = "8.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"heck 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
@ -859,11 +965,31 @@ dependencies = [
"parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"primal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"static_assertions 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "ethash-engine"
version = "0.1.0"
dependencies = [
"block-reward 0.1.0",
"common-types 0.1.0",
"engine 0.1.0",
"ethash 1.12.0",
"ethcore 1.12.0",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethjson 0.1.0",
"keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"machine 0.1.0",
"macros 0.1.0",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"unexpected 0.1.0",
]
[[package]]
name = "ethbloom"
version = "0.6.4"
@ -883,17 +1009,21 @@ dependencies = [
"account-db 0.1.0",
"account-state 0.1.0",
"ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"authority-round 0.1.0",
"basic-authority 0.1.0",
"blooms-db 0.1.0",
"client-traits 0.1.0",
"clique 0.1.0",
"common-types 0.1.0",
"criterion 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
"crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
"engine 0.1.0",
"env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-contract 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethash 1.12.0",
"ethash-engine 0.1.0",
"ethcore-accounts 0.1.0",
"ethcore-blockchain 0.1.0",
"ethcore-bloom-journal 0.1.0",
@ -907,9 +1037,11 @@ dependencies = [
"ethjson 0.1.0",
"ethkey 0.3.0",
"evm 0.1.0",
"executive-state 0.1.0",
"fetch 0.1.0",
"futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
"instant-seal 0.1.0",
"itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
"journaldb 0.2.0",
"keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -920,10 +1052,10 @@ dependencies = [
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"len-caching-lock 0.1.1",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"machine 0.1.0",
"macros 0.1.0",
"memory-cache 0.1.0",
"null-engine 0.1.0",
"num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-runtime 0.1.0",
@ -939,9 +1071,9 @@ dependencies = [
"rlp_compress 0.1.0",
"rlp_derive 0.1.0",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"state-db 0.1.0",
"stats 0.1.0",
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
@ -966,9 +1098,9 @@ dependencies = [
"ethstore 0.2.1",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -1080,6 +1212,7 @@ dependencies = [
"ethcore-miner 1.12.0",
"ethcore-network 1.12.0",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"executive-state 0.1.0",
"failsafe 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"fastmap 0.1.0",
"futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1101,7 +1234,7 @@ dependencies = [
"rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp_derive 0.1.0",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
"stats 0.1.0",
@ -1134,7 +1267,7 @@ dependencies = [
"common-types 0.1.0",
"env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)",
"error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-contract 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethash 1.12.0",
@ -1153,9 +1286,9 @@ dependencies = [
"price-info 1.12.0",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"trace-time 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"transaction-pool 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1177,7 +1310,7 @@ dependencies = [
"parity-snappy 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -1209,8 +1342,8 @@ dependencies = [
"rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1225,7 +1358,7 @@ dependencies = [
"common-types 0.1.0",
"derive_more 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
"env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-contract 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethcore 1.12.0",
@ -1254,9 +1387,9 @@ dependencies = [
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp_derive 0.1.0",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"state-db 0.1.0",
"time-utils 0.1.0",
"tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1275,7 +1408,7 @@ dependencies = [
"client-traits 0.1.0",
"common-types 0.1.0",
"env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-contract 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethcore 1.12.0",
@ -1297,9 +1430,9 @@ dependencies = [
"parity-runtime 0.1.0",
"parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1402,9 +1535,9 @@ version = "0.1.0"
dependencies = [
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -1421,7 +1554,7 @@ dependencies = [
"quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"zeroize 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1437,7 +1570,7 @@ dependencies = [
"panic_hook 0.1.0",
"parity-wordlist 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -1458,9 +1591,9 @@ dependencies = [
"parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1479,7 +1612,7 @@ dependencies = [
"panic_hook 0.1.0",
"parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -1518,13 +1651,41 @@ dependencies = [
"parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"pod 0.1.0",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"trace 0.1.0",
"vm 0.1.0",
]
[[package]]
name = "executive-state"
version = "0.1.0"
dependencies = [
"account-db 0.1.0",
"account-state 0.1.0",
"common-types 0.1.0",
"env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)",
"ethcore 1.12.0",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethkey 0.3.0",
"evm 0.1.0",
"hash-db 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
"keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"keccak-hasher 0.1.1",
"kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"machine 0.1.0",
"parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"patricia-trie-ethereum 0.1.0",
"pod 0.1.0",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"trace 0.1.0",
"trie-db 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-vm-factories 0.1.0",
"vm 0.1.0",
]
[[package]]
name = "failsafe"
version = "0.3.0"
@ -1748,8 +1909,8 @@ dependencies = [
"pest_derive 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
"quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -1921,7 +2082,7 @@ name = "impl-serde"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -1929,6 +2090,21 @@ name = "indexmap"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "instant-seal"
version = "0.1.0"
dependencies = [
"common-types 0.1.0",
"engine 0.1.0",
"ethcore 1.12.0",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethjson 0.1.0",
"keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"machine 0.1.0",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"trace 0.1.0",
]
[[package]]
name = "integer-encoding"
version = "1.0.5"
@ -2054,9 +2230,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -2105,7 +2281,7 @@ dependencies = [
"jsonrpc-core 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -2324,7 +2500,7 @@ dependencies = [
"client-traits 0.1.0",
"common-types 0.1.0",
"crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-contract 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethcore 1.12.0",
@ -2562,7 +2738,7 @@ version = "1.12.0"
dependencies = [
"client-traits 0.1.0",
"common-types 0.1.0",
"ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-contract 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethcore 1.12.0",
@ -2582,6 +2758,18 @@ name = "nodrop"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "null-engine"
version = "0.1.0"
dependencies = [
"block-reward 0.1.0",
"common-types 0.1.0",
"engine 0.1.0",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethjson 0.1.0",
"machine 0.1.0",
]
[[package]]
name = "num"
version = "0.1.42"
@ -2712,7 +2900,7 @@ version = "3.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -2813,9 +3001,9 @@ dependencies = [
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2827,7 +3015,7 @@ dependencies = [
name = "parity-hash-fetch"
version = "1.12.0"
dependencies = [
"ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-contract 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2874,9 +3062,9 @@ dependencies = [
"kvdb-memorydb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -2959,9 +3147,9 @@ dependencies = [
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"stats 0.1.0",
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2985,8 +3173,8 @@ dependencies = [
"matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-rpc 1.12.0",
"parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -3039,7 +3227,7 @@ version = "1.12.0"
dependencies = [
"client-traits 0.1.0",
"common-types 0.1.0",
"ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-contract 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethcore 1.12.0",
@ -3272,7 +3460,7 @@ dependencies = [
"patricia-trie-ethereum 0.1.0",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-db 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
"triehash-ethereum 0.2.0",
]
@ -3294,7 +3482,7 @@ dependencies = [
"futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-runtime 0.1.0",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -3384,9 +3572,9 @@ dependencies = [
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethjson 0.1.0",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"vm 0.1.0",
"wasm 0.1.0",
]
@ -3640,7 +3828,7 @@ dependencies = [
name = "registrar"
version = "0.0.1"
dependencies = [
"ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-contract 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3764,7 +3952,7 @@ dependencies = [
[[package]]
name = "ryu"
version = "0.2.6"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@ -3822,7 +4010,7 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -3832,7 +4020,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "serde"
version = "1.0.89"
version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3850,12 +4038,12 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.39"
version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -4408,7 +4596,7 @@ name = "toml"
version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -4416,7 +4604,7 @@ name = "toml"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -4640,12 +4828,46 @@ dependencies = [
"idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "validator-set"
version = "0.1.0"
dependencies = [
"client-traits 0.1.0",
"common-types 0.1.0",
"engine 0.1.0",
"env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-contract 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ethabi-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethcore 1.12.0",
"ethcore-accounts 0.1.0",
"ethcore-call-contract 0.1.0",
"ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethjson 0.1.0",
"ethkey 0.3.0",
"executive-state 0.1.0",
"keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"machine 0.1.0",
"memory-cache 0.1.0",
"parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-util-mem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"triehash-ethereum 0.2.0",
"unexpected 0.1.0",
"vm 0.1.0",
]
[[package]]
name = "validator_derive"
version = "0.8.0"
@ -4948,9 +5170,10 @@ dependencies = [
"checksum elastic-array 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "073be79b6538296faf81c631872676600616073817dd9a440c477ad09b408983"
"checksum enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180"
"checksum env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)" = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38"
"checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3"
"checksum error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "07e791d3be96241c77c43846b665ef1384606da2cd2a48730abe606a12906e02"
"checksum eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)" = "<none>"
"checksum ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b312e5740d6e0369491ebe81a8752f7797b70e495530f28bbb7cc967ded3d77c"
"checksum ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ebdeeea85a6d217b9fcc862906d7e283c047e04114165c433756baf5dce00a6c"
"checksum ethabi-contract 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e0d6314f57a5451692753696f40903bacf870adf65d452911ab6b15bf6be41f8"
"checksum ethabi-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "65cdef3199bf5d1821dc53b5ab992f853a13b2e28d7a63983095d9d61fae58d3"
"checksum ethbloom 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3932e82d64d347a045208924002930dc105a138995ccdc1479d0f05f0359f17c"
@ -5146,7 +5369,7 @@ dependencies = [
"checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
"checksum rustls 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38af00e78b66109e7184a0ee16940f41583161b7ec0518af258e4bcaed15db25"
"checksum ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7153dd96dade874ab973e098cb62fcdbb89a03682e46b144fd09550998d4a4a7"
"checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997"
"checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9"
"checksum same-file 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "10f7794e2fda7f594866840e95f5c5962e886e228e68b6505885811a94dd728c"
"checksum scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8"
@ -5156,9 +5379,9 @@ dependencies = [
"checksum sct 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2f5adf8fbd58e1b1b52699dc8bed2630faecb6d8c7bee77d009d6bbe4af569b9"
"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
"checksum serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)" = "92514fb95f900c9b5126e32d020f5c6d40564c27a5ea6d1d7d9f157a96623560"
"checksum serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)" = "fec2851eb56d010dc9a21b89ca53ee75e6528bab60c11e89d38390904982da9f"
"checksum serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6eabf4b5914e88e24eea240bb7c9f9a2cbc1bbbe8d961d381975ec3c6b806c"
"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d"
"checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704"
"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68"
"checksum sha1 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "171698ce4ec7cbb93babeb3190021b4d72e96ccb98e33d277ae4ea959d6f2d9e"
"checksum sha2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9eb6be24e4c23a84d7184280d2722f7f2731fcdd4a9d886efbfe4413e4847ea0"

View File

@ -135,9 +135,4 @@ members = [
"ethcore/wasm/run",
"evmbin",
"parity-clib",
"util/triehash-ethereum",
"util/keccak-hasher",
"util/patricia-trie-ethereum",
"util/fastmap",
"util/time-utils",
]

View File

@ -9,9 +9,12 @@ authors = ["Parity Technologies <admin@parity.io>"]
[dependencies]
account-db = { path = "account-db" }
account-state = { path = "account-state" }
authority-round = { path = "./engines/authority-round" }
ansi_term = "0.11"
basic-authority = { path = "./engines/basic-authority" }
blooms-db = { path = "../util/blooms-db", optional = true }
client-traits = { path = "./client-traits" }
clique = { path = "./engines/clique" }
common-types = { path = "types" }
crossbeam-utils = "0.6"
engine = { path = "./engine" }
@ -20,6 +23,7 @@ ethabi = "8.0"
ethabi-contract = "8.0"
ethabi-derive = "8.0"
ethash = { path = "../ethash" }
ethash-engine = { path = "./engines/ethash" }
ethcore-blockchain = { path = "./blockchain" }
ethcore-bloom-journal = { path = "../util/bloom" }
ethcore-builtin = { path = "./builtin" }
@ -32,9 +36,11 @@ ethereum-types = "0.6.0"
ethjson = { path = "../json" }
ethkey = { path = "../accounts/ethkey" }
evm = { path = "evm" }
executive-state = { path = "executive-state" }
futures = "0.1"
hash-db = "0.15.0"
parity-util-mem = "0.2.0"
instant-seal = { path = "./engines/instant-seal" }
itertools = "0.5"
journaldb = { path = "../util/journaldb" }
keccak-hash = "0.2.0"
@ -42,13 +48,13 @@ keccak-hasher = { path = "../util/keccak-hasher" }
kvdb = "0.1"
kvdb-memorydb = "0.1"
kvdb-rocksdb = { version = "0.1.3", optional = true }
lazy_static = "1.2.0"
lazy_static = "1.3.0"
len-caching-lock = { path = "../util/len-caching-lock" }
log = "0.4"
lru-cache = "0.1"
macros = { path = "../util/macros", optional = true }
machine = { path = "./machine" }
macros = { path = "../util/macros" }
memory-cache = { path = "../util/memory-cache" }
null-engine = { path = "./engines/null-engine" }
num_cpus = "1.2"
parity-bytes = "0.1"
parity-snappy = "0.1"
@ -85,6 +91,7 @@ ethcore-accounts = { path = "../accounts" }
fetch = { path = "../util/fetch" }
kvdb-rocksdb = "0.1.3"
machine = { path = "./machine", features = ["test-helpers"] }
macros = { path = "../util/macros" }
parity-runtime = { path = "../util/runtime" }
rlp_compress = { path = "../util/rlp-compress" }
serde_json = "1.0"
@ -92,7 +99,7 @@ tempdir = "0.3"
trie-standardmap = "0.15.0"
[features]
parity = ["work-notify", "price-info", "stratum"]
parity = ["work-notify", "price-info", "stratum", "macros"]
# Large optional features that are enabled by default for Parity,
# but might be omitted for other dependent crates.
work-notify = ["ethcore-miner/work-notify"]
@ -119,7 +126,7 @@ ci-skip-tests = []
# Run memory/cpu heavy tests.
test-heavy = []
# Compile test helpers
test-helpers = ["tempdir", "kvdb-rocksdb", "blooms-db"]
test-helpers = ["tempdir", "kvdb-rocksdb", "blooms-db", "macros", "basic-authority/test-helpers"]
[[bench]]
name = "builtin"

View File

@ -0,0 +1,21 @@
[package]
description = "A crate to interact with the block rewards contract."
name = "block-reward"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
license = "GPL-3.0"
[dependencies]
common-types = { path = "../types" }
engine = { path = "../engine" }
ethabi = "8.0.1"
ethabi-derive = "8.0.0"
ethabi-contract = "8.0.1"
ethereum-types = "0.6.0"
keccak-hash = "0.2.0"
machine = { path = "../machine" }
trace = { path = "../trace" }
[dev-dependencies]
ethcore = { path = "..", features = ["test-helpers"] }

View File

@ -14,24 +14,25 @@
// You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
//! A module with types for declaring block rewards and a client interface for interacting with a
//! Types for declaring block rewards and a client interface for interacting with a
//! block reward contract.
use ethabi::FunctionOutputDecoder;
use ethereum_types::{Address, U256};
use std::sync::Arc;
use hash::keccak;
use machine::{Machine, ExecutedBlock};
use trace;
use types::{
use ethabi::FunctionOutputDecoder;
use ethabi_contract::use_contract;
use ethereum_types::{Address, U256};
use common_types::{
BlockNumber,
errors::{EngineError, EthcoreError as Error},
};
use keccak_hash::keccak;
use machine::{Machine, ExecutedBlock};
use engine::{SystemOrCodeCall, SystemOrCodeCallKind};
use trace;
use trace::{Tracer, ExecutiveTracer, Tracing};
use_contract!(block_reward_contract, "res/contracts/block_reward.json");
use_contract!(block_reward_contract, "res/block_reward.json");
/// The kind of block reward.
/// Depending on the consensus engine the allocated block reward might have
@ -161,13 +162,14 @@ pub fn apply_block_rewards(
#[cfg(test)]
mod test {
use std::str::FromStr;
use client::PrepareOpenBlock;
use ethcore::{
client::PrepareOpenBlock,
spec,
test_helpers::generate_dummy_client_with_spec,
};
use ethereum_types::{U256, Address};
use crate::spec;
use test_helpers::generate_dummy_client_with_spec;
use engine::SystemOrCodeCallKind;
use super::{BlockRewardContract, RewardKind};
use crate::{BlockRewardContract, RewardKind};
#[test]
fn block_reward_contract() {

View File

@ -442,7 +442,7 @@ impl Implementation for Bn128Add {
if let Some(sum) = AffineG1::from_jacobian(p1 + p2) {
// point not at infinity
sum.x().to_big_endian(&mut write_buf[0..32]).expect("Cannot fail since 0..32 is 32-byte length");
sum.y().to_big_endian(&mut write_buf[32..64]).expect("Cannot fail since 32..64 is 32-byte length");;
sum.y().to_big_endian(&mut write_buf[32..64]).expect("Cannot fail since 32..64 is 32-byte length");
}
output.write(0, &write_buf);
@ -463,7 +463,7 @@ impl Implementation for Bn128Mul {
if let Some(sum) = AffineG1::from_jacobian(p * fr) {
// point not at infinity
sum.x().to_big_endian(&mut write_buf[0..32]).expect("Cannot fail since 0..32 is 32-byte length");
sum.y().to_big_endian(&mut write_buf[32..64]).expect("Cannot fail since 32..64 is 32-byte length");;
sum.y().to_big_endian(&mut write_buf[32..64]).expect("Cannot fail since 32..64 is 32-byte length");
}
output.write(0, &write_buf);
Ok(())

View File

@ -31,6 +31,7 @@ use common_types::{
machine::{AuxiliaryData, AuxiliaryRequest},
},
errors::{EthcoreError as Error, EngineError},
snapshot::Snapshotting,
transaction::{self, UnverifiedTransaction},
};
use client_traits::EngineClient;
@ -43,10 +44,7 @@ use machine::{
};
use vm::{EnvInfo, Schedule, CallType, ActionValue};
use crate::{
signer::EngineSigner,
snapshot::SnapshotComponents,
};
use crate::signer::EngineSigner;
/// A system-calling closure. Enacts calls on a block's state from the system address.
pub type SystemCall<'a> = dyn FnMut(Address, Vec<u8>) -> Result<Vec<u8>, String> + 'a;
@ -306,16 +304,8 @@ pub trait Engine: Sync + Send {
/// Trigger next step of the consensus engine.
fn step(&self) {}
/// Create a factory for building snapshot chunks and restoring from them.
/// Returning `None` indicates that this engine doesn't support snapshot creation.
fn snapshot_components(&self) -> Option<Box<dyn SnapshotComponents>> {
None
}
/// Whether this engine supports warp sync.
fn supports_warp(&self) -> bool {
self.snapshot_components().is_some()
}
/// Snapshot mode for the engine: Unsupported, PoW or PoA
fn snapshot_mode(&self) -> Snapshotting { Snapshotting::Unsupported }
/// Return a new open block header timestamp based on the parent timestamp.
fn open_block_header_timestamp(&self, parent_timestamp: u64) -> u64 {

View File

@ -18,7 +18,6 @@
mod engine;
pub mod signer;
pub mod snapshot;
pub use crate::engine::{
Engine,

View File

@ -0,0 +1,39 @@
[package]
description = "Non-instant BFT proof-of-authority blockchain engine"
name = "authority-round"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
license = "GPL-3.0"
[dependencies]
block-reward = { path = "../../block-reward" }
client-traits = { path = "../../client-traits" }
common-types = { path = "../../types" }
ethereum-types = "0.6.0"
ethjson = { path = "../../../json" }
ethkey = { path = "../../../accounts/ethkey" }
engine = { path = "../../engine" }
io = { package = "ethcore-io", path = "../../../util/io" }
itertools = "0.5"
keccak-hash = "0.2.0"
lazy_static = "1.3.0"
log = "0.4"
lru-cache = "0.1"
machine = { path = "../../machine" }
macros = { path = "../../../util/macros" }
parking_lot = "0.8"
rand = "0.6"
rlp = "0.4.0"
time-utils = { path = "../../../util/time-utils" }
unexpected = { path = "../../../util/unexpected" }
validator-set = { path = "../validator-set" }
[dev-dependencies]
accounts = { package = "ethcore-accounts", path = "../../../accounts" }
engine = { path = "../../engine", features = ["test-helpers"] }
env_logger = "0.6.2"
ethcore = { path = "../..", features = ["test-helpers"] }
state-db = { path = "../../state-db" }
validator-set = { path = "../validator-set", features = ["test-helpers"] }
serde_json = "1"

View File

@ -19,10 +19,10 @@
use std::collections::{VecDeque};
use std::collections::hash_map::{HashMap, Entry};
use common_types::BlockNumber;
use ethereum_types::{H256, Address};
use types::BlockNumber;
use engines::validator_set::SimpleList;
use log::{trace, warn};
use validator_set::SimpleList;
/// Error indicating unknown validator.
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
@ -179,8 +179,8 @@ impl RollingFinality {
#[cfg(test)]
mod tests {
use common_types::BlockNumber;
use ethereum_types::{H256, Address};
use types::BlockNumber;
use super::RollingFinality;
#[test]

View File

@ -29,19 +29,17 @@ use std::sync::{Weak, Arc};
use std::time::{UNIX_EPOCH, Duration};
use client_traits::EngineClient;
use engine::{Engine,ConstructedVerifier};
use engines::block_reward;
use engines::block_reward::{BlockRewardContract, RewardKind};
use engine::snapshot::SnapshotComponents;
use engine::{Engine, ConstructedVerifier};
use block_reward::{self, BlockRewardContract, RewardKind};
use ethjson;
use machine::{
ExecutedBlock,
Machine,
};
use hash::keccak;
use macros::map;
use keccak_hash::keccak;
use log::{info, debug, error, trace, warn};
use engine::signer::EngineSigner;
use super::validator_set::{ValidatorSet, SimpleList, new_validator_set};
use self::finality::RollingFinality;
use ethkey::{self, Signature};
use io::{IoContext, IoHandler, TimerToken, IoService};
use itertools::{self, Itertools};
@ -49,7 +47,7 @@ use rlp::{encode, Decodable, DecoderError, Encodable, RlpStream, Rlp};
use ethereum_types::{H256, H520, Address, U128, U256};
use parking_lot::{Mutex, RwLock};
use time_utils::CheckedSystemTime;
use types::{
use common_types::{
ancestry_action::AncestryAction,
BlockNumber,
header::{Header, ExtendedHeader},
@ -62,11 +60,16 @@ use types::{
machine::{Call, AuxiliaryData},
},
errors::{BlockError, EthcoreError as Error, EngineError},
snapshot::Snapshotting,
};
use unexpected::{Mismatch, OutOfBounds};
use validator_set::{ValidatorSet, SimpleList, new_validator_set};
mod finality;
use self::finality::RollingFinality;
/// `AuthorityRound` params.
pub struct AuthorityRoundParams {
/// Time to wait before next block or authority switching,
@ -1631,11 +1634,11 @@ impl Engine for AuthorityRound {
)
}
fn snapshot_components(&self) -> Option<Box<dyn (SnapshotComponents)>> {
fn snapshot_mode(&self) -> Snapshotting {
if self.immediate_transitions {
None
Snapshotting::Unsupported
} else {
Some(Box::new(::snapshot::PoaSnapshot))
Snapshotting::PoA
}
}
@ -1663,29 +1666,33 @@ mod tests {
use std::str::FromStr;
use std::sync::Arc;
use std::sync::atomic::{AtomicUsize, Ordering as AtomicOrdering};
use hash::keccak;
use keccak_hash::keccak;
use accounts::AccountProvider;
use ethereum_types::{Address, H520, H256, U256};
use ethkey::Signature;
use types::{
use common_types::{
header::Header,
engines::{Seal, params::CommonParams},
errors::{EthcoreError as Error, EngineError},
transaction::{Action, Transaction},
};
use rlp::encode;
use block::*;
use test_helpers::{
generate_dummy_client_with_spec, get_temp_state_db,
TestNotify
use ethcore::{
block::*,
test_helpers::{
generate_dummy_client_with_spec, get_temp_state_db,
TestNotify
},
spec::{self, Spec},
};
use crate::spec::{Spec, self};
use engine::Engine;
use engines::block_reward::BlockRewardContract;
use engines::validator_set::{TestSet, SimpleList};
use super::{AuthorityRoundParams, AuthorityRound, EmptyStep, SealedEmptyStep, calculate_score};
use block_reward::BlockRewardContract;
use validator_set::{TestSet, SimpleList};
use machine::Machine;
use ethjson;
use serde_json;
use super::{AuthorityRoundParams, AuthorityRound, EmptyStep, SealedEmptyStep, calculate_score};
fn build_aura<F>(f: F) -> Arc<AuthorityRound> where
F: FnOnce(&mut AuthorityRoundParams),
@ -1719,7 +1726,7 @@ mod tests {
#[test]
fn has_valid_metadata() {
let engine = spec::new_test_round().engine;
assert!(!engine.name().is_empty());
assert_eq!(engine.name(), "AuthorityRound");
}
#[test]

View File

@ -0,0 +1,30 @@
[package]
description = "Basic PoA blockchain engine."
name = "basic-authority"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
license = "GPL-3.0"
[dependencies]
client-traits = { path = "../../client-traits" }
common-types = { path = "../../types" }
engine = { path = "../../engine" }
ethereum-types = "0.6.0"
ethjson = { path = "../../../json" }
ethkey = { path = "../../../accounts/ethkey" }
log = "0.4.8"
machine = { path = "../../machine" }
parking_lot = "0.8"
rlp = "0.4.2"
validator-set = { path = "../validator-set" }
[dev-dependencies]
accounts = { package = "ethcore-accounts", path = "../../../accounts" }
engine = { path = "../../engine", features = ["test-helpers"] }
ethcore = { path = "../..", features = ["test-helpers"] }
keccak-hash = "0.2.0"
tempdir = "0.3"
[features]
test-helpers = []

View File

@ -17,22 +17,8 @@
//! A blockchain engine that supports a basic, non-BFT proof-of-authority.
use std::sync::Weak;
use ethereum_types::{H256, H520};
use parking_lot::RwLock;
use ethkey::{self, Signature};
use engine::{
Engine,
ConstructedVerifier,
snapshot::SnapshotComponents,
signer::EngineSigner,
};
use ethjson;
use client_traits::EngineClient;
use machine::{
Machine,
executed_block::ExecutedBlock,
};
use types::{
use common_types::{
header::Header,
engines::{
Headers,
@ -44,8 +30,16 @@ use types::{
},
errors::{EngineError, BlockError, EthcoreError as Error},
};
use super::validator_set::{ValidatorSet, SimpleList, new_validator_set};
use client_traits::EngineClient;
use ethereum_types::{H256, H520};
use parking_lot::RwLock;
use engine::{Engine, ConstructedVerifier, signer::EngineSigner};
use ethkey::{self, Signature};
use ethjson;
use log::trace;
use machine::{Machine, executed_block::ExecutedBlock};
use rlp::Rlp;
use validator_set::{ValidatorSet, SimpleList, new_validator_set};
/// `BasicAuthority` params.
#[derive(Debug, PartialEq)]
@ -73,8 +67,6 @@ impl engine::EpochVerifier for EpochVerifier {
}
fn verify_external(header: &Header, validators: &dyn ValidatorSet) -> Result<(), Error> {
use rlp::Rlp;
// Check if the signature belongs to a validator, can depend on parent state.
let sig = Rlp::new(&header.seal()[0]).as_val::<H520>()?;
let signer = ethkey::public_to_address(&ethkey::recover(&sig.into(), &header.bare_hash())?);
@ -130,7 +122,7 @@ impl Engine for BasicAuthority {
if self.validators.contains(header.parent_hash(), author) {
// account should be pernamently unlocked, otherwise sealing will fail
if let Ok(signature) = self.sign(header.bare_hash()) {
return Seal::Regular(vec![::rlp::encode(&(H520::from(signature).as_bytes()))]);
return Seal::Regular(vec![rlp::encode(&(H520::from(signature).as_bytes()))]);
} else {
trace!(target: "basicauthority", "generate_seal: FAIL: accounts secret key unavailable");
}
@ -150,13 +142,13 @@ impl Engine for BasicAuthority {
self.validators.genesis_epoch_data(header, call)
}
#[cfg(not(test))]
#[cfg(not(any(test, feature = "test-helpers")))]
fn signals_epoch_end(&self, _header: &Header, _auxiliary: AuxiliaryData) -> engine::EpochChange {
// don't bother signalling even though a contract might try.
engine::EpochChange::No
}
#[cfg(test)]
#[cfg(any(test, feature = "test-helpers"))]
fn signals_epoch_end(&self, header: &Header, auxiliary: AuxiliaryData) -> engine::EpochChange {
// in test mode, always signal even though they don't be finalized.
let first = header.number() == 0;
@ -202,10 +194,6 @@ impl Engine for BasicAuthority {
}
}
fn register_client(&self, client: Weak<dyn EngineClient>) {
self.validators.register_client(client);
}
fn set_signer(&self, signer: Box<dyn EngineSigner>) {
*self.signer.write() = Some(signer);
}
@ -218,8 +206,8 @@ impl Engine for BasicAuthority {
)
}
fn snapshot_components(&self) -> Option<Box<dyn (SnapshotComponents)>> {
None
fn register_client(&self, client: Weak<dyn EngineClient>) {
self.validators.register_client(client);
}
fn params(&self) -> &CommonParams {
@ -230,19 +218,24 @@ impl Engine for BasicAuthority {
#[cfg(test)]
mod tests {
use std::sync::Arc;
use hash::keccak;
use keccak_hash::keccak;
use ethereum_types::H520;
use block::*;
use test_helpers::get_temp_state_db;
use ethcore::{
block::*,
spec,
test_helpers::get_temp_state_db
};
use accounts::AccountProvider;
use types::header::Header;
use spec::Spec;
use types::engines::{Seal, SealingState};
use common_types::{
header::Header,
engines::{Seal, SealingState}
};
use tempdir::TempDir;
/// Create a new test chain spec with `BasicAuthority` consensus engine.
fn new_test_authority() -> Spec {
let bytes: &[u8] = include_bytes!("../../res/basic_authority.json");
let bytes: &[u8] = include_bytes!("../res/basic_authority.json");
let tempdir = TempDir::new("").unwrap();
Spec::load(&tempdir.path(), bytes).expect("invalid chain spec")
}
@ -250,7 +243,7 @@ mod tests {
#[test]
fn has_valid_metadata() {
let engine = new_test_authority().engine;
assert!(!engine.name().is_empty());
assert_eq!(engine.name(), "BasicAuthority");
}
#[test]
@ -264,7 +257,7 @@ mod tests {
fn can_do_signature_verification_fail() {
let engine = new_test_authority().engine;
let mut header: Header = Header::default();
header.set_seal(vec![::rlp::encode(&H520::default())]);
header.set_seal(vec![rlp::encode(&H520::default())]);
let verify_result = engine.verify_block_external(&header);
assert!(verify_result.is_err());

View File

@ -0,0 +1,30 @@
[package]
description = "Clique consensus engine"
name = "clique"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
license = "GPL-3.0"
[dependencies]
client-traits = { path = "../../client-traits" }
common-types = { path = "../../types" }
ethereum-types = "0.6.0"
ethjson = { path = "../../../json" }
ethkey = { path = "../../../accounts/ethkey" }
engine = { path = "../../engine" }
keccak-hash = "0.2.0"
lazy_static = "1.3.0"
log = "0.4"
lru-cache = "0.1"
machine = { path = "../../machine" }
macros = { path = "../../../util/macros" }
parking_lot = "0.8"
rand = "0.6"
rlp = "0.4.0"
time-utils = { path = "../../../util/time-utils" }
unexpected = { path = "../../../util/unexpected" }
[dev-dependencies]
ethcore = { path = "../..", features = ["test-helpers"] }
state-db = { path = "../../state-db" }

View File

@ -14,22 +14,28 @@
// You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
use std::collections::{HashMap, BTreeSet, VecDeque};
use std::fmt;
use std::time::{Duration, SystemTime, UNIX_EPOCH};
use std::{
collections::{HashMap, BTreeSet, VecDeque},
fmt,
time::{Duration, SystemTime, UNIX_EPOCH},
};
use engines::clique::util::{extract_signers, recover_creator};
use engines::clique::{VoteType, DIFF_INTURN, DIFF_NOTURN, NULL_AUTHOR, SIGNING_DELAY_NOTURN_MS};
use ethereum_types::{Address, H64};
use rand::Rng;
use time_utils::CheckedSystemTime;
use types::{
use common_types::{
BlockNumber,
header::Header,
errors::{BlockError, EthcoreError as Error, EngineError},
};
use ethereum_types::{Address, H64};
use log::{debug, trace};
use rand::Rng;
use time_utils::CheckedSystemTime;
use unexpected::Mismatch;
use crate::{
util::{extract_signers, recover_creator},
{VoteType, DIFF_INTURN, DIFF_NOTURN, NULL_AUTHOR, SIGNING_DELAY_NOTURN_MS},
};
/// Type that keeps track of the state for a given vote
// Votes that go against the proposal aren't counted since it's equivalent to not voting
#[derive(Copy, Clone, Debug, PartialEq, PartialOrd)]

View File

@ -58,40 +58,39 @@
/// 7. Finally, `Clique::verify_local_seal()` is called. After this, the syncing code path will be followed
/// in order to import the new block.
use std::cmp;
use std::collections::{HashMap, VecDeque, BTreeMap};
use std::sync::{Arc, Weak};
use std::thread;
use std::time;
use std::time::{Instant, Duration, SystemTime, UNIX_EPOCH};
use std::{
cmp,
collections::{HashMap, VecDeque, BTreeMap},
sync::{Arc, Weak},
thread,
time::{self, Instant, Duration, SystemTime, UNIX_EPOCH},
};
use client_traits::EngineClient;
use engines::{
clique::util::{extract_signers, recover_creator},
EthashSeal,
};
use engine::{
Engine,
signer::EngineSigner,
};
use ethereum_types::{Address, H64, H160, H256, U256};
use ethkey::Signature;
use hash::KECCAK_EMPTY_LIST_RLP;
use itertools::Itertools;
use keccak_hash::KECCAK_EMPTY_LIST_RLP;
use log::{trace, warn};
use lru_cache::LruCache;
use machine::{
ExecutedBlock,
Machine,
};
use macros::map;
use parking_lot::RwLock;
use rand::Rng;
use unexpected::{Mismatch, OutOfBounds};
use time_utils::CheckedSystemTime;
use types::{
use common_types::{
BlockNumber,
ids::BlockId,
header::Header,
engines::{
EthashSeal,
Seal,
SealingState,
params::CommonParams,
@ -100,8 +99,12 @@ use types::{
errors::{BlockError, EthcoreError as Error, EngineError},
};
use self::block_state::CliqueBlockState;
use self::params::CliqueParams;
use crate::{
util::{extract_signers, recover_creator},
block_state::CliqueBlockState,
params::CliqueParams,
};
mod params;
mod block_state;
@ -214,7 +217,7 @@ impl Clique {
thread::Builder::new().name("StepService".into())
.spawn(move || {
loop {
let next_step_at = Instant::now() + SEALING_FREQ;
let next_step_at = Instant::now() + SEALING_FREQ;
trace!(target: "miner", "StepService: triggering sealing");
if let Some(eng) = weak_eng.upgrade() {
eng.step()
@ -237,7 +240,7 @@ impl Clique {
/// Note we need to `mock` the miner and it is introduced to test block verification to trigger new blocks
/// to mainly test consensus edge cases
pub fn with_test(epoch_length: u64, period: u64) -> Self {
use crate::spec;
use ethcore::spec;
Self {
epoch_length,
@ -424,7 +427,7 @@ impl Engine for Clique {
let votes = self.proposals.read().iter()
.filter(|(address, vote_type)| state.is_valid_vote(*address, **vote_type))
.map(|(address, vote_type)| (*address, *vote_type))
.collect_vec();
.collect::<Vec<_>>();
if !votes.is_empty() {
// Pick a random vote.
@ -458,9 +461,9 @@ impl Engine for Clique {
// If we are building an checkpoint block, add all signers now.
if is_checkpoint {
seal.reserve(state.signers().len() * 20);
state.signers().iter().foreach(|addr| {
seal.extend_from_slice(&addr[..]);
});
for signer in state.signers() {
seal.extend_from_slice(&signer[..]);
}
}
header.set_extra_data(seal.clone());

View File

@ -16,17 +16,20 @@
//! Consensus tests for `PoA Clique Engine`, see http://eips.ethereum.org/EIPS/eip-225 for more information
use block::*;
use std::sync::Arc;
use std::collections::HashMap;
use common_types::errors::{EthcoreError as Error, EngineError};
use ethcore::{
block::*,
test_helpers::get_temp_state_db,
};
use engine::Engine;
use ethereum_types::{Address, H256};
use ethkey::{Secret, KeyPair};
use state_db::StateDB;
use super::*;
use test_helpers::get_temp_state_db;
use types::errors::{EthcoreError as Error, EngineError};
use std::sync::Arc;
use std::collections::HashMap;
use super::*;
/// Possible signers
pub const SIGNER_TAGS: [char; 6] = ['A', 'B', 'C', 'D', 'E', 'F'];

View File

@ -16,16 +16,17 @@
use std::collections::BTreeSet;
use engines::clique::{ADDRESS_LENGTH, SIGNATURE_LENGTH, VANITY_LENGTH, NULL_NONCE, NULL_MIXHASH};
use ethereum_types::{Address, H256};
use ethkey::{public_to_address, recover as ec_recover, Signature};
use lru_cache::LruCache;
use parking_lot::RwLock;
use rlp::encode;
use types::{
use common_types::{
header::Header,
errors::{EthcoreError as Error, EngineError},
};
use ethereum_types::{Address, H256};
use ethkey::{public_to_address, recover as ec_recover, Signature};
use lazy_static::lazy_static;
use lru_cache::LruCache;
use parking_lot::RwLock;
use rlp::encode;
use crate::{ADDRESS_LENGTH, SIGNATURE_LENGTH, VANITY_LENGTH, NULL_NONCE, NULL_MIXHASH};
/// How many recovered signature to cache in the memory.
pub const CREATOR_CACHE_NUM: usize = 4096;

View File

@ -0,0 +1,26 @@
[package]
description = "Ethash PoW blockchain engine"
name = "ethash-engine"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
license = "GPL-3.0"
[dependencies]
block-reward = { path = "../../block-reward" }
common-types = { path = "../../types" }
engine = { path = "../../engine" }
ethash= { path = "../../../ethash" }
ethereum-types = "0.6.0"
ethjson = { path = "../../../json" }
keccak-hash = "0.2.0"
log = "0.4.8"
machine = { path = "../../machine" }
macros = { path = "../../../util/macros" }
unexpected = { path = "../../../util/unexpected" }
[dev-dependencies]
ethcore = { path = "../..", features = ["test-helpers"] }
keccak-hash = "0.2.0"
rlp = "0.4.2"
tempdir = "0.3"

View File

@ -19,27 +19,29 @@ use std::collections::BTreeMap;
use std::path::Path;
use std::sync::Arc;
use engine::snapshot::SnapshotComponents;
use ethereum_types::{H256, H64, U256};
use ethjson;
use hash::{KECCAK_EMPTY_LIST_RLP};
use rlp::Rlp;
use types::{
use block_reward::{self, BlockRewardContract, RewardKind};
use common_types::{
BlockNumber,
header::Header,
engines::params::CommonParams,
engines::{
EthashSeal,
params::CommonParams,
},
errors::{BlockError, EthcoreError as Error},
snapshot::Snapshotting,
};
use unexpected::{OutOfBounds, Mismatch};
use engines::block_reward::{self, BlockRewardContract, RewardKind};
use engine::Engine;
use ethereum_types::{H256, U256};
use ethjson;
use ethash::{self, quick_get_difficulty, slow_hash_block_number, EthashManager, OptimizeFor};
use keccak_hash::{KECCAK_EMPTY_LIST_RLP};
use log::trace;
use macros::map;
use machine::{
ExecutedBlock,
Machine,
};
use unexpected::{OutOfBounds, Mismatch};
/// Number of blocks in an ethash snapshot.
// make dependent on difficulty increment divisor?
@ -47,38 +49,6 @@ const SNAPSHOT_BLOCKS: u64 = 5000;
/// Maximum number of blocks allowed in an ethash snapshot.
const MAX_SNAPSHOT_BLOCKS: u64 = 30000;
/// Ethash specific seal
#[derive(Debug, PartialEq)]
pub struct Seal {
/// Ethash seal mix_hash
pub mix_hash: H256,
/// Ethash seal nonce
pub nonce: H64,
}
impl Seal {
/// Tries to parse rlp as ethash seal.
pub fn parse_seal<T: AsRef<[u8]>>(seal: &[T]) -> Result<Self, Error> {
if seal.len() != 2 {
return Err(BlockError::InvalidSealArity(
Mismatch {
expected: 2,
found: seal.len()
}
).into());
}
let mix_hash = Rlp::new(seal[0].as_ref()).as_val::<H256>()?;
let nonce = Rlp::new(seal[1].as_ref()).as_val::<H64>()?;
let seal = Seal {
mix_hash,
nonce,
};
Ok(seal)
}
}
/// Ethash params.
#[derive(Debug, PartialEq)]
pub struct EthashParams {
@ -207,7 +177,7 @@ impl Ethash {
}
fn verify_block_unordered(pow: &Arc<EthashManager>, header: &Header) -> Result<(), Error> {
let seal = Seal::parse_seal(header.seal())?;
let seal = EthashSeal::parse_seal(header.seal())?;
let result = pow.compute_light(
header.number() as u64,
@ -253,6 +223,7 @@ impl engine::EpochVerifier for EpochVerifier {
impl Engine for Ethash {
fn name(&self) -> &str { "Ethash" }
fn machine(&self) -> &Machine { &self.machine }
// Two fields - nonce and mix.
@ -260,7 +231,7 @@ impl Engine for Ethash {
/// Additional engine-specific information for the user/developer concerning `header`.
fn extra_info(&self, header: &Header) -> BTreeMap<String, String> {
match Seal::parse_seal(header.seal()) {
match EthashSeal::parse_seal(header.seal()) {
Ok(seal) => map![
"nonce".to_owned() => format!("0x{:x}", seal.nonce),
"mixHash".to_owned() => format!("0x{:x}", seal.mix_hash)
@ -350,7 +321,7 @@ impl Engine for Ethash {
fn verify_block_basic(&self, header: &Header) -> Result<(), Error> {
// check the seal fields.
let seal = Seal::parse_seal(header.seal())?;
let seal = EthashSeal::parse_seal(header.seal())?;
// TODO: consider removing these lines.
let min_difficulty = self.ethash_params.minimum_difficulty;
@ -401,8 +372,11 @@ impl Engine for Ethash {
header.set_difficulty(difficulty);
}
fn snapshot_components(&self) -> Option<Box<dyn (SnapshotComponents)>> {
Some(Box::new(::snapshot::PowSnapshot::new(SNAPSHOT_BLOCKS, MAX_SNAPSHOT_BLOCKS)))
fn snapshot_mode(&self) -> Snapshotting {
Snapshotting::PoW {
blocks: SNAPSHOT_BLOCKS,
max_restore_blocks: MAX_SNAPSHOT_BLOCKS
}
}
fn params(&self) -> &CommonParams { self.machine.params() }
@ -509,20 +483,23 @@ mod tests {
use std::str::FromStr;
use std::sync::Arc;
use std::collections::BTreeMap;
use ethereum_types::{H64, H256, U256, Address};
use block::*;
use test_helpers::get_temp_state_db;
use types::{
use common_types::{
header::Header,
errors::{BlockError, EthcoreError as Error},
errors::{BlockError, EthcoreError as Error}
};
use spec::Spec;
use engine::Engine;
use crate::spec::{new_morden, new_mcip3_test, new_homestead_test_machine};
use super::{Ethash, EthashParams, ecip1017_eras_block_reward};
use ethereum_types::{H64, H256, U256, Address};
use ethcore::{
block::*,
test_helpers::get_temp_state_db,
spec::{new_morden, new_mcip3_test, new_homestead_test_machine, Spec},
};
use rlp;
use tempdir::TempDir;
use super::{Ethash, EthashParams, ecip1017_eras_block_reward};
fn test_spec() -> Spec {
let tempdir = TempDir::new("").unwrap();
new_morden(&tempdir.path())
@ -644,7 +621,7 @@ mod tests {
#[test]
fn has_valid_metadata() {
let engine = test_spec().engine;
assert!(!engine.name().is_empty());
assert_eq!(engine.name(), "Ethash");
}
#[test]

View File

@ -0,0 +1,20 @@
[package]
description = "Engine that seals instantly"
name = "instant-seal"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
license = "GPL-3.0"
[dependencies]
common-types = { path = "../../types" }
engine = { path = "../../engine" }
ethjson = { path = "../../../json" }
ethereum-types = "0.6.0"
keccak-hash = "0.2.0"
machine = { path = "../../machine" }
trace = { path = "../../trace" }
[dev-dependencies]
ethcore = { path = "../..", features = ["test-helpers"] }
rlp = "0.4.2"

View File

@ -14,12 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
use engine::Engine;
use machine::{
ExecutedBlock,
Machine
};
use types::{
use common_types::{
header::Header,
engines::{
Seal,
@ -28,6 +23,12 @@ use types::{
},
errors::EthcoreError as Error,
};
use engine::Engine;
use ethjson;
use machine::{
ExecutedBlock,
Machine
};
/// `InstantSeal` params.
@ -37,8 +38,8 @@ pub struct InstantSealParams {
pub millisecond_timestamp: bool,
}
impl From<::ethjson::spec::InstantSealParams> for InstantSealParams {
fn from(p: ::ethjson::spec::InstantSealParams) -> Self {
impl From<ethjson::spec::InstantSealParams> for InstantSealParams {
fn from(p: ethjson::spec::InstantSealParams) -> Self {
InstantSealParams {
millisecond_timestamp: p.millisecond_timestamp,
}
@ -63,9 +64,7 @@ impl InstantSeal {
}
impl Engine for InstantSeal {
fn name(&self) -> &str {
"InstantSeal"
}
fn name(&self) -> &str { "InstantSeal" }
fn machine(&self) -> &Machine { &self.machine }
@ -108,14 +107,16 @@ impl Engine for InstantSeal {
#[cfg(test)]
mod tests {
use std::sync::Arc;
use ethereum_types::{H520, Address};
use test_helpers::get_temp_state_db;
use crate::spec;
use types::{
use common_types::{
header::Header,
engines::Seal,
};
use block::*;
use ethereum_types::{H520, Address};
use ethcore::{
test_helpers::get_temp_state_db,
spec,
block::*,
};
#[test]
fn instant_can_seal() {
@ -138,7 +139,7 @@ mod tests {
assert!(engine.verify_block_basic(&header).is_ok());
header.set_seal(vec![::rlp::encode(&H520::default())]);
header.set_seal(vec![rlp::encode(&H520::default())]);
assert!(engine.verify_block_unordered(&header).is_ok());
}

View File

@ -0,0 +1,15 @@
[package]
description = "An ethereum engine which does not provide any consensus mechanism and does not seal blocks."
name = "null-engine"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
license = "GPL-3.0"
[dependencies]
common-types = { path = "../../types" }
block-reward = { path = "../../block-reward" }
engine = { path = "../../engine" }
ethjson = { path = "../../../json" }
ethereum-types = "0.6.0"
machine = { path = "../../machine" }

View File

@ -14,20 +14,20 @@
// You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
use engine::snapshot::SnapshotComponents;
use engine::Engine;
use engines::block_reward::{self, RewardKind};
use ethereum_types::U256;
use machine::{
ExecutedBlock,
Machine,
};
use types::{
use common_types::{
BlockNumber,
header::Header,
engines::params::CommonParams,
errors::EthcoreError as Error,
};
use engine::Engine;
use block_reward::{self, RewardKind};
use ethereum_types::U256;
use machine::{
ExecutedBlock,
Machine,
};
use common_types::snapshot::Snapshotting;
/// Params for a null engine.
#[derive(Clone, Default)]
@ -36,8 +36,8 @@ pub struct NullEngineParams {
pub block_reward: U256,
}
impl From<::ethjson::spec::NullEngineParams> for NullEngineParams {
fn from(p: ::ethjson::spec::NullEngineParams) -> Self {
impl From<ethjson::spec::NullEngineParams> for NullEngineParams {
fn from(p: ethjson::spec::NullEngineParams) -> Self {
NullEngineParams {
block_reward: p.block_reward.map_or_else(Default::default, Into::into),
}
@ -59,11 +59,8 @@ impl NullEngine {
}
}
}
impl Engine for NullEngine {
fn name(&self) -> &str {
"NullEngine"
}
fn name(&self) -> &str { "NullEngine" }
fn machine(&self) -> &Machine { &self.machine }
@ -104,8 +101,8 @@ impl Engine for NullEngine {
Ok(())
}
fn snapshot_components(&self) -> Option<Box<dyn (SnapshotComponents)>> {
Some(Box::new(::snapshot::PowSnapshot::new(10000, 10000)))
fn snapshot_mode(&self) -> Snapshotting {
Snapshotting::PoW { blocks: 10_000, max_restore_blocks: 10_000 }
}
fn params(&self) -> &CommonParams {

View File

@ -0,0 +1,44 @@
[package]
description = "Manage validators and sets of validators: creation, calling and validation of contracts, epoch management, proofs and proving"
name = "validator-set"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
license = "GPL-3.0"
[dependencies]
client-traits = { path = "../../client-traits" }
common-types = { path = "../../types" }
engine = { path = "../../engine" }
ethabi = "8.0.1"
ethabi-derive = "8.0.0"
ethabi-contract = "8.0.1"
ethereum-types = "0.6.0"
ethjson = { path = "../../../json" }
executive-state = { path = "../../executive-state" }
keccak-hash = "0.2.0"
kvdb = "0.1.0"
lazy_static = "1.3.0"
log = "0.4.8"
machine = { path = "../../machine" }
memory-cache = { path = "../../../util/memory-cache" }
parity-bytes = "0.1.0"
parity-util-mem = "0.2.0"
parking_lot = "0.8"
rlp = "0.4.2"
triehash = { package = "triehash-ethereum", version = "0.2", path = "../../../util/triehash-ethereum" }
unexpected = { path = "../../../util/unexpected" }
vm = { path = "../../vm" }
[dev-dependencies]
accounts = { package = "ethcore-accounts", path = "../../../accounts" }
engine = { path = "../../engine", features = ["test-helpers"] }
ethcore = { path = "../..", features = ["test-helpers"] }
keccak-hash = "0.2.0"
ethkey = { path = "../../../accounts/ethkey" }
rustc-hex = "1.0"
call-contract = { package = "ethcore-call-contract", path = "../../call-contract" }
env_logger = "0.6.2"
[features]
test-helpers = []

View File

@ -19,12 +19,15 @@
use std::sync::Weak;
use bytes::Bytes;
use parity_bytes::Bytes;
use ethabi_contract::use_contract;
use ethereum_types::{H256, Address};
use log::{warn, trace};
use machine::Machine;
use parking_lot::RwLock;
use types::{
use common_types::{
BlockNumber,
ids::BlockId,
header::Header,
errors::EthcoreError,
engines::machine::{Call, AuxiliaryData},
@ -33,10 +36,12 @@ use types::{
use client_traits::EngineClient;
use engine::SystemCall;
use super::{ValidatorSet, SimpleList};
use super::safe_contract::ValidatorSafeContract;
use crate::{
ValidatorSet, SimpleList,
safe_contract::ValidatorSafeContract
};
use_contract!(validator_report, "res/contracts/validator_report.json");
use_contract!(validator_report, "res/validator_report.json");
/// A validator contract with reporting.
pub struct ValidatorContract {
@ -73,7 +78,7 @@ impl ValidatorContract {
}
impl ValidatorSet for ValidatorContract {
fn default_caller(&self, id: ::types::ids::BlockId) -> Box<Call> {
fn default_caller(&self, id: BlockId) -> Box<Call> {
self.validators.default_caller(id)
}
@ -140,21 +145,22 @@ impl ValidatorSet for ValidatorContract {
#[cfg(test)]
mod tests {
use std::sync::Arc;
use rustc_hex::FromHex;
use hash::keccak;
use ethereum_types::{H520, Address};
use bytes::ToPretty;
use rlp::encode;
use crate::spec;
use types::{
header::Header,
ids::BlockId,
use common_types::{header::Header, ids::BlockId};
use ethcore::{
miner::{self, MinerService},
spec,
test_helpers::generate_dummy_client_with_spec,
};
use ethereum_types::{H520, Address};
use keccak_hash::keccak;
use parity_bytes::ToPretty;
use rlp::encode;
use rustc_hex::FromHex;
use accounts::AccountProvider;
use miner::{self, MinerService};
use test_helpers::generate_dummy_client_with_spec;
use call_contract::CallContract;
use client_traits::{BlockChainClient, ChainInfo, BlockInfo};
use super::super::ValidatorSet;
use super::ValidatorContract;

View File

@ -16,7 +16,7 @@
/// Validator lists.
#[cfg(test)]
#[cfg(any(test, feature = "test-helpers"))]
mod test;
mod simple_list;
mod safe_contract;
@ -25,21 +25,23 @@ mod multi;
use std::sync::Weak;
use bytes::Bytes;
use client_traits::EngineClient;
use engine::SystemCall;
use ethereum_types::{H256, Address};
use ethjson::spec::ValidatorSet as ValidatorSpec;
use machine::Machine;
use types::{
use common_types::{
BlockNumber,
header::Header,
ids::BlockId,
errors::EthcoreError,
engines::machine::{Call, AuxiliaryData},
};
use engine::SystemCall;
use ethereum_types::{H256, Address};
use ethjson::spec::ValidatorSet as ValidatorSpec;
use machine::Machine;
// The MallocSizeOf derive looks for this in the root
use parity_util_mem as malloc_size_of;
use parity_bytes::Bytes;
#[cfg(test)]
#[cfg(any(test, feature = "test-helpers"))]
pub use self::test::TestSet;
pub use self::simple_list::SimpleList;

View File

@ -19,19 +19,20 @@
use std::collections::BTreeMap;
use std::sync::Weak;
use bytes::Bytes;
use ethereum_types::{H256, Address};
use parking_lot::RwLock;
use types::{
use common_types::{
BlockNumber,
header::Header,
ids::BlockId,
errors::EthcoreError,
engines::machine::{Call, AuxiliaryData},
};
use client_traits::EngineClient;
use ethereum_types::{H256, Address};
use log::{debug, trace};
use parity_bytes::Bytes;
use parking_lot::RwLock;
use machine::Machine;
use super::{SystemCall, ValidatorSet};
type BlockNumberLookup = Box<dyn Fn(BlockId) -> Result<BlockNumber, String> + Send + Sync + 'static>;
@ -153,22 +154,26 @@ impl ValidatorSet for Multi {
mod tests {
use std::sync::Arc;
use std::collections::BTreeMap;
use hash::keccak;
use accounts::AccountProvider;
use client_traits::{BlockChainClient, BlockInfo, ChainInfo, ImportBlock, EngineClient};
use engine::EpochChange;
use engines::validator_set::ValidatorSet;
use ethkey::Secret;
use types::header::Header;
use miner::{self, MinerService};
use crate::spec;
use test_helpers::{generate_dummy_client_with_spec, generate_dummy_client_with_spec_and_data};
use types::{
use common_types::{
header::Header,
ids::BlockId,
verification::Unverified,
};
use ethereum_types::Address;
use engine::EpochChange;
use ethkey::Secret;
use ethcore::{
miner::{self, MinerService},
test_helpers::{generate_dummy_client_with_spec, generate_dummy_client_with_spec_and_data},
spec,
};
use ethereum_types::Address;
use keccak_hash::keccak;
use crate::ValidatorSet;
use super::Multi;
#[test]

View File

@ -18,15 +18,9 @@
use std::sync::{Weak, Arc};
use bytes::Bytes;
use ethabi::FunctionOutputDecoder;
use ethereum_types::{H256, U256, Address, Bloom};
use hash::keccak;
use kvdb::DBValue;
use memory_cache::MemoryLruCache;
use parking_lot::RwLock;
use rlp::{Rlp, RlpStream};
use types::{
use client_traits::EngineClient;
use common_types::{
BlockNumber,
header::Header,
errors::{EngineError, EthcoreError, BlockError},
ids::BlockId,
@ -34,14 +28,24 @@ use types::{
engines::machine::{Call, AuxiliaryData, AuxiliaryRequest},
receipt::Receipt,
};
use ethabi::FunctionOutputDecoder;
use ethabi_contract::use_contract;
use ethereum_types::{H256, U256, Address, Bloom};
use keccak_hash::keccak;
use kvdb::DBValue;
use lazy_static::lazy_static;
use log::{debug, info, trace};
use machine::Machine;
use memory_cache::MemoryLruCache;
use parity_bytes::Bytes;
use parking_lot::RwLock;
use rlp::{Rlp, RlpStream};
use unexpected::Mismatch;
use client_traits::EngineClient;
use machine::Machine;
use super::{SystemCall, ValidatorSet};
use super::simple_list::SimpleList;
use_contract!(validator_set, "res/contracts/validator_set.json");
use_contract!(validator_set, "res/validator_set.json");
const MEMOIZE_CAPACITY: usize = 500;
@ -99,12 +103,12 @@ fn encode_first_proof(header: &Header, state_items: &[Vec<u8>]) -> Bytes {
fn check_first_proof(machine: &Machine, contract_address: Address, old_header: Header, state_items: &[DBValue])
-> Result<Vec<Address>, String>
{
use types::transaction::{Action, Transaction};
use common_types::transaction::{Action, Transaction};
// TODO: match client contract_call_tx more cleanly without duplication.
const PROVIDED_GAS: u64 = 50_000_000;
let env_info = ::vm::EnvInfo {
let env_info = vm::EnvInfo {
number: old_header.number(),
author: *old_header.author(),
difficulty: *old_header.difficulty(),
@ -133,7 +137,7 @@ fn check_first_proof(machine: &Machine, contract_address: Address, old_header: H
data,
}.fake_sign(from);
let res = ::executive_state::check_proof(
let res = executive_state::check_proof(
state_items,
*old_header.state_root(),
&tx,
@ -142,9 +146,9 @@ fn check_first_proof(machine: &Machine, contract_address: Address, old_header: H
);
match res {
::executive_state::ProvedExecution::BadProof => Err("Bad proof".into()),
::executive_state::ProvedExecution::Failed(e) => Err(format!("Failed call: {}", e)),
::executive_state::ProvedExecution::Complete(e) => decoder.decode(&e.output).map_err(|e| e.to_string()),
executive_state::ProvedExecution::BadProof => Err("Bad proof".into()),
executive_state::ProvedExecution::Failed(e) => Err(format!("Failed call: {}", e)),
executive_state::ProvedExecution::Complete(e) => decoder.decode(&e.output).map_err(|e| e.to_string()),
}
}
@ -351,7 +355,7 @@ impl ValidatorSet for ValidatorSafeContract {
}
}
fn epoch_set(&self, first: bool, machine: &Machine, _number: ::types::BlockNumber, proof: &[u8])
fn epoch_set(&self, first: bool, machine: &Machine, _number: BlockNumber, proof: &[u8])
-> Result<(SimpleList, Option<H256>), EthcoreError>
{
let rlp = Rlp::new(proof);
@ -374,7 +378,7 @@ impl ValidatorSet for ValidatorSafeContract {
// ensure receipts match header.
// TODO: optimize? these were just decoded.
let found_root = ::triehash::ordered_trie_root(
let found_root = triehash::ordered_trie_root(
receipts.iter().map(::rlp::encode)
);
if found_root != *old_header.receipts_root() {
@ -450,13 +454,9 @@ impl ValidatorSet for ValidatorSafeContract {
#[cfg(test)]
mod tests {
use std::sync::Arc;
use rustc_hex::FromHex;
use hash::keccak;
use engine::{EpochChange, Proof};
use ethereum_types::Address;
use crate::spec;
use accounts::AccountProvider;
use types::{
use common_types::{
ids::BlockId,
engines::machine::AuxiliaryRequest,
header::Header,
@ -465,9 +465,17 @@ mod tests {
verification::Unverified,
};
use client_traits::{BlockInfo, ChainInfo, ImportBlock, EngineClient};
use engine::{EpochChange, Proof};
use ethcore::{
spec,
miner::{self, MinerService},
test_helpers::{generate_dummy_client_with_spec, generate_dummy_client_with_spec_and_data}
};
use ethkey::Secret;
use miner::{self, MinerService};
use test_helpers::{generate_dummy_client_with_spec, generate_dummy_client_with_spec_and_data};
use ethereum_types::Address;
use keccak_hash::keccak;
use rustc_hex::FromHex;
use super::super::ValidatorSet;
use super::{ValidatorSafeContract, EVENT_NAME_HASH};

View File

@ -16,16 +16,18 @@
/// Preconfigured validator list.
use parity_util_mem::MallocSizeOf;
use ethereum_types::{H256, Address};
use machine::Machine;
use types::{
use common_types::{
BlockNumber,
ids::BlockId,
header::Header,
errors::EthcoreError,
engines::machine::{Call, AuxiliaryData},
};
use ethereum_types::{H256, Address};
use log::warn;
use machine::Machine;
use parity_util_mem::MallocSizeOf;
use super::ValidatorSet;
/// Validator set containing a known set of addresses.
@ -65,7 +67,7 @@ impl From<Vec<Address>> for SimpleList {
}
impl ValidatorSet for SimpleList {
fn default_caller(&self, _block_id: ::types::ids::BlockId) -> Box<Call> {
fn default_caller(&self, _block_id: BlockId) -> Box<Call> {
Box::new(|_, _| Err("Simple list doesn't require calls.".into()))
}

View File

@ -19,18 +19,20 @@
use std::str::FromStr;
use std::sync::Arc;
use std::sync::atomic::{AtomicUsize, Ordering as AtomicOrdering};
use parity_util_mem::MallocSizeOf;
use bytes::Bytes;
use ethereum_types::{H256, Address};
use types::{
use log::trace;
use parity_util_mem::MallocSizeOf;
use common_types::{
BlockNumber,
ids::BlockId,
header::Header,
errors::EthcoreError,
engines::machine::{Call, AuxiliaryData},
};
use ethereum_types::{H256, Address};
use machine::Machine;
use parity_bytes::Bytes;
use super::{ValidatorSet, SimpleList};
/// Set used for testing with a single validator.
@ -64,7 +66,7 @@ impl TestSet {
}
impl ValidatorSet for TestSet {
fn default_caller(&self, _block_id: ::types::ids::BlockId) -> Box<Call> {
fn default_caller(&self, _block_id: BlockId) -> Box<Call> {
Box::new(|_, _| Err("Test set doesn't require calls.".into()))
}

View File

@ -0,0 +1,33 @@
[package]
description = "Execute transactions producing a receipt and an optional trace."
name = "executive-state"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
license = "GPL-3.0"
[dependencies]
account-db = { path = "../account-db" }
account-state = { path = "../account-state" }
bytes = { package = "parity-bytes", version = "0.1.0" }
common-types = { path = "../types" }
ethereum-types = "0.6.0"
hash-db = "0.15.0"
keccak-hasher = { path = "../../util/keccak-hasher" }
kvdb = "0.1.0"
log = "0.4.8"
machine = { path = "../machine" }
trace = { path = "../trace" }
trie-vm-factories = { path = "../trie-vm-factories" }
vm = { path = "../vm" }
[dev-dependencies]
env_logger = "0.5"
ethcore = { path = "..", features = ["test-helpers"] }
ethkey = { path = "../../accounts/ethkey" }
evm = { path = "../evm" }
keccak-hash = "0.2.0"
pod = { path = "../pod" }
rustc-hex = "1.0"
trie-db = "0.15.0"
ethtrie = { package = "patricia-trie-ethereum", path = "../../util/patricia-trie-ethereum" }

View File

@ -18,29 +18,30 @@
//! `account-state` crates and contains everything that requires `Machine` or `Executive` (or types
//! thereof).
use machine::{
machine::Machine,
executive::{Executive, TransactOptions},
executed::Executed,
use account_state::{
backend::{self, Backend},
state::State,
};
use vm::EnvInfo;
use types::{
use bytes::Bytes;
use common_types::{
engines::machine::Executed as RawExecuted,
errors::{ExecutionError, EthcoreError as Error},
transaction::SignedTransaction,
receipt::{TransactionOutcome, Receipt},
};
use trace::{FlatTrace, VMTrace};
use account_state::{
backend::{self, Backend},
state::State,
};
use ethereum_types::H256;
use trie_vm_factories::Factories;
use bytes::Bytes;
use hash_db::AsHashDB;
use keccak_hasher::KeccakHasher;
use kvdb::DBValue;
use hash_db::AsHashDB;
use log::trace;
use machine::{
machine::Machine,
executive::{Executive, TransactOptions},
executed::Executed,
};
use trace::{FlatTrace, VMTrace};
use trie_vm_factories::Factories;
use vm::EnvInfo;
/// Return type of proof validity check.
#[derive(Debug, Clone)]
@ -80,7 +81,7 @@ pub fn check_proof(
) -> ProvedExecution {
let backend = self::backend::ProofCheck::new(proof);
let mut factories = Factories::default();
factories.accountdb = ::account_db::Factory::Plain;
factories.accountdb = account_db::Factory::Plain;
let res = State::from_existing(
backend,
@ -263,22 +264,26 @@ mod tests {
use std::sync::Arc;
use std::str::FromStr;
use std::collections::HashSet;
use rustc_hex::FromHex;
use hash::{keccak, KECCAK_NULL_RLP};
use super::*;
use account_state::{Account, CleanupMode};
use common_types::transaction::*;
use keccak_hash::{keccak, KECCAK_NULL_RLP};
use ethkey::Secret;
use ethereum_types::{H256, U256, Address, BigEndianHash};
use test_helpers::{get_temp_state, get_temp_state_db};
use machine::Machine;
use vm::EnvInfo;
use types::transaction::*;
use trace::{FlatTrace, TraceError, trace};
use ethcore::{
spec,
test_helpers::{get_temp_state, get_temp_state_db}
};
use ethtrie;
use evm::CallType;
use pod::{self, PodAccount};
use pod::PodState;
use executive_state::ExecutiveState;
use account_state::{Account, CleanupMode};
use crate::spec;
use machine::Machine;
use pod::{self, PodAccount, PodState};
use rustc_hex::FromHex;
use ::trace::{FlatTrace, TraceError, trace};
use trie_db::{TrieFactory, TrieSpec};
use vm::EnvInfo;
fn secret() -> Secret {
keccak("").into()
@ -1537,7 +1542,7 @@ mod tests {
fn should_not_panic_on_state_diff_with_storage() {
let mut state = get_temp_state();
let a = Address::from_low_u64_be(0xa);
state.init_code(&a, b"abcdefg".to_vec()).unwrap();;
state.init_code(&a, b"abcdefg".to_vec()).unwrap();
state.add_balance(&a, &256.into(), CleanupMode::NoEmpty).unwrap();
state.set_storage(&a, H256::from_low_u64_be(0xb), H256::from_low_u64_be(0xc).into()).unwrap();
@ -1658,9 +1663,6 @@ mod tests {
#[test]
fn should_get_full_pod_storage_values() {
use trie::{TrieFactory, TrieSpec};
use ethtrie;
let a = Address::from_low_u64_be(10);
let db = get_temp_state_db();

View File

@ -17,6 +17,7 @@ ethcore = { path = ".."}
ethcore-db = { path = "../db" }
ethcore-blockchain = { path = "../blockchain" }
ethereum-types = "0.6.0"
executive-state = { path = "../executive-state" }
machine = { path = "../machine" }
memory-db = "0.15.0"
trie-db = "0.15.0"

View File

@ -19,7 +19,7 @@
use std::sync::{Weak, Arc};
use engine::{Engine, EpochChange, Proof};
use ethcore::client::{ClientReport, EnvInfo, ClientIoMessage};
use ethcore::client::{ClientReport, ClientIoMessage};
use ethcore::verification::queue::{self, HeaderQueue};
use ethcore::spec::{Spec, SpecHardcodedSync};
use io::IoChannel;
@ -39,6 +39,7 @@ use common_types::{
verification::VerificationQueueInfo as BlockQueueInfo,
};
use kvdb::KeyValueDB;
use vm::EnvInfo;
use self::fetch::ChainDataFetcher;
use self::header_chain::{AncestryIter, HeaderChain, HardcodedSync};

View File

@ -61,6 +61,7 @@ extern crate ethcore_blockchain;
extern crate ethcore_db;
extern crate ethcore_io as io;
extern crate ethcore_network as network;
extern crate executive_state;
extern crate parity_bytes as bytes;
extern crate ethereum_types;
extern crate ethcore_miner as miner;

View File

@ -25,7 +25,7 @@ use common_types::encoded;
use common_types::receipt::Receipt;
use common_types::transaction::SignedTransaction;
use engine::{Engine, StateDependentProof};
use ethcore::executive_state::{ProvedExecution, self};
use executive_state::{ProvedExecution, self};
use ethereum_types::{H256, U256, Address};
use ethtrie::{TrieError, TrieDB};
use hash::{KECCAK_NULL_RLP, KECCAK_EMPTY, KECCAK_EMPTY_LIST_RLP, keccak};

View File

@ -29,9 +29,12 @@ use blockchain::{BlockChainDB, BlockChainDBHandler};
use ethcore::client::{Client, ClientConfig, ChainNotify, ClientIoMessage};
use ethcore::miner::Miner;
use ethcore::snapshot::service::{Service as SnapshotService, ServiceParams as SnapServiceParams};
use ethcore::snapshot::{SnapshotService as _SnapshotService, RestorationStatus};
use ethcore::snapshot::{SnapshotService as _SnapshotService};
use ethcore::spec::Spec;
use common_types::errors::{EthcoreError, SnapshotError};
use common_types::{
errors::{EthcoreError, SnapshotError},
snapshot::RestorationStatus,
};
use ethcore_private_tx::{self, Importer, Signer};
@ -112,7 +115,7 @@ impl ClientService {
{
let io_service = IoService::<ClientIoMessage>::start()?;
info!("Configured for {} using {} engine", Colour::White.bold().paint(spec.name.clone()), Colour::Yellow.bold().paint(spec.engine.name()));
info!("Configured for {} using {} engine", Colour::White.bold().paint(spec.name.clone()), Colour::Yellow.bold().paint(spec.engine.name().to_string()));
let pruning = config.pruning;
let client = Client::new(

View File

@ -265,7 +265,7 @@ impl<'x> OpenBlock<'x> {
})
}
#[cfg(test)]
#[cfg(any(test, feature = "test-helpers"))]
/// Return mutable block reference. To be used in tests only.
pub fn block_mut(&mut self) -> &mut ExecutedBlock { &mut self.block }
}

View File

@ -20,6 +20,7 @@ use std::sync::atomic::{AtomicUsize, AtomicBool, Ordering as AtomicOrdering};
use std::sync::{Arc, Weak};
use std::time::{Instant, Duration};
use account_state::state::StateInfo;
use blockchain::{BlockReceipts, BlockChain, BlockChainDB, BlockProvider, TreeRoute, ImportRoute, TransactionAddress, ExtrasInsert, BlockNumberKey};
use bytes::Bytes;
use call_contract::{CallContract, RegistryInfo};
@ -39,7 +40,7 @@ use hash_db::EMPTY_PREFIX;
use block::{LockedBlock, Drain, ClosedBlock, OpenBlock, enact_verified, SealedBlock};
use client::ancient_import::AncientVerifier;
use client::{
ReopenBlock, PrepareOpenBlock, ImportSealedBlock, BroadcastProposalBlock, StateInfo,
ReopenBlock, PrepareOpenBlock, ImportSealedBlock, BroadcastProposalBlock,
Call, BlockProducer, SealedBlockImporter, ChainNotify, EngineInfo,
ClientConfig, NewBlocks, ChainRoute, ChainMessageType, bad_blocks, ClientIoMessage,
};
@ -85,7 +86,7 @@ use types::{
log_entry::LocalizedLogEntry,
receipt::{Receipt, LocalizedReceipt},
header::Header,
snapshot::Progress,
snapshot::{Progress, Snapshotting},
trace_filter::Filter as TraceFilter,
pruning_info::PruningInfo,
call_analytics::CallAnalytics,
@ -1020,7 +1021,7 @@ impl Client {
}
/// Get shared miner reference.
#[cfg(test)]
#[cfg(any(test, feature = "test-helpers"))]
pub fn miner(&self) -> Arc<Miner> {
self.importer.miner.clone()
}
@ -1168,6 +1169,9 @@ impl Client {
at: BlockId,
p: &Progress,
) -> Result<(), EthcoreError> {
if let Snapshotting::Unsupported = self.engine.snapshot_mode() {
return Err(EthcoreError::Snapshot(SnapshotError::SnapshotsUnsupported));
}
let db = self.state_db.read().journal_db().boxed_clone();
let best_block_number = self.chain_info().best_block_number;
let block_number = self.block_number(at).ok_or_else(|| SnapshotError::InvalidStartingBlock(at))?;
@ -1197,7 +1201,7 @@ impl Client {
};
let processing_threads = self.config.snapshot.processing_threads;
let chunker = self.engine.snapshot_components().ok_or_else(|| SnapshotError::SnapshotsUnsupported)?;
let chunker = snapshot::chunker(self.engine.snapshot_mode()).ok_or_else(|| SnapshotError::SnapshotsUnsupported)?;
snapshot::take_snapshot(
chunker,
&self.chain.read(),
@ -1227,10 +1231,8 @@ impl Client {
fn transaction_address(&self, id: TransactionId) -> Option<TransactionAddress> {
match id {
TransactionId::Hash(ref hash) => self.chain.read().transaction_address(hash),
TransactionId::Location(id, index) => Self::block_hash(&self.chain.read(), id).map(|hash| TransactionAddress {
block_hash: hash,
index: index,
})
TransactionId::Location(id, index) => Self::block_hash(&self.chain.read(), id).map(|block_hash|
TransactionAddress { block_hash, index })
}
}

View File

@ -21,7 +21,7 @@ use std::sync::Arc;
use ethereum_types::{H256, U256, H160};
use {trie_vm_factories, journaldb, trie, kvdb_memorydb};
use kvdb::{self, KeyValueDB};
use {state_db, client, trace, db, spec};
use {state_db, trace, db, spec};
use pod::PodState;
use types::{
errors::EthcoreError,
@ -214,7 +214,7 @@ impl<'a> EvmTestClient<'a> {
) -> Result<FinalizationResult, EvmTestError>
{
let genesis = self.spec.genesis_header();
let info = client::EnvInfo {
let info = vm::EnvInfo {
number: genesis.number(),
author: *genesis.author(),
timestamp: genesis.timestamp(),
@ -233,7 +233,7 @@ impl<'a> EvmTestClient<'a> {
params: ActionParams,
tracer: &mut T,
vm_tracer: &mut V,
info: client::EnvInfo,
info: vm::EnvInfo,
) -> Result<FinalizationResult, EvmTestError>
{
let mut substate = Substate::new();
@ -252,7 +252,7 @@ impl<'a> EvmTestClient<'a> {
/// Returns the state root, gas left and the output.
pub fn transact<T: trace::Tracer, V: trace::VMTracer>(
&mut self,
env_info: &client::EnvInfo,
env_info: &vm::EnvInfo,
transaction: transaction::SignedTransaction,
tracer: T,
vm_tracer: V,

View File

@ -18,7 +18,7 @@ use std::fmt;
use bytes::Bytes;
use client::Client;
use ethereum_types::H256;
use snapshot::ManifestData;
use types::snapshot::ManifestData;
/// Message type for external and internal events
#[derive(Debug)]

View File

@ -38,13 +38,8 @@ pub use self::traits::{
ReopenBlock, PrepareOpenBlock, ImportSealedBlock, BroadcastProposalBlock,
Call, EngineInfo, BlockProducer, SealedBlockImporter,
};
pub use account_state::state::StateInfo;
pub use vm::{LastHashes, EnvInfo};
pub use verification::VerifierType;
mod traits;
mod chain_notify;

View File

@ -59,14 +59,13 @@ use types::{
blockchain_info::BlockChainInfo,
block_status::BlockStatus,
};
use vm::Schedule;
use vm::{Schedule, LastHashes};
use block::{OpenBlock, SealedBlock, ClosedBlock};
use call_contract::{CallContract, RegistryInfo};
use client::{
ReopenBlock, PrepareOpenBlock, ImportSealedBlock, BroadcastProposalBlock, Call,
EngineInfo, BlockProducer, SealedBlockImporter,
LastHashes,
};
use client_traits::{
BlockInfo, Nonce, Balance, ChainInfo, TransactionInfo, BlockChainClient, ImportBlock,

View File

@ -1,34 +0,0 @@
// Copyright 2015-2019 Parity Technologies (UK) Ltd.
// This file is part of Parity Ethereum.
// Parity Ethereum is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Parity Ethereum is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
//! Consensus engine specification and basic implementations.
mod authority_round;
mod basic_authority;
mod clique;
mod ethash;
mod instant_seal;
mod null_engine;
mod validator_set;
pub mod block_reward;
pub use self::authority_round::AuthorityRound;
pub use self::basic_authority::BasicAuthority;
pub use self::instant_seal::{InstantSeal, InstantSealParams};
pub use self::null_engine::NullEngine;
pub use self::clique::Clique;
pub use self::ethash::{Ethash, Seal as EthashSeal};

View File

@ -55,13 +55,17 @@
extern crate account_db;
extern crate account_state;
extern crate authority_round;
extern crate ansi_term;
extern crate basic_authority;
extern crate client_traits;
extern crate common_types as types;
extern crate clique;
extern crate crossbeam_utils;
extern crate engine;
extern crate ethabi;
extern crate ethash;
extern crate ethash_engine;
extern crate ethcore_blockchain as blockchain;
extern crate ethcore_bloom_journal as bloom_journal;
extern crate ethcore_builtin as builtin;
@ -72,9 +76,11 @@ extern crate ethcore_miner;
extern crate ethereum_types;
extern crate ethjson;
extern crate ethkey;
extern crate executive_state;
extern crate trie_vm_factories;
extern crate futures;
extern crate hash_db;
extern crate instant_seal;
extern crate itertools;
extern crate journaldb;
extern crate keccak_hash as hash;
@ -84,9 +90,9 @@ extern crate kvdb;
extern crate kvdb_memorydb;
extern crate len_caching_lock;
extern crate lru_cache;
extern crate machine;
extern crate memory_cache;
extern crate null_engine;
extern crate num_cpus;
extern crate parity_bytes as bytes;
extern crate parity_snappy as snappy;
@ -120,6 +126,12 @@ extern crate ethcore_stratum;
extern crate tempdir;
#[cfg(any(test, feature = "kvdb-rocksdb"))]
extern crate kvdb_rocksdb;
#[cfg(any(test, feature = "json-tests"))]
#[macro_use]
extern crate lazy_static;
#[cfg(any(test, feature = "json-tests", feature = "test-helpers", feature = "parity"))]
#[macro_use]
extern crate macros;
#[cfg(any(test, feature = "blooms-db"))]
extern crate blooms_db;
#[cfg(any(test, feature = "env_logger"))]
@ -132,10 +144,6 @@ extern crate ethabi_contract;
#[macro_use]
extern crate log;
#[macro_use]
extern crate lazy_static;
#[macro_use]
extern crate macros;
#[macro_use]
extern crate rlp_derive;
#[macro_use]
extern crate trace_time;
@ -151,8 +159,6 @@ extern crate parity_runtime;
pub mod block;
pub mod client;
pub mod engines;
pub mod executive_state;
pub mod miner;
pub mod snapshot;
pub mod spec;

View File

@ -22,11 +22,7 @@
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
use engine::{
Engine,
EpochVerifier,
snapshot::{SnapshotComponents, Rebuilder}
};
use engine::{Engine, EpochVerifier};
use blockchain::{BlockChain, BlockChainDB, BlockProvider};
use bytes::Bytes;
use ethereum_types::{H256, U256};
@ -43,6 +39,8 @@ use types::{
snapshot::{ChunkSink, Progress, ManifestData}
};
use snapshot::{SnapshotComponents, Rebuilder};
/// Snapshot creation and restoration for PoA chains.
/// Chunk format:
///

View File

@ -22,3 +22,16 @@ mod work;
pub use self::authority::*;
pub use self::work::*;
use snapshot::SnapshotComponents;
use types::snapshot::Snapshotting::{self, *};
/// Create a factory for building snapshot chunks and restoring from them.
/// `None` indicates that the engine doesn't support snapshot creation.
pub fn chunker(snapshot_type: Snapshotting) -> Option<Box<dyn SnapshotComponents>> {
match snapshot_type {
PoA => Some(Box::new(PoaSnapshot)),
PoW { blocks, max_restore_blocks } => Some(Box::new(PowSnapshot::new(blocks, max_restore_blocks))),
Unsupported => None,
}
}

View File

@ -26,7 +26,6 @@ use std::sync::Arc;
use blockchain::{BlockChain, BlockChainDB, BlockProvider};
use engine::Engine;
use engine::snapshot::{SnapshotComponents, Rebuilder};
use snapshot::block::AbridgedBlock;
use ethereum_types::H256;
use kvdb::KeyValueDB;
@ -40,6 +39,8 @@ use types::{
snapshot::{ChunkSink, ManifestData, Progress},
};
use snapshot::{SnapshotComponents, Rebuilder};
/// 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.
@ -48,7 +49,7 @@ 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.
/// Number of blocks to allow in the snapshot when restoring.
pub max_restore_blocks: u64,
}

View File

@ -28,9 +28,10 @@ use std::path::{Path, PathBuf};
use bytes::Bytes;
use ethereum_types::H256;
use rlp::{RlpStream, Rlp};
use types::errors::{SnapshotError, EthcoreError};
use super::ManifestData;
use types::{
errors::{SnapshotError, EthcoreError},
snapshot::ManifestData,
};
const SNAPSHOT_VERSION: u64 = 2;

View File

@ -46,25 +46,21 @@ use ethtrie::{TrieDB, TrieDBMut};
use rlp::{RlpStream, Rlp};
use bloom_journal::Bloom;
use num_cpus;
use types::snapshot::ManifestData;
use self::io::SnapshotWriter;
use super::state_db::StateDB;
use account_state::Account as StateAccount;
use engine::{
Engine,
snapshot::SnapshotComponents
};
use engine::Engine;
use crossbeam_utils::thread;
use rand::{Rng, rngs::OsRng};
pub use self::consensus::*;
pub use self::service::{SnapshotClient, Service, DatabaseRestore};
pub use self::traits::SnapshotService;
pub use self::traits::{SnapshotService, SnapshotComponents, Rebuilder};
pub use self::watcher::Watcher;
pub use types::snapshot::ManifestData;
pub use types::restoration_status::RestorationStatus;
pub use types::basic_account::BasicAccount;
pub mod io;

View File

@ -24,21 +24,24 @@ use std::sync::Arc;
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
use std::cmp;
use super::{StateRebuilder, RestorationStatus, SnapshotService, MAX_CHUNK_SIZE};
use super::io::{SnapshotReader, LooseReader, SnapshotWriter, LooseWriter};
use super::{
StateRebuilder,
SnapshotService,
Rebuilder,
MAX_CHUNK_SIZE,
io::{SnapshotReader, LooseReader, SnapshotWriter, LooseWriter},
chunker,
};
use blockchain::{BlockChain, BlockChainDB, BlockChainDBHandler};
use client::{Client, ClientIoMessage};
use client_traits::{
BlockInfo, BlockChainClient, ChainInfo
};
use client_traits::{BlockInfo, BlockChainClient, ChainInfo};
use engine::Engine;
use engine::snapshot::Rebuilder;
use hash::keccak;
use types::{
errors::{EthcoreError as Error, SnapshotError, SnapshotError::UnlinkedAncientBlockChain},
ids::BlockId,
snapshot::{ManifestData, Progress},
snapshot::{ManifestData, Progress, RestorationStatus},
};
use io::IoChannel;
@ -111,10 +114,10 @@ impl Restoration {
let raw_db = params.db;
let chain = BlockChain::new(Default::default(), params.genesis, raw_db.clone());
let components = params.engine.snapshot_components()
.ok_or_else(|| ::snapshot::Error::SnapshotsUnsupported)?;
let chunker = chunker(params.engine.snapshot_mode())
.ok_or_else(|| Error::Snapshot(SnapshotError::SnapshotsUnsupported))?;
let secondary = components.rebuilder(chain, raw_db.clone(), &manifest)?;
let secondary = chunker.rebuilder(chain, raw_db.clone(), &manifest)?;
let final_state_root = manifest.state_root.clone();
@ -801,7 +804,7 @@ impl SnapshotService for Service {
}
fn supported_versions(&self) -> Option<(u64, u64)> {
self.engine.snapshot_components()
chunker(self.engine.snapshot_mode())
.map(|c| (c.min_supported_version(), c.current_version()))
}
@ -906,8 +909,9 @@ mod tests {
use io::{IoService};
use crate::spec;
use journaldb::Algorithm;
use snapshot::{ManifestData, RestorationStatus, SnapshotService};
use snapshot::SnapshotService;
use super::*;
use types::snapshot::{ManifestData, RestorationStatus};
use tempdir::TempDir;
use test_helpers::{generate_dummy_client_with_spec_and_data, restoration_db_handler};

View File

@ -161,13 +161,13 @@ pub fn restore(
use std::sync::atomic::AtomicBool;
let flag = AtomicBool::new(true);
let components = engine.snapshot_components().unwrap();
let chunker = crate::snapshot::chunker(engine.snapshot_mode()).expect("the engine used here supports snapshots");
let manifest = reader.manifest();
let mut state = StateRebuilder::new(db.key_value().clone(), journaldb::Algorithm::Archive);
let mut secondary = {
let chain = BlockChain::new(Default::default(), genesis, db.clone());
components.rebuilder(chain, db, manifest).unwrap()
chunker.rebuilder(chain, db, manifest).unwrap()
};
let mut snappy_buffer = Vec::new();

View File

@ -21,11 +21,12 @@ use tempdir::TempDir;
use types::{
errors::EthcoreError as Error,
engines::ForkChoice,
snapshot::Progress,
};
use blockchain::generator::{BlockGenerator, BlockBuilder};
use blockchain::{BlockChain, ExtrasInsert};
use snapshot::{chunk_secondary, Error as SnapshotError, Progress, SnapshotComponents};
use snapshot::{chunk_secondary, Error as SnapshotError, SnapshotComponents};
use snapshot::io::{PackedReader, PackedWriter, SnapshotReader, SnapshotWriter};
use parking_lot::Mutex;

View File

@ -27,10 +27,11 @@ use types::{
ids::BlockId,
snapshot::Progress,
verification::Unverified,
snapshot::{ManifestData, RestorationStatus},
};
use snapshot::io::{PackedReader, PackedWriter, SnapshotReader, SnapshotWriter};
use snapshot::service::{Service, ServiceParams};
use snapshot::{chunk_state, chunk_secondary, ManifestData, SnapshotService, RestorationStatus};
use snapshot::{chunk_state, chunk_secondary, SnapshotService};
use crate::spec;
use test_helpers::{new_db, new_temp_db, generate_dummy_client_with_spec_and_data, restoration_db_handler};

View File

@ -14,9 +14,16 @@
// You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
use super::{ManifestData, RestorationStatus};
use ethereum_types::H256;
use std::sync::{Arc, atomic::AtomicBool};
use blockchain::{BlockChain, BlockChainDB};
use bytes::Bytes;
use ethereum_types::H256;
use types::{
errors::{EthcoreError as Error, SnapshotError},
snapshot::{ManifestData, ChunkSink, Progress, RestorationStatus},
};
/// The interface for a snapshot network service.
/// This handles:
@ -61,3 +68,65 @@ pub trait SnapshotService : Sync + Send {
/// Shutdown the Snapshot Service by aborting any ongoing restore
fn shutdown(&self);
}
use crate::engine::Engine;
/// Restore from secondary snapshot chunks.
pub trait Rebuilder: Send {
/// Feed a chunk, potentially out of order.
///
/// Check `abort_flag` periodically while doing heavy work. If set to `false`, should bail with
/// `Error::RestorationAborted`.
fn feed(
&mut self,
chunk: &[u8],
engine: &dyn Engine,
abort_flag: &AtomicBool,
) -> Result<(), Error>;
/// Finalize the restoration. Will be done after all chunks have been
/// fed successfully.
///
/// This should apply the necessary "glue" between chunks,
/// and verify against the restored state.
fn finalize(&mut self) -> Result<(), Error>;
}
/// Components necessary for snapshot creation and restoration.
pub trait SnapshotComponents: Send {
/// Create secondary snapshot chunks; these corroborate the state data
/// in the state chunks.
///
/// Chunks shouldn't exceed the given preferred size, and should be fed
/// uncompressed into the sink.
///
/// This will vary by consensus engine, so it's exposed as a trait.
fn chunk_all(
&mut self,
chain: &BlockChain,
block_at: H256,
chunk_sink: &mut ChunkSink,
progress: &Progress,
preferred_size: usize,
) -> Result<(), SnapshotError>;
/// Create a rebuilder, which will have chunks fed into it in arbitrary
/// order and then be finalized.
///
/// The manifest, a database, and fresh `BlockChain` are supplied.
///
/// The engine passed to the `Rebuilder` methods will be the same instance
/// that created the `SnapshotComponents`.
fn rebuilder(
&self,
chain: BlockChain,
db: Arc<dyn BlockChainDB>,
manifest: &ManifestData,
) -> Result<Box<dyn Rebuilder>, Error>;
/// Minimum supported snapshot version number.
fn min_supported_version(&self) -> u64;
/// Current version number
fn current_version(&self) -> u64;
}

View File

@ -40,10 +40,12 @@ use vm::{EnvInfo, CallType, ActionValue, ActionParams, ParamsType};
use builtin::Builtin;
use engine::Engine;
use engines::{
NullEngine, InstantSeal, InstantSealParams, BasicAuthority, Clique,
AuthorityRound, Ethash,
};
use clique::Clique;
use null_engine::NullEngine;
use instant_seal::{InstantSeal, InstantSealParams};
use authority_round::AuthorityRound;
use basic_authority::BasicAuthority;
use ethash_engine::Ethash;
use machine::{
executive::Executive,
machine::Machine,

View File

@ -782,7 +782,7 @@ mod tests {
use ethkey::{Generator, Random};
use types::transaction::{Transaction, Action};
use machine::Machine;
use engines::NullEngine;
use null_engine::NullEngine;
let mut params = CommonParams::default();
params.dust_protection_transition = 0;

View File

@ -18,7 +18,6 @@ use api::WARP_SYNC_PROTOCOL_ID;
use block_sync::{BlockDownloaderImportError as DownloaderImportError, DownloadAction};
use bytes::Bytes;
use enum_primitive::FromPrimitive;
use ethcore::snapshot::{ManifestData, RestorationStatus};
use ethereum_types::{H256, U256};
use hash::keccak;
use network::PeerId;
@ -34,6 +33,7 @@ use types::{
ids::BlockId,
errors::{EthcoreError, ImportError, BlockError},
verification::Unverified,
snapshot::{ManifestData, RestorationStatus},
};
use super::sync_packet::{PacketInfo, SyncPacket};

View File

@ -109,7 +109,6 @@ use rlp::{RlpStream, DecoderError};
use network::{self, PeerId, PacketId};
use network::client_version::ClientVersion;
use client_traits::BlockChainClient;
use ethcore::snapshot::RestorationStatus;
use sync_io::SyncIo;
use super::{WarpSync, SyncConfig};
use block_sync::{BlockDownloader, DownloadAction};
@ -125,6 +124,7 @@ use types::{
verification::VerificationQueueInfo as BlockQueueInfo,
blockchain_info::BlockChainInfo,
block_status::BlockStatus,
snapshot::RestorationStatus,
};
use self::handler::SyncHandler;
@ -1616,7 +1616,7 @@ pub mod tests {
// Add some balance to clients and reset nonces
for h in &[good_blocks[0], retracted_blocks[0]] {
let block = client.block(BlockId::Hash(*h)).unwrap();
let sender = sender(&block.transactions()[0]);;
let sender = sender(&block.transactions()[0]);
client.set_balance(sender, U256::from(10_000_000_000_000_000_000u64));
client.set_nonce(sender, U256::from(0));
}

View File

@ -14,9 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
use ethcore::snapshot::{ManifestData, SnapshotService};
use ethcore::snapshot::SnapshotService;
use ethereum_types::H256;
use hash::keccak;
use types::snapshot::ManifestData;
use std::collections::HashSet;
use std::iter::FromIterator;
@ -178,7 +179,7 @@ mod test {
use hash::keccak;
use bytes::Bytes;
use super::*;
use ethcore::snapshot::ManifestData;
use types::snapshot::ManifestData;
fn is_empty(snapshot: &Snapshot) -> bool {
snapshot.pending_block_chunks.is_empty() &&

View File

@ -20,9 +20,12 @@ use hash::keccak;
use ethereum_types::H256;
use parking_lot::Mutex;
use bytes::Bytes;
use ethcore::snapshot::{SnapshotService, ManifestData, RestorationStatus};
use ethcore::snapshot::SnapshotService;
use ethcore::client::EachBlockWith;
use types::BlockNumber;
use types::{
BlockNumber,
snapshot::{ManifestData, RestorationStatus},
};
use super::helpers::*;
use {SyncConfig, WarpSync};

View File

@ -16,16 +16,46 @@
//! Engine-specific types.
use ethereum_types::{Address, H256};
use ethereum_types::{Address, H256, H64};
use bytes::Bytes;
use ethjson;
use rlp::Rlp;
use unexpected::Mismatch;
use crate::BlockNumber;
use crate::{BlockNumber, errors::{BlockError, EthcoreError}};
pub mod epoch;
pub mod params;
pub mod machine;
/// Ethash/Clique specific seal
#[derive(Debug, PartialEq)]
pub struct EthashSeal {
/// Ethash seal mix_hash
pub mix_hash: H256,
/// Ethash seal nonce
pub nonce: H64,
}
impl EthashSeal {
/// Tries to parse rlp encoded bytes as an Ethash/Clique seal.
pub fn parse_seal<T: AsRef<[u8]>>(seal: &[T]) -> Result<Self, EthcoreError> {
if seal.len() != 2 {
return Err(BlockError::InvalidSealArity(
Mismatch {
expected: 2,
found: seal.len()
}
).into());
}
let mix_hash = Rlp::new(seal[0].as_ref()).as_val::<H256>()?;
let nonce = Rlp::new(seal[1].as_ref()).as_val::<H64>()?;
Ok(EthashSeal { mix_hash, nonce })
}
}
/// Seal type.
#[derive(Debug, PartialEq, Eq)]
pub enum Seal {

View File

@ -74,7 +74,6 @@ pub mod ids;
pub mod log_entry;
pub mod pruning_info;
pub mod receipt;
pub mod restoration_status;
pub mod security_level;
pub mod snapshot;
pub mod state_diff;

View File

@ -1,48 +0,0 @@
// Copyright 2015-2019 Parity Technologies (UK) Ltd.
// This file is part of Parity Ethereum.
// Parity Ethereum is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Parity Ethereum is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
//! Restoration status type definition
/// Statuses for restorations.
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
pub enum RestorationStatus {
/// No restoration.
Inactive,
/// Restoration is initializing
Initializing {
/// Total number of state chunks.
state_chunks: u32,
/// Total number of block chunks.
block_chunks: u32,
/// Number of chunks done/imported
chunks_done: u32,
},
/// Ongoing restoration.
Ongoing {
/// Total number of state chunks.
state_chunks: u32,
/// Total number of block chunks.
block_chunks: u32,
/// Number of state chunks completed.
state_chunks_done: u32,
/// Number of block chunks completed.
block_chunks_done: u32,
},
/// Finalizing restoration
Finalizing,
/// Failed restoration.
Failed,
}

View File

@ -22,6 +22,22 @@ use ethereum_types::H256;
use rlp::{Rlp, RlpStream, DecoderError};
use bytes::Bytes;
/// Modes of snapshotting
pub enum Snapshotting {
/// Snapshotting and warp sync is not supported
Unsupported,
/// Snapshots for proof-of-work chains
PoW {
/// Number of blocks from the head of the chain
/// to include in the snapshot.
blocks: u64,
/// Number of blocks to allow in the snapshot when restoring.
max_restore_blocks: u64
},
/// Snapshots for proof-of-authority chains
PoA,
}
/// A progress indicator for snapshots.
#[derive(Debug, Default)]
pub struct Progress {
@ -122,3 +138,34 @@ impl ManifestData {
/// A sink for produced chunks.
pub type ChunkSink<'a> = dyn FnMut(&[u8]) -> std::io::Result<()> + 'a;
/// Statuses for snapshot restoration.
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
pub enum RestorationStatus {
/// No restoration.
Inactive,
/// Restoration is initializing
Initializing {
/// Total number of state chunks.
state_chunks: u32,
/// Total number of block chunks.
block_chunks: u32,
/// Number of chunks done/imported
chunks_done: u32,
},
/// Ongoing restoration.
Ongoing {
/// Total number of state chunks.
state_chunks: u32,
/// Total number of block chunks.
block_chunks: u32,
/// Number of state chunks completed.
state_chunks_done: u32,
/// Number of block chunks completed.
block_chunks_done: u32,
},
/// Finalizing restoration
Finalizing,
/// Failed restoration.
Failed,
}

View File

@ -122,7 +122,7 @@ pub struct TxInput<'a, T> {
/// State root hash associated with the transaction.
pub post_root: H256,
/// Client environment information associated with the transaction's chain specification.
pub env_info: &'a client::EnvInfo,
pub env_info: &'a vm::EnvInfo,
/// Signed transaction accompanied by a signature that may be unverified and a successfully recovered
/// sender address. The unverified transaction contains a recoverable ECDSA signature that has been encoded
/// as RSV components and includes replay protection for the specified chain. Verification of the signed transaction

View File

@ -32,8 +32,9 @@ use types::{
ids::BlockId,
blockchain_info::BlockChainInfo,
verification::VerificationQueueInfo as BlockQueueInfo,
snapshot::RestorationStatus,
};
use ethcore::snapshot::{RestorationStatus, SnapshotService as SS};
use ethcore::snapshot::SnapshotService as SS;
use ethcore::snapshot::service::Service as SnapshotService;
use sync::{LightSyncProvider, LightSync, SyncProvider, ManageNetwork};
use io::{TimerToken, IoContext, IoHandler};

View File

@ -44,6 +44,7 @@ use sync::{self, SyncConfig, PrivateTxHandler};
use types::{
client_types::Mode,
ids::BlockId,
snapshot::Snapshotting,
};
use parity_rpc::{
Origin, Metadata, NetworkSettings, informant, PubSubSession, FutureResult, FutureResponse, FutureOutput
@ -445,7 +446,14 @@ fn execute_impl<Cr, Rr>(cmd: RunCmd, logger: Arc<RotatingLogger>, on_client_rq:
}
sync_config.fork_block = spec.fork_block();
let mut warp_sync = spec.engine.supports_warp() && cmd.warp_sync;
let snapshot_supported =
if let Snapshotting::Unsupported = spec.engine.snapshot_mode() {
false
} else {
true
};
let mut warp_sync = snapshot_supported && cmd.warp_sync;
if warp_sync {
// Logging is not initialized yet, so we print directly to stderr
if fat_db {

View File

@ -21,7 +21,7 @@ use std::path::{Path, PathBuf};
use std::sync::Arc;
use hash::keccak;
use ethcore::snapshot::{RestorationStatus, SnapshotConfiguration, SnapshotService as SS};
use ethcore::snapshot::{SnapshotConfiguration, SnapshotService as SS};
use ethcore::snapshot::io::{SnapshotReader, PackedReader, PackedWriter};
use ethcore::snapshot::service::Service as SnapshotService;
use ethcore::client::{DatabaseCompactionProfile, VMType};
@ -31,6 +31,7 @@ use types::{
ids::BlockId,
snapshot::Progress,
client_types::Mode,
snapshot::RestorationStatus,
};
use cache::CacheConfig;

View File

@ -63,7 +63,6 @@ extern crate jsonrpc_pubsub;
extern crate client_traits;
extern crate common_types as types;
extern crate engine;
extern crate ethash;
extern crate ethcore;
extern crate fastmap;
@ -105,6 +104,9 @@ extern crate serde_derive;
#[cfg(test)]
extern crate rand_xorshift;
#[cfg(test)]
extern crate engine;
#[cfg(test)]
extern crate ethjson;
#[cfg(test)]

View File

@ -24,9 +24,10 @@ use rlp::Rlp;
use ethereum_types::{Address, H64, H160, H256, U64, U256, BigEndianHash};
use parking_lot::Mutex;
use account_state::state::StateInfo;
use client_traits::{BlockChainClient, StateClient, ProvingBlockChainClient, StateOrBlock};
use ethash::{self, SeedHashCompute};
use ethcore::client::{StateInfo, Call, EngineInfo};
use ethcore::client::{Call, EngineInfo};
use ethcore::miner::{self, MinerService};
use ethcore::snapshot::SnapshotService;
use hash::keccak;
@ -37,7 +38,8 @@ use types::{
encoded,
ids::{BlockId, TransactionId, UncleId},
filter::Filter as EthcoreFilter,
transaction::{SignedTransaction, LocalizedTransaction}
transaction::{SignedTransaction, LocalizedTransaction},
snapshot::RestorationStatus,
};
use jsonrpc_core::{BoxFuture, Result};
@ -518,8 +520,6 @@ impl<C, SN: ?Sized, S: ?Sized, M, EM, T: StateInfo + 'static> Eth for EthClient<
}
fn syncing(&self) -> Result<SyncStatus> {
use ethcore::snapshot::RestorationStatus;
let status = self.sync.status();
let client = &self.client;
let snapshot_status = self.snapshot.status();

View File

@ -23,7 +23,7 @@ use ethereum_types::{H64, H160, H256, H512, U64, U256};
use ethcore::client::Call;
use client_traits::{BlockChainClient, StateClient};
use ethcore::miner::{self, MinerService, FilterOptions};
use ethcore::snapshot::{SnapshotService, RestorationStatus};
use ethcore::snapshot::SnapshotService;
use account_state::state::StateInfo;
use ethcore_logger::RotatingLogger;
use ethkey::{crypto::ecies, Brain, Generator};
@ -34,6 +34,7 @@ use sync::{SyncProvider, ManageNetwork};
use types::{
ids::BlockId,
verification::Unverified,
snapshot::RestorationStatus,
};
use updater::{Service as UpdateService};
use version::version_data;

View File

@ -18,7 +18,8 @@
use std::sync::Arc;
use ethcore::client::{StateInfo, Call};
use account_state::state::StateInfo;
use ethcore::client::Call;
use client_traits::{BlockChainClient, StateClient};
use ethereum_types::H256;
use rlp::Rlp;

View File

@ -14,11 +14,12 @@
// You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
use ethcore::snapshot::{ManifestData, RestorationStatus, SnapshotService};
use ethcore::snapshot::SnapshotService;
use bytes::Bytes;
use ethereum_types::H256;
use parking_lot::Mutex;
use types::snapshot::{ManifestData, RestorationStatus};
/// Mocked snapshot service (used for sync info extensions).
pub struct TestSnapshotService {
@ -48,8 +49,8 @@ impl SnapshotService for TestSnapshotService {
fn status(&self) -> RestorationStatus { self.status.lock().clone() }
fn begin_restore(&self, _manifest: ManifestData) { }
fn abort_restore(&self) { }
fn abort_snapshot(&self) {}
fn restore_state_chunk(&self, _hash: H256, _chunk: Bytes) { }
fn restore_block_chunk(&self, _hash: H256, _chunk: Bytes) { }
fn abort_snapshot(&self) {}
fn shutdown(&self) { }
}

View File

@ -36,6 +36,7 @@ use types::{
transaction::{Transaction, Action},
log_entry::{LocalizedLogEntry, LogEntry},
receipt::{LocalizedReceipt, TransactionOutcome},
snapshot::RestorationStatus,
};
use jsonrpc_core::IoHandler;
@ -131,8 +132,6 @@ fn rpc_eth_protocol_version() {
#[test]
fn rpc_eth_syncing() {
use ethcore::snapshot::RestorationStatus;
let request = r#"{"jsonrpc": "2.0", "method": "eth_syncing", "params": [], "id": 1}"#;
let tester = EthTester::default();