Merge branch 'master' into jsonrpc2
This commit is contained in:
commit
4c474d8d91
5
.gitignore
vendored
5
.gitignore
vendored
@ -7,7 +7,8 @@
|
|||||||
# Executables
|
# Executables
|
||||||
*.exe
|
*.exe
|
||||||
|
|
||||||
Cargo.lock
|
# Cargo lock in subs
|
||||||
|
**/Cargo.lock
|
||||||
|
|
||||||
# Generated by Cargo
|
# Generated by Cargo
|
||||||
**/target/
|
**/target/
|
||||||
@ -24,4 +25,4 @@ Cargo.lock
|
|||||||
/json-tests/target/
|
/json-tests/target/
|
||||||
|
|
||||||
# jetbrains ide stuff
|
# jetbrains ide stuff
|
||||||
.idea
|
.idea
|
||||||
|
808
Cargo.lock
generated
Normal file
808
Cargo.lock
generated
Normal file
@ -0,0 +1,808 @@
|
|||||||
|
[root]
|
||||||
|
name = "parity"
|
||||||
|
version = "0.9.0"
|
||||||
|
dependencies = [
|
||||||
|
"clippy 0.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"ctrlc 1.0.1 (git+https://github.com/tomusdrw/rust-ctrlc.git)",
|
||||||
|
"docopt 0.6.78 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"docopt_macros 0.6.81 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"env_logger 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"ethcore 0.9.0",
|
||||||
|
"ethcore-rpc 0.9.0",
|
||||||
|
"ethcore-util 0.9.0",
|
||||||
|
"ethsync 0.1.0",
|
||||||
|
"fdlimit 0.1.0",
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aho-corasick"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"memchr 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "arrayvec"
|
||||||
|
version = "0.3.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"nodrop 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"odds 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aster"
|
||||||
|
version = "0.12.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bitflags"
|
||||||
|
version = "0.3.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bitflags"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bytes"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cfg-if"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clippy"
|
||||||
|
version = "0.0.41"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"regex-syntax 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"semver 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cookie"
|
||||||
|
version = "0.1.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"url 0.2.38 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cookie"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"url 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crossbeam"
|
||||||
|
version = "0.1.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crossbeam"
|
||||||
|
version = "0.2.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ctrlc"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "git+https://github.com/tomusdrw/rust-ctrlc.git#d8751b66b31d9698cbb11f8ef37155a8211a0683"
|
||||||
|
dependencies = [
|
||||||
|
"kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"lazy_static 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "docopt"
|
||||||
|
version = "0.6.78"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"regex 0.1.48 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"strsim 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "docopt_macros"
|
||||||
|
version = "0.6.81"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"docopt 0.6.78 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "elastic-array"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "env_logger"
|
||||||
|
version = "0.3.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"regex 0.1.48 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "eth-secp256k1"
|
||||||
|
version = "0.5.4"
|
||||||
|
source = "git+https://github.com/arkpar/rust-secp256k1.git#321e6c22a83606d1875f89cb61c9cb37c7d249ae"
|
||||||
|
dependencies = [
|
||||||
|
"arrayvec 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"gcc 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde_json 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ethash"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"lru-cache 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"sha3 0.1.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ethcore"
|
||||||
|
version = "0.9.0"
|
||||||
|
dependencies = [
|
||||||
|
"clippy 0.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"crossbeam 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"env_logger 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"ethash 0.1.0",
|
||||||
|
"ethcore-util 0.9.0",
|
||||||
|
"heapsize 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"lazy_static 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rocksdb 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rust-crypto 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ethcore-rpc"
|
||||||
|
version = "0.9.0"
|
||||||
|
dependencies = [
|
||||||
|
"clippy 0.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"ethcore 0.9.0",
|
||||||
|
"ethcore-util 0.9.0",
|
||||||
|
"ethsync 0.1.0",
|
||||||
|
"jsonrpc-core 1.1.1 (git+https://github.com/debris/jsonrpc-core)",
|
||||||
|
"jsonrpc-http-server 1.1.0 (git+https://github.com/debris/jsonrpc-http-server)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde_json 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde_macros 0.6.13 (git+https://github.com/debris/serde)",
|
||||||
|
"target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ethcore-util"
|
||||||
|
version = "0.9.0"
|
||||||
|
dependencies = [
|
||||||
|
"arrayvec 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"clippy 0.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"crossbeam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"elastic-array 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"env_logger 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"eth-secp256k1 0.5.4 (git+https://github.com/arkpar/rust-secp256k1.git)",
|
||||||
|
"heapsize 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"igd 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"itertools 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"json-tests 0.1.0",
|
||||||
|
"lazy_static 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"mio 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rocksdb 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rust-crypto 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"sha3 0.1.0",
|
||||||
|
"slab 0.1.4 (git+https://github.com/arkpar/slab.git)",
|
||||||
|
"target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"tiny-keccak 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ethsync"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"clippy 0.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"env_logger 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"ethcore 0.9.0",
|
||||||
|
"ethcore-util 0.9.0",
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fdlimit"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"libc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gcc"
|
||||||
|
version = "0.3.23"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "glob"
|
||||||
|
version = "0.2.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "heapsize"
|
||||||
|
version = "0.2.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"libc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hpack"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "httparse"
|
||||||
|
version = "1.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hyper"
|
||||||
|
version = "0.6.16"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"cookie 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"httparse 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"language-tags 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"mime 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"solicit 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"unicase 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"url 0.2.38 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hyper"
|
||||||
|
version = "0.7.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"cookie 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"httparse 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"mime 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"solicit 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"unicase 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"url 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "igd"
|
||||||
|
version = "0.4.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"hyper 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"regex 0.1.48 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"xml-rs 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"xmltree 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itertools"
|
||||||
|
version = "0.4.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "json-tests"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"glob 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "jsonrpc-core"
|
||||||
|
version = "1.1.1"
|
||||||
|
source = "git+https://github.com/debris/jsonrpc-core#f59f462d29f75849d1af1958500730349c93d239"
|
||||||
|
dependencies = [
|
||||||
|
"serde 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde_json 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde_macros 0.6.13 (git+https://github.com/debris/serde)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "jsonrpc-http-server"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "git+https://github.com/debris/jsonrpc-http-server#23ee2d14331a1fcfe9b9d58cbfa3f49a15ad2326"
|
||||||
|
dependencies = [
|
||||||
|
"hyper 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"jsonrpc-core 1.1.1 (git+https://github.com/debris/jsonrpc-core)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "kernel32-sys"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "language-tags"
|
||||||
|
version = "0.0.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "language-tags"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lazy_static"
|
||||||
|
version = "0.1.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libc"
|
||||||
|
version = "0.1.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libc"
|
||||||
|
version = "0.2.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "linked-hash-map"
|
||||||
|
version = "0.0.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "log"
|
||||||
|
version = "0.3.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"libc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lru-cache"
|
||||||
|
version = "0.0.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"linked-hash-map 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "matches"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memchr"
|
||||||
|
version = "0.1.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"libc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mime"
|
||||||
|
version = "0.1.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mio"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"bytes 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"miow 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"net2 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"nix 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"slab 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "miow"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"net2 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "net2"
|
||||||
|
version = "0.2.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nix"
|
||||||
|
version = "0.4.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nodrop"
|
||||||
|
version = "0.1.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"odds 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nom"
|
||||||
|
version = "1.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num"
|
||||||
|
version = "0.1.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num_cpus"
|
||||||
|
version = "0.2.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "odds"
|
||||||
|
version = "0.2.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quasi"
|
||||||
|
version = "0.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quasi_codegen"
|
||||||
|
version = "0.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"aster 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quasi_macros"
|
||||||
|
version = "0.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"quasi_codegen 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand"
|
||||||
|
version = "0.3.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"libc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex"
|
||||||
|
version = "0.1.48"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"aho-corasick 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"memchr 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"regex-syntax 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex-syntax"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rocksdb"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"libc 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rust-crypto"
|
||||||
|
version = "0.2.34"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"gcc 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustc-serialize"
|
||||||
|
version = "0.3.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustc_version"
|
||||||
|
version = "0.1.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "semver"
|
||||||
|
version = "0.1.20"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "semver"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"nom 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde"
|
||||||
|
version = "0.6.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"num 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_codegen"
|
||||||
|
version = "0.6.13"
|
||||||
|
source = "git+https://github.com/debris/serde#f1fcd7ed1f3f610c7df0ede2a6928fbc05cf4efb"
|
||||||
|
dependencies = [
|
||||||
|
"aster 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"quasi 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"quasi_macros 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_json"
|
||||||
|
version = "0.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"num 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_macros"
|
||||||
|
version = "0.6.13"
|
||||||
|
source = "git+https://github.com/debris/serde#f1fcd7ed1f3f610c7df0ede2a6928fbc05cf4efb"
|
||||||
|
dependencies = [
|
||||||
|
"serde_codegen 0.6.13 (git+https://github.com/debris/serde)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sha3"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"gcc 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "slab"
|
||||||
|
version = "0.1.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "slab"
|
||||||
|
version = "0.1.4"
|
||||||
|
source = "git+https://github.com/arkpar/slab.git#3c9284e1f010e394c9d0359b27464e8fb5c87bf0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "solicit"
|
||||||
|
version = "0.4.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strsim"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "target_info"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "time"
|
||||||
|
version = "0.1.34"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tiny-keccak"
|
||||||
|
version = "1.0.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "traitobject"
|
||||||
|
version = "0.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "typeable"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicase"
|
||||||
|
version = "1.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"rustc_version 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-bidi"
|
||||||
|
version = "0.2.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-normalization"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "url"
|
||||||
|
version = "0.2.38"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "url"
|
||||||
|
version = "0.5.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "uuid"
|
||||||
|
version = "0.1.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi"
|
||||||
|
version = "0.2.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-build"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ws2_32-sys"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "xml-rs"
|
||||||
|
version = "0.1.26"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "xml-rs"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "xmltree"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"xml-rs 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
@ -3,7 +3,7 @@
|
|||||||
"engineName": "Ethash",
|
"engineName": "Ethash",
|
||||||
"params": {
|
"params": {
|
||||||
"accountStartNonce": "0x00",
|
"accountStartNonce": "0x00",
|
||||||
"frontierCompatibilityModeLimit": "0xf4240",
|
"frontierCompatibilityModeLimit": "0xf4240fff",
|
||||||
"maximumExtraDataSize": "0x20",
|
"maximumExtraDataSize": "0x20",
|
||||||
"tieBreakingGas": false,
|
"tieBreakingGas": false,
|
||||||
"minGasLimit": "0x1388",
|
"minGasLimit": "0x1388",
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"engineName": "Ethash",
|
"engineName": "Ethash",
|
||||||
"params": {
|
"params": {
|
||||||
"accountStartNonce": "0x00",
|
"accountStartNonce": "0x00",
|
||||||
"frontierCompatibilityModeLimit": "0xf4240",
|
"frontierCompatibilityModeLimit": "0xf4240fff",
|
||||||
"maximumExtraDataSize": "0x20",
|
"maximumExtraDataSize": "0x20",
|
||||||
"tieBreakingGas": false,
|
"tieBreakingGas": false,
|
||||||
"minGasLimit": "0x1388",
|
"minGasLimit": "0x1388",
|
||||||
|
@ -72,14 +72,14 @@ impl AccountDiff {
|
|||||||
pub fn diff_pod(pre: Option<&PodAccount>, post: Option<&PodAccount>) -> Option<AccountDiff> {
|
pub fn diff_pod(pre: Option<&PodAccount>, post: Option<&PodAccount>) -> Option<AccountDiff> {
|
||||||
match (pre, post) {
|
match (pre, post) {
|
||||||
(None, Some(x)) => Some(AccountDiff {
|
(None, Some(x)) => Some(AccountDiff {
|
||||||
balance: Diff::Born(x.balance.clone()),
|
balance: Diff::Born(x.balance),
|
||||||
nonce: Diff::Born(x.nonce.clone()),
|
nonce: Diff::Born(x.nonce),
|
||||||
code: Diff::Born(x.code.clone()),
|
code: Diff::Born(x.code.clone()),
|
||||||
storage: x.storage.iter().map(|(k, v)| (k.clone(), Diff::Born(v.clone()))).collect(),
|
storage: x.storage.iter().map(|(k, v)| (k.clone(), Diff::Born(v.clone()))).collect(),
|
||||||
}),
|
}),
|
||||||
(Some(x), None) => Some(AccountDiff {
|
(Some(x), None) => Some(AccountDiff {
|
||||||
balance: Diff::Died(x.balance.clone()),
|
balance: Diff::Died(x.balance),
|
||||||
nonce: Diff::Died(x.nonce.clone()),
|
nonce: Diff::Died(x.nonce),
|
||||||
code: Diff::Died(x.code.clone()),
|
code: Diff::Died(x.code.clone()),
|
||||||
storage: x.storage.iter().map(|(k, v)| (k.clone(), Diff::Died(v.clone()))).collect(),
|
storage: x.storage.iter().map(|(k, v)| (k.clone(), Diff::Died(v.clone()))).collect(),
|
||||||
}),
|
}),
|
||||||
@ -88,8 +88,8 @@ impl AccountDiff {
|
|||||||
.filter(|k| pre.storage.get(k).unwrap_or(&H256::new()) != post.storage.get(k).unwrap_or(&H256::new()))
|
.filter(|k| pre.storage.get(k).unwrap_or(&H256::new()) != post.storage.get(k).unwrap_or(&H256::new()))
|
||||||
.collect();
|
.collect();
|
||||||
let r = AccountDiff {
|
let r = AccountDiff {
|
||||||
balance: Diff::new(pre.balance.clone(), post.balance.clone()),
|
balance: Diff::new(pre.balance, post.balance),
|
||||||
nonce: Diff::new(pre.nonce.clone(), post.nonce.clone()),
|
nonce: Diff::new(pre.nonce, post.nonce),
|
||||||
code: Diff::new(pre.code.clone(), post.code.clone()),
|
code: Diff::new(pre.code.clone(), post.code.clone()),
|
||||||
storage: storage.into_iter().map(|k|
|
storage: storage.into_iter().map(|k|
|
||||||
(k.clone(), Diff::new(
|
(k.clone(), Diff::new(
|
||||||
|
@ -24,6 +24,7 @@ pub type LogBloom = H2048;
|
|||||||
/// Constant 2048-bit datum for 0. Often used as a default.
|
/// Constant 2048-bit datum for 0. Often used as a default.
|
||||||
pub static ZERO_LOGBLOOM: LogBloom = H2048([0x00; 256]);
|
pub static ZERO_LOGBLOOM: LogBloom = H2048([0x00; 256]);
|
||||||
|
|
||||||
|
#[allow(enum_variant_names)]
|
||||||
/// Semantic boolean for when a seal/signature is included.
|
/// Semantic boolean for when a seal/signature is included.
|
||||||
pub enum Seal {
|
pub enum Seal {
|
||||||
/// The seal/signature is included.
|
/// The seal/signature is included.
|
||||||
|
@ -87,6 +87,7 @@ struct QueueSignal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl QueueSignal {
|
impl QueueSignal {
|
||||||
|
#[allow(bool_comparison)]
|
||||||
fn set(&self) {
|
fn set(&self) {
|
||||||
if self.signalled.compare_and_swap(false, true, AtomicOrdering::Relaxed) == false {
|
if self.signalled.compare_and_swap(false, true, AtomicOrdering::Relaxed) == false {
|
||||||
self.message_channel.send(UserMessage(SyncMessage::BlockVerified)).expect("Error sending BlockVerified message");
|
self.message_channel.send(UserMessage(SyncMessage::BlockVerified)).expect("Error sending BlockVerified message");
|
||||||
|
@ -274,7 +274,7 @@ mod tests {
|
|||||||
use block::*;
|
use block::*;
|
||||||
use engine::*;
|
use engine::*;
|
||||||
use tests::helpers::*;
|
use tests::helpers::*;
|
||||||
use super::*;
|
use super::{Ethash};
|
||||||
use super::super::new_morden;
|
use super::super::new_morden;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -212,7 +212,7 @@ impl Memory for Vec<u8> {
|
|||||||
fn write(&mut self, offset: U256, value: U256) {
|
fn write(&mut self, offset: U256, value: U256) {
|
||||||
let off = offset.low_u64() as usize;
|
let off = offset.low_u64() as usize;
|
||||||
let mut val = value;
|
let mut val = value;
|
||||||
|
|
||||||
let end = off + 32;
|
let end = off + 32;
|
||||||
for pos in 0..32 {
|
for pos in 0..32 {
|
||||||
self[end - pos - 1] = val.low_u64() as u8;
|
self[end - pos - 1] = val.low_u64() as u8;
|
||||||
@ -229,7 +229,7 @@ impl Memory for Vec<u8> {
|
|||||||
fn resize(&mut self, new_size: usize) {
|
fn resize(&mut self, new_size: usize) {
|
||||||
self.resize(new_size, 0);
|
self.resize(new_size, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn expand(&mut self, size: usize) {
|
fn expand(&mut self, size: usize) {
|
||||||
if size > self.len() {
|
if size > self.len() {
|
||||||
Memory::resize(self, size)
|
Memory::resize(self, size)
|
||||||
@ -258,6 +258,7 @@ impl<'a> CodeReader<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(enum_variant_names)]
|
||||||
enum InstructionCost {
|
enum InstructionCost {
|
||||||
Gas(U256),
|
Gas(U256),
|
||||||
GasMem(U256, U256),
|
GasMem(U256, U256),
|
||||||
@ -282,7 +283,7 @@ impl evm::Evm for Interpreter {
|
|||||||
let code = ¶ms.code.as_ref().unwrap();
|
let code = ¶ms.code.as_ref().unwrap();
|
||||||
let valid_jump_destinations = self.find_jump_destinations(&code);
|
let valid_jump_destinations = self.find_jump_destinations(&code);
|
||||||
|
|
||||||
let mut current_gas = params.gas.clone();
|
let mut current_gas = params.gas;
|
||||||
let mut stack = VecStack::with_capacity(ext.schedule().stack_limit, U256::zero());
|
let mut stack = VecStack::with_capacity(ext.schedule().stack_limit, U256::zero());
|
||||||
let mut mem = vec![];
|
let mut mem = vec![];
|
||||||
let mut reader = CodeReader {
|
let mut reader = CodeReader {
|
||||||
@ -331,7 +332,7 @@ impl evm::Evm for Interpreter {
|
|||||||
let pos = try!(self.verify_jump(position, &valid_jump_destinations));
|
let pos = try!(self.verify_jump(position, &valid_jump_destinations));
|
||||||
reader.position = pos;
|
reader.position = pos;
|
||||||
},
|
},
|
||||||
InstructionResult::StopExecutionWithGasLeft(gas_left) => {
|
InstructionResult::StopExecutionWithGasLeft(gas_left) => {
|
||||||
current_gas = gas_left;
|
current_gas = gas_left;
|
||||||
reader.position = code.len();
|
reader.position = code.len();
|
||||||
},
|
},
|
||||||
@ -380,10 +381,9 @@ impl Interpreter {
|
|||||||
|
|
||||||
let gas = if self.is_zero(&val) && !self.is_zero(newval) {
|
let gas = if self.is_zero(&val) && !self.is_zero(newval) {
|
||||||
schedule.sstore_set_gas
|
schedule.sstore_set_gas
|
||||||
} else if !self.is_zero(&val) && self.is_zero(newval) {
|
|
||||||
// Refund is added when actually executing sstore
|
|
||||||
schedule.sstore_reset_gas
|
|
||||||
} else {
|
} else {
|
||||||
|
// Refund for below case is added when actually executing sstore
|
||||||
|
// !self.is_zero(&val) && self.is_zero(newval)
|
||||||
schedule.sstore_reset_gas
|
schedule.sstore_reset_gas
|
||||||
};
|
};
|
||||||
InstructionCost::Gas(U256::from(gas))
|
InstructionCost::Gas(U256::from(gas))
|
||||||
@ -391,10 +391,7 @@ impl Interpreter {
|
|||||||
instructions::SLOAD => {
|
instructions::SLOAD => {
|
||||||
InstructionCost::Gas(U256::from(schedule.sload_gas))
|
InstructionCost::Gas(U256::from(schedule.sload_gas))
|
||||||
},
|
},
|
||||||
instructions::MSTORE => {
|
instructions::MSTORE | instructions::MLOAD => {
|
||||||
InstructionCost::GasMem(default_gas, try!(self.mem_needed_const(stack.peek(0), 32)))
|
|
||||||
},
|
|
||||||
instructions::MLOAD => {
|
|
||||||
InstructionCost::GasMem(default_gas, try!(self.mem_needed_const(stack.peek(0), 32)))
|
InstructionCost::GasMem(default_gas, try!(self.mem_needed_const(stack.peek(0), 32)))
|
||||||
},
|
},
|
||||||
instructions::MSTORE8 => {
|
instructions::MSTORE8 => {
|
||||||
@ -409,10 +406,7 @@ impl Interpreter {
|
|||||||
let gas = U256::from(schedule.sha3_gas) + (U256::from(schedule.sha3_word_gas) * words);
|
let gas = U256::from(schedule.sha3_gas) + (U256::from(schedule.sha3_word_gas) * words);
|
||||||
InstructionCost::GasMem(gas, try!(self.mem_needed(stack.peek(0), stack.peek(1))))
|
InstructionCost::GasMem(gas, try!(self.mem_needed(stack.peek(0), stack.peek(1))))
|
||||||
},
|
},
|
||||||
instructions::CALLDATACOPY => {
|
instructions::CALLDATACOPY | instructions::CODECOPY => {
|
||||||
InstructionCost::GasMemCopy(default_gas, try!(self.mem_needed(stack.peek(0), stack.peek(2))), stack.peek(2).clone())
|
|
||||||
},
|
|
||||||
instructions::CODECOPY => {
|
|
||||||
InstructionCost::GasMemCopy(default_gas, try!(self.mem_needed(stack.peek(0), stack.peek(2))), stack.peek(2).clone())
|
InstructionCost::GasMemCopy(default_gas, try!(self.mem_needed(stack.peek(0), stack.peek(2))), stack.peek(2).clone())
|
||||||
},
|
},
|
||||||
instructions::EXTCODECOPY => {
|
instructions::EXTCODECOPY => {
|
||||||
@ -435,7 +429,7 @@ impl Interpreter {
|
|||||||
try!(self.mem_needed(stack.peek(5), stack.peek(6))),
|
try!(self.mem_needed(stack.peek(5), stack.peek(6))),
|
||||||
try!(self.mem_needed(stack.peek(3), stack.peek(4)))
|
try!(self.mem_needed(stack.peek(3), stack.peek(4)))
|
||||||
);
|
);
|
||||||
|
|
||||||
let address = u256_to_address(stack.peek(1));
|
let address = u256_to_address(stack.peek(1));
|
||||||
|
|
||||||
if instruction == instructions::CALL && !ext.exists(&address) {
|
if instruction == instructions::CALL && !ext.exists(&address) {
|
||||||
@ -532,8 +526,8 @@ impl Interpreter {
|
|||||||
params: &ActionParams,
|
params: &ActionParams,
|
||||||
ext: &mut evm::Ext,
|
ext: &mut evm::Ext,
|
||||||
instruction: Instruction,
|
instruction: Instruction,
|
||||||
code: &mut CodeReader,
|
code: &mut CodeReader,
|
||||||
mem: &mut Memory,
|
mem: &mut Memory,
|
||||||
stack: &mut Stack<U256>
|
stack: &mut Stack<U256>
|
||||||
) -> Result<InstructionResult, evm::Error> {
|
) -> Result<InstructionResult, evm::Error> {
|
||||||
match instruction {
|
match instruction {
|
||||||
@ -562,7 +556,7 @@ impl Interpreter {
|
|||||||
|
|
||||||
let contract_code = mem.read_slice(init_off, init_size);
|
let contract_code = mem.read_slice(init_off, init_size);
|
||||||
let can_create = ext.balance(¶ms.address) >= endowment && ext.depth() < ext.schedule().max_depth;
|
let can_create = ext.balance(¶ms.address) >= endowment && ext.depth() < ext.schedule().max_depth;
|
||||||
|
|
||||||
if !can_create {
|
if !can_create {
|
||||||
stack.push(U256::zero());
|
stack.push(U256::zero());
|
||||||
return Ok(InstructionResult::Ok);
|
return Ok(InstructionResult::Ok);
|
||||||
@ -641,7 +635,7 @@ impl Interpreter {
|
|||||||
Ok(InstructionResult::Ok)
|
Ok(InstructionResult::Ok)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
instructions::RETURN => {
|
instructions::RETURN => {
|
||||||
let init_off = stack.pop_back();
|
let init_off = stack.pop_back();
|
||||||
let init_size = stack.pop_back();
|
let init_size = stack.pop_back();
|
||||||
@ -736,8 +730,7 @@ impl Interpreter {
|
|||||||
},
|
},
|
||||||
instructions::CALLVALUE => {
|
instructions::CALLVALUE => {
|
||||||
stack.push(match params.value {
|
stack.push(match params.value {
|
||||||
ActionValue::Transfer(val) => val,
|
ActionValue::Transfer(val) | ActionValue::Apparent(val) => val
|
||||||
ActionValue::Apparent(val) => val,
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
instructions::CALLDATALOAD => {
|
instructions::CALLDATALOAD => {
|
||||||
@ -836,20 +829,20 @@ impl Interpreter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_instructions_requirements(&self,
|
fn verify_instructions_requirements(&self,
|
||||||
info: &instructions::InstructionInfo,
|
info: &instructions::InstructionInfo,
|
||||||
stack_limit: usize,
|
stack_limit: usize,
|
||||||
stack: &Stack<U256>) -> Result<(), evm::Error> {
|
stack: &Stack<U256>) -> Result<(), evm::Error> {
|
||||||
if !stack.has(info.args) {
|
if !stack.has(info.args) {
|
||||||
Err(evm::Error::StackUnderflow {
|
Err(evm::Error::StackUnderflow {
|
||||||
instruction: info.name,
|
instruction: info.name,
|
||||||
wanted: info.args,
|
wanted: info.args,
|
||||||
on_stack: stack.size()
|
on_stack: stack.size()
|
||||||
})
|
})
|
||||||
} else if stack.size() - info.args + info.ret > stack_limit {
|
} else if stack.size() - info.args + info.ret > stack_limit {
|
||||||
Err(evm::Error::OutOfStack {
|
Err(evm::Error::OutOfStack {
|
||||||
instruction: info.name,
|
instruction: info.name,
|
||||||
wanted: info.ret - info.args,
|
wanted: info.ret - info.args,
|
||||||
limit: stack_limit
|
limit: stack_limit
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
@ -923,7 +916,7 @@ impl Interpreter {
|
|||||||
stack.push(if !self.is_zero(&b) {
|
stack.push(if !self.is_zero(&b) {
|
||||||
a.overflowing_div(b).0
|
a.overflowing_div(b).0
|
||||||
} else {
|
} else {
|
||||||
U256::zero()
|
U256::zero()
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
instructions::MOD => {
|
instructions::MOD => {
|
||||||
@ -982,9 +975,9 @@ impl Interpreter {
|
|||||||
let (a, neg_a) = get_and_reset_sign(stack.pop_back());
|
let (a, neg_a) = get_and_reset_sign(stack.pop_back());
|
||||||
let (b, neg_b) = get_and_reset_sign(stack.pop_back());
|
let (b, neg_b) = get_and_reset_sign(stack.pop_back());
|
||||||
|
|
||||||
let is_positive_lt = a < b && (neg_a | neg_b) == false;
|
let is_positive_lt = a < b && !(neg_a | neg_b);
|
||||||
let is_negative_lt = a > b && (neg_a & neg_b) == true;
|
let is_negative_lt = a > b && (neg_a & neg_b);
|
||||||
let has_different_signs = neg_a == true && neg_b == false;
|
let has_different_signs = neg_a && !neg_b;
|
||||||
|
|
||||||
stack.push(self.bool_to_u256(is_positive_lt | is_negative_lt | has_different_signs));
|
stack.push(self.bool_to_u256(is_positive_lt | is_negative_lt | has_different_signs));
|
||||||
},
|
},
|
||||||
@ -997,9 +990,9 @@ impl Interpreter {
|
|||||||
let (a, neg_a) = get_and_reset_sign(stack.pop_back());
|
let (a, neg_a) = get_and_reset_sign(stack.pop_back());
|
||||||
let (b, neg_b) = get_and_reset_sign(stack.pop_back());
|
let (b, neg_b) = get_and_reset_sign(stack.pop_back());
|
||||||
|
|
||||||
let is_positive_gt = a > b && (neg_a | neg_b) == false;
|
let is_positive_gt = a > b && !(neg_a | neg_b);
|
||||||
let is_negative_gt = a < b && (neg_a & neg_b) == true;
|
let is_negative_gt = a < b && (neg_a & neg_b);
|
||||||
let has_different_signs = neg_a == false && neg_b == true;
|
let has_different_signs = !neg_a && neg_b;
|
||||||
|
|
||||||
stack.push(self.bool_to_u256(is_positive_gt | is_negative_gt | has_different_signs));
|
stack.push(self.bool_to_u256(is_positive_gt | is_negative_gt | has_different_signs));
|
||||||
},
|
},
|
||||||
@ -1179,7 +1172,7 @@ mod tests {
|
|||||||
let schedule = evm::Schedule::default();
|
let schedule = evm::Schedule::default();
|
||||||
let current_mem_size = 0;
|
let current_mem_size = 0;
|
||||||
let mem_size = U256::from(5);
|
let mem_size = U256::from(5);
|
||||||
|
|
||||||
// when
|
// when
|
||||||
let (mem_cost, mem_size) = interpreter.mem_gas_cost(&schedule, current_mem_size, &mem_size).unwrap();
|
let (mem_cost, mem_size) = interpreter.mem_gas_cost(&schedule, current_mem_size, &mem_size).unwrap();
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ struct FakeLogEntry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(PartialEq, Eq, Hash, Debug)]
|
#[derive(PartialEq, Eq, Hash, Debug)]
|
||||||
|
#[allow(enum_variant_names)] // Common prefix is C ;)
|
||||||
enum FakeCallType {
|
enum FakeCallType {
|
||||||
CALL, CREATE
|
CALL, CREATE
|
||||||
}
|
}
|
||||||
@ -59,7 +60,7 @@ struct FakeExt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FakeExt {
|
impl FakeExt {
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
FakeExt::default()
|
FakeExt::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,7 +85,7 @@ impl Ext for FakeExt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn balance(&self, address: &Address) -> U256 {
|
fn balance(&self, address: &Address) -> U256 {
|
||||||
self.balances.get(address).unwrap().clone()
|
*self.balances.get(address).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn blockhash(&self, number: &U256) -> H256 {
|
fn blockhash(&self, number: &U256) -> H256 {
|
||||||
@ -94,35 +95,35 @@ impl Ext for FakeExt {
|
|||||||
fn create(&mut self, gas: &U256, value: &U256, code: &[u8]) -> ContractCreateResult {
|
fn create(&mut self, gas: &U256, value: &U256, code: &[u8]) -> ContractCreateResult {
|
||||||
self.calls.insert(FakeCall {
|
self.calls.insert(FakeCall {
|
||||||
call_type: FakeCallType::CREATE,
|
call_type: FakeCallType::CREATE,
|
||||||
gas: gas.clone(),
|
gas: *gas,
|
||||||
sender_address: None,
|
sender_address: None,
|
||||||
receive_address: None,
|
receive_address: None,
|
||||||
value: Some(value.clone()),
|
value: Some(*value),
|
||||||
data: code.to_vec(),
|
data: code.to_vec(),
|
||||||
code_address: None
|
code_address: None
|
||||||
});
|
});
|
||||||
ContractCreateResult::Failed
|
ContractCreateResult::Failed
|
||||||
}
|
}
|
||||||
|
|
||||||
fn call(&mut self,
|
fn call(&mut self,
|
||||||
gas: &U256,
|
gas: &U256,
|
||||||
sender_address: &Address,
|
sender_address: &Address,
|
||||||
receive_address: &Address,
|
receive_address: &Address,
|
||||||
value: Option<U256>,
|
value: Option<U256>,
|
||||||
data: &[u8],
|
data: &[u8],
|
||||||
code_address: &Address,
|
code_address: &Address,
|
||||||
_output: &mut [u8]) -> MessageCallResult {
|
_output: &mut [u8]) -> MessageCallResult {
|
||||||
|
|
||||||
self.calls.insert(FakeCall {
|
self.calls.insert(FakeCall {
|
||||||
call_type: FakeCallType::CALL,
|
call_type: FakeCallType::CALL,
|
||||||
gas: gas.clone(),
|
gas: *gas,
|
||||||
sender_address: Some(sender_address.clone()),
|
sender_address: Some(sender_address.clone()),
|
||||||
receive_address: Some(receive_address.clone()),
|
receive_address: Some(receive_address.clone()),
|
||||||
value: value,
|
value: value,
|
||||||
data: data.to_vec(),
|
data: data.to_vec(),
|
||||||
code_address: Some(code_address.clone())
|
code_address: Some(code_address.clone())
|
||||||
});
|
});
|
||||||
MessageCallResult::Success(gas.clone())
|
MessageCallResult::Success(*gas)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn extcode(&self, address: &Address) -> Bytes {
|
fn extcode(&self, address: &Address) -> Bytes {
|
||||||
@ -176,7 +177,7 @@ fn test_stack_underflow() {
|
|||||||
let vm : Box<evm::Evm> = Box::new(super::interpreter::Interpreter);
|
let vm : Box<evm::Evm> = Box::new(super::interpreter::Interpreter);
|
||||||
vm.exec(params, &mut ext).unwrap_err()
|
vm.exec(params, &mut ext).unwrap_err()
|
||||||
};
|
};
|
||||||
|
|
||||||
match err {
|
match err {
|
||||||
evm::Error::StackUnderflow {wanted, on_stack, ..} => {
|
evm::Error::StackUnderflow {wanted, on_stack, ..} => {
|
||||||
assert_eq!(wanted, 2);
|
assert_eq!(wanted, 2);
|
||||||
@ -353,7 +354,7 @@ evm_test!{test_log_sender: test_log_sender_jit, test_log_sender_int}
|
|||||||
fn test_log_sender(factory: super::Factory) {
|
fn test_log_sender(factory: super::Factory) {
|
||||||
// 60 ff - push ff
|
// 60 ff - push ff
|
||||||
// 60 00 - push 00
|
// 60 00 - push 00
|
||||||
// 53 - mstore
|
// 53 - mstore
|
||||||
// 33 - sender
|
// 33 - sender
|
||||||
// 60 20 - push 20
|
// 60 20 - push 20
|
||||||
// 60 00 - push 0
|
// 60 00 - push 0
|
||||||
@ -449,7 +450,7 @@ fn test_author(factory: super::Factory) {
|
|||||||
|
|
||||||
evm_test!{test_timestamp: test_timestamp_jit, test_timestamp_int}
|
evm_test!{test_timestamp: test_timestamp_jit, test_timestamp_int}
|
||||||
fn test_timestamp(factory: super::Factory) {
|
fn test_timestamp(factory: super::Factory) {
|
||||||
let timestamp = 0x1234;
|
let timestamp = 0x1234;
|
||||||
let code = "42600055".from_hex().unwrap();
|
let code = "42600055".from_hex().unwrap();
|
||||||
|
|
||||||
let mut params = ActionParams::default();
|
let mut params = ActionParams::default();
|
||||||
@ -469,7 +470,7 @@ fn test_timestamp(factory: super::Factory) {
|
|||||||
|
|
||||||
evm_test!{test_number: test_number_jit, test_number_int}
|
evm_test!{test_number: test_number_jit, test_number_int}
|
||||||
fn test_number(factory: super::Factory) {
|
fn test_number(factory: super::Factory) {
|
||||||
let number = 0x1234;
|
let number = 0x1234;
|
||||||
let code = "43600055".from_hex().unwrap();
|
let code = "43600055".from_hex().unwrap();
|
||||||
|
|
||||||
let mut params = ActionParams::default();
|
let mut params = ActionParams::default();
|
||||||
@ -898,7 +899,7 @@ fn test_calls(factory: super::Factory) {
|
|||||||
let mut ext = FakeExt::new();
|
let mut ext = FakeExt::new();
|
||||||
ext.balances = {
|
ext.balances = {
|
||||||
let mut s = HashMap::new();
|
let mut s = HashMap::new();
|
||||||
s.insert(params.address.clone(), params.gas.clone());
|
s.insert(params.address.clone(), params.gas);
|
||||||
s
|
s
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -45,10 +45,9 @@ impl OriginInfo {
|
|||||||
OriginInfo {
|
OriginInfo {
|
||||||
address: params.address.clone(),
|
address: params.address.clone(),
|
||||||
origin: params.origin.clone(),
|
origin: params.origin.clone(),
|
||||||
gas_price: params.gas_price.clone(),
|
gas_price: params.gas_price,
|
||||||
value: match params.value {
|
value: match params.value {
|
||||||
ActionValue::Transfer(val) => val,
|
ActionValue::Transfer(val) | ActionValue::Apparent(val) => val
|
||||||
ActionValue::Apparent(val) => val,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,8 +132,8 @@ impl<'a> Ext for Externalities<'a> {
|
|||||||
sender: self.origin_info.address.clone(),
|
sender: self.origin_info.address.clone(),
|
||||||
origin: self.origin_info.origin.clone(),
|
origin: self.origin_info.origin.clone(),
|
||||||
gas: *gas,
|
gas: *gas,
|
||||||
gas_price: self.origin_info.gas_price.clone(),
|
gas_price: self.origin_info.gas_price,
|
||||||
value: ActionValue::Transfer(value.clone()),
|
value: ActionValue::Transfer(*value),
|
||||||
code: Some(code.to_vec()),
|
code: Some(code.to_vec()),
|
||||||
data: None,
|
data: None,
|
||||||
};
|
};
|
||||||
@ -164,11 +163,11 @@ impl<'a> Ext for Externalities<'a> {
|
|||||||
let mut params = ActionParams {
|
let mut params = ActionParams {
|
||||||
sender: sender_address.clone(),
|
sender: sender_address.clone(),
|
||||||
address: receive_address.clone(),
|
address: receive_address.clone(),
|
||||||
value: ActionValue::Apparent(self.origin_info.value.clone()),
|
value: ActionValue::Apparent(self.origin_info.value),
|
||||||
code_address: code_address.clone(),
|
code_address: code_address.clone(),
|
||||||
origin: self.origin_info.origin.clone(),
|
origin: self.origin_info.origin.clone(),
|
||||||
gas: *gas,
|
gas: *gas,
|
||||||
gas_price: self.origin_info.gas_price.clone(),
|
gas_price: self.origin_info.gas_price,
|
||||||
code: self.state.code(code_address),
|
code: self.state.code(code_address),
|
||||||
data: Some(data.to_vec()),
|
data: Some(data.to_vec()),
|
||||||
};
|
};
|
||||||
@ -364,7 +363,7 @@ mod tests {
|
|||||||
&Address::new(),
|
&Address::new(),
|
||||||
&Address::new(),
|
&Address::new(),
|
||||||
Some(U256::from_str("0000000000000000000000000000000000000000000000000000000000150000").unwrap()),
|
Some(U256::from_str("0000000000000000000000000000000000000000000000000000000000150000").unwrap()),
|
||||||
&vec![],
|
&[],
|
||||||
&Address::new(),
|
&Address::new(),
|
||||||
&mut output);
|
&mut output);
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ declare_test!{StateTests_stSolidityTest, "StateTests/stSolidityTest"}
|
|||||||
declare_test!{StateTests_stSpecialTest, "StateTests/stSpecialTest"}
|
declare_test!{StateTests_stSpecialTest, "StateTests/stSpecialTest"}
|
||||||
declare_test!{StateTests_stSystemOperationsTest, "StateTests/stSystemOperationsTest"}
|
declare_test!{StateTests_stSystemOperationsTest, "StateTests/stSystemOperationsTest"}
|
||||||
declare_test!{StateTests_stTransactionTest, "StateTests/stTransactionTest"}
|
declare_test!{StateTests_stTransactionTest, "StateTests/stTransactionTest"}
|
||||||
declare_test!{StateTests_stTransitionTest, "StateTests/stTransitionTest"}
|
//declare_test!{StateTests_stTransitionTest, "StateTests/stTransitionTest"}
|
||||||
declare_test!{StateTests_stWalletTest, "StateTests/stWalletTest"}
|
declare_test!{StateTests_stWalletTest, "StateTests/stWalletTest"}
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,8 +18,15 @@
|
|||||||
#![feature(cell_extras)]
|
#![feature(cell_extras)]
|
||||||
#![feature(augmented_assignments)]
|
#![feature(augmented_assignments)]
|
||||||
#![feature(plugin)]
|
#![feature(plugin)]
|
||||||
|
// Clippy
|
||||||
#![plugin(clippy)]
|
#![plugin(clippy)]
|
||||||
#![allow(needless_range_loop, match_bool)]
|
// TODO [todr] not really sure
|
||||||
|
#![allow(needless_range_loop)]
|
||||||
|
// Shorter than if-else
|
||||||
|
#![allow(match_bool)]
|
||||||
|
// Keeps consistency (all lines with `.clone()`) and helpful when changing ref to non-ref.
|
||||||
|
#![allow(clone_on_copy)]
|
||||||
|
|
||||||
|
|
||||||
//! Ethcore library
|
//! Ethcore library
|
||||||
//!
|
//!
|
||||||
@ -54,7 +61,7 @@
|
|||||||
//! cd parity
|
//! cd parity
|
||||||
//! cargo build --release
|
//! cargo build --release
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
//! - OSX:
|
//! - OSX:
|
||||||
//!
|
//!
|
||||||
//! ```bash
|
//! ```bash
|
||||||
@ -125,8 +132,8 @@ mod executive;
|
|||||||
mod externalities;
|
mod externalities;
|
||||||
mod verification;
|
mod verification;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests;
|
mod tests;
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[cfg(feature="json-tests")]
|
#[cfg(feature="json-tests")]
|
||||||
mod json_tests;
|
mod json_tests;
|
||||||
|
@ -43,8 +43,8 @@ impl PodAccount {
|
|||||||
/// NOTE: This will silently fail unless the account is fully cached.
|
/// NOTE: This will silently fail unless the account is fully cached.
|
||||||
pub fn from_account(acc: &Account) -> PodAccount {
|
pub fn from_account(acc: &Account) -> PodAccount {
|
||||||
PodAccount {
|
PodAccount {
|
||||||
balance: acc.balance().clone(),
|
balance: *acc.balance(),
|
||||||
nonce: acc.nonce().clone(),
|
nonce: *acc.nonce(),
|
||||||
storage: acc.storage_overlay().iter().fold(BTreeMap::new(), |mut m, (k, &(_, ref v))| {m.insert(k.clone(), v.clone()); m}),
|
storage: acc.storage_overlay().iter().fold(BTreeMap::new(), |mut m, (k, &(_, ref v))| {m.insert(k.clone(), v.clone()); m}),
|
||||||
code: acc.code().unwrap().to_vec(),
|
code: acc.code().unwrap().to_vec(),
|
||||||
}
|
}
|
||||||
|
@ -153,12 +153,12 @@ impl State {
|
|||||||
|
|
||||||
/// Get the balance of account `a`.
|
/// Get the balance of account `a`.
|
||||||
pub fn balance(&self, a: &Address) -> U256 {
|
pub fn balance(&self, a: &Address) -> U256 {
|
||||||
self.get(a, false).as_ref().map_or(U256::zero(), |account| account.balance().clone())
|
self.get(a, false).as_ref().map_or(U256::zero(), |account| *account.balance())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the nonce of account `a`.
|
/// Get the nonce of account `a`.
|
||||||
pub fn nonce(&self, a: &Address) -> U256 {
|
pub fn nonce(&self, a: &Address) -> U256 {
|
||||||
self.get(a, false).as_ref().map_or(U256::zero(), |account| account.nonce().clone())
|
self.get(a, false).as_ref().map_or(U256::zero(), |account| *account.nonce())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Mutate storage of account `address` so that it is `value` for `key`.
|
/// Mutate storage of account `address` so that it is `value` for `key`.
|
||||||
|
3
evmjit/.gitignore
vendored
3
evmjit/.gitignore
vendored
@ -1,3 +0,0 @@
|
|||||||
target
|
|
||||||
Cargo.lock
|
|
||||||
*.swp
|
|
@ -165,7 +165,7 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
Some(ref a) => {
|
Some(ref a) => {
|
||||||
public_address = SocketAddr::from_str(a.as_ref()).expect("Invalid listen/public address given with --address");
|
public_address = SocketAddr::from_str(a.as_ref()).expect("Invalid listen/public address given with --address");
|
||||||
listen_address = public_address.clone();
|
listen_address = public_address;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -9,10 +9,10 @@ authors = ["Ethcore <admin@ethcore.io"]
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde = "0.6.7"
|
serde = "0.6.7"
|
||||||
serde_macros = "0.6.10"
|
serde_macros = { git = "https://github.com/debris/serde", path = "serde_macros" }
|
||||||
serde_json = "0.6.0"
|
serde_json = "0.6.0"
|
||||||
jsonrpc-core = "1.1"
|
jsonrpc-core = { git = "https://github.com/debris/jsonrpc-core" }
|
||||||
jsonrpc-http-server = "1.1"
|
jsonrpc-http-server = { git = "https://github.com/debris/jsonrpc-http-server" }
|
||||||
ethcore-util = { path = "../util" }
|
ethcore-util = { path = "../util" }
|
||||||
ethcore = { path = "../ethcore" }
|
ethcore = { path = "../ethcore" }
|
||||||
ethsync = { path = "../sync" }
|
ethsync = { path = "../sync" }
|
||||||
|
@ -55,6 +55,7 @@ impl Visitor for BlockNumberVisitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Into<BlockId> for BlockNumber {
|
impl Into<BlockId> for BlockNumber {
|
||||||
|
#[allow(match_same_arms)]
|
||||||
fn into(self) -> BlockId {
|
fn into(self) -> BlockId {
|
||||||
match self {
|
match self {
|
||||||
BlockNumber::Num(n) => BlockId::Number(n),
|
BlockNumber::Num(n) => BlockId::Number(n),
|
||||||
|
@ -14,17 +14,17 @@
|
|||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
///
|
///
|
||||||
/// BlockChain synchronization strategy.
|
/// BlockChain synchronization strategy.
|
||||||
/// Syncs to peers and keeps up to date.
|
/// Syncs to peers and keeps up to date.
|
||||||
/// This implementation uses ethereum protocol v63
|
/// This implementation uses ethereum protocol v63
|
||||||
///
|
///
|
||||||
/// Syncing strategy.
|
/// Syncing strategy.
|
||||||
///
|
///
|
||||||
/// 1. A peer arrives with a total difficulty better than ours
|
/// 1. A peer arrives with a total difficulty better than ours
|
||||||
/// 2. Find a common best block between our an peer chain.
|
/// 2. Find a common best block between our an peer chain.
|
||||||
/// Start with out best block and request headers from peer backwards until a common block is found
|
/// Start with out best block and request headers from peer backwards until a common block is found
|
||||||
/// 3. Download headers and block bodies from peers in parallel.
|
/// 3. Download headers and block bodies from peers in parallel.
|
||||||
/// As soon as a set of the blocks is fully downloaded at the head of the queue it is fed to the blockchain
|
/// As soon as a set of the blocks is fully downloaded at the head of the queue it is fed to the blockchain
|
||||||
/// 4. Maintain sync by handling NewBlocks/NewHashes messages
|
/// 4. Maintain sync by handling NewBlocks/NewHashes messages
|
||||||
///
|
///
|
||||||
@ -240,6 +240,8 @@ impl ChainSync {
|
|||||||
self.peers.clear();
|
self.peers.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[allow(for_kv_map)] // Because it's not possible to get `values_mut()`
|
||||||
/// Rest sync. Clear all downloaded data but keep the queue
|
/// Rest sync. Clear all downloaded data but keep the queue
|
||||||
fn reset(&mut self) {
|
fn reset(&mut self) {
|
||||||
self.downloading_headers.clear();
|
self.downloading_headers.clear();
|
||||||
@ -1023,7 +1025,7 @@ impl ChainSync {
|
|||||||
GET_NODE_DATA_PACKET => self.return_rlp(io, &rlp,
|
GET_NODE_DATA_PACKET => self.return_rlp(io, &rlp,
|
||||||
ChainSync::return_node_data,
|
ChainSync::return_node_data,
|
||||||
|e| format!("Error sending nodes: {:?}", e)),
|
|e| format!("Error sending nodes: {:?}", e)),
|
||||||
|
|
||||||
_ => {
|
_ => {
|
||||||
debug!(target: "sync", "Unknown packet {}", packet_id);
|
debug!(target: "sync", "Unknown packet {}", packet_id);
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -1061,7 +1063,7 @@ impl ChainSync {
|
|||||||
for block_hash in route.blocks {
|
for block_hash in route.blocks {
|
||||||
let mut hash_rlp = RlpStream::new_list(2);
|
let mut hash_rlp = RlpStream::new_list(2);
|
||||||
let difficulty = chain.block_total_difficulty(BlockId::Hash(block_hash.clone())).expect("Mallformed block without a difficulty on the chain!");
|
let difficulty = chain.block_total_difficulty(BlockId::Hash(block_hash.clone())).expect("Mallformed block without a difficulty on the chain!");
|
||||||
|
|
||||||
hash_rlp.append(&block_hash);
|
hash_rlp.append(&block_hash);
|
||||||
hash_rlp.append(&difficulty);
|
hash_rlp.append(&difficulty);
|
||||||
rlp_stream.append_raw(&hash_rlp.out(), 1);
|
rlp_stream.append_raw(&hash_rlp.out(), 1);
|
||||||
|
@ -16,8 +16,11 @@
|
|||||||
|
|
||||||
#![warn(missing_docs)]
|
#![warn(missing_docs)]
|
||||||
#![feature(plugin)]
|
#![feature(plugin)]
|
||||||
#![plugin(clippy)]
|
|
||||||
#![feature(augmented_assignments)]
|
#![feature(augmented_assignments)]
|
||||||
|
#![plugin(clippy)]
|
||||||
|
// Keeps consistency (all lines with `.clone()`) and helpful when changing ref to non-ref.
|
||||||
|
#![allow(clone_on_copy)]
|
||||||
|
|
||||||
//! Blockchain sync module
|
//! Blockchain sync module
|
||||||
//! Implements ethereum protocol version 63 as specified here:
|
//! Implements ethereum protocol version 63 as specified here:
|
||||||
//! https://github.com/ethereum/wiki/wiki/Ethereum-Wire-Protocol
|
//! https://github.com/ethereum/wiki/wiki/Ethereum-Wire-Protocol
|
||||||
|
@ -170,8 +170,7 @@ impl<K, V> RangeCollection<K, V> for Vec<(K, Vec<V>)> where K: Ord + PartialEq +
|
|||||||
|
|
||||||
// todo: fix warning
|
// todo: fix warning
|
||||||
let lower = match self.binary_search_by(|&(k, _)| k.cmp(&key).reverse()) {
|
let lower = match self.binary_search_by(|&(k, _)| k.cmp(&key).reverse()) {
|
||||||
Ok(index) => index,
|
Ok(index) | Err(index) => index
|
||||||
Err(index) => index,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut to_remove: Option<usize> = None;
|
let mut to_remove: Option<usize> = None;
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
#![feature(test)]
|
#![feature(test)]
|
||||||
|
|
||||||
extern crate test;
|
extern crate test;
|
||||||
extern crate rand;
|
|
||||||
extern crate ethcore_util;
|
extern crate ethcore_util;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate log;
|
extern crate log;
|
||||||
|
@ -74,7 +74,6 @@ impl From<::secp256k1::Error> for CryptoError {
|
|||||||
match e {
|
match e {
|
||||||
::secp256k1::Error::InvalidMessage => CryptoError::InvalidMessage,
|
::secp256k1::Error::InvalidMessage => CryptoError::InvalidMessage,
|
||||||
::secp256k1::Error::InvalidPublicKey => CryptoError::InvalidPublic,
|
::secp256k1::Error::InvalidPublicKey => CryptoError::InvalidPublic,
|
||||||
::secp256k1::Error::InvalidSignature => CryptoError::InvalidSignature,
|
|
||||||
::secp256k1::Error::InvalidSecretKey => CryptoError::InvalidSecret,
|
::secp256k1::Error::InvalidSecretKey => CryptoError::InvalidSecret,
|
||||||
_ => CryptoError::InvalidSignature,
|
_ => CryptoError::InvalidSignature,
|
||||||
}
|
}
|
||||||
|
@ -296,7 +296,7 @@ macro_rules! impl_hash {
|
|||||||
try!(write!(f, "{:02x}", i));
|
try!(write!(f, "{:02x}", i));
|
||||||
}
|
}
|
||||||
try!(write!(f, "…"));
|
try!(write!(f, "…"));
|
||||||
for i in &self.0[$size - 4..$size] {
|
for i in &self.0[$size - 2..$size] {
|
||||||
try!(write!(f, "{:02x}", i));
|
try!(write!(f, "{:02x}", i));
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -647,7 +647,7 @@ mod tests {
|
|||||||
fn hash() {
|
fn hash() {
|
||||||
let h = H64([0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef]);
|
let h = H64([0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef]);
|
||||||
assert_eq!(H64::from_str("0123456789abcdef").unwrap(), h);
|
assert_eq!(H64::from_str("0123456789abcdef").unwrap(), h);
|
||||||
assert_eq!(format!("{}", h), "0123…89abcdef");
|
assert_eq!(format!("{}", h), "0123…cdef");
|
||||||
assert_eq!(format!("{:?}", h), "0123456789abcdef");
|
assert_eq!(format!("{:?}", h), "0123456789abcdef");
|
||||||
assert_eq!(h.hex(), "0123456789abcdef");
|
assert_eq!(h.hex(), "0123456789abcdef");
|
||||||
assert!(h == h);
|
assert!(h == h);
|
||||||
|
@ -19,9 +19,17 @@
|
|||||||
#![feature(augmented_assignments)]
|
#![feature(augmented_assignments)]
|
||||||
#![feature(associated_consts)]
|
#![feature(associated_consts)]
|
||||||
#![feature(plugin)]
|
#![feature(plugin)]
|
||||||
#![plugin(clippy)]
|
|
||||||
#![allow(needless_range_loop, match_bool)]
|
|
||||||
#![feature(catch_panic)]
|
#![feature(catch_panic)]
|
||||||
|
// Clippy settings
|
||||||
|
#![plugin(clippy)]
|
||||||
|
// TODO [todr] not really sure
|
||||||
|
#![allow(needless_range_loop)]
|
||||||
|
// Shorter than if-else
|
||||||
|
#![allow(match_bool)]
|
||||||
|
// We use that to be more explicit about handled cases
|
||||||
|
#![allow(match_same_arms)]
|
||||||
|
// Keeps consistency (all lines with `.clone()`) and helpful when changing ref to non-ref.
|
||||||
|
#![allow(clone_on_copy)]
|
||||||
|
|
||||||
//! Ethcore-util library
|
//! Ethcore-util library
|
||||||
//!
|
//!
|
||||||
|
@ -211,7 +211,7 @@ impl Discovery {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mut ret:Vec<&NodeId> = Vec::new();
|
let mut ret:Vec<&NodeId> = Vec::new();
|
||||||
for (_, nodes) in found {
|
for nodes in found.values() {
|
||||||
for n in nodes {
|
for n in nodes {
|
||||||
if ret.len() < BUCKET_SIZE as usize /* && n->endpoint && n->endpoint.isAllowed() */ {
|
if ret.len() < BUCKET_SIZE as usize /* && n->endpoint && n->endpoint.isAllowed() */ {
|
||||||
ret.push(n);
|
ret.push(n);
|
||||||
|
@ -325,7 +325,7 @@ impl Session {
|
|||||||
let mut rlp = RlpStream::new();
|
let mut rlp = RlpStream::new();
|
||||||
rlp.append(&(PACKET_DISCONNECT as u32));
|
rlp.append(&(PACKET_DISCONNECT as u32));
|
||||||
rlp.begin_list(1);
|
rlp.begin_list(1);
|
||||||
rlp.append(&(reason.clone() as u32));
|
rlp.append(&(reason as u32));
|
||||||
self.connection.send_packet(&rlp.out()).ok();
|
self.connection.send_packet(&rlp.out()).ok();
|
||||||
NetworkError::Disconnect(reason)
|
NetworkError::Disconnect(reason)
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,7 @@ impl<F> OnPanicListener for F
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn convert_to_string(t: &Box<Any + Send>) -> Option<String> {
|
fn convert_to_string(t: &Box<Any + Send>) -> Option<String> {
|
||||||
let as_str = t.downcast_ref::<&'static str>().map(|t| t.clone().to_owned());
|
let as_str = t.downcast_ref::<&'static str>().cloned().map(|t| t.to_owned());
|
||||||
let as_string = t.downcast_ref::<String>().cloned();
|
let as_string = t.downcast_ref::<String>().cloned();
|
||||||
|
|
||||||
as_str.or(as_string)
|
as_str.or(as_string)
|
||||||
|
@ -408,7 +408,7 @@ impl Decodable for Vec<u8> {
|
|||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
||||||
decoder.read_value(| bytes | {
|
decoder.read_value(| bytes | {
|
||||||
let mut res = vec![];
|
let mut res = vec![];
|
||||||
res.extend(bytes);
|
res.extend_from_slice(bytes);
|
||||||
Ok(res)
|
Ok(res)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -293,7 +293,7 @@ impl<'a> Iterator for TrieDBIterator<'a> {
|
|||||||
|
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
let b = match self.trail.last_mut() {
|
let b = match self.trail.last_mut() {
|
||||||
Some(ref mut b) => { b.increment(); b.clone() },
|
Some(mut b) => { b.increment(); b.clone() },
|
||||||
None => return None
|
None => return None
|
||||||
};
|
};
|
||||||
match (b.status, b.node) {
|
match (b.status, b.node) {
|
||||||
@ -309,9 +309,8 @@ impl<'a> Iterator for TrieDBIterator<'a> {
|
|||||||
self.trail.pop();
|
self.trail.pop();
|
||||||
self.next()
|
self.next()
|
||||||
},
|
},
|
||||||
(Status::At, Node::Leaf(_, v)) => Some((self.key(), v)),
|
(Status::At, Node::Leaf(_, v)) | (Status::At, Node::Branch(_, Some(v))) => Some((self.key(), v)),
|
||||||
(Status::At, Node::Extension(_, d)) => self.descend_next(d),
|
(Status::At, Node::Extension(_, d)) => self.descend_next(d),
|
||||||
(Status::At, Node::Branch(_, Some(v))) => Some((self.key(), v)),
|
|
||||||
(Status::At, Node::Branch(_, _)) => self.next(),
|
(Status::At, Node::Branch(_, _)) => self.next(),
|
||||||
(Status::AtChild(i), Node::Branch(children, _)) if children[i].len() > 0 => {
|
(Status::AtChild(i), Node::Branch(children, _)) if children[i].len() > 0 => {
|
||||||
match i {
|
match i {
|
||||||
|
Loading…
Reference in New Issue
Block a user