Extract Machine from ethcore (#10949)
* 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
This commit is contained in:
		
							parent
							
								
									509fda727b
								
							
						
					
					
						commit
						73f4564b66
					
				
							
								
								
									
										276
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										276
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							@ -9,7 +9,7 @@ dependencies = [
 | 
			
		||||
 "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)",
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -25,7 +25,7 @@ dependencies = [
 | 
			
		||||
 "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.6 (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)",
 | 
			
		||||
 "memory-db 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -33,7 +33,7 @@ dependencies = [
 | 
			
		||||
 "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "patricia-trie-ethereum 0.1.0",
 | 
			
		||||
 "pod 0.1.0",
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "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)",
 | 
			
		||||
 "trace 0.1.0",
 | 
			
		||||
@ -147,7 +147,7 @@ version = "0.4.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -422,6 +422,14 @@ dependencies = [
 | 
			
		||||
 "rpassword 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "client-traits"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "common-types 0.1.0",
 | 
			
		||||
 "ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "cloudabi"
 | 
			
		||||
version = "0.0.3"
 | 
			
		||||
@ -465,7 +473,7 @@ dependencies = [
 | 
			
		||||
 "parity-snappy 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-util-mem 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "patricia-trie-ethereum 0.1.0",
 | 
			
		||||
 "rlp 0.4.0 (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",
 | 
			
		||||
 "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "unexpected 0.1.0",
 | 
			
		||||
@ -492,7 +500,7 @@ dependencies = [
 | 
			
		||||
 "handlebars 0.32.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "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.6 (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_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)",
 | 
			
		||||
@ -763,7 +771,7 @@ 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.6 (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)",
 | 
			
		||||
]
 | 
			
		||||
@ -803,7 +811,7 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "ethabi-contract"
 | 
			
		||||
version = "8.0.0"
 | 
			
		||||
version = "8.0.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -827,7 +835,7 @@ dependencies = [
 | 
			
		||||
 "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "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)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "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)",
 | 
			
		||||
@ -857,12 +865,13 @@ dependencies = [
 | 
			
		||||
 "account-state 0.1.0",
 | 
			
		||||
 "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "blooms-db 0.1.0",
 | 
			
		||||
 "client-traits 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)",
 | 
			
		||||
 "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-contract 8.0.0 (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",
 | 
			
		||||
 "ethcore-accounts 0.1.0",
 | 
			
		||||
@ -890,8 +899,9 @@ dependencies = [
 | 
			
		||||
 "kvdb-rocksdb 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "len-caching-lock 0.1.1",
 | 
			
		||||
 "log 0.4.6 (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",
 | 
			
		||||
 "memory-cache 0.1.0",
 | 
			
		||||
 "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -905,7 +915,7 @@ dependencies = [
 | 
			
		||||
 "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rayon 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp_compress 0.1.0",
 | 
			
		||||
 "rlp_derive 0.1.0",
 | 
			
		||||
 "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -934,7 +944,7 @@ dependencies = [
 | 
			
		||||
 "ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "ethkey 0.3.0",
 | 
			
		||||
 "ethstore 0.2.1",
 | 
			
		||||
 "log 0.4.6 (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_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -957,13 +967,13 @@ dependencies = [
 | 
			
		||||
 "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)",
 | 
			
		||||
 "kvdb-memorydb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-util-mem 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "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)",
 | 
			
		||||
 "rayon 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp_compress 0.1.0",
 | 
			
		||||
 "rlp_derive 0.1.0",
 | 
			
		||||
 "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -987,7 +997,7 @@ dependencies = [
 | 
			
		||||
 "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.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-crypto 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1012,7 +1022,7 @@ dependencies = [
 | 
			
		||||
 "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-util-mem 0.1.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.0 (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",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -1023,7 +1033,7 @@ dependencies = [
 | 
			
		||||
 "crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1038,6 +1048,7 @@ name = "ethcore-light"
 | 
			
		||||
version = "1.12.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "client-traits 0.1.0",
 | 
			
		||||
 "common-types 0.1.0",
 | 
			
		||||
 "derive_more 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1058,7 +1069,8 @@ dependencies = [
 | 
			
		||||
 "keccak-hasher 0.1.1",
 | 
			
		||||
 "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "kvdb-memorydb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (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",
 | 
			
		||||
 "memory-db 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1066,7 +1078,7 @@ dependencies = [
 | 
			
		||||
 "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "patricia-trie-ethereum 0.1.0",
 | 
			
		||||
 "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.0 (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_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1087,7 +1099,7 @@ dependencies = [
 | 
			
		||||
 "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "env_logger 0.5.13 (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.6 (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)",
 | 
			
		||||
 "regex 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1102,7 +1114,7 @@ dependencies = [
 | 
			
		||||
 "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-contract 8.0.0 (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",
 | 
			
		||||
 "ethcore-call-contract 0.1.0",
 | 
			
		||||
@ -1113,12 +1125,12 @@ dependencies = [
 | 
			
		||||
 "hyper 0.12.19 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (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",
 | 
			
		||||
 "parity-util-mem 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "price-info 1.12.0",
 | 
			
		||||
 "rlp 0.4.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)",
 | 
			
		||||
 "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1142,7 +1154,7 @@ dependencies = [
 | 
			
		||||
 "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-crypto 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-snappy 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.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_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1165,7 +1177,7 @@ dependencies = [
 | 
			
		||||
 "ipnetwork 0.12.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (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)",
 | 
			
		||||
 "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1174,7 +1186,7 @@ dependencies = [
 | 
			
		||||
 "parity-snappy 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "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.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)",
 | 
			
		||||
 "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)",
 | 
			
		||||
@ -1188,11 +1200,12 @@ name = "ethcore-private-tx"
 | 
			
		||||
version = "1.0.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "account-state 0.1.0",
 | 
			
		||||
 "client-traits 0.1.0",
 | 
			
		||||
 "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-contract 8.0.0 (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-call-contract 0.1.0",
 | 
			
		||||
@ -1204,14 +1217,15 @@ dependencies = [
 | 
			
		||||
 "fetch 0.1.0",
 | 
			
		||||
 "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (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)",
 | 
			
		||||
 "parity-crypto 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-util-mem 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "patricia-trie-ethereum 0.1.0",
 | 
			
		||||
 "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.0 (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",
 | 
			
		||||
 "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)",
 | 
			
		||||
@ -1235,7 +1249,7 @@ dependencies = [
 | 
			
		||||
 "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-contract 8.0.0 (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",
 | 
			
		||||
@ -1250,7 +1264,7 @@ dependencies = [
 | 
			
		||||
 "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "kvdb-rocksdb 0.1.4 (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.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-crypto 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-runtime 0.1.0",
 | 
			
		||||
@ -1282,7 +1296,7 @@ dependencies = [
 | 
			
		||||
 "ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "kvdb-rocksdb 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "trace-time 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
@ -1296,7 +1310,7 @@ dependencies = [
 | 
			
		||||
 "jsonrpc-core 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "jsonrpc-tcp-server 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (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)",
 | 
			
		||||
 "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1306,6 +1320,7 @@ dependencies = [
 | 
			
		||||
name = "ethcore-sync"
 | 
			
		||||
version = "1.12.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "client-traits 0.1.0",
 | 
			
		||||
 "common-types 0.1.0",
 | 
			
		||||
 "enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1325,7 +1340,8 @@ dependencies = [
 | 
			
		||||
 "keccak-hasher 0.1.1",
 | 
			
		||||
 "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "kvdb-memorydb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (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",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-runtime 0.1.0",
 | 
			
		||||
@ -1333,7 +1349,7 @@ 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)",
 | 
			
		||||
 "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.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)",
 | 
			
		||||
 "trace-time 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "triehash-ethereum 0.2.0",
 | 
			
		||||
@ -1371,7 +1387,7 @@ dependencies = [
 | 
			
		||||
 "eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)",
 | 
			
		||||
 "ethereum-types 0.6.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.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-crypto 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-wordlist 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1407,7 +1423,7 @@ dependencies = [
 | 
			
		||||
 "ethkey 0.3.0",
 | 
			
		||||
 "itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-crypto 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-wordlist 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1449,7 +1465,7 @@ dependencies = [
 | 
			
		||||
 "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)",
 | 
			
		||||
 "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "memory-cache 0.1.0",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-util-mem 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1552,7 +1568,7 @@ dependencies = [
 | 
			
		||||
 "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "hyper 0.12.19 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "hyper-rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
@ -1668,7 +1684,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "memchr 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "regex 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
@ -1684,7 +1700,7 @@ dependencies = [
 | 
			
		||||
 "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "string 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1701,7 +1717,7 @@ version = "0.32.4"
 | 
			
		||||
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)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "pest 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "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)",
 | 
			
		||||
@ -1798,7 +1814,7 @@ dependencies = [
 | 
			
		||||
 "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1852,7 +1868,7 @@ dependencies = [
 | 
			
		||||
 "attohttpc 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "xmltree 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -1871,7 +1887,7 @@ name = "impl-rlp"
 | 
			
		||||
version = "0.2.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -1976,7 +1992,7 @@ dependencies = [
 | 
			
		||||
 "combine 3.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "jni-sys 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -1997,12 +2013,12 @@ dependencies = [
 | 
			
		||||
 "keccak-hasher 0.1.1",
 | 
			
		||||
 "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "kvdb-memorydb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "memory-db 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-util-mem 0.1.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.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -2011,7 +2027,7 @@ version = "12.0.0"
 | 
			
		||||
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.6 (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_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)",
 | 
			
		||||
@ -2036,7 +2052,7 @@ dependencies = [
 | 
			
		||||
 "hyper 0.12.19 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "jsonrpc-core 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "jsonrpc-server-utils 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "unicase 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -2049,7 +2065,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "jsonrpc-core 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "jsonrpc-server-utils 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-tokio-ipc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -2061,7 +2077,7 @@ version = "12.0.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "jsonrpc-core 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (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)",
 | 
			
		||||
]
 | 
			
		||||
@ -2075,7 +2091,7 @@ dependencies = [
 | 
			
		||||
 "globset 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "jsonrpc-core 12.0.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.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -2089,7 +2105,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "jsonrpc-core 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "jsonrpc-server-utils 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (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)",
 | 
			
		||||
 "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
@ -2101,7 +2117,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "jsonrpc-core 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "jsonrpc-server-utils 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (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)",
 | 
			
		||||
 "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "ws 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -2247,12 +2263,12 @@ name = "log"
 | 
			
		||||
version = "0.3.9"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "log"
 | 
			
		||||
version = "0.4.6"
 | 
			
		||||
version = "0.4.8"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -2274,6 +2290,40 @@ dependencies = [
 | 
			
		||||
 "toolshed 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "machine"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "account-state 0.1.0",
 | 
			
		||||
 "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-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-builtin 0.1.0",
 | 
			
		||||
 "ethcore-call-contract 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",
 | 
			
		||||
 "evm 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)",
 | 
			
		||||
 "lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "macros 0.1.0",
 | 
			
		||||
 "parity-bytes 0.1.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)",
 | 
			
		||||
 "state-db 0.1.0",
 | 
			
		||||
 "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "trace 0.1.0",
 | 
			
		||||
 "trie-vm-factories 0.1.0",
 | 
			
		||||
 "vm 0.1.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "macros"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
@ -2354,7 +2404,7 @@ version = "0.1.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "kvdb-rocksdb 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "macros 0.1.0",
 | 
			
		||||
 "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
@ -2388,7 +2438,7 @@ dependencies = [
 | 
			
		||||
 "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -2401,7 +2451,7 @@ version = "2.0.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
@ -2411,7 +2461,7 @@ name = "mio-named-pipes"
 | 
			
		||||
version = "0.1.6"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -2484,8 +2534,9 @@ dependencies = [
 | 
			
		||||
name = "node-filter"
 | 
			
		||||
version = "1.12.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "common-types 0.1.0",
 | 
			
		||||
 "ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "ethabi-contract 8.0.0 (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-io 1.12.0",
 | 
			
		||||
@ -2493,7 +2544,7 @@ dependencies = [
 | 
			
		||||
 "ethcore-network-devp2p 1.12.0",
 | 
			
		||||
 "ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "kvdb-memorydb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (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)",
 | 
			
		||||
 "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -2664,7 +2715,7 @@ dependencies = [
 | 
			
		||||
 "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -2677,6 +2728,7 @@ dependencies = [
 | 
			
		||||
 "blooms-db 0.1.0",
 | 
			
		||||
 "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "cli-signer 1.4.0",
 | 
			
		||||
 "client-traits 0.1.0",
 | 
			
		||||
 "common-types 0.1.0",
 | 
			
		||||
 "ctrlc 1.1.1 (git+https://github.com/paritytech/rust-ctrlc.git)",
 | 
			
		||||
 "dir 0.1.2",
 | 
			
		||||
@ -2707,7 +2759,7 @@ dependencies = [
 | 
			
		||||
 "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)",
 | 
			
		||||
 "kvdb-rocksdb 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "migration-rocksdb 0.1.0",
 | 
			
		||||
 "node-filter 1.12.0",
 | 
			
		||||
 "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -2728,7 +2780,7 @@ dependencies = [
 | 
			
		||||
 "pretty_assertions 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "regex 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "registrar 0.0.1",
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rpassword 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "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)",
 | 
			
		||||
@ -2748,14 +2800,14 @@ name = "parity-hash-fetch"
 | 
			
		||||
version = "1.12.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "ethabi-contract 8.0.0 (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)",
 | 
			
		||||
 "fake-fetch 0.0.1",
 | 
			
		||||
 "fetch 0.1.0",
 | 
			
		||||
 "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mime 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -2771,13 +2823,14 @@ name = "parity-ipfs-api"
 | 
			
		||||
version = "1.12.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cid 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "common-types 0.1.0",
 | 
			
		||||
 "ethcore 1.12.0",
 | 
			
		||||
 "ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "jsonrpc-core 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "jsonrpc-http-server 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "multihash 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "unicase 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -2790,8 +2843,8 @@ dependencies = [
 | 
			
		||||
 "ethkey 0.3.0",
 | 
			
		||||
 "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "kvdb-memorydb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.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_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)",
 | 
			
		||||
@ -2830,6 +2883,7 @@ dependencies = [
 | 
			
		||||
 "account-state 0.1.0",
 | 
			
		||||
 "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "cid 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "client-traits 0.1.0",
 | 
			
		||||
 "common-types 0.1.0",
 | 
			
		||||
 "eip-712 0.1.0",
 | 
			
		||||
 "ethash 1.12.0",
 | 
			
		||||
@ -2858,7 +2912,8 @@ dependencies = [
 | 
			
		||||
 "jsonrpc-pubsub 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "jsonrpc-ws-server 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (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",
 | 
			
		||||
 "multihash 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "order-stat 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -2871,7 +2926,7 @@ dependencies = [
 | 
			
		||||
 "pretty_assertions 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.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)",
 | 
			
		||||
 "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)",
 | 
			
		||||
@ -2896,7 +2951,7 @@ dependencies = [
 | 
			
		||||
 "jsonrpc-core 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "jsonrpc-ws-server 12.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "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)",
 | 
			
		||||
@ -2938,7 +2993,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mio-named-pipes 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -2954,14 +3009,14 @@ version = "1.12.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "common-types 0.1.0",
 | 
			
		||||
 "ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "ethabi-contract 8.0.0 (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-sync 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)",
 | 
			
		||||
 "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-hash-fetch 1.12.0",
 | 
			
		||||
@ -2994,7 +3049,7 @@ name = "parity-version"
 | 
			
		||||
version = "2.7.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -3079,7 +3134,7 @@ dependencies = [
 | 
			
		||||
 "keccak-hasher 0.1.1",
 | 
			
		||||
 "memory-db 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "trie-db 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -3181,11 +3236,11 @@ dependencies = [
 | 
			
		||||
 "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.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "macros 0.1.0",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "patricia-trie-ethereum 0.1.0",
 | 
			
		||||
 "rlp 0.4.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)",
 | 
			
		||||
 "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "trie-db 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -3207,7 +3262,7 @@ dependencies = [
 | 
			
		||||
 "fake-fetch 0.0.1",
 | 
			
		||||
 "fetch 0.1.0",
 | 
			
		||||
 "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (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)",
 | 
			
		||||
]
 | 
			
		||||
@ -3312,7 +3367,7 @@ version = "0.6.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -3556,7 +3611,7 @@ name = "registrar"
 | 
			
		||||
version = "0.0.1"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "ethabi 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "ethabi-contract 8.0.0 (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)",
 | 
			
		||||
 "keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -3595,10 +3650,9 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rlp"
 | 
			
		||||
version = "0.4.0"
 | 
			
		||||
version = "0.4.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -3608,7 +3662,7 @@ version = "0.1.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "elastic-array 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -3617,7 +3671,7 @@ version = "0.1.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "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)",
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "syn 0.15.26 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -3671,7 +3725,7 @@ version = "0.15.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "ring 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "sct 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -3827,7 +3881,7 @@ version = "0.5.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "term 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -3907,7 +3961,7 @@ dependencies = [
 | 
			
		||||
 "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.6 (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)",
 | 
			
		||||
 "memory-cache 0.1.0",
 | 
			
		||||
 "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -3927,7 +3981,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
name = "stats"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -4191,7 +4245,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -4214,7 +4268,7 @@ dependencies = [
 | 
			
		||||
 "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "futures 0.1.25 (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.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -4263,7 +4317,7 @@ dependencies = [
 | 
			
		||||
 "crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -4296,7 +4350,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -4312,7 +4366,7 @@ dependencies = [
 | 
			
		||||
 "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -4353,11 +4407,11 @@ dependencies = [
 | 
			
		||||
 "ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "evm 0.1.0",
 | 
			
		||||
 "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-util-mem 0.1.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.0 (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",
 | 
			
		||||
 "vm 0.1.0",
 | 
			
		||||
]
 | 
			
		||||
@ -4367,7 +4421,7 @@ name = "trace-time"
 | 
			
		||||
version = "0.1.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -4375,7 +4429,7 @@ name = "transaction-pool"
 | 
			
		||||
version = "2.0.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "trace-time 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
@ -4393,7 +4447,7 @@ dependencies = [
 | 
			
		||||
 "elastic-array 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "hash-db 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "hashmap_core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -4425,7 +4479,7 @@ version = "0.6.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "hash-db 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -4604,7 +4658,7 @@ dependencies = [
 | 
			
		||||
 "keccak-hash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "patricia-trie-ethereum 0.1.0",
 | 
			
		||||
 "rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -4628,7 +4682,7 @@ version = "0.0.6"
 | 
			
		||||
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.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -4640,7 +4694,7 @@ dependencies = [
 | 
			
		||||
 "env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "pwasm-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "vm 0.1.0",
 | 
			
		||||
@ -4730,7 +4784,7 @@ dependencies = [
 | 
			
		||||
 "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
@ -4868,7 +4922,7 @@ dependencies = [
 | 
			
		||||
"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-contract 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "272b7fcfada8d9b2631d75693385b505efc826752dbc7ae1815e56b35d5a3f9f"
 | 
			
		||||
"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"
 | 
			
		||||
"checksum ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62d1bc682337e2c5ec98930853674dd2b4bd5d0d246933a9e98e5280f7c76c5f"
 | 
			
		||||
@ -4950,7 +5004,7 @@ dependencies = [
 | 
			
		||||
"checksum lock_api 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775751a3e69bde4df9b38dd00a1b5d6ac13791e4223d4a0506577f0dd27cfb7a"
 | 
			
		||||
"checksum lock_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ed946d4529956a20f2d63ebe1b69996d5a2137c91913fe3ebbeff957f5bca7ff"
 | 
			
		||||
"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
 | 
			
		||||
"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
 | 
			
		||||
"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
 | 
			
		||||
"checksum lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
 | 
			
		||||
"checksum lunarity-lexer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8a1670671f305792567116d4660e6e5bd785d6fa973e817c3445c0a7a54cecb6"
 | 
			
		||||
"checksum malloc_size_of_derive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "35adee9ed962cf7d07d62cb58bc45029f3227f5b5b86246caa8632f06c187bc3"
 | 
			
		||||
@ -5054,7 +5108,7 @@ dependencies = [
 | 
			
		||||
"checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5"
 | 
			
		||||
"checksum ring 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)" = "426bc186e3e95cac1e4a4be125a4aca7e84c2d616ffc02244eef36e2a60a093c"
 | 
			
		||||
"checksum ripemd160 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ad5112e0dbbb87577bfbc56c42450235e3012ce336e29c5befd7807bd626da4a"
 | 
			
		||||
"checksum rlp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3b0d56c1450bfbef1181fdeb78b902dc1d23178de77c23d705317508e03d1b7c"
 | 
			
		||||
"checksum rlp 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fa2f7f9c612d133da9101ef7bcd3e603ca7098901eca852e71f87a83dd3e6b59"
 | 
			
		||||
"checksum rpassword 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b273c91bd242ca03ad6d71c143b6f17a48790e61f21a6c78568fa2b6774a24a4"
 | 
			
		||||
"checksum rprompt 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1601f32bc5858aae3cbfa1c645c96c4d820cc5c16be0194f089560c00b6eb625"
 | 
			
		||||
"checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395"
 | 
			
		||||
 | 
			
		||||
@ -31,6 +31,7 @@ fdlimit = "0.1"
 | 
			
		||||
ctrlc = { git = "https://github.com/paritytech/rust-ctrlc.git" }
 | 
			
		||||
jsonrpc-core = "12.0.0"
 | 
			
		||||
parity-bytes = "0.1"
 | 
			
		||||
client-traits = { path = "ethcore/client-traits" }
 | 
			
		||||
common-types = { path = "ethcore/types" }
 | 
			
		||||
ethcore = { path = "ethcore", features = ["parity"] }
 | 
			
		||||
ethcore-accounts = { path = "accounts", optional = true }
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,7 @@ authors = ["Parity Technologies <admin@parity.io>"]
 | 
			
		||||
account-db = { path = "account-db" }
 | 
			
		||||
ansi_term = "0.11"
 | 
			
		||||
blooms-db = { path = "../util/blooms-db", optional = true }
 | 
			
		||||
client-traits = { path = "./client-traits" }
 | 
			
		||||
common-types = { path = "types" }
 | 
			
		||||
crossbeam-utils = "0.6"
 | 
			
		||||
env_logger = { version = "0.5", optional = true }
 | 
			
		||||
@ -44,6 +45,7 @@ lazy_static = "1.2.0"
 | 
			
		||||
len-caching-lock = { path = "../util/len-caching-lock" }
 | 
			
		||||
log = "0.4"
 | 
			
		||||
lru-cache = "0.1"
 | 
			
		||||
machine = { path = "./machine" }
 | 
			
		||||
macros = { path = "../util/macros" }
 | 
			
		||||
memory-cache = { path = "../util/memory-cache" }
 | 
			
		||||
num_cpus = "1.2"
 | 
			
		||||
@ -85,6 +87,7 @@ rlp_compress = { path = "../util/rlp-compress" }
 | 
			
		||||
serde_json = "1.0"
 | 
			
		||||
tempdir = "0.3"
 | 
			
		||||
trie-standardmap = "0.12.4"
 | 
			
		||||
machine = { path = "./machine", features = ["test-helpers"] }
 | 
			
		||||
 | 
			
		||||
[features]
 | 
			
		||||
parity = ["work-notify", "price-info", "stratum"]
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								ethcore/client-traits/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								ethcore/client-traits/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
[package]
 | 
			
		||||
description = "Trait definitions relative the ethereum client"
 | 
			
		||||
name = "client-traits"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
authors = ["Parity Technologies <admin@parity.io>"]
 | 
			
		||||
edition = "2018"
 | 
			
		||||
license = "GPL-3.0"
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
ethereum-types = "0.6.0"
 | 
			
		||||
common-types = { path = "../types" }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										37
									
								
								ethcore/client-traits/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								ethcore/client-traits/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
			
		||||
// 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/>.
 | 
			
		||||
 | 
			
		||||
use ethereum_types::{Address, H256};
 | 
			
		||||
use common_types::{
 | 
			
		||||
    header::Header,
 | 
			
		||||
    encoded,
 | 
			
		||||
    ids::BlockId,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Provides various information on a block by it's ID
 | 
			
		||||
pub trait BlockInfo {
 | 
			
		||||
    /// Get raw block header data by block id.
 | 
			
		||||
    fn block_header(&self, id: BlockId) -> Option<encoded::Header>;
 | 
			
		||||
 | 
			
		||||
    /// Get the best block header.
 | 
			
		||||
    fn best_block_header(&self) -> Header;
 | 
			
		||||
 | 
			
		||||
    /// Get raw block data by block header hash.
 | 
			
		||||
    fn block(&self, id: BlockId) -> Option<encoded::Block>;
 | 
			
		||||
 | 
			
		||||
    /// Get address code hash at given block's state.
 | 
			
		||||
    fn code_hash(&self, address: &Address, id: BlockId) -> Option<H256>;
 | 
			
		||||
}
 | 
			
		||||
@ -9,12 +9,14 @@ authors = ["Parity Technologies <admin@parity.io>"]
 | 
			
		||||
[dependencies]
 | 
			
		||||
log = "0.4"
 | 
			
		||||
parity-bytes = "0.1"
 | 
			
		||||
client-traits = { path = "../client-traits" }
 | 
			
		||||
common-types = { path = "../types" }
 | 
			
		||||
derive_more = "0.14.0"
 | 
			
		||||
ethcore = { path = ".."}
 | 
			
		||||
ethcore-db = { path = "../db" }
 | 
			
		||||
ethcore-blockchain = { path = "../blockchain" }
 | 
			
		||||
ethereum-types = "0.6.0"
 | 
			
		||||
machine = { path = "../machine" }
 | 
			
		||||
memory-db = "0.12.4"
 | 
			
		||||
trie-db = "0.12.4"
 | 
			
		||||
patricia-trie-ethereum = { path = "../../util/patricia-trie-ethereum" }
 | 
			
		||||
 | 
			
		||||
@ -54,6 +54,7 @@ extern crate serde_derive;
 | 
			
		||||
extern crate log;
 | 
			
		||||
 | 
			
		||||
extern crate bincode;
 | 
			
		||||
extern crate client_traits;
 | 
			
		||||
extern crate common_types;
 | 
			
		||||
extern crate ethcore_blockchain;
 | 
			
		||||
extern crate ethcore_db;
 | 
			
		||||
@ -71,6 +72,7 @@ extern crate failsafe;
 | 
			
		||||
extern crate futures;
 | 
			
		||||
extern crate itertools;
 | 
			
		||||
extern crate keccak_hasher;
 | 
			
		||||
extern crate machine;
 | 
			
		||||
extern crate memory_db;
 | 
			
		||||
extern crate trie_db as trie;
 | 
			
		||||
extern crate patricia_trie_ethereum as ethtrie;
 | 
			
		||||
 | 
			
		||||
@ -39,8 +39,8 @@ use net::{
 | 
			
		||||
use cache::Cache;
 | 
			
		||||
use request::{self as basic_request, Request as NetworkRequest};
 | 
			
		||||
use self::request::CheckedRequest;
 | 
			
		||||
use machine::executed::ExecutionResult;
 | 
			
		||||
 | 
			
		||||
pub use ethcore::executed::ExecutionResult;
 | 
			
		||||
pub use self::request::{Request, Response, HeaderRef, Error as ValidityError};
 | 
			
		||||
pub use self::request_guard::{RequestGuard, Error as RequestError};
 | 
			
		||||
pub use self::response_guard::{ResponseGuard, Error as ResponseGuardError, Inner as ResponseGuardInner};
 | 
			
		||||
 | 
			
		||||
@ -1099,7 +1099,8 @@ mod tests {
 | 
			
		||||
	use trie::Recorder;
 | 
			
		||||
	use hash::keccak;
 | 
			
		||||
 | 
			
		||||
	use ethcore::client::{BlockChainClient, BlockInfo, TestBlockChainClient, EachBlockWith};
 | 
			
		||||
	use ethcore::client::{BlockChainClient, TestBlockChainClient, EachBlockWith};
 | 
			
		||||
	use client_traits::BlockInfo;
 | 
			
		||||
	use common_types::header::Header;
 | 
			
		||||
	use common_types::encoded;
 | 
			
		||||
	use common_types::receipt::{Receipt, TransactionOutcome};
 | 
			
		||||
@ -1202,32 +1203,32 @@ mod tests {
 | 
			
		||||
 | 
			
		||||
		// Incorrect responses
 | 
			
		||||
		assert_eq!(header_with_ancestors(invalid_successor.hash().into(), 0)
 | 
			
		||||
				   .check_response(&cache, &headers[0].hash().into(), &raw_headers[0..1]),
 | 
			
		||||
				   Err(Error::WrongHash(invalid_successor.hash(), headers[0].hash())));
 | 
			
		||||
				.check_response(&cache, &headers[0].hash().into(), &raw_headers[0..1]),
 | 
			
		||||
				Err(Error::WrongHash(invalid_successor.hash(), headers[0].hash())));
 | 
			
		||||
		assert_eq!(header_with_ancestors(headers[0].hash().into(), 0)
 | 
			
		||||
				   .check_response(&cache, &headers[0].hash().into(), &[]),
 | 
			
		||||
				   Err(Error::Empty));
 | 
			
		||||
				.check_response(&cache, &headers[0].hash().into(), &[]),
 | 
			
		||||
				Err(Error::Empty));
 | 
			
		||||
		assert_eq!(header_with_ancestors(headers[0].hash().into(), 10)
 | 
			
		||||
				   .check_response(&cache, &headers[0].hash().into(), &raw_headers[0..10]),
 | 
			
		||||
				   Err(Error::TooFewResults(11, 10)));
 | 
			
		||||
				.check_response(&cache, &headers[0].hash().into(), &raw_headers[0..10]),
 | 
			
		||||
				Err(Error::TooFewResults(11, 10)));
 | 
			
		||||
		assert_eq!(header_with_ancestors(headers[0].hash().into(), 9)
 | 
			
		||||
				   .check_response(&cache, &headers[0].hash().into(), &raw_headers[0..11]),
 | 
			
		||||
				   Err(Error::TooManyResults(10, 11)));
 | 
			
		||||
				.check_response(&cache, &headers[0].hash().into(), &raw_headers[0..11]),
 | 
			
		||||
				Err(Error::TooManyResults(10, 11)));
 | 
			
		||||
 | 
			
		||||
		let response = &[raw_headers[0].clone(), raw_headers[2].clone()];
 | 
			
		||||
		assert_eq!(header_with_ancestors(headers[0].hash().into(), 1)
 | 
			
		||||
				   .check_response(&cache, &headers[0].hash().into(), response),
 | 
			
		||||
				   Err(Error::WrongHeaderSequence));
 | 
			
		||||
				.check_response(&cache, &headers[0].hash().into(), response),
 | 
			
		||||
				Err(Error::WrongHeaderSequence));
 | 
			
		||||
 | 
			
		||||
		let response = &[raw_invalid_successor.clone(), raw_headers[0].clone()];
 | 
			
		||||
		assert_eq!(header_with_ancestors(invalid_successor.hash().into(), 1)
 | 
			
		||||
				   .check_response(&cache, &invalid_successor.hash().into(), response),
 | 
			
		||||
				   Err(Error::WrongHeaderSequence));
 | 
			
		||||
				.check_response(&cache, &invalid_successor.hash().into(), response),
 | 
			
		||||
				Err(Error::WrongHeaderSequence));
 | 
			
		||||
 | 
			
		||||
		let response = &[raw_invalid_successor.clone(), raw_headers[1].clone()];
 | 
			
		||||
		assert_eq!(header_with_ancestors(invalid_successor.hash().into(), 1)
 | 
			
		||||
				   .check_response(&cache, &invalid_successor.hash().into(), response),
 | 
			
		||||
				   Err(Error::WrongHeaderSequence));
 | 
			
		||||
				.check_response(&cache, &invalid_successor.hash().into(), response),
 | 
			
		||||
				Err(Error::WrongHeaderSequence));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#[test]
 | 
			
		||||
 | 
			
		||||
@ -19,11 +19,14 @@
 | 
			
		||||
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
 | 
			
		||||
use common_types::blockchain_info::BlockChainInfo;
 | 
			
		||||
use common_types::encoded;
 | 
			
		||||
use common_types::ids::BlockId;
 | 
			
		||||
use common_types::transaction::PendingTransaction;
 | 
			
		||||
use ethcore::client::{BlockChainClient, ProvingBlockChainClient, ChainInfo, BlockInfo as ClientBlockInfo};
 | 
			
		||||
use common_types::{
 | 
			
		||||
	blockchain_info::BlockChainInfo,
 | 
			
		||||
	encoded,
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	transaction::PendingTransaction,
 | 
			
		||||
};
 | 
			
		||||
use ethcore::client::{BlockChainClient, ProvingBlockChainClient, ChainInfo};
 | 
			
		||||
use client_traits::BlockInfo as ClientBlockInfo;
 | 
			
		||||
use ethereum_types::H256;
 | 
			
		||||
use parking_lot::RwLock;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										46
									
								
								ethcore/machine/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								ethcore/machine/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,46 @@
 | 
			
		||||
[package]
 | 
			
		||||
description = "Ethereum state machine"
 | 
			
		||||
name = "machine"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
authors = ["Parity Technologies <admin@parity.io>"]
 | 
			
		||||
edition = "2018"
 | 
			
		||||
license = "GPL-3.0"
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
account-state = { path = "../account-state" }
 | 
			
		||||
client-traits = { path = "../client-traits" }
 | 
			
		||||
common-types = { path = "../types" }
 | 
			
		||||
crossbeam-utils = "0.6"
 | 
			
		||||
ethabi = "8.0.0"
 | 
			
		||||
ethabi-contract = "8.0.0"
 | 
			
		||||
ethabi-derive = "8.0.0"
 | 
			
		||||
ethcore-builtin = { path = "../builtin" }
 | 
			
		||||
ethcore-call-contract = { path = "../call-contract" }
 | 
			
		||||
ethcore-io = { path = "../../util/io" }
 | 
			
		||||
ethereum-types = "0.6.0"
 | 
			
		||||
# Used for tests in other crates through the `test-helpers` feature
 | 
			
		||||
ethjson = { path = "../../json", optional = true }
 | 
			
		||||
evm = { path = "../evm" }
 | 
			
		||||
keccak-hash = "0.2.0"
 | 
			
		||||
log = "0.4"
 | 
			
		||||
lru-cache = "0.1.2"
 | 
			
		||||
parity-bytes = "0.1.0"
 | 
			
		||||
parking_lot = "0.8.0"
 | 
			
		||||
rlp = "0.4.2"
 | 
			
		||||
state-db = { path = "../state-db" }
 | 
			
		||||
trace = { path = "../trace" }
 | 
			
		||||
trie-vm-factories = { path = "../trie-vm-factories" }
 | 
			
		||||
vm = { path = "../vm" }
 | 
			
		||||
 | 
			
		||||
[dev-dependencies]
 | 
			
		||||
ethcore = { path = "../", features = ["test-helpers"] }
 | 
			
		||||
ethcore-io = { path = "../../util/io" }
 | 
			
		||||
ethjson = { path = "../../json" }
 | 
			
		||||
ethkey = { path = "../../accounts/ethkey" }
 | 
			
		||||
macros = { path = "../../util/macros" }
 | 
			
		||||
rustc-hex = "1.0"
 | 
			
		||||
tempdir = "0.3"
 | 
			
		||||
trace = { path = "../trace" }
 | 
			
		||||
 | 
			
		||||
[features]
 | 
			
		||||
test-helpers = ["ethjson"]
 | 
			
		||||
@ -17,10 +17,10 @@
 | 
			
		||||
//! Transaction execution format module.
 | 
			
		||||
 | 
			
		||||
use ethereum_types::{U256, Address};
 | 
			
		||||
use bytes::Bytes;
 | 
			
		||||
use parity_bytes::Bytes;
 | 
			
		||||
use vm;
 | 
			
		||||
use trace::{VMTrace, FlatTrace};
 | 
			
		||||
use types::{
 | 
			
		||||
use common_types::{
 | 
			
		||||
	state_diff::StateDiff,
 | 
			
		||||
	log_entry::LogEntry,
 | 
			
		||||
	errors::ExecutionError,
 | 
			
		||||
							
								
								
									
										101
									
								
								ethcore/machine/src/executed_block.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								ethcore/machine/src/executed_block.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,101 @@
 | 
			
		||||
// 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/>.
 | 
			
		||||
 | 
			
		||||
//! `ExecutedBlock` is the underlying data structure used by other block types to store block
 | 
			
		||||
//! related info. As a block goes through processing we use different types to signal its state:
 | 
			
		||||
//! "open", "closed", "locked", "sealed". They all embed an `ExecutedBlock`.
 | 
			
		||||
 | 
			
		||||
use std::{
 | 
			
		||||
	collections::HashSet,
 | 
			
		||||
	sync::Arc,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use ethereum_types::{H256, U256};
 | 
			
		||||
 | 
			
		||||
use account_state::State;
 | 
			
		||||
use common_types::{
 | 
			
		||||
	header::Header,
 | 
			
		||||
	receipt::Receipt,
 | 
			
		||||
	transaction::SignedTransaction,
 | 
			
		||||
};
 | 
			
		||||
use state_db::StateDB;
 | 
			
		||||
use trace::Tracing;
 | 
			
		||||
use vm::{EnvInfo, LastHashes};
 | 
			
		||||
 | 
			
		||||
/// An internal type for a block's common elements.
 | 
			
		||||
#[derive(Clone)]
 | 
			
		||||
pub struct ExecutedBlock {
 | 
			
		||||
	/// Executed block header.
 | 
			
		||||
	pub header: Header,
 | 
			
		||||
	/// Executed transactions.
 | 
			
		||||
	pub transactions: Vec<SignedTransaction>,
 | 
			
		||||
	/// Uncles.
 | 
			
		||||
	pub uncles: Vec<Header>,
 | 
			
		||||
	/// Transaction receipts.
 | 
			
		||||
	pub receipts: Vec<Receipt>,
 | 
			
		||||
	/// Hashes of already executed transactions.
 | 
			
		||||
	pub transactions_set: HashSet<H256>,
 | 
			
		||||
	/// Underlying state.
 | 
			
		||||
	pub state: State<StateDB>,
 | 
			
		||||
	/// Transaction traces.
 | 
			
		||||
	pub traces: Tracing,
 | 
			
		||||
	/// Hashes of last 256 blocks.
 | 
			
		||||
	pub last_hashes: Arc<LastHashes>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl ExecutedBlock {
 | 
			
		||||
	/// Create a new block from the given `state`.
 | 
			
		||||
	pub fn new(state: State<StateDB>, last_hashes: Arc<LastHashes>, tracing: bool) -> ExecutedBlock {
 | 
			
		||||
		ExecutedBlock {
 | 
			
		||||
			header: Default::default(),
 | 
			
		||||
			transactions: Default::default(),
 | 
			
		||||
			uncles: Default::default(),
 | 
			
		||||
			receipts: Default::default(),
 | 
			
		||||
			transactions_set: Default::default(),
 | 
			
		||||
			state,
 | 
			
		||||
			traces: if tracing {
 | 
			
		||||
				Tracing::enabled()
 | 
			
		||||
			} else {
 | 
			
		||||
				Tracing::Disabled
 | 
			
		||||
			},
 | 
			
		||||
			last_hashes,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/// Get the environment info concerning this block.
 | 
			
		||||
	pub fn env_info(&self) -> EnvInfo {
 | 
			
		||||
		// TODO: memoise.
 | 
			
		||||
		EnvInfo {
 | 
			
		||||
			number: self.header.number(),
 | 
			
		||||
			author: self.header.author().clone(),
 | 
			
		||||
			timestamp: self.header.timestamp(),
 | 
			
		||||
			difficulty: self.header.difficulty().clone(),
 | 
			
		||||
			last_hashes: self.last_hashes.clone(),
 | 
			
		||||
			gas_used: self.receipts.last().map_or(U256::zero(), |r| r.gas_used),
 | 
			
		||||
			gas_limit: self.header.gas_limit().clone(),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/// Get mutable access to a state.
 | 
			
		||||
	pub fn state_mut(&mut self) -> &mut State<StateDB> {
 | 
			
		||||
		&mut self.state
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/// Get mutable reference to traces.
 | 
			
		||||
	pub fn traces_mut(&mut self) -> &mut Tracing {
 | 
			
		||||
		&mut self.traces
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -15,30 +15,36 @@
 | 
			
		||||
// along with Parity Ethereum.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
//! Transaction Execution environment.
 | 
			
		||||
use std::cmp;
 | 
			
		||||
use std::convert::TryFrom;
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
use hash::keccak;
 | 
			
		||||
 | 
			
		||||
use std::{cmp, convert::TryFrom, sync::Arc};
 | 
			
		||||
 | 
			
		||||
use crossbeam_utils::thread;
 | 
			
		||||
use ethereum_types::{H256, U256, U512, Address};
 | 
			
		||||
use bytes::{Bytes, BytesRef};
 | 
			
		||||
use keccak_hash::keccak;
 | 
			
		||||
use parity_bytes::{Bytes, BytesRef};
 | 
			
		||||
use rlp::RlpStream;
 | 
			
		||||
use log::trace;
 | 
			
		||||
 | 
			
		||||
use account_state::{Backend as StateBackend, State, CleanupMode};
 | 
			
		||||
use substate::Substate;
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use evm::{CallType, Finalize, FinalizationResult};
 | 
			
		||||
use vm::{
 | 
			
		||||
	self, EnvInfo, CreateContractAddress, ReturnData, CleanDustMode, ActionParams,
 | 
			
		||||
	ActionValue, Schedule, TrapError, ResumeCall, ResumeCreate
 | 
			
		||||
};
 | 
			
		||||
use trie_vm_factories::VmFactory;
 | 
			
		||||
use externalities::*;
 | 
			
		||||
use trace::{self, Tracer, VMTracer};
 | 
			
		||||
use types::{
 | 
			
		||||
use common_types::{
 | 
			
		||||
	errors::ExecutionError,
 | 
			
		||||
	transaction::{Action, SignedTransaction},
 | 
			
		||||
};
 | 
			
		||||
use transaction_ext::Transaction;
 | 
			
		||||
use crossbeam_utils::thread;
 | 
			
		||||
pub use executed::{Executed, ExecutionResult};
 | 
			
		||||
 | 
			
		||||
use crate::{
 | 
			
		||||
	Machine,
 | 
			
		||||
	substate::Substate,
 | 
			
		||||
	externalities::{Externalities, OutputPolicy, OriginInfo}, // todo: make explicit
 | 
			
		||||
	transaction_ext::Transaction,
 | 
			
		||||
	executed::Executed,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#[cfg(debug_assertions)]
 | 
			
		||||
/// Roughly estimate what stack size each level of evm depth will use. (Debug build)
 | 
			
		||||
@ -58,8 +64,6 @@ const STACK_SIZE_ENTRY_OVERHEAD: usize = 20 * 1024;
 | 
			
		||||
 | 
			
		||||
/// Returns new address created from address, nonce, and code hash
 | 
			
		||||
pub fn contract_address(address_scheme: CreateContractAddress, sender: &Address, nonce: &U256, code: &[u8]) -> (Address, Option<H256>) {
 | 
			
		||||
	use rlp::RlpStream;
 | 
			
		||||
 | 
			
		||||
	match address_scheme {
 | 
			
		||||
		CreateContractAddress::FromSenderAndNonce => {
 | 
			
		||||
			let mut stream = RlpStream::new_list(2);
 | 
			
		||||
@ -995,7 +999,7 @@ impl<'a, B: 'a + StateBackend> Executive<'a, B> {
 | 
			
		||||
		tracer: &mut T,
 | 
			
		||||
		vm_tracer: &mut V
 | 
			
		||||
	) -> vm::Result<FinalizationResult> where T: Tracer, V: VMTracer {
 | 
			
		||||
		let local_stack_size = ::io::LOCAL_STACK_SIZE.with(|sz| sz.get());
 | 
			
		||||
		let local_stack_size = ethcore_io::LOCAL_STACK_SIZE.with(|sz| sz.get());
 | 
			
		||||
		let depth_threshold = local_stack_size.saturating_sub(STACK_SIZE_ENTRY_OVERHEAD) / STACK_SIZE_PER_DEPTH;
 | 
			
		||||
 | 
			
		||||
		if stack_depth != depth_threshold {
 | 
			
		||||
@ -1086,7 +1090,7 @@ impl<'a, B: 'a + StateBackend> Executive<'a, B> {
 | 
			
		||||
		tracer: &mut T,
 | 
			
		||||
		vm_tracer: &mut V,
 | 
			
		||||
	) -> vm::Result<FinalizationResult> where T: Tracer, V: VMTracer {
 | 
			
		||||
		let local_stack_size = ::io::LOCAL_STACK_SIZE.with(|sz| sz.get());
 | 
			
		||||
		let local_stack_size = ethcore_io::LOCAL_STACK_SIZE.with(|sz| sz.get());
 | 
			
		||||
		let depth_threshold = local_stack_size.saturating_sub(STACK_SIZE_ENTRY_OVERHEAD) / STACK_SIZE_PER_DEPTH;
 | 
			
		||||
 | 
			
		||||
		if stack_depth != depth_threshold {
 | 
			
		||||
@ -1208,36 +1212,52 @@ impl<'a, B: 'a + StateBackend> Executive<'a, B> {
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
#[allow(dead_code)]
 | 
			
		||||
mod tests {
 | 
			
		||||
	use std::sync::Arc;
 | 
			
		||||
	use std::str::FromStr;
 | 
			
		||||
	use std::collections::HashSet;
 | 
			
		||||
	use std::{
 | 
			
		||||
		sync::Arc,
 | 
			
		||||
		str::FromStr,
 | 
			
		||||
		collections::HashSet,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	use rustc_hex::FromHex;
 | 
			
		||||
	use ethkey::{Generator, Random};
 | 
			
		||||
	use super::*;
 | 
			
		||||
	use ethereum_types::{H256, U256, U512, Address, BigEndianHash};
 | 
			
		||||
	use vm::{ActionParams, ActionValue, CallType, EnvInfo, CreateContractAddress};
 | 
			
		||||
	use evm::{Factory, VMType};
 | 
			
		||||
	use machine::Machine;
 | 
			
		||||
 | 
			
		||||
	use account_state::CleanupMode;
 | 
			
		||||
	use substate::Substate;
 | 
			
		||||
	use test_helpers::{get_temp_state_with_factory, get_temp_state};
 | 
			
		||||
	use trace::trace;
 | 
			
		||||
	use trace::{FlatTrace, Tracer, NoopTracer, ExecutiveTracer};
 | 
			
		||||
	use trace::{VMTrace, VMOperation, VMExecutedOperation, MemoryDiff, StorageDiff, VMTracer, NoopVMTracer, ExecutiveVMTracer};
 | 
			
		||||
	use types::{
 | 
			
		||||
	use common_types::{
 | 
			
		||||
		errors::ExecutionError,
 | 
			
		||||
		transaction::{Action, Transaction},
 | 
			
		||||
	};
 | 
			
		||||
	use crate::spec;
 | 
			
		||||
	use ethkey::{Generator, Random};
 | 
			
		||||
	use evm::{Factory, VMType, evm_test, evm_test_ignore};
 | 
			
		||||
	use macros::vec_into;
 | 
			
		||||
	use vm::{ActionParams, ActionValue, CallType, EnvInfo, CreateContractAddress};
 | 
			
		||||
	use ::trace::{
 | 
			
		||||
		trace,
 | 
			
		||||
		FlatTrace, Tracer, NoopTracer, ExecutiveTracer,
 | 
			
		||||
		VMTrace, VMOperation, VMExecutedOperation, MemoryDiff, StorageDiff, VMTracer, NoopVMTracer, ExecutiveVMTracer,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	use super::*;
 | 
			
		||||
 | 
			
		||||
	use crate::{
 | 
			
		||||
		Machine,
 | 
			
		||||
		substate::Substate,
 | 
			
		||||
		test_helpers::{
 | 
			
		||||
			new_frontier_test_machine,
 | 
			
		||||
			new_byzantium_test_machine,
 | 
			
		||||
			new_constantinople_test_machine,
 | 
			
		||||
			new_kovan_wasm_test_machine,
 | 
			
		||||
		},
 | 
			
		||||
	};
 | 
			
		||||
	use ethcore::test_helpers::{get_temp_state_with_factory, get_temp_state};
 | 
			
		||||
 | 
			
		||||
	fn make_frontier_machine(max_depth: usize) -> Machine {
 | 
			
		||||
		let mut machine = spec::new_frontier_test_machine();
 | 
			
		||||
		let mut machine = new_frontier_test_machine();
 | 
			
		||||
		machine.set_schedule_creation_rules(Box::new(move |s, _| s.max_depth = max_depth));
 | 
			
		||||
		machine
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fn make_byzantium_machine(max_depth: usize) -> Machine {
 | 
			
		||||
		let mut machine = spec::new_byzantium_test_machine();
 | 
			
		||||
		let mut machine = new_byzantium_test_machine();
 | 
			
		||||
		machine.set_schedule_creation_rules(Box::new(move |s, _| s.max_depth = max_depth));
 | 
			
		||||
		machine
 | 
			
		||||
	}
 | 
			
		||||
@ -1591,7 +1611,7 @@ mod tests {
 | 
			
		||||
		let mut state = get_temp_state();
 | 
			
		||||
		state.add_balance(&sender, &U256::from(100), CleanupMode::NoEmpty).unwrap();
 | 
			
		||||
		let info = EnvInfo::default();
 | 
			
		||||
		let machine = spec::new_byzantium_test_machine();
 | 
			
		||||
		let machine = new_byzantium_test_machine();
 | 
			
		||||
		let schedule = machine.schedule(info.number);
 | 
			
		||||
		let mut substate = Substate::new();
 | 
			
		||||
		let mut tracer = ExecutiveTracer::default();
 | 
			
		||||
@ -2123,7 +2143,7 @@ mod tests {
 | 
			
		||||
		params.code = Some(Arc::new(code));
 | 
			
		||||
		params.value = ActionValue::Transfer(U256::zero());
 | 
			
		||||
		let info = EnvInfo::default();
 | 
			
		||||
		let machine = spec::new_byzantium_test_machine();
 | 
			
		||||
		let machine = new_byzantium_test_machine();
 | 
			
		||||
		let schedule = machine.schedule(info.number);
 | 
			
		||||
		let mut substate = Substate::new();
 | 
			
		||||
 | 
			
		||||
@ -2159,7 +2179,7 @@ mod tests {
 | 
			
		||||
		state.init_code(&y2, "600060006000600061100162fffffff4".from_hex().unwrap()).unwrap();
 | 
			
		||||
 | 
			
		||||
		let info = EnvInfo::default();
 | 
			
		||||
		let machine = spec::new_constantinople_test_machine();
 | 
			
		||||
		let machine = new_constantinople_test_machine();
 | 
			
		||||
		let schedule = machine.schedule(info.number);
 | 
			
		||||
 | 
			
		||||
		assert_eq!(state.storage_at(&operating_address, &k).unwrap(), BigEndianHash::from_uint(&U256::from(0)));
 | 
			
		||||
@ -2229,7 +2249,7 @@ mod tests {
 | 
			
		||||
		info.number = 100;
 | 
			
		||||
 | 
			
		||||
		// Network with wasm activated at block 10
 | 
			
		||||
		let machine = spec::new_kovan_wasm_test_machine();
 | 
			
		||||
		let machine = new_kovan_wasm_test_machine();
 | 
			
		||||
 | 
			
		||||
		let mut output = [0u8; 20];
 | 
			
		||||
		let FinalizationResult { gas_left: result, return_data, .. } = {
 | 
			
		||||
@ -15,21 +15,36 @@
 | 
			
		||||
// along with Parity Ethereum.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
//! Transaction Execution environment.
 | 
			
		||||
use std::cmp;
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
 | 
			
		||||
use std::{cmp, sync::Arc};
 | 
			
		||||
 | 
			
		||||
use ethereum_types::{H256, U256, Address, BigEndianHash};
 | 
			
		||||
use bytes::Bytes;
 | 
			
		||||
use parity_bytes::Bytes;
 | 
			
		||||
use log::{debug, trace, warn};
 | 
			
		||||
 | 
			
		||||
use account_state::{Backend as StateBackend, State, CleanupMode};
 | 
			
		||||
use substate::Substate;
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use executive::*;
 | 
			
		||||
use common_types::{
 | 
			
		||||
	transaction::UNSIGNED_SENDER,
 | 
			
		||||
	log_entry::LogEntry,
 | 
			
		||||
};
 | 
			
		||||
use trace::{Tracer, VMTracer};
 | 
			
		||||
use vm::{
 | 
			
		||||
	self, ActionParams, ActionValue, EnvInfo, CallType, Schedule,
 | 
			
		||||
	Ext, ContractCreateResult, MessageCallResult, CreateContractAddress,
 | 
			
		||||
	ReturnData, TrapKind
 | 
			
		||||
};
 | 
			
		||||
use types::transaction::UNSIGNED_SENDER;
 | 
			
		||||
use trace::{Tracer, VMTracer};
 | 
			
		||||
 | 
			
		||||
use crate::{
 | 
			
		||||
	Machine,
 | 
			
		||||
	substate::Substate,
 | 
			
		||||
	executive::{
 | 
			
		||||
		Executive,
 | 
			
		||||
		contract_address,
 | 
			
		||||
		into_message_call_result,
 | 
			
		||||
		into_contract_create_result,
 | 
			
		||||
		cleanup_mode
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Policy for handling output data on `RETURN` opcode.
 | 
			
		||||
pub enum OutputPolicy {
 | 
			
		||||
@ -97,18 +112,18 @@ impl<'a, T: 'a, V: 'a, B: 'a> Externalities<'a, T, V, B>
 | 
			
		||||
		static_flag: bool,
 | 
			
		||||
	) -> Self {
 | 
			
		||||
		Externalities {
 | 
			
		||||
			state: state,
 | 
			
		||||
			env_info: env_info,
 | 
			
		||||
			depth: depth,
 | 
			
		||||
			stack_depth: stack_depth,
 | 
			
		||||
			origin_info: origin_info,
 | 
			
		||||
			substate: substate,
 | 
			
		||||
			machine: machine,
 | 
			
		||||
			schedule: schedule,
 | 
			
		||||
			output: output,
 | 
			
		||||
			tracer: tracer,
 | 
			
		||||
			vm_tracer: vm_tracer,
 | 
			
		||||
			static_flag: static_flag,
 | 
			
		||||
			state,
 | 
			
		||||
			env_info,
 | 
			
		||||
			depth,
 | 
			
		||||
			stack_depth,
 | 
			
		||||
			origin_info,
 | 
			
		||||
			substate,
 | 
			
		||||
			machine,
 | 
			
		||||
			schedule,
 | 
			
		||||
			output,
 | 
			
		||||
			tracer,
 | 
			
		||||
			vm_tracer,
 | 
			
		||||
			static_flag,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -137,10 +152,6 @@ impl<'a, T: 'a, V: 'a, B: 'a> Ext for Externalities<'a, T, V, B>
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fn is_static(&self) -> bool {
 | 
			
		||||
		return self.static_flag
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fn exists(&self, address: &Address) -> vm::Result<bool> {
 | 
			
		||||
		self.state.exists(address).map_err(Into::into)
 | 
			
		||||
	}
 | 
			
		||||
@ -178,9 +189,9 @@ impl<'a, T: 'a, V: 'a, B: 'a> Ext for Externalities<'a, T, V, B>
 | 
			
		||||
				origin: self.origin_info.origin.clone(),
 | 
			
		||||
				gas: self.machine.params().eip210_contract_gas,
 | 
			
		||||
				gas_price: 0.into(),
 | 
			
		||||
				code: code,
 | 
			
		||||
				code_hash: code_hash,
 | 
			
		||||
				code_version: code_version,
 | 
			
		||||
				code,
 | 
			
		||||
				code_hash,
 | 
			
		||||
				code_version,
 | 
			
		||||
				data: Some(data.as_bytes().to_vec()),
 | 
			
		||||
				call_type: CallType::Call,
 | 
			
		||||
				params_type: vm::ParamsType::Separate,
 | 
			
		||||
@ -240,7 +251,7 @@ impl<'a, T: 'a, V: 'a, B: 'a> Ext for Externalities<'a, T, V, B>
 | 
			
		||||
			gas_price: self.origin_info.gas_price,
 | 
			
		||||
			value: ActionValue::Transfer(*value),
 | 
			
		||||
			code: Some(Arc::new(code.to_vec())),
 | 
			
		||||
			code_hash: code_hash,
 | 
			
		||||
			code_hash,
 | 
			
		||||
			code_version: *parent_version,
 | 
			
		||||
			data: None,
 | 
			
		||||
			call_type: CallType::None,
 | 
			
		||||
@ -296,11 +307,11 @@ impl<'a, T: 'a, V: 'a, B: 'a> Ext for Externalities<'a, T, V, B>
 | 
			
		||||
			origin: self.origin_info.origin.clone(),
 | 
			
		||||
			gas: *gas,
 | 
			
		||||
			gas_price: self.origin_info.gas_price,
 | 
			
		||||
			code: code,
 | 
			
		||||
			code_hash: code_hash,
 | 
			
		||||
			code_version: code_version,
 | 
			
		||||
			code,
 | 
			
		||||
			code_hash,
 | 
			
		||||
			code_version,
 | 
			
		||||
			data: Some(data.to_vec()),
 | 
			
		||||
			call_type: call_type,
 | 
			
		||||
			call_type,
 | 
			
		||||
			params_type: vm::ParamsType::Separate,
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
@ -333,6 +344,21 @@ impl<'a, T: 'a, V: 'a, B: 'a> Ext for Externalities<'a, T, V, B>
 | 
			
		||||
		Ok(self.state.code_size(address)?)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fn log(&mut self, topics: Vec<H256>, data: &[u8]) -> vm::Result<()> {
 | 
			
		||||
		if self.static_flag {
 | 
			
		||||
			return Err(vm::Error::MutableCallInStaticContext);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		let address = self.origin_info.address.clone();
 | 
			
		||||
		self.substate.logs.push(LogEntry {
 | 
			
		||||
			address,
 | 
			
		||||
			topics,
 | 
			
		||||
			data: data.to_vec()
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		Ok(())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fn ret(self, gas: &U256, data: &ReturnData, apply_state: bool) -> vm::Result<U256>
 | 
			
		||||
		where Self: Sized {
 | 
			
		||||
		match self.output {
 | 
			
		||||
@ -356,23 +382,6 @@ impl<'a, T: 'a, V: 'a, B: 'a> Ext for Externalities<'a, T, V, B>
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fn log(&mut self, topics: Vec<H256>, data: &[u8]) -> vm::Result<()> {
 | 
			
		||||
		use types::log_entry::LogEntry;
 | 
			
		||||
 | 
			
		||||
		if self.static_flag {
 | 
			
		||||
			return Err(vm::Error::MutableCallInStaticContext);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		let address = self.origin_info.address.clone();
 | 
			
		||||
		self.substate.logs.push(LogEntry {
 | 
			
		||||
			address: address,
 | 
			
		||||
			topics: topics,
 | 
			
		||||
			data: data.to_vec()
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		Ok(())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fn suicide(&mut self, refund_address: &Address) -> vm::Result<()> {
 | 
			
		||||
		if self.static_flag {
 | 
			
		||||
			return Err(vm::Error::MutableCallInStaticContext);
 | 
			
		||||
@ -430,19 +439,27 @@ impl<'a, T: 'a, V: 'a, B: 'a> Ext for Externalities<'a, T, V, B>
 | 
			
		||||
	fn trace_executed(&mut self, gas_used: U256, stack_push: &[U256], mem: &[u8]) {
 | 
			
		||||
		self.vm_tracer.trace_executed(gas_used, stack_push, mem)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fn is_static(&self) -> bool {
 | 
			
		||||
		return self.static_flag
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod tests {
 | 
			
		||||
	use std::str::FromStr;
 | 
			
		||||
	use ethereum_types::{U256, Address};
 | 
			
		||||
	use evm::{EnvInfo, Ext, CallType};
 | 
			
		||||
	use account_state::State;
 | 
			
		||||
	use substate::Substate;
 | 
			
		||||
	use test_helpers::get_temp_state;
 | 
			
		||||
	use super::*;
 | 
			
		||||
	use ethcore::test_helpers::get_temp_state;
 | 
			
		||||
	use trace::{NoopTracer, NoopVMTracer};
 | 
			
		||||
	use std::str::FromStr;
 | 
			
		||||
	use crate::spec;
 | 
			
		||||
 | 
			
		||||
	use crate::{
 | 
			
		||||
		machine::Machine,
 | 
			
		||||
		substate::Substate,
 | 
			
		||||
		test_helpers,
 | 
			
		||||
	};
 | 
			
		||||
	use super::*;
 | 
			
		||||
 | 
			
		||||
	fn get_test_origin() -> OriginInfo {
 | 
			
		||||
		OriginInfo {
 | 
			
		||||
@ -467,7 +484,7 @@ mod tests {
 | 
			
		||||
 | 
			
		||||
	struct TestSetup {
 | 
			
		||||
		state: State<::state_db::StateDB>,
 | 
			
		||||
		machine: ::machine::Machine,
 | 
			
		||||
		machine: Machine,
 | 
			
		||||
		schedule: Schedule,
 | 
			
		||||
		sub_state: Substate,
 | 
			
		||||
		env_info: EnvInfo
 | 
			
		||||
@ -481,15 +498,15 @@ mod tests {
 | 
			
		||||
 | 
			
		||||
	impl TestSetup {
 | 
			
		||||
		fn new() -> Self {
 | 
			
		||||
			let machine = spec::new_test_machine();
 | 
			
		||||
			let machine = test_helpers::load_machine(include_bytes!("../../res/null_morden.json"));
 | 
			
		||||
			let env_info = get_test_env_info();
 | 
			
		||||
			let schedule = machine.schedule(env_info.number);
 | 
			
		||||
			TestSetup {
 | 
			
		||||
				state: get_temp_state(),
 | 
			
		||||
				schedule: schedule,
 | 
			
		||||
				machine: machine,
 | 
			
		||||
				schedule,
 | 
			
		||||
				machine,
 | 
			
		||||
				sub_state: Substate::new(),
 | 
			
		||||
				env_info: env_info,
 | 
			
		||||
				env_info,
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
							
								
								
									
										36
									
								
								ethcore/machine/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								ethcore/machine/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
			
		||||
// 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/>.
 | 
			
		||||
 | 
			
		||||
//! This crate provides a state machine and the facilities needed to execute transactions and the
 | 
			
		||||
//! code contained therein, as well as contract based transaction permissions. All ethereum
 | 
			
		||||
//! engines embed a `Machine`.
 | 
			
		||||
 | 
			
		||||
pub mod executed;
 | 
			
		||||
pub mod executed_block;
 | 
			
		||||
pub mod executive;
 | 
			
		||||
pub mod externalities;
 | 
			
		||||
pub mod machine;
 | 
			
		||||
pub mod substate;
 | 
			
		||||
pub mod transaction_ext;
 | 
			
		||||
pub mod tx_filter;
 | 
			
		||||
 | 
			
		||||
pub use crate::{
 | 
			
		||||
	executed_block::ExecutedBlock,
 | 
			
		||||
	machine::Machine
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#[cfg(any(test, feature = "test-helpers"))]
 | 
			
		||||
pub mod test_helpers;
 | 
			
		||||
@ -22,7 +22,9 @@ use std::sync::Arc;
 | 
			
		||||
 | 
			
		||||
use ethereum_types::{U256, H256, Address};
 | 
			
		||||
use rlp::Rlp;
 | 
			
		||||
use types::{
 | 
			
		||||
use log::debug;
 | 
			
		||||
 | 
			
		||||
use common_types::{
 | 
			
		||||
	BlockNumber,
 | 
			
		||||
	header::Header,
 | 
			
		||||
	engines::{
 | 
			
		||||
@ -35,15 +37,18 @@ use types::{
 | 
			
		||||
use vm::{CallType, ActionParams, ActionValue, ParamsType};
 | 
			
		||||
use vm::{EnvInfo, Schedule};
 | 
			
		||||
 | 
			
		||||
use block::ExecutedBlock;
 | 
			
		||||
use builtin::Builtin;
 | 
			
		||||
use call_contract::CallContract;
 | 
			
		||||
use client::BlockInfo;
 | 
			
		||||
use executive::Executive;
 | 
			
		||||
use account_state::CleanupMode;
 | 
			
		||||
use substate::Substate;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use ethcore_builtin::Builtin;
 | 
			
		||||
use ethcore_call_contract::CallContract;
 | 
			
		||||
use trace::{NoopTracer, NoopVMTracer};
 | 
			
		||||
use tx_filter::TransactionFilter;
 | 
			
		||||
 | 
			
		||||
use crate::{
 | 
			
		||||
	executed_block::ExecutedBlock,
 | 
			
		||||
	executive::Executive,
 | 
			
		||||
	substate::Substate,
 | 
			
		||||
	tx_filter::TransactionFilter,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Parity tries to round block.gas_limit to multiple of this constant
 | 
			
		||||
pub const PARITY_GAS_LIMIT_DETERMINANT: U256 = U256([37, 0, 0, 0]);
 | 
			
		||||
@ -93,7 +98,7 @@ impl Machine {
 | 
			
		||||
 | 
			
		||||
	/// Execute a call as the system address. Block environment information passed to the
 | 
			
		||||
	/// VM is modified to have its gas limit bounded at the upper limit of possible used
 | 
			
		||||
	/// gases including this system call, capped at the maximum value able to be
 | 
			
		||||
	/// gas, including this system call, capped at the maximum value able to be
 | 
			
		||||
	/// represented by U256. This system call modifies the block state, but discards other
 | 
			
		||||
	/// information. If suicides, logs or refunds happen within the system call, they
 | 
			
		||||
	/// will not be executed or recorded. Gas used by this system call will not be counted
 | 
			
		||||
@ -400,9 +405,10 @@ fn round_block_gas_limit(gas_limit: U256, lower_limit: U256, upper_limit: U256)
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod tests {
 | 
			
		||||
	use super::*;
 | 
			
		||||
	use std::str::FromStr;
 | 
			
		||||
	use crate::spec;
 | 
			
		||||
	use common_types::header::Header;
 | 
			
		||||
	use super::*;
 | 
			
		||||
	use ethcore::spec;
 | 
			
		||||
 | 
			
		||||
	fn get_default_ethash_extensions() -> EthashExtensions {
 | 
			
		||||
		EthashExtensions {
 | 
			
		||||
@ -425,7 +431,7 @@ mod tests {
 | 
			
		||||
			Default::default(),
 | 
			
		||||
			ethparams,
 | 
			
		||||
		);
 | 
			
		||||
		let mut header = ::types::header::Header::new();
 | 
			
		||||
		let mut header = Header::new();
 | 
			
		||||
		header.set_number(15);
 | 
			
		||||
 | 
			
		||||
		let res = machine.verify_transaction_basic(&transaction, &header);
 | 
			
		||||
@ -445,8 +451,8 @@ mod tests {
 | 
			
		||||
			ethparams,
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		let mut parent = ::types::header::Header::new();
 | 
			
		||||
		let mut header = ::types::header::Header::new();
 | 
			
		||||
		let mut parent = Header::new();
 | 
			
		||||
		let mut header = Header::new();
 | 
			
		||||
		header.set_number(1);
 | 
			
		||||
 | 
			
		||||
		// this test will work for this constant only
 | 
			
		||||
@ -15,9 +15,10 @@
 | 
			
		||||
// along with Parity Ethereum.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
//! Execution environment substate.
 | 
			
		||||
 | 
			
		||||
use std::collections::HashSet;
 | 
			
		||||
use ethereum_types::Address;
 | 
			
		||||
use types::log_entry::LogEntry;
 | 
			
		||||
use common_types::log_entry::LogEntry;
 | 
			
		||||
 | 
			
		||||
/// State changes which should be applied in finalize,
 | 
			
		||||
/// after transaction is fully executed.
 | 
			
		||||
@ -58,7 +59,7 @@ impl Substate {
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod tests {
 | 
			
		||||
	use ethereum_types::Address;
 | 
			
		||||
	use types::log_entry::LogEntry;
 | 
			
		||||
	use common_types::log_entry::LogEntry;
 | 
			
		||||
	use super::Substate;
 | 
			
		||||
 | 
			
		||||
	#[test]
 | 
			
		||||
							
								
								
									
										60
									
								
								ethcore/machine/src/test_helpers.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								ethcore/machine/src/test_helpers.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,60 @@
 | 
			
		||||
// 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/>.
 | 
			
		||||
 | 
			
		||||
//! Provide facilities to create `Machine` instances for testing various networks.
 | 
			
		||||
 | 
			
		||||
use common_types::engines::params::CommonParams;
 | 
			
		||||
use ethjson;
 | 
			
		||||
use crate::Machine;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pub fn load_machine(reader: &[u8]) -> Machine {
 | 
			
		||||
	let spec = ethjson::spec::Spec::load(reader).expect("chain spec is invalid");
 | 
			
		||||
 | 
			
		||||
	let builtins = spec.accounts.builtins().into_iter().map(|p| (p.0.into(), From::from(p.1))).collect();
 | 
			
		||||
	let params = CommonParams::from(spec.params);
 | 
			
		||||
 | 
			
		||||
	if let ethjson::spec::Engine::Ethash(ref ethash) = spec.engine {
 | 
			
		||||
		Machine::with_ethash_extensions(params, builtins, ethash.params.clone().into())
 | 
			
		||||
	} else {
 | 
			
		||||
		Machine::regular(params, builtins)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Create a new Foundation Frontier-era chain spec as though it never changes to Homestead.
 | 
			
		||||
pub fn new_frontier_test_machine() -> Machine { load_machine(include_bytes!("../../res/ethereum/frontier_test.json")) }
 | 
			
		||||
 | 
			
		||||
/// Create a new Foundation Homestead-era chain spec as though it never changed from Frontier.
 | 
			
		||||
pub fn new_homestead_test_machine() -> Machine { load_machine(include_bytes!("../../res/ethereum/homestead_test.json")) }
 | 
			
		||||
 | 
			
		||||
/// Create a new Foundation Homestead-EIP210-era chain spec as though it never changed from Homestead/Frontier.
 | 
			
		||||
pub fn new_eip210_test_machine() -> Machine { load_machine(include_bytes!("../../res/ethereum/eip210_test.json")) }
 | 
			
		||||
 | 
			
		||||
/// Create a new Foundation Byzantium era spec.
 | 
			
		||||
pub fn new_byzantium_test_machine() -> Machine { load_machine(include_bytes!("../../res/ethereum/byzantium_test.json")) }
 | 
			
		||||
 | 
			
		||||
/// Create a new Foundation Constantinople era spec.
 | 
			
		||||
pub fn new_constantinople_test_machine() -> Machine { load_machine(include_bytes!("../../res/ethereum/constantinople_test.json")) }
 | 
			
		||||
 | 
			
		||||
/// Create a new Foundation St. Peter's (Contantinople Fix) era spec.
 | 
			
		||||
pub fn new_constantinople_fix_test_machine() -> Machine { load_machine(include_bytes!("../../res/ethereum/st_peters_test.json")) }
 | 
			
		||||
 | 
			
		||||
/// Create a new Musicoin-MCIP3-era spec.
 | 
			
		||||
pub fn new_mcip3_test_machine() -> Machine { load_machine(include_bytes!("../../res/ethereum/mcip3_test.json")) }
 | 
			
		||||
 | 
			
		||||
/// Create new Kovan spec with wasm activated at certain block
 | 
			
		||||
pub fn new_kovan_wasm_test_machine() -> Machine { load_machine(include_bytes!("../../res/ethereum/kovan_wasm_test.json")) }
 | 
			
		||||
@ -17,7 +17,7 @@
 | 
			
		||||
//! Ethereum transaction
 | 
			
		||||
 | 
			
		||||
use evm::Schedule;
 | 
			
		||||
use types::transaction::{self, Action};
 | 
			
		||||
use common_types::transaction::{self, Action};
 | 
			
		||||
 | 
			
		||||
/// Extends transaction with gas verification method.
 | 
			
		||||
pub trait Transaction {
 | 
			
		||||
@ -16,22 +16,25 @@
 | 
			
		||||
 | 
			
		||||
//! Smart contract based transaction filter.
 | 
			
		||||
 | 
			
		||||
use ethereum_types::{H256, U256, Address};
 | 
			
		||||
use lru_cache::LruCache;
 | 
			
		||||
use ethabi::FunctionOutputDecoder;
 | 
			
		||||
use ethabi_contract::use_contract;
 | 
			
		||||
use ethereum_types::{H256, U256, Address};
 | 
			
		||||
use log::{trace, error};
 | 
			
		||||
use lru_cache::LruCache;
 | 
			
		||||
 | 
			
		||||
use call_contract::CallContract;
 | 
			
		||||
use client::{BlockId, BlockInfo};
 | 
			
		||||
use ethcore_call_contract::CallContract;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use parking_lot::Mutex;
 | 
			
		||||
use types::{
 | 
			
		||||
use common_types::{
 | 
			
		||||
	BlockNumber,
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	engines::params::CommonParams,
 | 
			
		||||
	transaction::{Action, SignedTransaction}
 | 
			
		||||
};
 | 
			
		||||
use hash::KECCAK_EMPTY;
 | 
			
		||||
use keccak_hash::KECCAK_EMPTY;
 | 
			
		||||
 | 
			
		||||
use_contract!(transact_acl_deprecated, "res/contracts/tx_acl_deprecated.json");
 | 
			
		||||
use_contract!(transact_acl, "res/contracts/tx_acl.json");
 | 
			
		||||
use_contract!(transact_acl_deprecated, "res/tx_acl_deprecated.json");
 | 
			
		||||
use_contract!(transact_acl, "res/tx_acl.json");
 | 
			
		||||
 | 
			
		||||
const MAX_CACHE_SIZE: usize = 4096;
 | 
			
		||||
 | 
			
		||||
@ -146,21 +149,29 @@ impl TransactionFilter {
 | 
			
		||||
mod test {
 | 
			
		||||
	use std::sync::Arc;
 | 
			
		||||
	use std::str::FromStr;
 | 
			
		||||
	use spec::Spec;
 | 
			
		||||
	use client::{BlockChainClient, Client, ClientConfig, BlockId};
 | 
			
		||||
	use miner::Miner;
 | 
			
		||||
	use ethereum_types::{U256, Address};
 | 
			
		||||
	use io::IoChannel;
 | 
			
		||||
	use ethkey::{Secret, KeyPair};
 | 
			
		||||
	use super::TransactionFilter;
 | 
			
		||||
	use types::transaction::{Transaction, Action};
 | 
			
		||||
 | 
			
		||||
	use tempdir::TempDir;
 | 
			
		||||
	use test_helpers;
 | 
			
		||||
	use ethereum_types::{U256, Address};
 | 
			
		||||
 | 
			
		||||
	use common_types::{
 | 
			
		||||
		ids::BlockId,
 | 
			
		||||
		transaction::{Transaction, Action}
 | 
			
		||||
	};
 | 
			
		||||
	use ethcore::{
 | 
			
		||||
		client::{BlockChainClient, Client, ClientConfig},
 | 
			
		||||
		spec::Spec,
 | 
			
		||||
		miner::Miner,
 | 
			
		||||
		test_helpers,
 | 
			
		||||
	};
 | 
			
		||||
	use ethkey::{Secret, KeyPair};
 | 
			
		||||
	use ethcore_io::IoChannel;
 | 
			
		||||
 | 
			
		||||
	use super::TransactionFilter;
 | 
			
		||||
 | 
			
		||||
	/// Contract code: https://gist.github.com/VladLupashevskyi/84f18eabb1e4afadf572cf92af3e7e7f
 | 
			
		||||
	#[test]
 | 
			
		||||
	fn transaction_filter() {
 | 
			
		||||
		let spec_data = include_str!("../res/tx_permission_tests/contract_ver_2_genesis.json");
 | 
			
		||||
		let spec_data = include_str!("../../res/tx_permission_tests/contract_ver_2_genesis.json");
 | 
			
		||||
 | 
			
		||||
		let db = test_helpers::new_db();
 | 
			
		||||
		let tempdir = TempDir::new("").unwrap();
 | 
			
		||||
@ -239,7 +250,7 @@ mod test {
 | 
			
		||||
	/// Contract code: https://gist.github.com/arkpar/38a87cb50165b7e683585eec71acb05a
 | 
			
		||||
	#[test]
 | 
			
		||||
	fn transaction_filter_deprecated() {
 | 
			
		||||
		let spec_data = include_str!("../res/tx_permission_tests/deprecated_contract_genesis.json");
 | 
			
		||||
		let spec_data = include_str!("../../res/tx_permission_tests/deprecated_contract_genesis.json");
 | 
			
		||||
 | 
			
		||||
		let db = test_helpers::new_db();
 | 
			
		||||
		let tempdir = TempDir::new("").unwrap();
 | 
			
		||||
@ -7,6 +7,7 @@ version = "1.12.0"
 | 
			
		||||
authors = ["Parity Technologies <admin@parity.io>"]
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
common-types = { path = "../types" }
 | 
			
		||||
ethcore = { path = ".."}
 | 
			
		||||
ethcore-network = { path = "../../util/network" }
 | 
			
		||||
ethcore-network-devp2p = { path = "../../util/network-devp2p" }
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@
 | 
			
		||||
 | 
			
		||||
//! Smart contract based node filter.
 | 
			
		||||
 | 
			
		||||
extern crate common_types;
 | 
			
		||||
extern crate ethabi;
 | 
			
		||||
extern crate ethcore;
 | 
			
		||||
extern crate ethcore_network as network;
 | 
			
		||||
@ -40,8 +41,8 @@ extern crate log;
 | 
			
		||||
use std::collections::{HashMap, VecDeque};
 | 
			
		||||
use std::sync::Weak;
 | 
			
		||||
 | 
			
		||||
use ethcore::client::{BlockChainClient, BlockId, ChainNotify, NewBlocks};
 | 
			
		||||
 | 
			
		||||
use common_types::ids::BlockId;
 | 
			
		||||
use ethcore::client::{BlockChainClient, ChainNotify, NewBlocks};
 | 
			
		||||
use ethereum_types::{H256, Address};
 | 
			
		||||
use ethabi::FunctionOutputDecoder;
 | 
			
		||||
use network::{ConnectionFilter, ConnectionDirection};
 | 
			
		||||
@ -68,7 +69,7 @@ pub const CACHE_SIZE: usize = MAX_NODES_IN_TABLE + 1024;
 | 
			
		||||
 | 
			
		||||
impl NodeFilter {
 | 
			
		||||
	/// Create a new instance. Accepts a contract address.
 | 
			
		||||
	pub fn new(client: Weak<BlockChainClient>, contract_address: Address) -> NodeFilter {
 | 
			
		||||
	pub fn new(client: Weak<dyn BlockChainClient>, contract_address: Address) -> NodeFilter {
 | 
			
		||||
		NodeFilter {
 | 
			
		||||
			client,
 | 
			
		||||
			contract_address,
 | 
			
		||||
 | 
			
		||||
@ -7,6 +7,7 @@ authors = ["Parity Technologies <admin@parity.io>"]
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
account-state = { path = "../account-state" }
 | 
			
		||||
client-traits = { path = "../client-traits" }
 | 
			
		||||
common-types = { path = "../types" }
 | 
			
		||||
derive_more = "0.14.0"
 | 
			
		||||
ethabi = "8.0"
 | 
			
		||||
@ -24,6 +25,7 @@ futures = "0.1"
 | 
			
		||||
parity-util-mem = "0.1"
 | 
			
		||||
keccak-hash = "0.2.0"
 | 
			
		||||
log = "0.4"
 | 
			
		||||
machine = { path = "../machine" }
 | 
			
		||||
parity-bytes = "0.1"
 | 
			
		||||
parity-crypto = "0.4.0"
 | 
			
		||||
parking_lot = "0.8"
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ use std::sync::Arc;
 | 
			
		||||
use parking_lot::RwLock;
 | 
			
		||||
use ethereum_types::{H256, Address};
 | 
			
		||||
use call_contract::{CallContract, RegistryInfo};
 | 
			
		||||
use ethcore::client::BlockId;
 | 
			
		||||
use types::ids::BlockId;
 | 
			
		||||
use ethabi::FunctionOutputDecoder;
 | 
			
		||||
 | 
			
		||||
const ACL_CHECKER_CONTRACT_REGISTRY_NAME: &'static str = "secretstore_acl_checker";
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,7 @@ mod error;
 | 
			
		||||
mod log;
 | 
			
		||||
 | 
			
		||||
extern crate account_state;
 | 
			
		||||
extern crate client_traits;
 | 
			
		||||
extern crate common_types as types;
 | 
			
		||||
extern crate ethabi;
 | 
			
		||||
extern crate ethcore;
 | 
			
		||||
@ -37,6 +38,7 @@ extern crate fetch;
 | 
			
		||||
extern crate futures;
 | 
			
		||||
extern crate parity_util_mem;
 | 
			
		||||
extern crate keccak_hash as hash;
 | 
			
		||||
extern crate machine;
 | 
			
		||||
extern crate parity_bytes as bytes;
 | 
			
		||||
extern crate parity_crypto as crypto;
 | 
			
		||||
extern crate parking_lot;
 | 
			
		||||
@ -87,14 +89,18 @@ use parking_lot::RwLock;
 | 
			
		||||
use bytes::Bytes;
 | 
			
		||||
use ethkey::{Signature, recover, public_to_address};
 | 
			
		||||
use io::IoChannel;
 | 
			
		||||
use ethcore::executive::{Executive, TransactOptions};
 | 
			
		||||
use ethcore::executed::{Executed};
 | 
			
		||||
use types::transaction::{SignedTransaction, Transaction, Action, UnverifiedTransaction};
 | 
			
		||||
use ethcore::{contract_address as ethcore_contract_address};
 | 
			
		||||
use ethcore::client::{
 | 
			
		||||
	Client, ChainNotify, NewBlocks, ChainMessageType, ClientIoMessage, BlockId,
 | 
			
		||||
	Call, BlockInfo
 | 
			
		||||
use machine::{
 | 
			
		||||
	executive::{Executive, TransactOptions, contract_address as ethcore_contract_address},
 | 
			
		||||
	executed::Executed,
 | 
			
		||||
};
 | 
			
		||||
use types::{
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	transaction::{SignedTransaction, Transaction, Action, UnverifiedTransaction}
 | 
			
		||||
};
 | 
			
		||||
use ethcore::client::{
 | 
			
		||||
	Client, ChainNotify, NewBlocks, ChainMessageType, ClientIoMessage, Call
 | 
			
		||||
};
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use ethcore::miner::{self, Miner, MinerService, pool_client::NonceCache};
 | 
			
		||||
use state_db::StateDB;
 | 
			
		||||
use account_state::State;
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,7 @@ extern crate ethcore_private_tx;
 | 
			
		||||
extern crate ethkey;
 | 
			
		||||
extern crate keccak_hash as hash;
 | 
			
		||||
extern crate rustc_hex;
 | 
			
		||||
extern crate machine;
 | 
			
		||||
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate log;
 | 
			
		||||
@ -33,13 +34,15 @@ use rustc_hex::{FromHex, ToHex};
 | 
			
		||||
 | 
			
		||||
use types::ids::BlockId;
 | 
			
		||||
use types::transaction::{Transaction, Action};
 | 
			
		||||
use ethcore::CreateContractAddress;
 | 
			
		||||
use ethcore::client::BlockChainClient;
 | 
			
		||||
use ethcore::executive::contract_address;
 | 
			
		||||
use ethcore::miner::Miner;
 | 
			
		||||
use ethcore::test_helpers::{generate_dummy_client, push_block_with_transactions};
 | 
			
		||||
use ethcore::spec;
 | 
			
		||||
use ethcore::{
 | 
			
		||||
	CreateContractAddress,
 | 
			
		||||
	client::BlockChainClient,
 | 
			
		||||
	test_helpers::{generate_dummy_client, push_block_with_transactions},
 | 
			
		||||
	miner::Miner,
 | 
			
		||||
	spec,
 | 
			
		||||
};
 | 
			
		||||
use ethkey::{Secret, KeyPair, Signature};
 | 
			
		||||
use machine::executive::contract_address;
 | 
			
		||||
use hash::keccak;
 | 
			
		||||
 | 
			
		||||
use ethcore_private_tx::{NoopEncryptor, Provider, ProviderConfig, StoringKeyProvider};
 | 
			
		||||
 | 
			
		||||
@ -28,11 +28,10 @@
 | 
			
		||||
//! `LockedBlock` is a version of a `ClosedBlock` that cannot be reopened. It can be sealed
 | 
			
		||||
//! using an engine.
 | 
			
		||||
//!
 | 
			
		||||
//! `ExecutedBlock` is an underlying data structure used by all structs above to store block
 | 
			
		||||
//! related info.
 | 
			
		||||
//! `ExecutedBlock` from the `machine` crate is the underlying data structure used by all structs
 | 
			
		||||
//! above to store block related info.
 | 
			
		||||
 | 
			
		||||
use std::{cmp, ops};
 | 
			
		||||
use std::collections::HashSet;
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
 | 
			
		||||
use bytes::Bytes;
 | 
			
		||||
@ -45,7 +44,7 @@ use account_state::State;
 | 
			
		||||
use trace::Tracing;
 | 
			
		||||
use triehash::ordered_trie_root;
 | 
			
		||||
use unexpected::{Mismatch, OutOfBounds};
 | 
			
		||||
use vm::{EnvInfo, LastHashes};
 | 
			
		||||
use vm::LastHashes;
 | 
			
		||||
 | 
			
		||||
use hash::keccak;
 | 
			
		||||
use rlp::{RlpStream, Encodable, encode_list};
 | 
			
		||||
@ -57,6 +56,7 @@ use types::{
 | 
			
		||||
	receipt::{Receipt, TransactionOutcome},
 | 
			
		||||
};
 | 
			
		||||
use executive_state::ExecutiveState;
 | 
			
		||||
use machine::ExecutedBlock;
 | 
			
		||||
 | 
			
		||||
/// Block that is ready for transactions to be added.
 | 
			
		||||
///
 | 
			
		||||
@ -94,71 +94,6 @@ pub struct SealedBlock {
 | 
			
		||||
	block: ExecutedBlock,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// An internal type for a block's common elements.
 | 
			
		||||
#[derive(Clone)]
 | 
			
		||||
pub struct ExecutedBlock {
 | 
			
		||||
	/// Executed block header.
 | 
			
		||||
	pub header: Header,
 | 
			
		||||
	/// Executed transactions.
 | 
			
		||||
	pub transactions: Vec<SignedTransaction>,
 | 
			
		||||
	/// Uncles.
 | 
			
		||||
	pub uncles: Vec<Header>,
 | 
			
		||||
	/// Transaction receipts.
 | 
			
		||||
	pub receipts: Vec<Receipt>,
 | 
			
		||||
	/// Hashes of already executed transactions.
 | 
			
		||||
	pub transactions_set: HashSet<H256>,
 | 
			
		||||
	/// Underlying state.
 | 
			
		||||
	pub state: State<StateDB>,
 | 
			
		||||
	/// Transaction traces.
 | 
			
		||||
	pub traces: Tracing,
 | 
			
		||||
	/// Hashes of last 256 blocks.
 | 
			
		||||
	pub last_hashes: Arc<LastHashes>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl ExecutedBlock {
 | 
			
		||||
	/// Create a new block from the given `state`.
 | 
			
		||||
	fn new(state: State<StateDB>, last_hashes: Arc<LastHashes>, tracing: bool) -> ExecutedBlock {
 | 
			
		||||
		ExecutedBlock {
 | 
			
		||||
			header: Default::default(),
 | 
			
		||||
			transactions: Default::default(),
 | 
			
		||||
			uncles: Default::default(),
 | 
			
		||||
			receipts: Default::default(),
 | 
			
		||||
			transactions_set: Default::default(),
 | 
			
		||||
			state,
 | 
			
		||||
			traces: if tracing {
 | 
			
		||||
				Tracing::enabled()
 | 
			
		||||
			} else {
 | 
			
		||||
				Tracing::Disabled
 | 
			
		||||
			},
 | 
			
		||||
			last_hashes,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/// Get the environment info concerning this block.
 | 
			
		||||
	pub fn env_info(&self) -> EnvInfo {
 | 
			
		||||
		// TODO: memoise.
 | 
			
		||||
		EnvInfo {
 | 
			
		||||
			number: self.header.number(),
 | 
			
		||||
			author: self.header.author().clone(),
 | 
			
		||||
			timestamp: self.header.timestamp(),
 | 
			
		||||
			difficulty: self.header.difficulty().clone(),
 | 
			
		||||
			last_hashes: self.last_hashes.clone(),
 | 
			
		||||
			gas_used: self.receipts.last().map_or(U256::zero(), |r| r.gas_used),
 | 
			
		||||
			gas_limit: self.header.gas_limit().clone(),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/// Get mutable access to a state.
 | 
			
		||||
	pub fn state_mut(&mut self) -> &mut State<StateDB> {
 | 
			
		||||
		&mut self.state
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/// Get mutable reference to traces.
 | 
			
		||||
	pub fn traces_mut(&mut self) -> &mut Tracing {
 | 
			
		||||
		&mut self.traces
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Trait for an object that owns an `ExecutedBlock`
 | 
			
		||||
pub trait Drain {
 | 
			
		||||
	/// Returns `ExecutedBlock`
 | 
			
		||||
 | 
			
		||||
@ -46,13 +46,18 @@ use client::{
 | 
			
		||||
	BlockChainReset
 | 
			
		||||
};
 | 
			
		||||
use client::{
 | 
			
		||||
	BlockId, TransactionId, UncleId, TraceId, ClientConfig, BlockChainClient,
 | 
			
		||||
	ClientConfig, BlockChainClient,
 | 
			
		||||
	TraceFilter, CallAnalytics, Mode,
 | 
			
		||||
	ChainNotify, NewBlocks, ChainRoute, PruningInfo, ProvingBlockChainClient, EngineInfo, ChainMessageType,
 | 
			
		||||
	IoClient, BadBlocks, bad_blocks, BlockInfo, ClientIoMessage,
 | 
			
		||||
	IoClient, BadBlocks, bad_blocks, ClientIoMessage,
 | 
			
		||||
};
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use engines::{Engine, EpochTransition, ForkChoice};
 | 
			
		||||
use executive::{Executive, Executed, TransactOptions, contract_address};
 | 
			
		||||
use machine::{
 | 
			
		||||
	executed::Executed,
 | 
			
		||||
	executive::{Executive, TransactOptions, contract_address},
 | 
			
		||||
	transaction_ext::Transaction,
 | 
			
		||||
};
 | 
			
		||||
use trie_vm_factories::{Factories, VmFactory};
 | 
			
		||||
use miner::{Miner, MinerService};
 | 
			
		||||
use snapshot::{self, io as snapshot_io, SnapshotClient};
 | 
			
		||||
@ -61,7 +66,6 @@ use account_state::State;
 | 
			
		||||
use executive_state;
 | 
			
		||||
use state_db::StateDB;
 | 
			
		||||
use trace::{self, TraceDB, ImportRequest as TraceImportRequest, LocalizedTrace, Database as TraceDatabase};
 | 
			
		||||
use transaction_ext::Transaction;
 | 
			
		||||
use types::{
 | 
			
		||||
	ancestry_action::AncestryAction,
 | 
			
		||||
	BlockNumber,
 | 
			
		||||
@ -74,6 +78,7 @@ use types::{
 | 
			
		||||
		machine::{AuxiliaryData, Call as MachineCall},
 | 
			
		||||
	},
 | 
			
		||||
	errors::{EngineError, ExecutionError, BlockError, EthcoreError, SnapshotError, ImportError, EthcoreResult},
 | 
			
		||||
	ids::{BlockId, TransactionId, UncleId, TraceId},
 | 
			
		||||
	transaction::{self, LocalizedTransaction, UnverifiedTransaction, SignedTransaction, Action, CallError},
 | 
			
		||||
	filter::Filter,
 | 
			
		||||
	log_entry::LocalizedLogEntry,
 | 
			
		||||
@ -1759,7 +1764,7 @@ impl BlockChainClient for Client {
 | 
			
		||||
		self.config.spec_name.clone()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fn chain(&self) -> Arc<BlockProvider> {
 | 
			
		||||
	fn chain(&self) -> Arc<dyn BlockProvider> {
 | 
			
		||||
		self.chain.read().clone()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -2652,20 +2657,27 @@ impl IoChannelQueue {
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod tests {
 | 
			
		||||
	use ethereum_types::{H256, Address};
 | 
			
		||||
	use client::{BlockChainClient, ChainInfo};
 | 
			
		||||
	use types::{
 | 
			
		||||
		encoded,
 | 
			
		||||
		ids::{BlockId, TransactionId},
 | 
			
		||||
		log_entry::{LogEntry, LocalizedLogEntry},
 | 
			
		||||
		receipt::{Receipt, LocalizedReceipt, TransactionOutcome},
 | 
			
		||||
		transaction::{Transaction, LocalizedTransaction, Action},
 | 
			
		||||
	};
 | 
			
		||||
	use test_helpers::{generate_dummy_client, get_good_dummy_block_hash, generate_dummy_client_with_data};
 | 
			
		||||
	use std::thread;
 | 
			
		||||
	use std::time::Duration;
 | 
			
		||||
	use std::sync::Arc;
 | 
			
		||||
	use std::sync::atomic::{AtomicBool, Ordering};
 | 
			
		||||
	use kvdb::DBTransaction;
 | 
			
		||||
	use blockchain::ExtrasInsert;
 | 
			
		||||
	use hash::keccak;
 | 
			
		||||
	use super::transaction_receipt;
 | 
			
		||||
	use ethkey::KeyPair;
 | 
			
		||||
 | 
			
		||||
	#[test]
 | 
			
		||||
	fn should_not_cache_details_before_commit() {
 | 
			
		||||
		use client::{BlockChainClient, ChainInfo};
 | 
			
		||||
		use test_helpers::{generate_dummy_client, get_good_dummy_block_hash};
 | 
			
		||||
 | 
			
		||||
		use std::thread;
 | 
			
		||||
		use std::time::Duration;
 | 
			
		||||
		use std::sync::Arc;
 | 
			
		||||
		use std::sync::atomic::{AtomicBool, Ordering};
 | 
			
		||||
		use kvdb::DBTransaction;
 | 
			
		||||
		use blockchain::ExtrasInsert;
 | 
			
		||||
		use types::encoded;
 | 
			
		||||
 | 
			
		||||
		let client = generate_dummy_client(0);
 | 
			
		||||
		let genesis = client.chain_info().best_block_hash;
 | 
			
		||||
		let (new_hash, new_block) = get_good_dummy_block_hash();
 | 
			
		||||
@ -2693,9 +2705,6 @@ mod tests {
 | 
			
		||||
 | 
			
		||||
	#[test]
 | 
			
		||||
	fn should_return_block_receipts() {
 | 
			
		||||
		use client::{BlockChainClient, BlockId, TransactionId};
 | 
			
		||||
		use test_helpers::{generate_dummy_client_with_data};
 | 
			
		||||
 | 
			
		||||
		let client = generate_dummy_client_with_data(2, 2, &[1.into(), 1.into()]);
 | 
			
		||||
		let receipts = client.localized_block_receipts(BlockId::Latest).unwrap();
 | 
			
		||||
 | 
			
		||||
@ -2719,13 +2728,6 @@ mod tests {
 | 
			
		||||
 | 
			
		||||
	#[test]
 | 
			
		||||
	fn should_return_correct_log_index() {
 | 
			
		||||
		use hash::keccak;
 | 
			
		||||
		use super::transaction_receipt;
 | 
			
		||||
		use ethkey::KeyPair;
 | 
			
		||||
		use types::log_entry::{LogEntry, LocalizedLogEntry};
 | 
			
		||||
		use types::receipt::{Receipt, LocalizedReceipt, TransactionOutcome};
 | 
			
		||||
		use types::transaction::{Transaction, LocalizedTransaction, Action};
 | 
			
		||||
 | 
			
		||||
		// given
 | 
			
		||||
		let key = KeyPair::from_secret_slice(keccak("test").as_bytes()).unwrap();
 | 
			
		||||
		let secret = key.secret();
 | 
			
		||||
 | 
			
		||||
@ -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, executive, trace, db, spec};
 | 
			
		||||
use {state_db, client, trace, db, spec};
 | 
			
		||||
use pod::PodState;
 | 
			
		||||
use types::{
 | 
			
		||||
	errors::EthcoreError,
 | 
			
		||||
@ -35,7 +35,11 @@ use evm::{VMType, FinalizationResult};
 | 
			
		||||
use vm::{self, ActionParams, CreateContractAddress};
 | 
			
		||||
use ethtrie;
 | 
			
		||||
use account_state::{CleanupMode, State};
 | 
			
		||||
use substate::Substate;
 | 
			
		||||
use machine::{
 | 
			
		||||
	executive,
 | 
			
		||||
	substate::Substate,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use executive_state::ExecutiveState;
 | 
			
		||||
 | 
			
		||||
/// EVM test Error.
 | 
			
		||||
 | 
			
		||||
@ -35,19 +35,18 @@ pub use self::io_message::ClientIoMessage;
 | 
			
		||||
pub use self::test_client::{TestBlockChainClient, EachBlockWith, TestState};
 | 
			
		||||
pub use self::chain_notify::{ChainNotify, NewBlocks, ChainRoute, ChainRouteType, ChainMessageType};
 | 
			
		||||
pub use self::traits::{
 | 
			
		||||
    Nonce, Balance, ChainInfo, BlockInfo, ReopenBlock, PrepareOpenBlock, TransactionInfo, ScheduleInfo, ImportSealedBlock, BroadcastProposalBlock, ImportBlock,
 | 
			
		||||
    Nonce, Balance, ChainInfo, ReopenBlock, PrepareOpenBlock, TransactionInfo, ScheduleInfo, ImportSealedBlock, BroadcastProposalBlock, ImportBlock,
 | 
			
		||||
    StateOrBlock, StateClient, Call, EngineInfo, AccountData, BlockChain, BlockProducer, SealedBlockImporter, BadBlocks,
 | 
			
		||||
	BlockChainReset
 | 
			
		||||
	BlockChainReset, BlockChainClient, EngineClient, ProvingBlockChainClient, IoClient
 | 
			
		||||
};
 | 
			
		||||
pub use account_state::state::StateInfo;
 | 
			
		||||
pub use self::traits::{BlockChainClient, EngineClient, ProvingBlockChainClient, IoClient};
 | 
			
		||||
 | 
			
		||||
pub use types::ids::*;
 | 
			
		||||
pub use types::trace_filter::Filter as TraceFilter;
 | 
			
		||||
pub use types::pruning_info::PruningInfo;
 | 
			
		||||
pub use types::call_analytics::CallAnalytics;
 | 
			
		||||
use types::{
 | 
			
		||||
	trace_filter::Filter as TraceFilter,
 | 
			
		||||
	pruning_info::PruningInfo,
 | 
			
		||||
	call_analytics::CallAnalytics,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub use executive::{Executed, Executive, TransactOptions};
 | 
			
		||||
pub use vm::{LastHashes, EnvInfo};
 | 
			
		||||
 | 
			
		||||
pub use verification::VerifierType;
 | 
			
		||||
 | 
			
		||||
@ -37,33 +37,37 @@ use kvdb_memorydb;
 | 
			
		||||
use parking_lot::RwLock;
 | 
			
		||||
use rlp::{Rlp, RlpStream};
 | 
			
		||||
use rustc_hex::FromHex;
 | 
			
		||||
use types::transaction::{self, Transaction, LocalizedTransaction, SignedTransaction, Action, CallError};
 | 
			
		||||
use types::BlockNumber;
 | 
			
		||||
use types::basic_account::BasicAccount;
 | 
			
		||||
use types::encoded;
 | 
			
		||||
use types::errors::{EthcoreError as Error, EthcoreResult};
 | 
			
		||||
use types::filter::Filter;
 | 
			
		||||
use types::header::Header;
 | 
			
		||||
use types::log_entry::LocalizedLogEntry;
 | 
			
		||||
use types::pruning_info::PruningInfo;
 | 
			
		||||
use types::receipt::{Receipt, LocalizedReceipt, TransactionOutcome};
 | 
			
		||||
use types::view;
 | 
			
		||||
use types::views::BlockView;
 | 
			
		||||
use types::{
 | 
			
		||||
	BlockNumber,
 | 
			
		||||
	encoded,
 | 
			
		||||
	ids::{BlockId, TransactionId, UncleId, TraceId},
 | 
			
		||||
	basic_account::BasicAccount,
 | 
			
		||||
	errors::{EthcoreError as Error, EthcoreResult},
 | 
			
		||||
	transaction::{self, Transaction, LocalizedTransaction, SignedTransaction, Action, CallError},
 | 
			
		||||
	filter::Filter,
 | 
			
		||||
	trace_filter::Filter as TraceFilter,
 | 
			
		||||
	call_analytics::CallAnalytics,
 | 
			
		||||
	header::Header,
 | 
			
		||||
	log_entry::LocalizedLogEntry,
 | 
			
		||||
	pruning_info::PruningInfo,
 | 
			
		||||
	receipt::{Receipt, LocalizedReceipt, TransactionOutcome},
 | 
			
		||||
	view,
 | 
			
		||||
	views::BlockView,
 | 
			
		||||
};
 | 
			
		||||
use vm::Schedule;
 | 
			
		||||
 | 
			
		||||
use block::{OpenBlock, SealedBlock, ClosedBlock};
 | 
			
		||||
use call_contract::{CallContract, RegistryInfo};
 | 
			
		||||
use client::{
 | 
			
		||||
	Nonce, Balance, ChainInfo, ReopenBlock, TransactionInfo,
 | 
			
		||||
	PrepareOpenBlock, BlockChainClient, BlockChainInfo, BlockStatus, BlockId, Mode,
 | 
			
		||||
	TransactionId, UncleId, TraceId, TraceFilter, LastHashes, CallAnalytics,
 | 
			
		||||
	ProvingBlockChainClient, ScheduleInfo, ImportSealedBlock, BroadcastProposalBlock, ImportBlock, StateOrBlock,
 | 
			
		||||
	Call, StateClient, EngineInfo, AccountData, BlockChain, BlockProducer, SealedBlockImporter, IoClient,
 | 
			
		||||
	BadBlocks
 | 
			
		||||
	PrepareOpenBlock, BlockChainClient, BlockChainInfo, BlockStatus, Mode,
 | 
			
		||||
	LastHashes, ProvingBlockChainClient, ScheduleInfo, ImportSealedBlock, BroadcastProposalBlock,
 | 
			
		||||
	ImportBlock, StateOrBlock, Call, StateClient, EngineInfo, AccountData, BlockChain, BlockProducer,
 | 
			
		||||
	SealedBlockImporter, IoClient, BadBlocks
 | 
			
		||||
};
 | 
			
		||||
use client::BlockInfo;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use engines::Engine;
 | 
			
		||||
use executive::Executed;
 | 
			
		||||
use machine::executed::Executed;
 | 
			
		||||
use journaldb;
 | 
			
		||||
use miner::{self, Miner, MinerService};
 | 
			
		||||
use spec::{Spec, self};
 | 
			
		||||
@ -704,7 +708,7 @@ impl BlockChainClient for TestBlockChainClient {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fn chain(&self) -> Arc<BlockProvider> {
 | 
			
		||||
	fn chain(&self) -> Arc<dyn BlockProvider> {
 | 
			
		||||
		unimplemented!()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,7 @@ use std::sync::Arc;
 | 
			
		||||
use blockchain::{BlockReceipts, TreeRoute, BlockProvider};
 | 
			
		||||
use bytes::Bytes;
 | 
			
		||||
use call_contract::{CallContract, RegistryInfo};
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use ethcore_miner::pool::VerifiedTransaction;
 | 
			
		||||
use ethereum_types::{H256, U256, Address};
 | 
			
		||||
use evm::Schedule;
 | 
			
		||||
@ -49,7 +50,7 @@ use vm::LastHashes;
 | 
			
		||||
use block::{OpenBlock, SealedBlock, ClosedBlock};
 | 
			
		||||
use client::Mode;
 | 
			
		||||
use engines::Engine;
 | 
			
		||||
use executive::Executed;
 | 
			
		||||
use machine::executed::Executed;
 | 
			
		||||
use account_state::state::StateInfo;
 | 
			
		||||
use trace::LocalizedTrace;
 | 
			
		||||
use verification::queue::kind::blocks::Unverified; // todo this is reexported from common_types
 | 
			
		||||
@ -114,21 +115,6 @@ pub trait ChainInfo {
 | 
			
		||||
	fn chain_info(&self) -> BlockChainInfo;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Provides various information on a block by it's ID
 | 
			
		||||
pub trait BlockInfo {
 | 
			
		||||
	/// Get raw block header data by block id.
 | 
			
		||||
	fn block_header(&self, id: BlockId) -> Option<encoded::Header>;
 | 
			
		||||
 | 
			
		||||
	/// Get the best block header.
 | 
			
		||||
	fn best_block_header(&self) -> Header;
 | 
			
		||||
 | 
			
		||||
	/// Get raw block data by block header hash.
 | 
			
		||||
	fn block(&self, id: BlockId) -> Option<encoded::Block>;
 | 
			
		||||
 | 
			
		||||
	/// Get address code hash at given block's state.
 | 
			
		||||
	fn code_hash(&self, address: &Address, id: BlockId) -> Option<H256>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Provides various information on a transaction by it's ID
 | 
			
		||||
pub trait TransactionInfo {
 | 
			
		||||
	/// Get the hash of block that contains the transaction, if any.
 | 
			
		||||
@ -233,7 +219,8 @@ pub trait BlockChainClient : Sync + Send + AccountData + BlockChain + CallContra
 | 
			
		||||
			.expect("code will return Some if given BlockId::Latest; qed")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fn chain(&self) -> Arc<BlockProvider>;
 | 
			
		||||
	/// Get a reference to the `BlockProvider`.
 | 
			
		||||
	fn chain(&self) -> Arc<dyn BlockProvider>;
 | 
			
		||||
 | 
			
		||||
	/// Get block queue information.
 | 
			
		||||
	fn queue_info(&self) -> BlockQueueInfo;
 | 
			
		||||
 | 
			
		||||
@ -24,13 +24,15 @@ use std::sync::atomic::{AtomicUsize, AtomicBool, Ordering as AtomicOrdering};
 | 
			
		||||
use std::sync::{Weak, Arc};
 | 
			
		||||
use std::time::{UNIX_EPOCH, Duration};
 | 
			
		||||
 | 
			
		||||
use block::*;
 | 
			
		||||
use client::EngineClient;
 | 
			
		||||
use engines::{Engine, Seal, ConstructedVerifier};
 | 
			
		||||
use engines::block_reward;
 | 
			
		||||
use engines::block_reward::{BlockRewardContract, RewardKind};
 | 
			
		||||
use ethjson;
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use machine::{
 | 
			
		||||
	ExecutedBlock,
 | 
			
		||||
	Machine,
 | 
			
		||||
};
 | 
			
		||||
use hash::keccak;
 | 
			
		||||
use super::signer::EngineSigner;
 | 
			
		||||
use super::validator_set::{ValidatorSet, SimpleList, new_validator_set};
 | 
			
		||||
 | 
			
		||||
@ -20,12 +20,14 @@ use std::sync::Weak;
 | 
			
		||||
use ethereum_types::{H256, H520};
 | 
			
		||||
use parking_lot::RwLock;
 | 
			
		||||
use ethkey::{self, Signature};
 | 
			
		||||
use block::*;
 | 
			
		||||
use engines::{Engine, Seal, ConstructedVerifier};
 | 
			
		||||
use engines::signer::EngineSigner;
 | 
			
		||||
use ethjson;
 | 
			
		||||
use client::EngineClient;
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use machine::{
 | 
			
		||||
	Machine,
 | 
			
		||||
	executed_block::ExecutedBlock,
 | 
			
		||||
};
 | 
			
		||||
use types::{
 | 
			
		||||
	header::Header,
 | 
			
		||||
	engines::{
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,7 @@ use ethereum_types::{Address, U256};
 | 
			
		||||
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
use hash::keccak;
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use machine::{Machine, ExecutedBlock};
 | 
			
		||||
use trace;
 | 
			
		||||
use types::{
 | 
			
		||||
	BlockNumber,
 | 
			
		||||
@ -30,7 +30,6 @@ use types::{
 | 
			
		||||
};
 | 
			
		||||
use super::{SystemOrCodeCall, SystemOrCodeCallKind};
 | 
			
		||||
use trace::{Tracer, ExecutiveTracer, Tracing};
 | 
			
		||||
use block::ExecutedBlock;
 | 
			
		||||
 | 
			
		||||
use_contract!(block_reward_contract, "res/contracts/block_reward.json");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -65,8 +65,7 @@ use std::thread;
 | 
			
		||||
use std::time;
 | 
			
		||||
use std::time::{Instant, Duration, SystemTime, UNIX_EPOCH};
 | 
			
		||||
 | 
			
		||||
use block::ExecutedBlock;
 | 
			
		||||
use client::{BlockId, EngineClient};
 | 
			
		||||
use client::EngineClient;
 | 
			
		||||
use engines::clique::util::{extract_signers, recover_creator};
 | 
			
		||||
use engines::{Engine, Seal, SealingState, EthashSeal};
 | 
			
		||||
use ethereum_types::{Address, H64, H160, H256, U256};
 | 
			
		||||
@ -74,7 +73,10 @@ use ethkey::Signature;
 | 
			
		||||
use hash::KECCAK_EMPTY_LIST_RLP;
 | 
			
		||||
use itertools::Itertools;
 | 
			
		||||
use lru_cache::LruCache;
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use machine::{
 | 
			
		||||
	ExecutedBlock,
 | 
			
		||||
	Machine,
 | 
			
		||||
};
 | 
			
		||||
use parking_lot::RwLock;
 | 
			
		||||
use rand::Rng;
 | 
			
		||||
use super::signer::EngineSigner;
 | 
			
		||||
@ -82,6 +84,7 @@ use unexpected::{Mismatch, OutOfBounds};
 | 
			
		||||
use time_utils::CheckedSystemTime;
 | 
			
		||||
use types::{
 | 
			
		||||
	BlockNumber,
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	header::Header,
 | 
			
		||||
	engines::{
 | 
			
		||||
		params::CommonParams,
 | 
			
		||||
 | 
			
		||||
@ -32,11 +32,13 @@ use types::{
 | 
			
		||||
 | 
			
		||||
use unexpected::{OutOfBounds, Mismatch};
 | 
			
		||||
 | 
			
		||||
use block::ExecutedBlock;
 | 
			
		||||
use engines::block_reward::{self, BlockRewardContract, RewardKind};
 | 
			
		||||
use engines::{self, Engine};
 | 
			
		||||
use ethash::{self, quick_get_difficulty, slow_hash_block_number, EthashManager, OptimizeFor};
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use machine::{
 | 
			
		||||
	ExecutedBlock,
 | 
			
		||||
	Machine,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Number of blocks in an ethash snapshot.
 | 
			
		||||
// make dependent on difficulty increment divisor?
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,10 @@
 | 
			
		||||
// along with Parity Ethereum.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
use engines::{Engine, Seal};
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use machine::{
 | 
			
		||||
	ExecutedBlock,
 | 
			
		||||
	Machine
 | 
			
		||||
};
 | 
			
		||||
use types::{
 | 
			
		||||
	header::Header,
 | 
			
		||||
	engines::{
 | 
			
		||||
@ -25,7 +28,6 @@ use types::{
 | 
			
		||||
	errors::EthcoreError as Error,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use block::ExecutedBlock;
 | 
			
		||||
 | 
			
		||||
/// `InstantSeal` params.
 | 
			
		||||
#[derive(Default, Debug, PartialEq)]
 | 
			
		||||
 | 
			
		||||
@ -60,11 +60,13 @@ use types::{
 | 
			
		||||
use snapshot::SnapshotComponents;
 | 
			
		||||
use client::EngineClient;
 | 
			
		||||
 | 
			
		||||
use ethkey::{Signature};
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use ethkey::Signature;
 | 
			
		||||
use machine::{
 | 
			
		||||
	Machine,
 | 
			
		||||
	executed_block::ExecutedBlock,
 | 
			
		||||
};
 | 
			
		||||
use ethereum_types::{H256, U256, Address};
 | 
			
		||||
use bytes::Bytes;
 | 
			
		||||
use block::ExecutedBlock;
 | 
			
		||||
 | 
			
		||||
/// Seal type.
 | 
			
		||||
#[derive(Debug, PartialEq, Eq)]
 | 
			
		||||
@ -91,7 +93,7 @@ pub enum SystemOrCodeCallKind {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Default SystemOrCodeCall implementation.
 | 
			
		||||
pub fn default_system_or_code_call<'a>(machine: &'a Machine, block: &'a mut ::block::ExecutedBlock) -> impl FnMut(SystemOrCodeCallKind, Vec<u8>) -> Result<Vec<u8>, String> + 'a {
 | 
			
		||||
pub fn default_system_or_code_call<'a>(machine: &'a Machine, block: &'a mut ExecutedBlock) -> impl FnMut(SystemOrCodeCallKind, Vec<u8>) -> Result<Vec<u8>, String> + 'a {
 | 
			
		||||
	move |to, data| {
 | 
			
		||||
		let result = match to {
 | 
			
		||||
			SystemOrCodeCallKind::Address(address) => {
 | 
			
		||||
 | 
			
		||||
@ -17,14 +17,16 @@
 | 
			
		||||
use engines::Engine;
 | 
			
		||||
use engines::block_reward::{self, RewardKind};
 | 
			
		||||
use ethereum_types::U256;
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use machine::{
 | 
			
		||||
	ExecutedBlock,
 | 
			
		||||
	Machine,
 | 
			
		||||
};
 | 
			
		||||
use types::{
 | 
			
		||||
	BlockNumber,
 | 
			
		||||
	header::Header,
 | 
			
		||||
	engines::params::CommonParams,
 | 
			
		||||
	errors::EthcoreError as Error,
 | 
			
		||||
};
 | 
			
		||||
use block::ExecutedBlock;
 | 
			
		||||
 | 
			
		||||
/// Params for a null engine.
 | 
			
		||||
#[derive(Clone, Default)]
 | 
			
		||||
 | 
			
		||||
@ -152,7 +152,7 @@ mod tests {
 | 
			
		||||
	use test_helpers::generate_dummy_client_with_spec;
 | 
			
		||||
	use call_contract::CallContract;
 | 
			
		||||
	use client::{BlockChainClient, ChainInfo};
 | 
			
		||||
	use client::BlockInfo;
 | 
			
		||||
	use client_traits::BlockInfo;
 | 
			
		||||
	use super::super::ValidatorSet;
 | 
			
		||||
	use super::ValidatorContract;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -156,7 +156,7 @@ mod tests {
 | 
			
		||||
	use hash::keccak;
 | 
			
		||||
	use accounts::AccountProvider;
 | 
			
		||||
	use client::{BlockChainClient, ChainInfo, ImportBlock};
 | 
			
		||||
	use client::BlockInfo;
 | 
			
		||||
	use client_traits::BlockInfo;
 | 
			
		||||
	use engines::EpochChange;
 | 
			
		||||
	use engines::validator_set::ValidatorSet;
 | 
			
		||||
	use ethkey::Secret;
 | 
			
		||||
 | 
			
		||||
@ -458,7 +458,7 @@ mod tests {
 | 
			
		||||
	use accounts::AccountProvider;
 | 
			
		||||
	use types::transaction::{Transaction, Action};
 | 
			
		||||
	use client::{ChainInfo, ImportBlock};
 | 
			
		||||
	use client::BlockInfo;
 | 
			
		||||
	use client_traits::BlockInfo;
 | 
			
		||||
	use ethkey::Secret;
 | 
			
		||||
	use miner::{self, MinerService};
 | 
			
		||||
	use test_helpers::{generate_dummy_client_with_spec, generate_dummy_client_with_spec_and_data};
 | 
			
		||||
 | 
			
		||||
@ -18,10 +18,12 @@
 | 
			
		||||
//! `account-state` crates and contains everything that requires `Machine` or `Executive` (or types
 | 
			
		||||
//! thereof).
 | 
			
		||||
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use machine::{
 | 
			
		||||
	machine::Machine,
 | 
			
		||||
	executive::{Executive, TransactOptions},
 | 
			
		||||
	executed::Executed,
 | 
			
		||||
};
 | 
			
		||||
use vm::EnvInfo;
 | 
			
		||||
use executive::{Executive, TransactOptions};
 | 
			
		||||
use executed::Executed;
 | 
			
		||||
use types::{
 | 
			
		||||
	errors::{ExecutionError, EthcoreError as Error},
 | 
			
		||||
	transaction::SignedTransaction,
 | 
			
		||||
 | 
			
		||||
@ -18,24 +18,27 @@ use std::path::Path;
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
use super::test_common::*;
 | 
			
		||||
use account_state::{Backend as StateBackend, State};
 | 
			
		||||
use substate::Substate;
 | 
			
		||||
use executive::*;
 | 
			
		||||
use evm::{VMType, Finalize};
 | 
			
		||||
use vm::{
 | 
			
		||||
	self, ActionParams, CallType, Schedule, Ext,
 | 
			
		||||
	ContractCreateResult, EnvInfo, MessageCallResult,
 | 
			
		||||
	CreateContractAddress, ReturnData,
 | 
			
		||||
};
 | 
			
		||||
use externalities::*;
 | 
			
		||||
use machine::{
 | 
			
		||||
	Machine,
 | 
			
		||||
	externalities::{OutputPolicy, OriginInfo, Externalities},
 | 
			
		||||
	substate::Substate,
 | 
			
		||||
	executive::contract_address,
 | 
			
		||||
	test_helpers::new_frontier_test_machine,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use test_helpers::get_temp_state;
 | 
			
		||||
use ethjson;
 | 
			
		||||
use trace::{Tracer, NoopTracer};
 | 
			
		||||
use trace::{VMTracer, NoopVMTracer};
 | 
			
		||||
use trace::{Tracer, NoopTracer, VMTracer, NoopVMTracer};
 | 
			
		||||
use bytes::Bytes;
 | 
			
		||||
use ethtrie;
 | 
			
		||||
use rlp::RlpStream;
 | 
			
		||||
use hash::keccak;
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use ethereum_types::BigEndianHash;
 | 
			
		||||
use crate::spec;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,7 @@ use types::{
 | 
			
		||||
	errors::EthcoreError as Error,
 | 
			
		||||
	transaction::UnverifiedTransaction
 | 
			
		||||
};
 | 
			
		||||
use transaction_ext::Transaction;
 | 
			
		||||
use machine::transaction_ext::Transaction;
 | 
			
		||||
 | 
			
		||||
/// Run transaction jsontests on a given folder.
 | 
			
		||||
pub fn run_test_path<H: FnMut(&str, HookType)>(p: &Path, skip: &[&'static str], h: &mut H) {
 | 
			
		||||
 | 
			
		||||
@ -56,6 +56,7 @@
 | 
			
		||||
extern crate account_db;
 | 
			
		||||
extern crate account_state;
 | 
			
		||||
extern crate ansi_term;
 | 
			
		||||
extern crate client_traits;
 | 
			
		||||
extern crate common_types as types;
 | 
			
		||||
extern crate crossbeam_utils;
 | 
			
		||||
extern crate ethabi;
 | 
			
		||||
@ -83,6 +84,7 @@ extern crate kvdb_memorydb;
 | 
			
		||||
 | 
			
		||||
extern crate len_caching_lock;
 | 
			
		||||
extern crate lru_cache;
 | 
			
		||||
extern crate machine;
 | 
			
		||||
extern crate memory_cache;
 | 
			
		||||
extern crate num_cpus;
 | 
			
		||||
extern crate parity_bytes as bytes;
 | 
			
		||||
@ -125,8 +127,6 @@ extern crate env_logger;
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
extern crate serde_json;
 | 
			
		||||
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate ethabi_derive;
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate ethabi_contract;
 | 
			
		||||
#[macro_use]
 | 
			
		||||
@ -152,20 +152,12 @@ extern crate parity_runtime;
 | 
			
		||||
pub mod block;
 | 
			
		||||
pub mod client;
 | 
			
		||||
pub mod engines;
 | 
			
		||||
pub mod executed;
 | 
			
		||||
pub mod executive;
 | 
			
		||||
pub mod executive_state;
 | 
			
		||||
pub mod machine;
 | 
			
		||||
pub mod miner;
 | 
			
		||||
pub mod snapshot;
 | 
			
		||||
pub mod spec;
 | 
			
		||||
pub mod verification;
 | 
			
		||||
 | 
			
		||||
mod externalities;
 | 
			
		||||
mod substate;
 | 
			
		||||
mod transaction_ext;
 | 
			
		||||
mod tx_filter;
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod tests;
 | 
			
		||||
#[cfg(feature = "json-tests")]
 | 
			
		||||
@ -173,6 +165,5 @@ pub mod json_tests;
 | 
			
		||||
#[cfg(any(test, feature = "test-helpers"))]
 | 
			
		||||
pub mod test_helpers;
 | 
			
		||||
 | 
			
		||||
pub use executive::contract_address;
 | 
			
		||||
pub use evm::CreateContractAddress;
 | 
			
		||||
pub use trie::TrieSpec;
 | 
			
		||||
 | 
			
		||||
@ -45,8 +45,10 @@ use types::transaction::{
 | 
			
		||||
};
 | 
			
		||||
use types::{
 | 
			
		||||
	BlockNumber,
 | 
			
		||||
	ids::TransactionId,
 | 
			
		||||
	block::Block,
 | 
			
		||||
	header::Header,
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	engines::{SealingState},
 | 
			
		||||
	errors::{EthcoreError as Error, ExecutionError},
 | 
			
		||||
	receipt::RichReceipt,
 | 
			
		||||
@ -55,11 +57,10 @@ use using_queue::{UsingQueue, GetAction};
 | 
			
		||||
 | 
			
		||||
use block::{ClosedBlock, SealedBlock};
 | 
			
		||||
use client::{
 | 
			
		||||
	BlockChain, ChainInfo, BlockProducer, SealedBlockImporter, Nonce, TransactionInfo, TransactionId, ClientIoMessage,
 | 
			
		||||
	BlockChain, ChainInfo, BlockProducer, SealedBlockImporter, Nonce, TransactionInfo, ClientIoMessage,
 | 
			
		||||
};
 | 
			
		||||
use client::BlockId;
 | 
			
		||||
use engines::{Engine, Seal, EngineSigner};
 | 
			
		||||
use executive::contract_address;
 | 
			
		||||
use machine::executive::contract_address;
 | 
			
		||||
use spec::Spec;
 | 
			
		||||
use account_state::State;
 | 
			
		||||
use vm::CreateContractAddress;
 | 
			
		||||
 | 
			
		||||
@ -32,15 +32,18 @@ use types::transaction::{
 | 
			
		||||
	UnverifiedTransaction,
 | 
			
		||||
	SignedTransaction,
 | 
			
		||||
};
 | 
			
		||||
use types::header::Header;
 | 
			
		||||
use types::{
 | 
			
		||||
	header::Header,
 | 
			
		||||
	ids::TransactionId,
 | 
			
		||||
};
 | 
			
		||||
use parking_lot::RwLock;
 | 
			
		||||
 | 
			
		||||
use call_contract::CallContract;
 | 
			
		||||
use client::{TransactionId, Nonce};
 | 
			
		||||
use client::BlockInfo;
 | 
			
		||||
use client::Nonce;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use engines::Engine;
 | 
			
		||||
use machine::transaction_ext::Transaction;
 | 
			
		||||
use miner;
 | 
			
		||||
use transaction_ext::Transaction;
 | 
			
		||||
 | 
			
		||||
/// Cache for state nonces.
 | 
			
		||||
#[derive(Debug, Clone)]
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,8 @@ use super::{ManifestData, StateRebuilder, Rebuilder, RestorationStatus, Snapshot
 | 
			
		||||
use super::io::{SnapshotReader, LooseReader, SnapshotWriter, LooseWriter};
 | 
			
		||||
 | 
			
		||||
use blockchain::{BlockChain, BlockChainDB, BlockChainDBHandler};
 | 
			
		||||
use client::{BlockChainClient, Client, ChainInfo, BlockInfo, ClientIoMessage};
 | 
			
		||||
use client::{BlockChainClient, Client, ChainInfo, ClientIoMessage};
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use engines::Engine;
 | 
			
		||||
use hash::keccak;
 | 
			
		||||
use types::{
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,7 @@ use std::sync::Arc;
 | 
			
		||||
use tempdir::TempDir;
 | 
			
		||||
use blockchain::BlockProvider;
 | 
			
		||||
use client::{Client, ClientConfig, ImportBlock};
 | 
			
		||||
use client::BlockInfo;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use types::ids::BlockId;
 | 
			
		||||
use snapshot::io::{PackedReader, PackedWriter, SnapshotReader, SnapshotWriter};
 | 
			
		||||
use snapshot::service::{Service, ServiceParams};
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,8 @@
 | 
			
		||||
//! Watcher for snapshot-related chain events.
 | 
			
		||||
 | 
			
		||||
use parking_lot::Mutex;
 | 
			
		||||
use client::{BlockInfo, Client, ChainNotify, NewBlocks, ClientIoMessage};
 | 
			
		||||
use client::{Client, ChainNotify, NewBlocks, ClientIoMessage};
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use types::ids::BlockId;
 | 
			
		||||
 | 
			
		||||
use io::IoChannel;
 | 
			
		||||
 | 
			
		||||
@ -14,9 +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/>.
 | 
			
		||||
 | 
			
		||||
//! Ethereum protocol module.
 | 
			
		||||
//!
 | 
			
		||||
//! Loads all protocols supported by parity-ethereum client.
 | 
			
		||||
//! Load chain specifications for all chains supported by the parity-ethereum client.
 | 
			
		||||
 | 
			
		||||
macro_rules! bundle_release_spec {
 | 
			
		||||
	($($path: expr => $name: ident), *) => {
 | 
			
		||||
 | 
			
		||||
@ -43,14 +43,16 @@ use engines::{
 | 
			
		||||
	Engine, NullEngine, InstantSeal, InstantSealParams, BasicAuthority, Clique,
 | 
			
		||||
	AuthorityRound, Ethash,
 | 
			
		||||
};
 | 
			
		||||
use executive::Executive;
 | 
			
		||||
use machine::{
 | 
			
		||||
	executive::Executive,
 | 
			
		||||
	machine::Machine,
 | 
			
		||||
	substate::Substate,
 | 
			
		||||
};
 | 
			
		||||
use trie_vm_factories::Factories;
 | 
			
		||||
use machine::Machine;
 | 
			
		||||
use pod::PodState;
 | 
			
		||||
use spec::Genesis;
 | 
			
		||||
use spec::seal::Generic as GenericSeal;
 | 
			
		||||
use account_state::{Backend, State, backend::Basic as BasicBackend};
 | 
			
		||||
use substate::Substate;
 | 
			
		||||
use trace::{NoopTracer, NoopVMTracer};
 | 
			
		||||
 | 
			
		||||
pub use ethash::OptimizeFor;
 | 
			
		||||
@ -96,7 +98,7 @@ impl<'a, T: AsRef<Path>> From<&'a T> for SpecParams<'a> {
 | 
			
		||||
fn run_constructors<T: Backend>(
 | 
			
		||||
	genesis_state: &PodState,
 | 
			
		||||
	constructors: &[(Address, Bytes)],
 | 
			
		||||
	engine: &Engine,
 | 
			
		||||
	engine: &dyn Engine,
 | 
			
		||||
	author: Address,
 | 
			
		||||
	timestamp: u64,
 | 
			
		||||
	difficulty: U256,
 | 
			
		||||
 | 
			
		||||
@ -22,15 +22,18 @@ use ethkey::KeyPair;
 | 
			
		||||
use hash::keccak;
 | 
			
		||||
use io::IoChannel;
 | 
			
		||||
use tempdir::TempDir;
 | 
			
		||||
use types::transaction::{PendingTransaction, Transaction, Action, Condition};
 | 
			
		||||
use types::filter::Filter;
 | 
			
		||||
use types::view;
 | 
			
		||||
use types::views::BlockView;
 | 
			
		||||
use types::{
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	transaction::{PendingTransaction, Transaction, Action, Condition},
 | 
			
		||||
	filter::Filter,
 | 
			
		||||
	view,
 | 
			
		||||
	views::BlockView,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use client::{BlockChainClient, BlockChainReset, Client, ClientConfig, BlockId, ChainInfo, PrepareOpenBlock, ImportSealedBlock, ImportBlock};
 | 
			
		||||
use client::BlockInfo;
 | 
			
		||||
use client::{BlockChainClient, BlockChainReset, Client, ClientConfig, ChainInfo, PrepareOpenBlock, ImportSealedBlock, ImportBlock};
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use crate::spec;
 | 
			
		||||
use executive::{Executive, TransactOptions};
 | 
			
		||||
use machine::executive::{Executive, TransactOptions};
 | 
			
		||||
use miner::{Miner, PendingOrdering, MinerService};
 | 
			
		||||
use account_state::{State, CleanupMode, backend};
 | 
			
		||||
use test_helpers::{
 | 
			
		||||
 | 
			
		||||
@ -20,8 +20,11 @@ use std::sync::Arc;
 | 
			
		||||
use hash::keccak;
 | 
			
		||||
use vm::{EnvInfo, ActionParams, ActionValue, CallType, ParamsType};
 | 
			
		||||
use evm::{Factory, VMType};
 | 
			
		||||
use executive::Executive;
 | 
			
		||||
use substate::Substate;
 | 
			
		||||
use machine::{
 | 
			
		||||
	executive::Executive,
 | 
			
		||||
	substate::Substate,
 | 
			
		||||
	test_helpers::new_eip210_test_machine,
 | 
			
		||||
};
 | 
			
		||||
use test_helpers::get_temp_state_with_factory;
 | 
			
		||||
use trace::{NoopVMTracer, NoopTracer};
 | 
			
		||||
use types::transaction::SYSTEM_ADDRESS;
 | 
			
		||||
@ -29,7 +32,6 @@ use types::transaction::SYSTEM_ADDRESS;
 | 
			
		||||
use rustc_hex::FromHex;
 | 
			
		||||
 | 
			
		||||
use ethereum_types::{H256, Address};
 | 
			
		||||
use crate::spec;
 | 
			
		||||
 | 
			
		||||
evm_test!{test_blockhash_eip210: test_blockhash_eip210_int}
 | 
			
		||||
fn test_blockhash_eip210(factory: Factory) {
 | 
			
		||||
@ -39,7 +41,7 @@ fn test_blockhash_eip210(factory: Factory) {
 | 
			
		||||
	let test_blockhash_contract = "73fffffffffffffffffffffffffffffffffffffffe33141561007a57600143036020526000356101006020510755600061010060205107141561005057600035610100610100602051050761010001555b6000620100006020510714156100755760003561010062010000602051050761020001555b61014a565b4360003512151561009057600060405260206040f35b610100600035430312156100b357610100600035075460605260206060f3610149565b62010000600035430312156100d157600061010060003507146100d4565b60005b156100f6576101006101006000350507610100015460805260206080f3610148565b630100000060003543031215610116576000620100006000350714610119565b60005b1561013c57610100620100006000350507610200015460a052602060a0f3610147565b600060c052602060c0f35b5b5b5b5b";
 | 
			
		||||
	let blockhash_contract_code = Arc::new(test_blockhash_contract.from_hex().unwrap());
 | 
			
		||||
	let blockhash_contract_code_hash = keccak(blockhash_contract_code.as_ref());
 | 
			
		||||
	let machine = spec::new_eip210_test_machine();
 | 
			
		||||
	let machine = new_eip210_test_machine();
 | 
			
		||||
	let mut env_info = EnvInfo::default();
 | 
			
		||||
 | 
			
		||||
	// populate state with 256 last hashes
 | 
			
		||||
 | 
			
		||||
@ -28,14 +28,18 @@ use client::{BlockChainClient, Client, ClientConfig};
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
use std::str::FromStr;
 | 
			
		||||
use miner::Miner;
 | 
			
		||||
use types::transaction::{Action, Transaction};
 | 
			
		||||
use trace::{RewardType, LocalizedTrace};
 | 
			
		||||
use trace::trace::Action::Reward;
 | 
			
		||||
use test_helpers;
 | 
			
		||||
use verification::queue::kind::blocks::Unverified;
 | 
			
		||||
use types::header::Header;
 | 
			
		||||
use types::view;
 | 
			
		||||
use types::views::BlockView;
 | 
			
		||||
use types::{
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	transaction::{Action, Transaction},
 | 
			
		||||
	trace_filter::Filter as TraceFilter,
 | 
			
		||||
	header::Header,
 | 
			
		||||
	view,
 | 
			
		||||
	views::BlockView,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#[test]
 | 
			
		||||
fn can_trace_block_and_uncle_reward() {
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@
 | 
			
		||||
//! Canonical verifier.
 | 
			
		||||
 | 
			
		||||
use call_contract::CallContract;
 | 
			
		||||
use client::BlockInfo;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use engines::Engine;
 | 
			
		||||
use types::{
 | 
			
		||||
	header::Header,
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@ pub use self::noop_verifier::NoopVerifier;
 | 
			
		||||
pub use self::queue::{BlockQueue, Config as QueueConfig, VerificationQueue, QueueInfo};
 | 
			
		||||
 | 
			
		||||
use call_contract::CallContract;
 | 
			
		||||
use client::BlockInfo;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
 | 
			
		||||
/// Verifier type.
 | 
			
		||||
#[derive(Debug, PartialEq, Clone)]
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@
 | 
			
		||||
//! No-op verifier.
 | 
			
		||||
 | 
			
		||||
use call_contract::CallContract;
 | 
			
		||||
use client::BlockInfo;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use engines::Engine;
 | 
			
		||||
use types::{
 | 
			
		||||
	header::Header,
 | 
			
		||||
 | 
			
		||||
@ -21,9 +21,7 @@ use engines::Engine;
 | 
			
		||||
use parity_util_mem::MallocSizeOf;
 | 
			
		||||
use ethereum_types::{H256, U256};
 | 
			
		||||
 | 
			
		||||
use types::{
 | 
			
		||||
	errors::EthcoreError as Error,
 | 
			
		||||
};
 | 
			
		||||
use types::errors::EthcoreError as Error;
 | 
			
		||||
 | 
			
		||||
pub use self::blocks::Blocks;
 | 
			
		||||
pub use self::headers::Headers;
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,7 @@ use unexpected::{Mismatch, OutOfBounds};
 | 
			
		||||
 | 
			
		||||
use blockchain::*;
 | 
			
		||||
use call_contract::CallContract;
 | 
			
		||||
use client::BlockInfo;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use engines::Engine;
 | 
			
		||||
use types::{
 | 
			
		||||
	BlockNumber,
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@
 | 
			
		||||
//! A generic verifier trait.
 | 
			
		||||
 | 
			
		||||
use call_contract::CallContract;
 | 
			
		||||
use client::BlockInfo;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use engines::Engine;
 | 
			
		||||
use types::{
 | 
			
		||||
	header::Header,
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,7 @@ authors = ["Parity Technologies <admin@parity.io>"]
 | 
			
		||||
[lib]
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
client-traits = { path = "../client-traits" }
 | 
			
		||||
common-types = { path = "../types" }
 | 
			
		||||
enum_primitive = "0.1.1"
 | 
			
		||||
ethcore = { path = ".." }
 | 
			
		||||
@ -24,6 +25,7 @@ keccak-hash = "0.2.0"
 | 
			
		||||
keccak-hasher = { path = "../../util/keccak-hasher" }
 | 
			
		||||
kvdb = "0.1"
 | 
			
		||||
log = "0.4"
 | 
			
		||||
machine = { path = "../machine" }
 | 
			
		||||
macros = { path = "../../util/macros" }
 | 
			
		||||
parity-bytes = "0.1"
 | 
			
		||||
parking_lot = "0.8"
 | 
			
		||||
 | 
			
		||||
@ -25,9 +25,10 @@ use ethereum_types::H256;
 | 
			
		||||
use rlp::{self, Rlp};
 | 
			
		||||
use types::{
 | 
			
		||||
	BlockNumber,
 | 
			
		||||
	block_status::BlockStatus,
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	errors::{EthcoreError, BlockError, ImportError},
 | 
			
		||||
};
 | 
			
		||||
use ethcore::client::{BlockStatus, BlockId};
 | 
			
		||||
use sync_io::SyncIo;
 | 
			
		||||
use blocks::{BlockCollection, SyncBody, SyncHeader};
 | 
			
		||||
use chain::BlockSet;
 | 
			
		||||
 | 
			
		||||
@ -541,8 +541,11 @@ impl BlockCollection {
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod test {
 | 
			
		||||
	use super::{BlockCollection, SyncHeader};
 | 
			
		||||
	use ethcore::client::{TestBlockChainClient, EachBlockWith, BlockId, BlockChainClient};
 | 
			
		||||
	use types::BlockNumber;
 | 
			
		||||
	use ethcore::client::{TestBlockChainClient, EachBlockWith, BlockChainClient};
 | 
			
		||||
	use types::{
 | 
			
		||||
		ids::BlockId,
 | 
			
		||||
		BlockNumber
 | 
			
		||||
	};
 | 
			
		||||
	use ethcore::verification::queue::kind::blocks::Unverified;
 | 
			
		||||
	use rlp::*;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -108,7 +108,7 @@ use bytes::Bytes;
 | 
			
		||||
use rlp::{RlpStream, DecoderError};
 | 
			
		||||
use network::{self, PeerId, PacketId};
 | 
			
		||||
use network::client_version::ClientVersion;
 | 
			
		||||
use ethcore::client::{BlockChainClient, BlockStatus, BlockId, BlockChainInfo, BlockQueueInfo};
 | 
			
		||||
use ethcore::client::{BlockChainClient, BlockStatus, BlockChainInfo, BlockQueueInfo};
 | 
			
		||||
use ethcore::snapshot::RestorationStatus;
 | 
			
		||||
use sync_io::SyncIo;
 | 
			
		||||
use super::{WarpSync, SyncConfig};
 | 
			
		||||
@ -118,8 +118,11 @@ use snapshot::{Snapshot};
 | 
			
		||||
use api::{EthProtocolInfo as PeerInfoDigest, WARP_SYNC_PROTOCOL_ID, PriorityTask};
 | 
			
		||||
use private_tx::PrivateTxHandler;
 | 
			
		||||
use transactions_stats::{TransactionsStats, Stats as TransactionStats};
 | 
			
		||||
use types::transaction::UnverifiedTransaction;
 | 
			
		||||
use types::BlockNumber;
 | 
			
		||||
use types::{
 | 
			
		||||
	BlockNumber,
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	transaction::UnverifiedTransaction
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use self::handler::SyncHandler;
 | 
			
		||||
use self::sync_packet::{PacketInfo, SyncPacket};
 | 
			
		||||
@ -1370,7 +1373,8 @@ pub mod tests {
 | 
			
		||||
	use super::*;
 | 
			
		||||
	use ::SyncConfig;
 | 
			
		||||
	use super::{PeerInfo, PeerAsking};
 | 
			
		||||
	use ethcore::client::{BlockChainClient, EachBlockWith, TestBlockChainClient, ChainInfo, BlockInfo};
 | 
			
		||||
	use ethcore::client::{BlockChainClient, EachBlockWith, TestBlockChainClient, ChainInfo};
 | 
			
		||||
	use client_traits::BlockInfo;
 | 
			
		||||
	use ethcore::miner::{MinerService, PendingOrdering};
 | 
			
		||||
	use types::header::Header;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -335,12 +335,15 @@ impl SyncPropagator {
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod tests {
 | 
			
		||||
	use ethcore::client::{BlockInfo, ChainInfo, EachBlockWith, TestBlockChainClient};
 | 
			
		||||
	use ethcore::client::{ChainInfo, EachBlockWith, TestBlockChainClient};
 | 
			
		||||
	use client_traits::BlockInfo;
 | 
			
		||||
	use parking_lot::RwLock;
 | 
			
		||||
	use rlp::{Rlp};
 | 
			
		||||
	use std::collections::{VecDeque};
 | 
			
		||||
	use tests::helpers::{TestIo};
 | 
			
		||||
	use tests::snapshot::TestSnapshotService;
 | 
			
		||||
	use rlp::Rlp;
 | 
			
		||||
	use std::collections::VecDeque;
 | 
			
		||||
	use tests::{
 | 
			
		||||
		helpers::TestIo,
 | 
			
		||||
		snapshot::TestSnapshotService,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	use super::{*, super::{*, tests::*}};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -46,6 +46,8 @@ extern crate ethcore_light as light;
 | 
			
		||||
#[cfg(test)] extern crate kvdb_memorydb;
 | 
			
		||||
#[cfg(test)] extern crate rustc_hex;
 | 
			
		||||
#[cfg(test)] extern crate rand_xorshift;
 | 
			
		||||
#[cfg(test)] extern crate client_traits;
 | 
			
		||||
#[cfg(test)] extern crate machine;
 | 
			
		||||
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate enum_primitive;
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,9 @@
 | 
			
		||||
 | 
			
		||||
use tests::helpers::TestNet;
 | 
			
		||||
 | 
			
		||||
use ethcore::client::{BlockInfo, BlockId, EachBlockWith};
 | 
			
		||||
use ethcore::client::EachBlockWith;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use types::ids::BlockId;
 | 
			
		||||
 | 
			
		||||
mod test_net;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -15,8 +15,10 @@
 | 
			
		||||
// along with Parity Ethereum.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
use ethcore::client::{TestBlockChainClient, BlockChainClient, BlockId, EachBlockWith, ChainInfo, BlockInfo};
 | 
			
		||||
use chain::{SyncState};
 | 
			
		||||
use types::ids::BlockId;
 | 
			
		||||
use ethcore::client::{TestBlockChainClient, BlockChainClient, EachBlockWith, ChainInfo};
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use chain::SyncState;
 | 
			
		||||
use super::helpers::*;
 | 
			
		||||
use {SyncConfig, WarpSync};
 | 
			
		||||
use ethcore::spec;
 | 
			
		||||
 | 
			
		||||
@ -19,15 +19,17 @@ use hash::keccak;
 | 
			
		||||
use io::{IoHandler, IoChannel};
 | 
			
		||||
use types::transaction::{Transaction, Action};
 | 
			
		||||
use types::ids::BlockId;
 | 
			
		||||
use ethcore::CreateContractAddress;
 | 
			
		||||
use ethcore::client::{ClientIoMessage, BlockChainClient};
 | 
			
		||||
use ethcore::executive::contract_address;
 | 
			
		||||
use ethcore::engines;
 | 
			
		||||
use ethcore::miner::{self, MinerService};
 | 
			
		||||
use ethcore::spec::Spec;
 | 
			
		||||
use ethcore::test_helpers::{push_block_with_transactions};
 | 
			
		||||
use ethcore::{
 | 
			
		||||
	CreateContractAddress,
 | 
			
		||||
	client::{ClientIoMessage, BlockChainClient},
 | 
			
		||||
	engines,
 | 
			
		||||
	miner::{self, MinerService},
 | 
			
		||||
	spec::Spec,
 | 
			
		||||
	test_helpers::push_block_with_transactions,
 | 
			
		||||
};
 | 
			
		||||
use ethcore_private_tx::{Provider, ProviderConfig, NoopEncryptor, Importer, SignedPrivateTransaction, StoringKeyProvider};
 | 
			
		||||
use ethkey::KeyPair;
 | 
			
		||||
use machine::executive::contract_address;
 | 
			
		||||
use tests::helpers::{TestNet, TestIoHandler};
 | 
			
		||||
use rustc_hex::FromHex;
 | 
			
		||||
use rlp::Rlp;
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@ license = "GPL-3.0"
 | 
			
		||||
authors = ["Parity Technologies <admin@parity.io>"]
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
common-types = { path = "../ethcore/types" }
 | 
			
		||||
ethcore = { path = "../ethcore" }
 | 
			
		||||
parity-bytes = "0.1"
 | 
			
		||||
ethereum-types = "0.6.0"
 | 
			
		||||
 | 
			
		||||
@ -19,6 +19,7 @@ extern crate cid;
 | 
			
		||||
extern crate unicase;
 | 
			
		||||
 | 
			
		||||
extern crate rlp;
 | 
			
		||||
extern crate common_types;
 | 
			
		||||
extern crate ethcore;
 | 
			
		||||
extern crate parity_bytes as bytes;
 | 
			
		||||
extern crate ethereum_types;
 | 
			
		||||
 | 
			
		||||
@ -18,10 +18,10 @@ use {rlp, multihash, IpfsHandler};
 | 
			
		||||
use error::{Error, Result};
 | 
			
		||||
use cid::{ToCid, Codec};
 | 
			
		||||
 | 
			
		||||
use common_types::ids::{BlockId, TransactionId};
 | 
			
		||||
use multihash::Hash;
 | 
			
		||||
use ethereum_types::H256;
 | 
			
		||||
use bytes::Bytes;
 | 
			
		||||
use ethcore::client::{BlockId, TransactionId};
 | 
			
		||||
 | 
			
		||||
type Reason = &'static str;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -40,8 +40,6 @@ extern crate serde;
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate ethabi_contract;
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate ethabi_derive;
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate log;
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate serde_derive;
 | 
			
		||||
 | 
			
		||||
@ -26,8 +26,9 @@ use hash::{keccak, KECCAK_NULL_RLP};
 | 
			
		||||
use ethereum_types::{U256, H256, Address};
 | 
			
		||||
use bytes::ToPretty;
 | 
			
		||||
use rlp::PayloadInfo;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use ethcore::client::{
 | 
			
		||||
	Mode, DatabaseCompactionProfile, VMType, Nonce, Balance, BlockChainClient, BlockId, BlockInfo, ImportBlock, BlockChainReset
 | 
			
		||||
	Mode, DatabaseCompactionProfile, VMType, Nonce, Balance, BlockChainClient, ImportBlock, BlockChainReset
 | 
			
		||||
};
 | 
			
		||||
use ethcore::miner::Miner;
 | 
			
		||||
use ethcore::verification::queue::VerifierSettings;
 | 
			
		||||
@ -42,7 +43,10 @@ use user_defaults::UserDefaults;
 | 
			
		||||
use ethcore_private_tx;
 | 
			
		||||
use db;
 | 
			
		||||
use ansi_term::Colour;
 | 
			
		||||
use types::errors::{ImportError, EthcoreError};
 | 
			
		||||
use types::{
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	errors::{ImportError, EthcoreError}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, PartialEq)]
 | 
			
		||||
pub enum DataFormat {
 | 
			
		||||
 | 
			
		||||
@ -1194,11 +1194,12 @@ mod tests {
 | 
			
		||||
	use std::str::FromStr;
 | 
			
		||||
 | 
			
		||||
	use tempdir::TempDir;
 | 
			
		||||
	use ethcore::client::{VMType, BlockId};
 | 
			
		||||
	use ethcore::client::VMType;
 | 
			
		||||
	use ethcore::miner::MinerOptions;
 | 
			
		||||
	use miner::pool::PrioritizationStrategy;
 | 
			
		||||
	use parity_rpc::NetworkSettings;
 | 
			
		||||
	use updater::{UpdatePolicy, UpdateFilter, ReleaseTrack};
 | 
			
		||||
	use types::ids::BlockId;
 | 
			
		||||
 | 
			
		||||
	use account::{AccountCmd, NewAccount, ImportAccounts, ListAccounts};
 | 
			
		||||
	use blockchain::{BlockchainCmd, ImportBlockchain, ExportBlockchain, DataFormat, ExportState};
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ use std::fs::File;
 | 
			
		||||
use std::collections::HashSet;
 | 
			
		||||
use ethereum_types::{U256, Address};
 | 
			
		||||
use journaldb::Algorithm;
 | 
			
		||||
use ethcore::client::{Mode, BlockId, VMType, DatabaseCompactionProfile, ClientConfig, VerifierType};
 | 
			
		||||
use ethcore::client::{Mode, VMType, DatabaseCompactionProfile, ClientConfig, VerifierType};
 | 
			
		||||
use ethcore::miner::{PendingSet, Penalization};
 | 
			
		||||
use miner::pool::PrioritizationStrategy;
 | 
			
		||||
use cache::CacheConfig;
 | 
			
		||||
@ -32,6 +32,7 @@ use sync::{validate_node_url, self};
 | 
			
		||||
use db::migrate;
 | 
			
		||||
use path;
 | 
			
		||||
use ethkey::Password;
 | 
			
		||||
use types::ids::BlockId;
 | 
			
		||||
 | 
			
		||||
pub fn to_duration(s: &str) -> Result<Duration, String> {
 | 
			
		||||
	to_seconds(s).map(Duration::from_secs)
 | 
			
		||||
@ -347,9 +348,10 @@ mod tests {
 | 
			
		||||
	use std::collections::HashSet;
 | 
			
		||||
	use tempdir::TempDir;
 | 
			
		||||
	use ethereum_types::U256;
 | 
			
		||||
	use ethcore::client::{Mode, BlockId};
 | 
			
		||||
	use ethcore::client::Mode;
 | 
			
		||||
	use ethcore::miner::PendingSet;
 | 
			
		||||
	use ethkey::Password;
 | 
			
		||||
	use types::ids::BlockId;
 | 
			
		||||
	use super::{to_duration, to_mode, to_block_id, to_u256, to_pending_set, to_address, to_addresses, to_price, geth_ipc_path, to_bootnodes, join_set, password_from_file};
 | 
			
		||||
 | 
			
		||||
	#[test]
 | 
			
		||||
 | 
			
		||||
@ -24,10 +24,14 @@ use std::time::{Instant, Duration};
 | 
			
		||||
 | 
			
		||||
use atty;
 | 
			
		||||
use ethcore::client::{
 | 
			
		||||
	BlockId, ChainInfo, BlockInfo, BlockChainInfo, BlockChainClient,
 | 
			
		||||
	ChainInfo, BlockChainInfo, BlockChainClient,
 | 
			
		||||
	BlockQueueInfo, ChainNotify, NewBlocks, ClientReport, Client, ClientIoMessage
 | 
			
		||||
};
 | 
			
		||||
use types::BlockNumber;
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use types::{
 | 
			
		||||
	BlockNumber,
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
};
 | 
			
		||||
use ethcore::snapshot::{RestorationStatus, SnapshotService as SS};
 | 
			
		||||
use ethcore::snapshot::service::Service as SnapshotService;
 | 
			
		||||
use sync::{LightSyncProvider, LightSync, SyncProvider, ManageNetwork};
 | 
			
		||||
 | 
			
		||||
@ -41,6 +41,8 @@ extern crate toml;
 | 
			
		||||
 | 
			
		||||
extern crate blooms_db;
 | 
			
		||||
extern crate cli_signer;
 | 
			
		||||
 | 
			
		||||
extern crate client_traits;
 | 
			
		||||
extern crate common_types as types;
 | 
			
		||||
extern crate ethcore;
 | 
			
		||||
extern crate ethcore_call_contract as call_contract;
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,8 @@ use std::thread;
 | 
			
		||||
use ansi_term::Colour;
 | 
			
		||||
use bytes::Bytes;
 | 
			
		||||
use call_contract::CallContract;
 | 
			
		||||
use ethcore::client::{BlockId, Client, Mode, DatabaseCompactionProfile, VMType, BlockChainClient, BlockInfo};
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use ethcore::client::{Client, Mode, DatabaseCompactionProfile, VMType, BlockChainClient};
 | 
			
		||||
use ethcore::miner::{self, stratum, Miner, MinerService, MinerOptions};
 | 
			
		||||
use ethcore::snapshot::{self, SnapshotConfiguration};
 | 
			
		||||
use ethcore::spec::{SpecParams, OptimizeFor};
 | 
			
		||||
@ -40,6 +41,7 @@ use miner::work_notify::WorkPoster;
 | 
			
		||||
use node_filter::NodeFilter;
 | 
			
		||||
use parity_runtime::Runtime;
 | 
			
		||||
use sync::{self, SyncConfig, PrivateTxHandler};
 | 
			
		||||
use types::ids::BlockId;
 | 
			
		||||
use parity_rpc::{
 | 
			
		||||
	Origin, Metadata, NetworkSettings, informant, PubSubSession, FutureResult, FutureResponse, FutureOutput
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -47,6 +47,7 @@ ethcore-private-tx = { path = "../ethcore/private-tx" }
 | 
			
		||||
ethcore-sync = { path = "../ethcore/sync" }
 | 
			
		||||
ethereum-types = "0.6.0"
 | 
			
		||||
fastmap = { path = "../util/fastmap" }
 | 
			
		||||
machine = { path = "../ethcore/machine" }
 | 
			
		||||
parity-bytes = "0.1"
 | 
			
		||||
parity-crypto = "0.4.0"
 | 
			
		||||
 | 
			
		||||
@ -66,6 +67,7 @@ trace = { path = "../ethcore/trace" }
 | 
			
		||||
vm = { path = "../ethcore/vm" }
 | 
			
		||||
 | 
			
		||||
[dev-dependencies]
 | 
			
		||||
client-traits = { path = "../ethcore/client-traits" }
 | 
			
		||||
ethcore = { path = "../ethcore", features = ["test-helpers"] }
 | 
			
		||||
ethcore-accounts = { path = "../accounts" }
 | 
			
		||||
ethcore-io = { path = "../util/io" }
 | 
			
		||||
 | 
			
		||||
@ -43,6 +43,7 @@ extern crate futures;
 | 
			
		||||
extern crate ansi_term;
 | 
			
		||||
extern crate cid;
 | 
			
		||||
extern crate itertools;
 | 
			
		||||
extern crate machine;
 | 
			
		||||
extern crate multihash;
 | 
			
		||||
extern crate order_stat;
 | 
			
		||||
extern crate parking_lot;
 | 
			
		||||
@ -120,6 +121,8 @@ extern crate fake_fetch;
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
extern crate ethcore_io as io;
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
extern crate client_traits;
 | 
			
		||||
 | 
			
		||||
pub extern crate jsonrpc_ws_server as ws;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,6 @@
 | 
			
		||||
 | 
			
		||||
use std::fmt;
 | 
			
		||||
 | 
			
		||||
use ethcore::client::BlockId;
 | 
			
		||||
use jsonrpc_core::{futures, Result as RpcResult, Error, ErrorCode, Value};
 | 
			
		||||
use rlp::DecoderError;
 | 
			
		||||
use types::transaction::Error as TransactionError;
 | 
			
		||||
@ -27,6 +26,7 @@ use vm::Error as VMError;
 | 
			
		||||
use light::on_demand::error::{Error as OnDemandError};
 | 
			
		||||
use ethcore::client::BlockChainClient;
 | 
			
		||||
use types::{
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	blockchain_info::BlockChainInfo,
 | 
			
		||||
	errors::{EthcoreError},
 | 
			
		||||
	transaction::CallError,
 | 
			
		||||
 | 
			
		||||
@ -39,11 +39,12 @@ use light::client::LightChainClient;
 | 
			
		||||
use light::{cht, MAX_HEADERS_PER_REQUEST};
 | 
			
		||||
use light::on_demand::{
 | 
			
		||||
	request, OnDemandRequester, HeaderRef, Request as OnDemandRequest,
 | 
			
		||||
	Response as OnDemandResponse, ExecutionResult,
 | 
			
		||||
	Response as OnDemandResponse,
 | 
			
		||||
};
 | 
			
		||||
use light::on_demand::error::Error as OnDemandError;
 | 
			
		||||
use light::request::Field;
 | 
			
		||||
use light::TransactionQueue;
 | 
			
		||||
use machine::executed::ExecutionResult;
 | 
			
		||||
 | 
			
		||||
use sync::{LightNetworkDispatcher, ManageNetwork, LightSyncProvider};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -25,16 +25,19 @@ use ethereum_types::{Address, H64, H160, H256, U64, U256, BigEndianHash};
 | 
			
		||||
use parking_lot::Mutex;
 | 
			
		||||
 | 
			
		||||
use ethash::{self, SeedHashCompute};
 | 
			
		||||
use ethcore::client::{BlockChainClient, BlockId, TransactionId, UncleId, StateOrBlock, StateClient, StateInfo, Call, EngineInfo, ProvingBlockChainClient};
 | 
			
		||||
use ethcore::client::{BlockChainClient, StateOrBlock, StateClient, StateInfo, Call, EngineInfo, ProvingBlockChainClient};
 | 
			
		||||
use ethcore::miner::{self, MinerService};
 | 
			
		||||
use ethcore::snapshot::SnapshotService;
 | 
			
		||||
use hash::keccak;
 | 
			
		||||
use miner::external::ExternalMinerService;
 | 
			
		||||
use sync::SyncProvider;
 | 
			
		||||
use types::transaction::{SignedTransaction, LocalizedTransaction};
 | 
			
		||||
use types::BlockNumber as EthBlockNumber;
 | 
			
		||||
use types::encoded;
 | 
			
		||||
use types::filter::Filter as EthcoreFilter;
 | 
			
		||||
use types::{
 | 
			
		||||
	BlockNumber as EthBlockNumber,
 | 
			
		||||
	encoded,
 | 
			
		||||
	ids::{BlockId, TransactionId, UncleId},
 | 
			
		||||
	filter::Filter as EthcoreFilter,
 | 
			
		||||
	transaction::{SignedTransaction, LocalizedTransaction}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use jsonrpc_core::{BoxFuture, Result};
 | 
			
		||||
use jsonrpc_core::futures::future;
 | 
			
		||||
 | 
			
		||||
@ -19,11 +19,14 @@
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
use std::collections::{BTreeSet, VecDeque};
 | 
			
		||||
 | 
			
		||||
use ethcore::client::{BlockChainClient, BlockId};
 | 
			
		||||
use ethcore::client::BlockChainClient;
 | 
			
		||||
use ethcore::miner::{self, MinerService};
 | 
			
		||||
use ethereum_types::{H256, U256};
 | 
			
		||||
use parking_lot::Mutex;
 | 
			
		||||
use types::filter::Filter as EthcoreFilter;
 | 
			
		||||
use types::{
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	filter::Filter as EthcoreFilter
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use jsonrpc_core::{BoxFuture, Result};
 | 
			
		||||
use jsonrpc_core::futures::{future, Future};
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,7 @@ use v1::traits::EthPubSub;
 | 
			
		||||
use v1::types::{pubsub, RichHeader, Log};
 | 
			
		||||
 | 
			
		||||
use sync::{SyncState, Notification};
 | 
			
		||||
use ethcore::client::{BlockChainClient, ChainNotify, NewBlocks, ChainRouteType, BlockId};
 | 
			
		||||
use ethcore::client::{BlockChainClient, ChainNotify, NewBlocks, ChainRouteType};
 | 
			
		||||
use ethereum_types::H256;
 | 
			
		||||
use light::cache::Cache;
 | 
			
		||||
use light::client::{LightChainClient, LightChainNotify};
 | 
			
		||||
@ -41,8 +41,11 @@ use parking_lot::{RwLock, Mutex};
 | 
			
		||||
 | 
			
		||||
use sync::{LightSyncProvider, LightNetworkDispatcher, ManageNetwork};
 | 
			
		||||
 | 
			
		||||
use types::encoded;
 | 
			
		||||
use types::filter::Filter as EthFilter;
 | 
			
		||||
use types::{
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	encoded,
 | 
			
		||||
	filter::Filter as EthFilter,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
type Client = Sink<pubsub::Result>;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,10 +18,14 @@
 | 
			
		||||
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
 | 
			
		||||
use ethcore::client::{BlockChainClient, CallAnalytics, TransactionId, TraceId, StateClient, StateInfo, Call, BlockId};
 | 
			
		||||
use ethcore::client::{BlockChainClient, StateClient, StateInfo, Call};
 | 
			
		||||
use ethereum_types::H256;
 | 
			
		||||
use rlp::Rlp;
 | 
			
		||||
use types::transaction::SignedTransaction;
 | 
			
		||||
use types::{
 | 
			
		||||
	call_analytics::CallAnalytics,
 | 
			
		||||
	ids::{BlockId, TransactionId, TraceId},
 | 
			
		||||
	transaction::SignedTransaction,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use jsonrpc_core::Result;
 | 
			
		||||
use v1::Metadata;
 | 
			
		||||
 | 
			
		||||
@ -20,18 +20,22 @@ use std::sync::Arc;
 | 
			
		||||
use std::time::{Instant, Duration, SystemTime, UNIX_EPOCH};
 | 
			
		||||
 | 
			
		||||
use accounts::AccountProvider;
 | 
			
		||||
use ethcore::client::{BlockChainClient, BlockId, EachBlockWith, Executed, TestBlockChainClient, TransactionId};
 | 
			
		||||
use ethcore::client::{BlockChainClient, EachBlockWith, TestBlockChainClient};
 | 
			
		||||
use ethcore::miner::{self, MinerService};
 | 
			
		||||
use ethereum_types::{H160, H256, U256, Address, Bloom};
 | 
			
		||||
use machine::executed::Executed;
 | 
			
		||||
use miner::external::ExternalMiner;
 | 
			
		||||
use parity_runtime::Runtime;
 | 
			
		||||
use parking_lot::Mutex;
 | 
			
		||||
use rlp;
 | 
			
		||||
use rustc_hex::{FromHex, ToHex};
 | 
			
		||||
use sync::SyncState;
 | 
			
		||||
use types::transaction::{Transaction, Action};
 | 
			
		||||
use types::log_entry::{LocalizedLogEntry, LogEntry};
 | 
			
		||||
use types::receipt::{LocalizedReceipt, TransactionOutcome};
 | 
			
		||||
use types::{
 | 
			
		||||
	ids::{BlockId, TransactionId},
 | 
			
		||||
	transaction::{Transaction, Action},
 | 
			
		||||
	log_entry::{LocalizedLogEntry, LogEntry},
 | 
			
		||||
	receipt::{LocalizedReceipt, TransactionOutcome},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use jsonrpc_core::IoHandler;
 | 
			
		||||
use v1::{Eth, EthClient, EthClientOptions, EthFilter, EthFilterClient};
 | 
			
		||||
 | 
			
		||||
@ -26,6 +26,12 @@ use v1::{EthPubSub, EthPubSubClient, Metadata};
 | 
			
		||||
use ethcore::client::{TestBlockChainClient, EachBlockWith, ChainNotify, NewBlocks, ChainRoute, ChainRouteType};
 | 
			
		||||
use parity_runtime::Runtime;
 | 
			
		||||
use ethereum_types::{Address, H256};
 | 
			
		||||
use client_traits::BlockInfo;
 | 
			
		||||
use types::{
 | 
			
		||||
	log_entry::{LocalizedLogEntry, LogEntry},
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const DURATION_ZERO: Duration = Duration::from_millis(0);
 | 
			
		||||
 | 
			
		||||
@ -86,10 +92,6 @@ fn should_subscribe_to_new_heads() {
 | 
			
		||||
 | 
			
		||||
#[test]
 | 
			
		||||
fn should_subscribe_to_logs() {
 | 
			
		||||
	use ethcore::client::BlockInfo;
 | 
			
		||||
	use types::log_entry::{LocalizedLogEntry, LogEntry};
 | 
			
		||||
	use types::ids::BlockId;
 | 
			
		||||
 | 
			
		||||
	// given
 | 
			
		||||
	let el = Runtime::with_thread_count(1);
 | 
			
		||||
	let mut client = TestBlockChainClient::new();
 | 
			
		||||
 | 
			
		||||
@ -15,13 +15,17 @@
 | 
			
		||||
// along with Parity Ethereum.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
use ethcore::client::{TestBlockChainClient, Executed, TransactionId};
 | 
			
		||||
use ethcore::client::TestBlockChainClient;
 | 
			
		||||
use ethcore_logger::RotatingLogger;
 | 
			
		||||
use ethereum_types::{Address, U256, H256, BigEndianHash, Bloom};
 | 
			
		||||
use ethstore::ethkey::{Generator, Random};
 | 
			
		||||
use machine::executed::Executed;
 | 
			
		||||
use miner::pool::local_transactions::Status as LocalTransactionStatus;
 | 
			
		||||
use sync::ManageNetwork;
 | 
			
		||||
use types::receipt::{LocalizedReceipt, TransactionOutcome};
 | 
			
		||||
use types::{
 | 
			
		||||
	ids::TransactionId,
 | 
			
		||||
	receipt::{LocalizedReceipt, TransactionOutcome},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use jsonrpc_core::IoHandler;
 | 
			
		||||
use v1::{Parity, ParityClient};
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,7 @@
 | 
			
		||||
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
 | 
			
		||||
use ethcore::executed::Executed;
 | 
			
		||||
use machine::executed::Executed;
 | 
			
		||||
use trace::trace::{Action, Res, Call};
 | 
			
		||||
use trace::LocalizedTrace;
 | 
			
		||||
use ethcore::client::TestBlockChainClient;
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@
 | 
			
		||||
use std::fmt;
 | 
			
		||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
 | 
			
		||||
use serde::de::{Error, Visitor, MapAccess};
 | 
			
		||||
use ethcore::client::BlockId;
 | 
			
		||||
use types::ids::BlockId;
 | 
			
		||||
use ethereum_types::H256;
 | 
			
		||||
 | 
			
		||||
/// Represents rpc api block number param.
 | 
			
		||||
@ -191,7 +191,7 @@ pub fn block_number_to_id(number: BlockNumber) -> BlockId {
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod tests {
 | 
			
		||||
	use ethcore::client::BlockId;
 | 
			
		||||
	use types::ids::BlockId;
 | 
			
		||||
	use super::*;
 | 
			
		||||
	use std::str::FromStr;
 | 
			
		||||
	use serde_json;
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,7 @@
 | 
			
		||||
 | 
			
		||||
use std::collections::BTreeMap;
 | 
			
		||||
 | 
			
		||||
use ethcore::client::Executed;
 | 
			
		||||
use machine::executed::Executed;
 | 
			
		||||
use trace as et;
 | 
			
		||||
use trace::{FlatTrace, LocalizedTrace as EthLocalizedTrace, trace, TraceError};
 | 
			
		||||
use ethereum_types::{H160, H256, U256};
 | 
			
		||||
 | 
			
		||||
@ -16,9 +16,12 @@
 | 
			
		||||
 | 
			
		||||
//! Trace filter deserialization.
 | 
			
		||||
 | 
			
		||||
use ethcore::client::BlockId;
 | 
			
		||||
use ethcore::client;
 | 
			
		||||
use ethereum_types::H160;
 | 
			
		||||
use types::{
 | 
			
		||||
	ids::BlockId,
 | 
			
		||||
	trace_filter::Filter,
 | 
			
		||||
};
 | 
			
		||||
use v1::types::BlockNumber;
 | 
			
		||||
 | 
			
		||||
/// Trace filter
 | 
			
		||||
@ -40,8 +43,8 @@ pub struct TraceFilter {
 | 
			
		||||
	pub count: Option<usize>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Into<client::TraceFilter> for TraceFilter {
 | 
			
		||||
	fn into(self) -> client::TraceFilter {
 | 
			
		||||
impl Into<Filter> for TraceFilter {
 | 
			
		||||
	fn into(self) -> Filter {
 | 
			
		||||
		let num_to_id = |num| match num {
 | 
			
		||||
			BlockNumber::Hash { hash, .. } => BlockId::Hash(hash),
 | 
			
		||||
			BlockNumber::Num(n) => BlockId::Number(n),
 | 
			
		||||
@ -54,7 +57,7 @@ impl Into<client::TraceFilter> for TraceFilter {
 | 
			
		||||
		};
 | 
			
		||||
		let start = self.from_block.map_or(BlockId::Latest, &num_to_id);
 | 
			
		||||
		let end = self.to_block.map_or(BlockId::Latest, &num_to_id);
 | 
			
		||||
		client::TraceFilter {
 | 
			
		||||
		Filter {
 | 
			
		||||
			range: start..end,
 | 
			
		||||
			from_address: self.from_address.map_or_else(Vec::new, |x| x.into_iter().map(Into::into).collect()),
 | 
			
		||||
			to_address: self.to_address.map_or_else(Vec::new, |x| x.into_iter().map(Into::into).collect()),
 | 
			
		||||
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	Block a user