Merge branch 'master' into pip-msg

This commit is contained in:
Robert Habermeier 2017-03-22 13:14:28 +01:00
commit 219eddf33e
78 changed files with 611 additions and 410 deletions

153
Cargo.lock generated
View File

@ -2,7 +2,7 @@
name = "parity" name = "parity"
version = "1.7.0" version = "1.7.0"
dependencies = [ dependencies = [
"ansi_term 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"app_dirs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "app_dirs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"clippy 0.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "clippy 0.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
"ctrlc 1.1.1 (git+https://github.com/paritytech/rust-ctrlc.git)", "ctrlc 1.1.1 (git+https://github.com/paritytech/rust-ctrlc.git)",
@ -39,6 +39,7 @@ dependencies = [
"parity-reactor 0.1.0", "parity-reactor 0.1.0",
"parity-rpc-client 1.4.0", "parity-rpc-client 1.4.0",
"parity-updater 1.7.0", "parity-updater 1.7.0",
"path 0.1.0",
"regex 0.1.68 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.68 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp 0.1.0", "rlp 0.1.0",
"rpassword 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rpassword 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -72,7 +73,7 @@ dependencies = [
[[package]] [[package]]
name = "ansi_term" name = "ansi_term"
version = "0.7.2" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
@ -93,19 +94,19 @@ dependencies = [
[[package]] [[package]]
name = "arrayvec" name = "arrayvec"
version = "0.3.16" version = "0.3.20"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"nodrop 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "nodrop 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
"odds 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "odds 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
name = "aster" name = "aster"
version = "0.17.0" version = "0.41.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"syntex_syntax 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "syntex_syntax 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
@ -356,7 +357,7 @@ name = "eth-secp256k1"
version = "0.5.6" version = "0.5.6"
source = "git+https://github.com/ethcore/rust-secp256k1#98ad9b9ecae44a563efdd64273bcebc6b4ed81c6" source = "git+https://github.com/ethcore/rust-secp256k1#98ad9b9ecae44a563efdd64273bcebc6b4ed81c6"
dependencies = [ dependencies = [
"arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "arrayvec 0.3.20 (registry+https://github.com/rust-lang/crates.io-index)",
"gcc 0.3.43 (registry+https://github.com/rust-lang/crates.io-index)", "gcc 0.3.43 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
@ -403,6 +404,7 @@ dependencies = [
"ethcore-ipc 1.7.0", "ethcore-ipc 1.7.0",
"ethcore-ipc-codegen 1.7.0", "ethcore-ipc-codegen 1.7.0",
"ethcore-ipc-nano 1.7.0", "ethcore-ipc-nano 1.7.0",
"ethcore-logger 1.7.0",
"ethcore-stratum 1.7.0", "ethcore-stratum 1.7.0",
"ethcore-util 1.7.0", "ethcore-util 1.7.0",
"ethjson 0.1.0", "ethjson 0.1.0",
@ -464,7 +466,7 @@ dependencies = [
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"mime_guess 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-dapps-glue 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-hash-fetch 1.7.0", "parity-hash-fetch 1.7.0",
"parity-reactor 0.1.0", "parity-reactor 0.1.0",
"parity-ui 1.7.0", "parity-ui 1.7.0",
@ -511,11 +513,11 @@ dependencies = [
name = "ethcore-ipc-codegen" name = "ethcore-ipc-codegen"
version = "1.7.0" version = "1.7.0"
dependencies = [ dependencies = [
"aster 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", "aster 0.41.0 (registry+https://github.com/rust-lang/crates.io-index)",
"quasi 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "quasi 0.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
"quasi_codegen 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "quasi_codegen 0.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
"syntex 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "syntex 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
"syntex_syntax 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "syntex_syntax 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
@ -579,11 +581,13 @@ dependencies = [
name = "ethcore-logger" name = "ethcore-logger"
version = "1.7.0" version = "1.7.0"
dependencies = [ dependencies = [
"ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"arrayvec 0.3.20 (registry+https://github.com/rust-lang/crates.io-index)",
"env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"ethcore-util 1.7.0",
"isatty 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "isatty 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 0.1.68 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.68 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
@ -592,10 +596,11 @@ dependencies = [
name = "ethcore-network" name = "ethcore-network"
version = "1.7.0" version = "1.7.0"
dependencies = [ dependencies = [
"ansi_term 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"bytes 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ethcore-devtools 1.7.0", "ethcore-devtools 1.7.0",
"ethcore-io 1.7.0", "ethcore-io 1.7.0",
"ethcore-logger 1.7.0",
"ethcore-util 1.7.0", "ethcore-util 1.7.0",
"ethcrypto 0.1.0", "ethcrypto 0.1.0",
"ethkey 0.2.0", "ethkey 0.2.0",
@ -604,6 +609,7 @@ dependencies = [
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"mio 0.6.1 (git+https://github.com/ethcore/mio)", "mio 0.6.1 (git+https://github.com/ethcore/mio)",
"parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"path 0.1.0",
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp 0.1.0", "rlp 0.1.0",
"rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
@ -624,6 +630,7 @@ dependencies = [
"ethcore-io 1.7.0", "ethcore-io 1.7.0",
"ethcore-ipc 1.7.0", "ethcore-ipc 1.7.0",
"ethcore-light 1.7.0", "ethcore-light 1.7.0",
"ethcore-logger 1.7.0",
"ethcore-util 1.7.0", "ethcore-util 1.7.0",
"ethcrypto 0.1.0", "ethcrypto 0.1.0",
"ethjson 0.1.0", "ethjson 0.1.0",
@ -681,7 +688,7 @@ dependencies = [
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)", "jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
"jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)", "jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-dapps-glue 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-ui 1.7.0", "parity-ui 1.7.0",
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
@ -697,6 +704,7 @@ dependencies = [
"ethcore-ipc 1.7.0", "ethcore-ipc 1.7.0",
"ethcore-ipc-codegen 1.7.0", "ethcore-ipc-codegen 1.7.0",
"ethcore-ipc-nano 1.7.0", "ethcore-ipc-nano 1.7.0",
"ethcore-logger 1.7.0",
"ethcore-util 1.7.0", "ethcore-util 1.7.0",
"futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)", "jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
@ -712,8 +720,7 @@ dependencies = [
name = "ethcore-util" name = "ethcore-util"
version = "1.7.0" version = "1.7.0"
dependencies = [ dependencies = [
"ansi_term 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
"clippy 0.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "clippy 0.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
"elastic-array 0.6.0 (git+https://github.com/ethcore/elastic-array)", "elastic-array 0.6.0 (git+https://github.com/ethcore/elastic-array)",
"env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
@ -721,9 +728,9 @@ dependencies = [
"ethcore-bigint 0.1.2", "ethcore-bigint 0.1.2",
"ethcore-bloom-journal 0.1.0", "ethcore-bloom-journal 0.1.0",
"ethcore-devtools 1.7.0", "ethcore-devtools 1.7.0",
"ethcore-logger 1.7.0",
"heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"itertools 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"lru-cache 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "lru-cache 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1484,7 +1491,7 @@ dependencies = [
[[package]] [[package]]
name = "nodrop" name = "nodrop"
version = "0.1.6" version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"odds 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "odds 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1625,16 +1632,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
name = "parity-dapps-glue" name = "parity-dapps-glue"
version = "1.4.0" version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"aster 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", "aster 0.41.0 (registry+https://github.com/rust-lang/crates.io-index)",
"glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"mime_guess 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"quasi 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "quasi 0.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
"quasi_codegen 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "quasi_codegen 0.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
"syntex 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "syntex 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
"syntex_syntax 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "syntex_syntax 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
@ -1727,24 +1734,24 @@ dependencies = [
name = "parity-ui" name = "parity-ui"
version = "1.7.0" version = "1.7.0"
dependencies = [ dependencies = [
"parity-ui-dev 1.4.0", "parity-ui-dev 1.7.0",
"parity-ui-precompiled 1.4.0 (git+https://github.com/ethcore/js-precompiled.git)", "parity-ui-precompiled 1.4.0 (git+https://github.com/ethcore/js-precompiled.git)",
"rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
name = "parity-ui-dev" name = "parity-ui-dev"
version = "1.4.0" version = "1.7.0"
dependencies = [ dependencies = [
"parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-dapps-glue 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
name = "parity-ui-precompiled" name = "parity-ui-precompiled"
version = "1.4.0" version = "1.4.0"
source = "git+https://github.com/ethcore/js-precompiled.git#47da49294ad958933e85a9c4f0f2bb4df5dc47de" source = "git+https://github.com/ethcore/js-precompiled.git#9651995aa0fa718b9b9b58f1c7281900643bdf8f"
dependencies = [ dependencies = [
"parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-dapps-glue 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
@ -1761,6 +1768,7 @@ dependencies = [
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-hash-fetch 1.7.0", "parity-hash-fetch 1.7.0",
"parity-reactor 0.1.0", "parity-reactor 0.1.0",
"path 0.1.0",
"target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
@ -1785,6 +1793,10 @@ dependencies = [
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "path"
version = "0.1.0"
[[package]] [[package]]
name = "phf" name = "phf"
version = "0.7.14" version = "0.7.14"
@ -1872,20 +1884,22 @@ dependencies = [
[[package]] [[package]]
name = "quasi" name = "quasi"
version = "0.11.0" version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"syntex_syntax 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "syntex_errors 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
"syntex_syntax 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
name = "quasi_codegen" name = "quasi_codegen"
version = "0.11.0" version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"aster 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", "aster 0.41.0 (registry+https://github.com/rust-lang/crates.io-index)",
"syntex 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "syntex 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
"syntex_syntax 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "syntex_errors 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
"syntex_syntax 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
@ -2305,23 +2319,44 @@ dependencies = [
[[package]] [[package]]
name = "syntex" name = "syntex"
version = "0.33.0" version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"syntex_syntax 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "syntex_errors 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
"syntex_syntax 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "syntex_errors"
version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
"syntex_pos 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
"term 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "syntex_pos"
version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
name = "syntex_syntax" name = "syntex_syntax"
version = "0.33.0" version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"bitflags 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
"term 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", "syntex_errors 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "syntex_pos 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
@ -2348,7 +2383,7 @@ dependencies = [
[[package]] [[package]]
name = "term" name = "term"
version = "0.2.14" version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2534,11 +2569,6 @@ name = "unicode-normalization"
version = "0.1.2" version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "unicode-xid"
version = "0.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
name = "unicode-xid" name = "unicode-xid"
version = "0.0.4" version = "0.0.4"
@ -2668,11 +2698,11 @@ dependencies = [
[metadata] [metadata]
"checksum advapi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e06588080cb19d0acb6739808aafa5f26bfb2ca015b2b6370028b44cf7cb8a9a" "checksum advapi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e06588080cb19d0acb6739808aafa5f26bfb2ca015b2b6370028b44cf7cb8a9a"
"checksum aho-corasick 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "67077478f0a03952bed2e6786338d400d40c25e9836e08ad50af96607317fd03" "checksum aho-corasick 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "67077478f0a03952bed2e6786338d400d40c25e9836e08ad50af96607317fd03"
"checksum ansi_term 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1f46cd5b1d660c938e3f92dfe7a73d832b3281479363dd0cd9c1c2fbf60f7962" "checksum ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6"
"checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5" "checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5"
"checksum app_dirs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b7d1c0d48a81bbb13043847f957971f4d87c81542d80ece5e84ba3cba4058fd4" "checksum app_dirs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b7d1c0d48a81bbb13043847f957971f4d87c81542d80ece5e84ba3cba4058fd4"
"checksum arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "16e3bdb2f54b3ace0285975d59a97cf8ed3855294b2b6bc651fcf22a9c352975" "checksum arrayvec 0.3.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d89f1b0e242270b5b797778af0c8d182a1a2ccac5d8d6fadf414223cc0fab096"
"checksum aster 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "07d344974f0a155f091948aa389fb1b912d3a58414fbdb9c8d446d193ee3496a" "checksum aster 0.41.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ccfdf7355d9db158df68f976ed030ab0f6578af811f5a7bb6dcf221ec24e0e0"
"checksum base-x 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2f59103b47307f76e03bef1633aec7fa9e29bfb5aa6daf5a334f94233c71f6c1" "checksum base-x 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2f59103b47307f76e03bef1633aec7fa9e29bfb5aa6daf5a334f94233c71f6c1"
"checksum base32 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1b9605ba46d61df0410d8ac686b0007add8172eba90e8e909c347856fe794d8c" "checksum base32 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1b9605ba46d61df0410d8ac686b0007add8172eba90e8e909c347856fe794d8c"
"checksum bigint 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2311bcd71b281e142a095311c22509f0d6bcd87b3000d7dbaa810929b9d6f6ae" "checksum bigint 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2311bcd71b281e142a095311c22509f0d6bcd87b3000d7dbaa810929b9d6f6ae"
@ -2771,7 +2801,7 @@ dependencies = [
"checksum net2 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)" = "6a816012ca11cb47009693c1e0c6130e26d39e4d97ee2a13c50e868ec83e3204" "checksum net2 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)" = "6a816012ca11cb47009693c1e0c6130e26d39e4d97ee2a13c50e868ec83e3204"
"checksum nix 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a7bb1da2be7da3cbffda73fc681d509ffd9e665af478d2bee1907cee0bc64b2" "checksum nix 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a7bb1da2be7da3cbffda73fc681d509ffd9e665af478d2bee1907cee0bc64b2"
"checksum nix 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a0d95c5fa8b641c10ad0b8887454ebaafa3c92b5cd5350f8fc693adafd178e7b" "checksum nix 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a0d95c5fa8b641c10ad0b8887454ebaafa3c92b5cd5350f8fc693adafd178e7b"
"checksum nodrop 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "4d9a22dbcebdeef7bf275cbf444d6521d4e7a2fee187b72d80dba0817120dd8f" "checksum nodrop 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "52cd74cd09beba596430cc6e3091b74007169a56246e1262f0ba451ea95117b2"
"checksum nom 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6caab12c5f97aa316cb249725aa32115118e1522b445e26c257dd77cad5ffd4e" "checksum nom 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6caab12c5f97aa316cb249725aa32115118e1522b445e26c257dd77cad5ffd4e"
"checksum num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "c04bd954dbf96f76bab6e5bd6cef6f1ce1262d15268ce4f926d2b5b778fa7af2" "checksum num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "c04bd954dbf96f76bab6e5bd6cef6f1ce1262d15268ce4f926d2b5b778fa7af2"
"checksum num-bigint 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "41655c8d667be847a0b72fe0888857a7b3f052f691cf40852be5fcf87b274a65" "checksum num-bigint 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "41655c8d667be847a0b72fe0888857a7b3f052f691cf40852be5fcf87b274a65"
@ -2788,7 +2818,7 @@ dependencies = [
"checksum openssl-sys 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d2845e841700e7b04282ceaa115407ea84e0db918ae689ad9ceb6f06fa6046bd" "checksum openssl-sys 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d2845e841700e7b04282ceaa115407ea84e0db918ae689ad9ceb6f06fa6046bd"
"checksum order-stat 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "efa535d5117d3661134dbf1719b6f0ffe06f2375843b13935db186cd094105eb" "checksum order-stat 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "efa535d5117d3661134dbf1719b6f0ffe06f2375843b13935db186cd094105eb"
"checksum owning_ref 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8d91377085359426407a287ab16884a0111ba473aa6844ff01d4ec20ce3d75e7" "checksum owning_ref 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8d91377085359426407a287ab16884a0111ba473aa6844ff01d4ec20ce3d75e7"
"checksum parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "98378dec0a185da2b7180308752f0bad73aaa949c3e0a3b0528d0e067945f7ab" "checksum parity-dapps-glue 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1d06f6ee0fda786df3784a96ee3f0629f529b91cbfb7d142f6410e6bcd1ce2c"
"checksum parity-tokio-ipc 0.1.0 (git+https://github.com/nikvolf/parity-tokio-ipc)" = "<none>" "checksum parity-tokio-ipc 0.1.0 (git+https://github.com/nikvolf/parity-tokio-ipc)" = "<none>"
"checksum parity-ui-precompiled 1.4.0 (git+https://github.com/ethcore/js-precompiled.git)" = "<none>" "checksum parity-ui-precompiled 1.4.0 (git+https://github.com/ethcore/js-precompiled.git)" = "<none>"
"checksum parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e1435e7a2a00dfebededd6c6bdbd54008001e94b4a2aadd6aef0dc4c56317621" "checksum parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e1435e7a2a00dfebededd6c6bdbd54008001e94b4a2aadd6aef0dc4c56317621"
@ -2804,8 +2834,8 @@ dependencies = [
"checksum primal-check 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "647c81b67bb9551a7b88d0bcd785ac35b7d0bf4b2f358683d7c2375d04daec51" "checksum primal-check 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "647c81b67bb9551a7b88d0bcd785ac35b7d0bf4b2f358683d7c2375d04daec51"
"checksum primal-estimate 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "56ea4531dde757b56906493c8604641da14607bf9cdaa80fb9c9cabd2429f8d5" "checksum primal-estimate 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "56ea4531dde757b56906493c8604641da14607bf9cdaa80fb9c9cabd2429f8d5"
"checksum primal-sieve 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "7aa73fd87e5984a00bdb4c1b14d3d5d6d0bad01b2caaaf924c16ab7260ac946c" "checksum primal-sieve 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "7aa73fd87e5984a00bdb4c1b14d3d5d6d0bad01b2caaaf924c16ab7260ac946c"
"checksum quasi 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b26543b563704e7d87f3ec7cfafb713010a905c5f1b155a8ab66863af43ca578" "checksum quasi 0.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18c45c4854d6d1cf5d531db97c75880feb91c958b0720f4ec1057135fec358b3"
"checksum quasi_codegen 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0881d9a45d5f9ebe4a7e77742f8c604f3658c212baf8dd711a692dd000bc648c" "checksum quasi_codegen 0.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "51b9e25fa23c044c1803f43ca59c98dac608976dd04ce799411edd58ece776d4"
"checksum quick-error 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0aad603e8d7fb67da22dbdf1f4b826ce8829e406124109e73cf1b2454b93a71c" "checksum quick-error 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0aad603e8d7fb67da22dbdf1f4b826ce8829e406124109e73cf1b2454b93a71c"
"checksum quine-mc_cluskey 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6683b0e23d80813b1a535841f0048c1537d3f86d63c999e8373b39a9b0eb74a" "checksum quine-mc_cluskey 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6683b0e23d80813b1a535841f0048c1537d3f86d63c999e8373b39a9b0eb74a"
"checksum quote 0.3.10 (registry+https://github.com/rust-lang/crates.io-index)" = "6732e32663c9c271bfc7c1823486b471f18c47a2dbf87c066897b7b51afc83be" "checksum quote 0.3.10 (registry+https://github.com/rust-lang/crates.io-index)" = "6732e32663c9c271bfc7c1823486b471f18c47a2dbf87c066897b7b51afc83be"
@ -2854,12 +2884,14 @@ dependencies = [
"checksum stable-heap 0.1.0 (git+https://github.com/carllerche/stable-heap?rev=3c5cd1ca47)" = "<none>" "checksum stable-heap 0.1.0 (git+https://github.com/carllerche/stable-heap?rev=3c5cd1ca47)" = "<none>"
"checksum strsim 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4d73a2c36a4d095ed1a6df5cbeac159863173447f7a82b3f4757426844ab825" "checksum strsim 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4d73a2c36a4d095ed1a6df5cbeac159863173447f7a82b3f4757426844ab825"
"checksum syn 0.11.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f4f94368aae82bb29656c98443a7026ca931a659e8d19dcdc41d6e273054e820" "checksum syn 0.11.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f4f94368aae82bb29656c98443a7026ca931a659e8d19dcdc41d6e273054e820"
"checksum syntex 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "393b6dd0889df2b064beeea954cfda6bc2571604ac460deeae0fed55a53988af" "checksum syntex 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)" = "35f3cc9d446323ef8fefad933b65cd6de271d29fa14a2e9d036a084770c6d6d5"
"checksum syntex_syntax 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44bded3cabafc65c90b663b1071bd2d198a9ab7515e6ce729e4570aaf53c407e" "checksum syntex_errors 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3af03823ea45d420dd2c1a44bb074e13ea55f9b99afe960fd58eb4069b7f6cad"
"checksum syntex_pos 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e502a4a904d9f37cf975dbdbb0b08f2d111322f6792bda6eb095b4112c9a24b"
"checksum syntex_syntax 0.58.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6cf936464c3863952ea3fab848860ea891eba8647b6008b04c36f0bb007192a3"
"checksum take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b157868d8ac1f56b64604539990685fa7611d8fa9e5476cf0c02cf34d32917c5" "checksum take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b157868d8ac1f56b64604539990685fa7611d8fa9e5476cf0c02cf34d32917c5"
"checksum target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c63f48baada5c52e65a29eef93ab4f8982681b67f9e8d29c7b05abcfec2b9ffe" "checksum target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c63f48baada5c52e65a29eef93ab4f8982681b67f9e8d29c7b05abcfec2b9ffe"
"checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6" "checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6"
"checksum term 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "f2077e54d38055cf1ca0fd7933a2e00cd3ec8f6fed352b2a377f06dcdaaf3281" "checksum term 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d168af3930b369cfe245132550579d47dfd873d69470755a19c2c6568dbbd989"
"checksum termios 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d5d9cf598a6d7ce700a4e6a9199da127e6819a61e64b68609683cc9a01b5683a" "checksum termios 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d5d9cf598a6d7ce700a4e6a9199da127e6819a61e64b68609683cc9a01b5683a"
"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" "checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
"checksum thread_local 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0694f51610ef7cfac7a1b81de7f1602ee5356e76541bcd62c40e71933338cab1" "checksum thread_local 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0694f51610ef7cfac7a1b81de7f1602ee5356e76541bcd62c40e71933338cab1"
@ -2881,7 +2913,6 @@ dependencies = [
"checksum unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "13a5906ca2b98c799f4b1ab4557b76367ebd6ae5ef14930ec841c74aed5f3764" "checksum unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "13a5906ca2b98c799f4b1ab4557b76367ebd6ae5ef14930ec841c74aed5f3764"
"checksum unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c1f7ceb96afdfeedee42bade65a0d585a6a0106f681b6749c8ff4daa8df30b3f" "checksum unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c1f7ceb96afdfeedee42bade65a0d585a6a0106f681b6749c8ff4daa8df30b3f"
"checksum unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "26643a2f83bac55f1976fb716c10234485f9202dcd65cfbdf9da49867b271172" "checksum unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "26643a2f83bac55f1976fb716c10234485f9202dcd65cfbdf9da49867b271172"
"checksum unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "36dff09cafb4ec7c8cf0023eb0b686cb6ce65499116a12201c9e11840ca01beb"
"checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" "checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"
"checksum untrusted 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "193df64312e3515fd983ded55ad5bcaa7647a035804828ed757e832ce6029ef3" "checksum untrusted 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "193df64312e3515fd983ded55ad5bcaa7647a035804828ed757e832ce6029ef3"
"checksum url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "afe9ec54bc4db14bc8744b7fed060d785ac756791450959b2248443319d5b119" "checksum url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "afe9ec54bc4db14bc8744b7fed060d785ac756791450959b2248443319d5b119"

View File

@ -16,7 +16,7 @@ num_cpus = "1.2"
number_prefix = "0.2" number_prefix = "0.2"
rpassword = "0.2.1" rpassword = "0.2.1"
semver = "0.5" semver = "0.5"
ansi_term = "0.7" ansi_term = "0.9"
regex = "0.1" regex = "0.1"
isatty = "0.1" isatty = "0.1"
toml = "0.2" toml = "0.2"
@ -50,6 +50,7 @@ parity-updater = { path = "updater" }
parity-reactor = { path = "util/reactor" } parity-reactor = { path = "util/reactor" }
parity-local-store = { path = "local-store" } parity-local-store = { path = "local-store" }
ethcore-dapps = { path = "dapps", optional = true } ethcore-dapps = { path = "dapps", optional = true }
path = { path = "util/path" }
clippy = { version = "0.0.103", optional = true} clippy = { version = "0.0.103", optional = true}
ethcore-secretstore = { path = "secret_store", optional = true } ethcore-secretstore = { path = "secret_store", optional = true }

View File

@ -13,6 +13,7 @@ env_logger = "0.3"
futures = "0.1" futures = "0.1"
linked-hash-map = "0.3" linked-hash-map = "0.3"
log = "0.3" log = "0.3"
parity-dapps-glue = "1.7"
mime = "0.2" mime = "0.2"
mime_guess = "1.6.1" mime_guess = "1.6.1"
rand = "0.3" rand = "0.3"
@ -34,7 +35,6 @@ ethcore-devtools = { path = "../devtools" }
ethcore-rpc = { path = "../rpc" } ethcore-rpc = { path = "../rpc" }
ethcore-util = { path = "../util" } ethcore-util = { path = "../util" }
fetch = { path = "../util/fetch" } fetch = { path = "../util/fetch" }
parity-dapps-glue = "1.4"
parity-hash-fetch = { path = "../hash-fetch" } parity-hash-fetch = { path = "../hash-fetch" }
parity-reactor = { path = "../util/reactor" } parity-reactor = { path = "../util/reactor" }
parity-ui = { path = "./ui" } parity-ui = { path = "./ui" }

View File

@ -7,17 +7,17 @@ authors = ["Parity Technologies <admin@parity.io>"]
build = "build.rs" build = "build.rs"
[build-dependencies] [build-dependencies]
quasi_codegen = { version = "0.11", optional = true } quasi_codegen = { version = "0.32", optional = true }
syntex = { version = "0.33", optional = true } syntex = { version = "0.58", optional = true }
[dependencies] [dependencies]
glob = { version = "0.2.11" } glob = { version = "0.2.11" }
mime_guess = { version = "1.6.1" } mime_guess = { version = "1.6.1" }
aster = { version = "0.17", default-features = false } aster = { version = "0.41", default-features = false }
quasi = { version = "0.11", default-features = false } quasi = { version = "0.32", default-features = false }
quasi_macros = { version = "0.11", optional = true } quasi_macros = { version = "0.32", optional = true }
syntex = { version = "0.33", optional = true } syntex = { version = "0.58", optional = true }
syntex_syntax = { version = "0.33", optional = true } syntex_syntax = { version = "0.58", optional = true }
clippy = { version = "0.0.90", optional = true } clippy = { version = "0.0.90", optional = true }
[features] [features]

View File

@ -25,13 +25,11 @@ mod inner {
pub fn main() { pub fn main() {
let out_dir = env::var_os("OUT_DIR").unwrap(); let out_dir = env::var_os("OUT_DIR").unwrap();
let mut registry = syntex::Registry::new();
quasi_codegen::register(&mut registry);
let src = Path::new("src/lib.rs.in"); let src = Path::new("src/lib.rs.in");
let dst = Path::new(&out_dir).join("lib.rs"); let dst = Path::new(&out_dir).join("lib.rs");
registry.expand("", &src, &dst).unwrap(); quasi_codegen::expand(&src, &dst).unwrap();
} }
} }

View File

@ -13,9 +13,8 @@ pub mod inner {
impl fold::Folder for StripAttributeFolder { impl fold::Folder for StripAttributeFolder {
fn fold_attribute(&mut self, attr: ast::Attribute) -> Option<ast::Attribute> { fn fold_attribute(&mut self, attr: ast::Attribute) -> Option<ast::Attribute> {
match attr.node.value.node { if &*attr.value.name.as_str() == "webapp" {
ast::MetaItemKind::List(ref n, _) if n == &"webapp" => { return None; } return None;
_ => {}
} }
Some(attr) Some(attr)

View File

@ -22,16 +22,12 @@ use self::mime_guess::guess_mime_type;
use std::path::{self, Path, PathBuf}; use std::path::{self, Path, PathBuf};
use std::ops::Deref; use std::ops::Deref;
use syntax::ast::{MetaItem, Item};
use syntax::ast;
use syntax::attr; use syntax::attr;
use syntax::ast::{self, MetaItem, Item};
use syntax::codemap::Span; use syntax::codemap::Span;
use syntax::ext::base::{Annotatable, ExtCtxt}; use syntax::ext::base::{Annotatable, ExtCtxt};
use syntax::ptr::P; use syntax::print::pprust::lit_to_string;
use syntax::print::pprust::{lit_to_string}; use syntax::symbol::InternedString;
use syntax::parse::token::{InternedString};
pub fn expand_webapp_implementation( pub fn expand_webapp_implementation(
cx: &mut ExtCtxt, cx: &mut ExtCtxt,
@ -48,7 +44,7 @@ pub fn expand_webapp_implementation(
}, },
}; };
let builder = aster::AstBuilder::new().span(span); let builder = aster::AstBuilder::new().span(span);
implement_webapp(cx, &builder, &item, push); implement_webapp(cx, &builder, item, push);
} }
fn implement_webapp(cx: &ExtCtxt, builder: &aster::AstBuilder, item: &Item, push: &mut FnMut(Annotatable)) { fn implement_webapp(cx: &ExtCtxt, builder: &aster::AstBuilder, item: &Item, push: &mut FnMut(Annotatable)) {
@ -117,11 +113,12 @@ fn implement_webapp(cx: &ExtCtxt, builder: &aster::AstBuilder, item: &Item, push
} }
fn extract_path(cx: &ExtCtxt, item: &Item) -> String { fn extract_path(cx: &ExtCtxt, item: &Item) -> String {
for meta_items in item.attrs().iter().filter_map(webapp_meta_items) { for meta_items in item.attrs.iter().filter_map(webapp_meta_items) {
for meta_item in meta_items { for meta_item in meta_items {
let is_path = &*meta_item.name.as_str() == "path";
match meta_item.node { match meta_item.node {
ast::MetaItemKind::NameValue(ref name, ref lit) if name == &"path" => { ast::MetaItemKind::NameValue(ref lit) if is_path => {
if let Some(s) = get_str_from_lit(cx, name, lit) { if let Some(s) = get_str_from_lit(cx, lit) {
return s.deref().to_owned(); return s.deref().to_owned();
} }
}, },
@ -134,14 +131,32 @@ fn extract_path(cx: &ExtCtxt, item: &Item) -> String {
"web".to_owned() "web".to_owned()
} }
fn get_str_from_lit(cx: &ExtCtxt, name: &str, lit: &ast::Lit) -> Option<InternedString> { fn webapp_meta_items(attr: &ast::Attribute) -> Option<Vec<ast::MetaItem>> {
let is_webapp = &*attr.value.name.as_str() == "webapp";
match attr.value.node {
ast::MetaItemKind::List(ref items) if is_webapp => {
attr::mark_used(&attr);
Some(
items.iter()
.map(|item| item.node.clone())
.filter_map(|item| match item {
ast::NestedMetaItemKind::MetaItem(item) => Some(item),
_ => None,
})
.collect()
)
}
_ => None
}
}
fn get_str_from_lit(cx: &ExtCtxt, lit: &ast::Lit) -> Option<InternedString> {
match lit.node { match lit.node {
ast::LitKind::Str(ref s, _) => Some(s.clone()), ast::LitKind::Str(ref s, _) => Some(s.clone().as_str()),
_ => { _ => {
cx.span_err( cx.span_err(
lit.span, lit.span,
&format!("webapp annotation `{}` must be a string, not `{}`", &format!("webapp annotation path must be a string, not `{}`",
name,
lit_to_string(lit) lit_to_string(lit)
) )
); );
@ -150,16 +165,6 @@ fn get_str_from_lit(cx: &ExtCtxt, name: &str, lit: &ast::Lit) -> Option<Interned
} }
} }
fn webapp_meta_items(attr: &ast::Attribute) -> Option<&[P<ast::MetaItem>]> {
match attr.node.value.node {
ast::MetaItemKind::List(ref name, ref items) if name == &"webapp" => {
attr::mark_used(&attr);
Some(items)
}
_ => None
}
}
fn as_uri(path: &Path) -> String { fn as_uri(path: &Path) -> String {
let mut s = String::new(); let mut s = String::new();
for component in path.iter() { for component in path.iter() {
@ -169,7 +174,6 @@ fn as_uri(path: &Path) -> String {
s[0..s.len()-1].into() s[0..s.len()-1].into()
} }
#[test] #[test]
fn should_convert_path_separators_on_all_platforms() { fn should_convert_path_separators_on_all_platforms() {
// given // given

View File

@ -22,7 +22,6 @@
extern crate syntex; extern crate syntex;
#[cfg(feature = "with-syntex")] #[cfg(feature = "with-syntex")]
#[macro_use]
extern crate syntex_syntax as syntax; extern crate syntex_syntax as syntax;
#[cfg(feature = "with-syntex")] #[cfg(feature = "with-syntex")]

View File

@ -43,9 +43,10 @@ rlp = { path = "../util/rlp" }
ethcore-stratum = { path = "../stratum" } ethcore-stratum = { path = "../stratum" }
ethcore-bloom-journal = { path = "../util/bloom" } ethcore-bloom-journal = { path = "../util/bloom" }
hardware-wallet = { path = "../hw" } hardware-wallet = { path = "../hw" }
ethcore-logger = { path = "../logger" }
stats = { path = "../util/stats" } stats = { path = "../util/stats" }
num = "0.1"
hyper = { git = "https://github.com/paritytech/hyper", default-features = false } hyper = { git = "https://github.com/paritytech/hyper", default-features = false }
num = "0.1"
[features] [features]
jit = ["evmjit"] jit = ["evmjit"]

View File

@ -18,6 +18,9 @@
//! The request service is implemented using Futures. Higher level request handlers //! The request service is implemented using Futures. Higher level request handlers
//! will take the raw data received here and extract meaningful results from it. //! will take the raw data received here and extract meaningful results from it.
// TODO [ToDr] Suppressing deprecation warnings. Rob will fix the API anyway.
#![allow(deprecated)]
use std::collections::HashMap; use std::collections::HashMap;
use std::sync::Arc; use std::sync::Arc;

View File

@ -25,7 +25,7 @@ use miner::Miner;
use io::IoChannel; use io::IoChannel;
pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec<String> { pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec<String> {
init_log(); ::ethcore_logger::init_log();
let tests = ethjson::blockchain::Test::load(json_data).unwrap(); let tests = ethjson::blockchain::Test::load(json_data).unwrap();
let mut failed = Vec::new(); let mut failed = Vec::new();

View File

@ -22,7 +22,7 @@ use ethereum;
use ethjson; use ethjson;
pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec<String> { pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec<String> {
init_log(); ::ethcore_logger::init_log();
let tests = ethjson::state::Test::load(json_data).unwrap(); let tests = ethjson::state::Test::load(json_data).unwrap();
let mut failed = Vec::new(); let mut failed = Vec::new();
let engine = match era { let engine = match era {

View File

@ -106,6 +106,7 @@ extern crate ethcore_stratum;
extern crate ethabi; extern crate ethabi;
extern crate hardware_wallet; extern crate hardware_wallet;
extern crate stats; extern crate stats;
extern crate ethcore_logger;
extern crate num; extern crate num;
#[macro_use] #[macro_use]

View File

@ -110,7 +110,7 @@ impl PriceInfo {
fn should_get_price_info() { fn should_get_price_info() {
use std::sync::Arc; use std::sync::Arc;
use std::time::Duration; use std::time::Duration;
use util::log::init_log; use ethcore_logger::init_log;
use util::{Condvar, Mutex}; use util::{Condvar, Mutex};
init_log(); init_log();

View File

@ -2454,6 +2454,7 @@ pub mod test {
#[test] #[test]
fn should_replace_same_transaction_when_has_higher_fee() { fn should_replace_same_transaction_when_has_higher_fee() {
use ethcore_logger::init_log;
init_log(); init_log();
// given // given
let mut txq = TransactionQueue::default(); let mut txq = TransactionQueue::default();

View File

@ -943,7 +943,7 @@ mod tests {
use env_info::EnvInfo; use env_info::EnvInfo;
use spec::*; use spec::*;
use transaction::*; use transaction::*;
use util::log::init_log; use ethcore_logger::init_log;
use trace::{FlatTrace, TraceError, trace}; use trace::{FlatTrace, TraceError, trace};
use types::executed::CallType; use types::executed::CallType;

View File

@ -457,7 +457,7 @@ mod tests {
use util::{U256, H256, Address, DBTransaction}; use util::{U256, H256, Address, DBTransaction};
use tests::helpers::*; use tests::helpers::*;
use state::{Account, Backend}; use state::{Account, Backend};
use util::log::init_log; use ethcore_logger::init_log;
#[test] #[test]
fn state_db_smoke() { fn state_db_smoke() {

View File

@ -14,13 +14,13 @@ nightly-testing = ["clippy"]
with-syntex = ["quasi/with-syntex", "quasi_codegen", "quasi_codegen/with-syntex", "syntex", "syntex_syntax"] with-syntex = ["quasi/with-syntex", "quasi_codegen", "quasi_codegen/with-syntex", "syntex", "syntex_syntax"]
[build-dependencies] [build-dependencies]
quasi_codegen = { version = "0.11", optional = true } quasi_codegen = { version = "0.32", optional = true }
syntex = { version = "0.33", optional = true } syntex = { version = "0.58", optional = true }
[dependencies] [dependencies]
aster = { version = "0.17", default-features = false } aster = { version = "0.41", default-features = false }
clippy = { version = "^0.*", optional = true } clippy = { version = "^0.*", optional = true }
quasi = { version = "0.11", default-features = false } quasi = { version = "0.32", default-features = false }
quasi_macros = { version = "0.11", optional = true } quasi_macros = { version = "0.32", optional = true }
syntex = { version = "0.33", optional = true } syntex = { version = "0.58", optional = true }
syntex_syntax = { version = "0.33", optional = true } syntex_syntax = { version = "0.58", optional = true }

View File

@ -25,13 +25,11 @@ mod inner {
pub fn main() { pub fn main() {
let out_dir = env::var_os("OUT_DIR").unwrap(); let out_dir = env::var_os("OUT_DIR").unwrap();
let mut registry = syntex::Registry::new();
quasi_codegen::register(&mut registry);
let src = Path::new("src/lib.rs.in"); let src = Path::new("src/lib.rs.in");
let dst = Path::new(&out_dir).join("lib.rs"); let dst = Path::new(&out_dir).join("lib.rs");
registry.expand("", &src, &dst).unwrap(); quasi_codegen::expand(&src, &dst).unwrap();
} }
} }

View File

@ -56,7 +56,7 @@ pub fn expand_ipc_implementation(
let builder = aster::AstBuilder::new().span(span); let builder = aster::AstBuilder::new().span(span);
let interface_map = match implement_interface(cx, &builder, &item, push) { let interface_map = match implement_interface(cx, &builder, &item, push, meta_item) {
Ok(interface_map) => interface_map, Ok(interface_map) => interface_map,
Err(Error) => { return; }, Err(Error) => { return; },
}; };
@ -99,9 +99,9 @@ fn push_invoke_signature_aster(
let inputs = &named_signature.sig.decl.inputs; let inputs = &named_signature.sig.decl.inputs;
let (input_type_name, input_arg_names, input_arg_tys) = if inputs.len() > 0 { let (input_type_name, input_arg_names, input_arg_tys) = if inputs.len() > 0 {
let first_field_name = field_name(builder, &inputs[0]).name.as_str(); let first_field_name = field_name(builder, &inputs[0]).name.as_str();
if first_field_name == "self" && inputs.len() == 1 { (None, vec![], vec![]) } if &*first_field_name == "self" && inputs.len() == 1 { (None, vec![], vec![]) }
else { else {
let skip = if first_field_name == "self" { 2 } else { 1 }; let skip = if &*first_field_name == "self" { 2 } else { 1 };
let name_str = format!("{}_input", named_signature.ident.name.as_str()); let name_str = format!("{}_input", named_signature.ident.name.as_str());
let mut arg_names = Vec::new(); let mut arg_names = Vec::new();
@ -181,6 +181,7 @@ fn implement_dispatch_arm_invoke_stmt(
dispatch: &Dispatch, dispatch: &Dispatch,
) -> ast::Stmt ) -> ast::Stmt
{ {
use ::syntax::tokenstream::TokenTree::Token;
let function_name = builder.id(dispatch.function_name.as_str()); let function_name = builder.id(dispatch.function_name.as_str());
let input_args_exprs = dispatch.input_arg_names.iter().enumerate().map(|(arg_index, arg_name)| { let input_args_exprs = dispatch.input_arg_names.iter().enumerate().map(|(arg_index, arg_name)| {
@ -193,56 +194,56 @@ fn implement_dispatch_arm_invoke_stmt(
let ext_cx = &*cx; let ext_cx = &*cx;
::quasi::parse_stmt_panic(&mut ::syntax::parse::new_parser_from_tts( ::quasi::parse_stmt_panic(&mut ::syntax::parse::new_parser_from_tts(
ext_cx.parse_sess(), ext_cx.parse_sess(),
ext_cx.cfg(),
{ {
let _sp = ext_cx.call_site(); let _sp = ext_cx.call_site();
let mut tt = ::std::vec::Vec::new(); let mut tt = ::std::vec::Vec::new();
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Brace))); tt.push(Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Brace)));
if dispatch.return_type_ty.is_some() { if dispatch.return_type_ty.is_some() {
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::ModSep)); tt.push(Token(_sp, ::syntax::parse::token::ModSep));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("ipc")))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("ipc"))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::ModSep)); tt.push(Token(_sp, ::syntax::parse::token::ModSep));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("binary")))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("binary"))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::ModSep)); tt.push(Token(_sp, ::syntax::parse::token::ModSep));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("serialize")))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("serialize"))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Paren))); tt.push(Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Paren)));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::BinOp(::syntax::parse::token::And))); tt.push(Token(_sp, ::syntax::parse::token::BinOp(::syntax::parse::token::And)));
} }
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("self")))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("self"))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Dot)); tt.push(Token(_sp, ::syntax::parse::token::Dot));
tt.extend(::quasi::ToTokens::to_tokens(&function_name, ext_cx).into_iter()); tt.extend(::quasi::ToTokens::to_tokens(&function_name, ext_cx).into_iter());
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Paren))); tt.push(Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Paren)));
for arg_expr in input_args_exprs { for arg_expr in input_args_exprs {
tt.extend(::quasi::ToTokens::to_tokens(&arg_expr, ext_cx).into_iter()); tt.extend(::quasi::ToTokens::to_tokens(&arg_expr, ext_cx).into_iter());
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Comma)); tt.push(Token(_sp, ::syntax::parse::token::Comma));
} }
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Paren))); tt.push(Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Paren)));
if dispatch.return_type_ty.is_some() { if dispatch.return_type_ty.is_some() {
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Paren))); tt.push(Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Paren)));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Dot)); tt.push(Token(_sp, ::syntax::parse::token::Dot));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("unwrap")))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("unwrap"))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Paren))); tt.push(Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Paren)));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Paren))); tt.push(Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Paren)));
} }
else { else {
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Semi)); tt.push(Token(_sp, ::syntax::parse::token::Semi));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("Vec")))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("Vec"))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::ModSep)); tt.push(Token(_sp, ::syntax::parse::token::ModSep));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("new")))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("new"))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Paren))); tt.push(Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Paren)));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Paren))); tt.push(Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Paren)));
} }
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Brace))); tt.push(Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Brace)));
tt tt
})).unwrap() }
)).unwrap()
} }
fn implement_dispatch_arm_invoke( fn implement_dispatch_arm_invoke(
@ -344,6 +345,8 @@ fn implement_client_method_body(
interface_map: &InterfaceMap, interface_map: &InterfaceMap,
) -> P<ast::Expr> ) -> P<ast::Expr>
{ {
use ::syntax::tokenstream::TokenTree::Token;
let dispatch = &interface_map.dispatches[index as usize]; let dispatch = &interface_map.dispatches[index as usize];
let index_ident = builder.id(format!("{}", index + RESERVED_MESSAGE_IDS).as_str()); let index_ident = builder.id(format!("{}", index + RESERVED_MESSAGE_IDS).as_str());
@ -391,26 +394,25 @@ fn implement_client_method_body(
let ext_cx = &*cx; let ext_cx = &*cx;
::quasi::parse_stmt_panic(&mut ::syntax::parse::new_parser_from_tts( ::quasi::parse_stmt_panic(&mut ::syntax::parse::new_parser_from_tts(
ext_cx.parse_sess(), ext_cx.parse_sess(),
ext_cx.cfg(),
{ {
let _sp = ext_cx.call_site(); let _sp = ext_cx.call_site();
let mut tt = ::std::vec::Vec::new(); let mut tt = ::std::vec::Vec::new();
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("let")))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("let"))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("payload")))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("payload"))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Eq)); tt.push(Token(_sp, ::syntax::parse::token::Eq));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("Request")))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("Request"))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Brace))); tt.push(Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Brace)));
for arg in dispatch.input_arg_names.iter() { for arg in dispatch.input_arg_names.iter() {
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of(arg.as_str())))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of(arg.as_str()))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Colon)); tt.push(Token(_sp, ::syntax::parse::token::Colon));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::BinOp(::syntax::parse::token::And))); tt.push(Token(_sp, ::syntax::parse::token::BinOp(::syntax::parse::token::And)));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of(arg.as_str())))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of(arg.as_str()))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Comma)); tt.push(Token(_sp, ::syntax::parse::token::Comma));
} }
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Brace))); tt.push(Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Brace)));
tt tt
})) }))
}); });
@ -465,6 +467,8 @@ fn implement_client_method(
) )
-> ast::ImplItem -> ast::ImplItem
{ {
use ::syntax::tokenstream::TokenTree::Token;
let dispatch = &interface_map.dispatches[index as usize]; let dispatch = &interface_map.dispatches[index as usize];
let method_name = builder.id(dispatch.function_name.as_str()); let method_name = builder.id(dispatch.function_name.as_str());
let body = implement_client_method_body(cx, builder, index, interface_map); let body = implement_client_method_body(cx, builder, index, interface_map);
@ -476,36 +480,35 @@ fn implement_client_method(
let signature = ::syntax::parse::parser::Parser::parse_impl_item( let signature = ::syntax::parse::parser::Parser::parse_impl_item(
&mut ::syntax::parse::new_parser_from_tts( &mut ::syntax::parse::new_parser_from_tts(
ext_cx.parse_sess(), ext_cx.parse_sess(),
ext_cx.cfg(),
{ {
let _sp = ext_cx.call_site(); let _sp = ext_cx.call_site();
let mut tt = ::std::vec::Vec::new(); let mut tt = ::std::vec::Vec::new();
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("fn")))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("fn"))));
tt.extend(::quasi::ToTokens::to_tokens(&method_name, ext_cx).into_iter()); tt.extend(::quasi::ToTokens::to_tokens(&method_name, ext_cx).into_iter());
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Paren))); tt.push(Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Paren)));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::BinOp(::syntax::parse::token::And))); tt.push(Token(_sp, ::syntax::parse::token::BinOp(::syntax::parse::token::And)));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("self")))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of("self"))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Comma)); tt.push(Token(_sp, ::syntax::parse::token::Comma));
for arg_idx in 0..dispatch.input_arg_names.len() { for arg_idx in 0..dispatch.input_arg_names.len() {
let arg_name = dispatch.input_arg_names[arg_idx].as_str(); let arg_name = dispatch.input_arg_names[arg_idx].as_str();
let arg_ty = dispatch.input_arg_tys[arg_idx].clone(); let arg_ty = dispatch.input_arg_tys[arg_idx].clone();
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of(arg_name)))); tt.push(Token(_sp, ::syntax::parse::token::Ident(ext_cx.ident_of(arg_name))));
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Colon)); tt.push(Token(_sp, ::syntax::parse::token::Colon));
tt.extend(::quasi::ToTokens::to_tokens(&arg_ty, ext_cx).into_iter()); tt.extend(::quasi::ToTokens::to_tokens(&arg_ty, ext_cx).into_iter());
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::Comma)); tt.push(Token(_sp, ::syntax::parse::token::Comma));
} }
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Paren))); tt.push(Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Paren)));
if let Some(ref return_ty) = dispatch.return_type_ty { if let Some(ref return_ty) = dispatch.return_type_ty {
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::RArrow)); tt.push(Token(_sp, ::syntax::parse::token::RArrow));
tt.extend(::quasi::ToTokens::to_tokens(return_ty, ext_cx).into_iter()); tt.extend(::quasi::ToTokens::to_tokens(return_ty, ext_cx).into_iter());
} }
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Brace))); tt.push(Token(_sp, ::syntax::parse::token::OpenDelim(::syntax::parse::token::Brace)));
tt.extend(::quasi::ToTokens::to_tokens(&body, ext_cx).into_iter()); tt.extend(::quasi::ToTokens::to_tokens(&body, ext_cx).into_iter());
tt.push(::syntax::ast::TokenTree::Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Brace))); tt.push(Token(_sp, ::syntax::parse::token::CloseDelim(::syntax::parse::token::Brace)));
tt tt
})); }));
@ -526,7 +529,7 @@ fn client_generics(builder: &aster::AstBuilder, interface_map: &InterfaceMap) ->
fn client_qualified_ident(cx: &ExtCtxt, builder: &aster::AstBuilder, interface_map: &InterfaceMap) -> P<Ty> { fn client_qualified_ident(cx: &ExtCtxt, builder: &aster::AstBuilder, interface_map: &InterfaceMap) -> P<Ty> {
let generics = client_generics(builder, interface_map); let generics = client_generics(builder, interface_map);
aster::ty::TyBuilder::new().path().segment(interface_map.ident_map.client_ident(cx, builder, &interface_map.original_item)) aster::ty::TyBuilder::new().path().segment(interface_map.ident_map.client_ident(cx, builder))
.with_generics(generics).build() .with_generics(generics).build()
.build() .build()
} }
@ -542,7 +545,7 @@ fn client_phantom_ident(builder: &aster::AstBuilder, interface_map: &InterfaceMa
/// for say `Service` it generates `ServiceClient` /// for say `Service` it generates `ServiceClient`
fn push_client_struct(cx: &ExtCtxt, builder: &aster::AstBuilder, interface_map: &InterfaceMap, push: &mut FnMut(Annotatable)) { fn push_client_struct(cx: &ExtCtxt, builder: &aster::AstBuilder, interface_map: &InterfaceMap, push: &mut FnMut(Annotatable)) {
let generics = client_generics(builder, interface_map); let generics = client_generics(builder, interface_map);
let client_short_ident = interface_map.ident_map.client_ident(cx, builder, &interface_map.original_item); let client_short_ident = interface_map.ident_map.client_ident(cx, builder);
let phantom = client_phantom_ident(builder, interface_map); let phantom = client_phantom_ident(builder, interface_map);
let client_struct_item = quote_item!(cx, let client_struct_item = quote_item!(cx,
@ -575,7 +578,7 @@ fn push_with_socket_client_implementation(
let generics = client_generics(builder, interface_map); let generics = client_generics(builder, interface_map);
let client_ident = client_qualified_ident(cx, builder, interface_map); let client_ident = client_qualified_ident(cx, builder, interface_map);
let where_clause = &generics.where_clause; let where_clause = &generics.where_clause;
let client_short_ident = interface_map.ident_map.client_ident(cx, builder, &interface_map.original_item); let client_short_ident = interface_map.ident_map.client_ident(cx, builder);
let implement = quote_item!(cx, let implement = quote_item!(cx,
impl $generics ::ipc::WithSocket<S> for $client_ident $where_clause { impl $generics ::ipc::WithSocket<S> for $client_ident $where_clause {
@ -717,33 +720,31 @@ fn get_str_from_lit(cx: &ExtCtxt, name: &str, lit: &ast::Lit) -> Result<String,
} }
} }
pub fn get_ipc_meta_items(attr: &ast::Attribute) -> Option<&[P<ast::MetaItem>]> { fn client_ident_renamed(cx: &ExtCtxt, meta_item: &MetaItem) -> Option<String> {
match attr.node.value.node { if let ast::MetaItemKind::List(ref list) = meta_item.node {
ast::MetaItemKind::List(ref name, ref items) if name == &"ipc" => { for nested in list {
Some(items) match nested.node {
} ast::NestedMetaItemKind::MetaItem(ref meta_item) => {
_ => None let is_client_ident = &*meta_item.name.as_str() == "client_ident";
} match meta_item.node {
} ast::MetaItemKind::NameValue(ref lit) if is_client_ident => {
if let Ok(s) = get_str_from_lit(cx, "client_ident", lit) {
fn client_ident_renamed(cx: &ExtCtxt, item: &ast::Item) -> Option<String> { return Some(s);
for meta_items in item.attrs().iter().filter_map(get_ipc_meta_items) { }
for meta_item in meta_items { }
match meta_item.node { _ => {
ast::MetaItemKind::NameValue(ref name, ref lit) if name == &"client_ident" => { cx.span_err(
if let Ok(s) = get_str_from_lit(cx, name, lit) { meta_item.span,
return Some(s); &format!("unknown client_ident container attribute `{}`",
::syntax::print::pprust::meta_item_to_string(&meta_item)));
}
} }
} },
_ => { _ => {},
cx.span_err(
meta_item.span,
&format!("unknown client_ident container attribute `{}`",
::syntax::print::pprust::meta_item_to_string(meta_item)));
}
} }
} }
} }
None None
} }
@ -759,6 +760,7 @@ struct InterfaceMap {
struct IdentMap { struct IdentMap {
original_path: ast::Path, original_path: ast::Path,
meta_item: MetaItem,
} }
impl IdentMap { impl IdentMap {
@ -766,8 +768,8 @@ impl IdentMap {
builder.id(format!("{}", ::syntax::print::pprust::path_to_string(&self.original_path))) builder.id(format!("{}", ::syntax::print::pprust::path_to_string(&self.original_path)))
} }
fn client_ident(&self, cx: &ExtCtxt, builder: &aster::AstBuilder, item: &ast::Item) -> Ident { fn client_ident(&self, cx: &ExtCtxt, builder: &aster::AstBuilder) -> Ident {
if let Some(new_name) = client_ident_renamed(cx, item) { if let Some(new_name) = client_ident_renamed(cx, &self.meta_item) {
builder.id(new_name) builder.id(new_name)
} }
else { else {
@ -776,12 +778,12 @@ impl IdentMap {
} }
} }
fn ty_ident_map(original_ty: &P<Ty>) -> IdentMap { fn ty_ident_map(original_ty: &P<Ty>, meta_item: &MetaItem) -> IdentMap {
let original_path = match original_ty.node { let original_path = match original_ty.node {
::syntax::ast::TyKind::Path(_, ref path) => path.clone(), ::syntax::ast::TyKind::Path(_, ref path) => path.clone(),
_ => { panic!("incompatible implementation"); } _ => { panic!("incompatible implementation"); }
}; };
let ident_map = IdentMap { original_path: original_path }; let ident_map = IdentMap { original_path: original_path, meta_item: meta_item.clone() };
ident_map ident_map
} }
@ -791,6 +793,7 @@ fn implement_interface(
builder: &aster::AstBuilder, builder: &aster::AstBuilder,
item: &Item, item: &Item,
push: &mut FnMut(Annotatable), push: &mut FnMut(Annotatable),
meta_item: &MetaItem,
) -> Result<InterfaceMap, Error> { ) -> Result<InterfaceMap, Error> {
let (generics, impl_trait, original_ty, dispatch_table) = match item.node { let (generics, impl_trait, original_ty, dispatch_table) = match item.node {
ast::ItemKind::Impl(_, _, ref generics, ref impl_trait, ref ty, ref impl_items) => { ast::ItemKind::Impl(_, _, ref generics, ref impl_trait, ref ty, ref impl_items) => {
@ -844,7 +847,7 @@ fn implement_interface(
let (handshake_arm, handshake_arm_buf) = implement_handshake_arm(cx); let (handshake_arm, handshake_arm_buf) = implement_handshake_arm(cx);
let ty = ty_ident_map(&original_ty).ident(builder); let ty = ty_ident_map(&original_ty, meta_item).ident(builder);
let (interface_endpoint, host_generics) = match impl_trait { let (interface_endpoint, host_generics) = match impl_trait {
Some(ref trait_) => (builder.id(::syntax::print::pprust::path_to_string(&trait_.path)), None), Some(ref trait_) => (builder.id(::syntax::print::pprust::path_to_string(&trait_.path)), None),
None => (ty, Some(&impl_generics)), None => (ty, Some(&impl_generics)),
@ -884,7 +887,7 @@ fn implement_interface(
).unwrap(); ).unwrap();
Ok(InterfaceMap { Ok(InterfaceMap {
ident_map: ty_ident_map(&original_ty), ident_map: ty_ident_map(&original_ty, meta_item),
original_item: item.clone(), original_item: item.clone(),
item: ipc_item, item: ipc_item,
dispatches: dispatch_table, dispatches: dispatch_table,

View File

@ -66,9 +66,11 @@ struct StripAttributeFolder<'a> {
#[cfg(feature = "with-syntex")] #[cfg(feature = "with-syntex")]
impl<'a> fold::Folder for StripAttributeFolder<'a> { impl<'a> fold::Folder for StripAttributeFolder<'a> {
fn fold_attribute(&mut self, attr: ast::Attribute) -> Option<ast::Attribute> { fn fold_attribute(&mut self, attr: ast::Attribute) -> Option<ast::Attribute> {
match attr.node.value.node { let is_self = &*attr.value.name.as_str() == self.attr_title;
ast::MetaItemKind::List(ref n, _) if n == self.attr_title => { return None; }
ast::MetaItemKind::Word(ref n) if n == self.attr_title => { return None; } match attr.value.node {
ast::MetaItemKind::List(_) if is_self => { return None; }
ast::MetaItemKind::Word if is_self => { return None; }
_ => {} _ => {}
} }

View File

@ -151,7 +151,7 @@ fn binary_expr(
_ => { _ => {
cx.span_bug(item.span, cx.span_bug(item.span,
"expected ItemStruct or ItemEnum in #[derive(Binary)]"); "expected ItemStruct or ItemEnum in #[derive(Binary)]");
Err(Error) Err(Error) as Result<BinaryExpressions, Error>
}, },
} }
} }
@ -184,13 +184,17 @@ fn binary_expr_struct(
let size_exprs: Vec<P<ast::Expr>> = fields.iter().enumerate().map(|(index, field)| { let size_exprs: Vec<P<ast::Expr>> = fields.iter().enumerate().map(|(index, field)| {
let raw_ident = ::syntax::print::pprust::ty_to_string(&codegen::strip_ptr(&field.ty)); let raw_ident = ::syntax::print::pprust::ty_to_string(&codegen::strip_ptr(&field.ty));
let index_ident = builder.id(format!("__field{}", index)); let index_ident = builder.id(format!("__field{}", index));
let field_id = match field.ident {
Some(ident) => builder.id(ident),
None => builder.id(format!("{}", index)),
};
match raw_ident.as_ref() { match raw_ident.as_ref() {
"u8" => { "u8" => {
quote_expr!(cx, 1) quote_expr!(cx, 1)
}, },
"[u8]" => { "[u8]" => {
value_ident.and_then(|x| { value_ident.and_then(|x| {
let field_id = builder.id(field.ident.unwrap());
Some(quote_expr!(cx, $x. $field_id .len())) Some(quote_expr!(cx, $x. $field_id .len()))
}) })
.unwrap_or_else(|| { .unwrap_or_else(|| {
@ -207,7 +211,6 @@ fn binary_expr_struct(
value_ident.and_then(|x| value_ident.and_then(|x|
{ {
let field_id = builder.id(field.ident.unwrap());
Some(quote_expr!(cx, Some(quote_expr!(cx,
match $field_type_ident_qualified::len_params() { match $field_type_ident_qualified::len_params() {
0 => ::std::mem::size_of::<$field_type_ident>(), 0 => ::std::mem::size_of::<$field_type_ident>(),
@ -232,12 +235,12 @@ fn binary_expr_struct(
} }
let mut write_stmts = Vec::<ast::Stmt>::new(); let mut write_stmts = Vec::<ast::Stmt>::new();
write_stmts.push(quote_stmt!(cx, let mut offset = 0usize;).unwrap()); write_stmts.push(quote_stmt!(cx, let mut offset = 0usize;).expect("stmt1"));
let mut map_stmts = Vec::<ast::Stmt>::new(); let mut map_stmts = Vec::<ast::Stmt>::new();
let field_amount = builder.id(&format!("{}",fields.len())); let field_amount = builder.id(&format!("{}",fields.len()));
map_stmts.push(quote_stmt!(cx, let mut map = vec![0usize; $field_amount];).unwrap()); map_stmts.push(quote_stmt!(cx, let mut map = vec![0usize; $field_amount];).expect("stmt2"));
map_stmts.push(quote_stmt!(cx, let mut total = 0usize;).unwrap()); map_stmts.push(quote_stmt!(cx, let mut total = 0usize;).expect("stmt3"));
let mut post_write_stmts = Vec::<ast::Stmt>::new(); let mut post_write_stmts = Vec::<ast::Stmt>::new();
@ -248,9 +251,12 @@ fn binary_expr_struct(
let field_type_ident_qualified = builder.id( let field_type_ident_qualified = builder.id(
replace_qualified(&::syntax::print::pprust::ty_to_string(&codegen::strip_ptr(&field.ty)))); replace_qualified(&::syntax::print::pprust::ty_to_string(&codegen::strip_ptr(&field.ty))));
let field_id = match field.ident {
Some(ident) => builder.id(ident),
None => builder.id(format!("{}", index)),
};
let member_expr = match value_ident { let member_expr = match value_ident {
Some(x) => { Some(x) => {
let field_id = builder.id(field.ident.unwrap());
quote_expr!(cx, $x . $field_id) quote_expr!(cx, $x . $field_id)
}, },
None => { None => {
@ -267,8 +273,8 @@ fn binary_expr_struct(
match raw_ident.as_ref() { match raw_ident.as_ref() {
"u8" => { "u8" => {
write_stmts.push(quote_stmt!(cx, let next_line = offset + 1;).unwrap()); write_stmts.push(quote_stmt!(cx, let next_line = offset + 1;).expect("stmt4"));
write_stmts.push(quote_stmt!(cx, buffer[offset] = $member_expr; ).unwrap()); write_stmts.push(quote_stmt!(cx, buffer[offset] = $member_expr; ).expect("stm5"));
}, },
"[u8]" => { "[u8]" => {
write_stmts.push(quote_stmt!(cx, let size = $member_expr .len();).unwrap()); write_stmts.push(quote_stmt!(cx, let size = $member_expr .len();).unwrap());
@ -374,7 +380,7 @@ fn binary_expr_item_struct(
cx.span_bug(span, cx.span_bug(span,
&format!("#[derive(Binary)] Unsupported struct content, expected tuple/struct, found: {:?}", &format!("#[derive(Binary)] Unsupported struct content, expected tuple/struct, found: {:?}",
variant_data)); variant_data));
Err(Error) Err(Error) as Result<BinaryExpressions, Error>
}, },
} }
} }
@ -431,13 +437,12 @@ fn fields_sequence(
variant_ident: &ast::Ident, variant_ident: &ast::Ident,
) -> ast::Expr { ) -> ast::Expr {
use syntax::parse::token; use syntax::parse::token;
use syntax::ast::TokenTree::Token; use syntax::tokenstream::TokenTree::Token;
let named_members = fields.iter().any(|f| f.ident.is_some()); let named_members = fields.iter().any(|f| f.ident.is_some());
::quasi::parse_expr_panic(&mut ::syntax::parse::new_parser_from_tts( ::quasi::parse_expr_panic(&mut ::syntax::parse::new_parser_from_tts(
ext_cx.parse_sess(), ext_cx.parse_sess(),
ext_cx.cfg(),
{ {
let _sp = ext_cx.call_site(); let _sp = ext_cx.call_site();
let mut tt = ::std::vec::Vec::new(); let mut tt = ::std::vec::Vec::new();
@ -569,11 +574,10 @@ fn named_fields_sequence(
fields: &[ast::StructField], fields: &[ast::StructField],
) -> ast::Stmt { ) -> ast::Stmt {
use syntax::parse::token; use syntax::parse::token;
use syntax::ast::TokenTree::Token; use syntax::tokenstream::TokenTree::Token;
::quasi::parse_stmt_panic(&mut ::syntax::parse::new_parser_from_tts( ::quasi::parse_stmt_panic(&mut ::syntax::parse::new_parser_from_tts(
ext_cx.parse_sess(), ext_cx.parse_sess(),
ext_cx.cfg(),
{ {
let _sp = ext_cx.call_site(); let _sp = ext_cx.call_site();
let mut tt = ::std::vec::Vec::new(); let mut tt = ::std::vec::Vec::new();
@ -590,7 +594,10 @@ fn named_fields_sequence(
tt.push(Token(_sp, token::OpenDelim(token::Brace))); tt.push(Token(_sp, token::OpenDelim(token::Brace)));
for (idx, field) in fields.iter().enumerate() { for (idx, field) in fields.iter().enumerate() {
tt.push(Token(_sp, token::Ident(field.ident.clone().expect("function is called for named fields")))); tt.push(Token(_sp, match field.ident {
Some(ident) => token::Ident(ident),
None => token::Ident(ext_cx.ident_of(&format!("{}", idx))),
}));
tt.push(Token(_sp, token::Colon)); tt.push(Token(_sp, token::Colon));
// special case for u8, it just takes byte form sequence // special case for u8, it just takes byte form sequence

View File

@ -12,8 +12,8 @@ use-precompiled-js = ["parity-dapps-glue/use-precompiled-js"]
with-syntex = ["parity-dapps-glue/with-syntex"] with-syntex = ["parity-dapps-glue/with-syntex"]
[build-dependencies] [build-dependencies]
parity-dapps-glue = "1.4" parity-dapps-glue = "1.7"
[dependencies] [dependencies]
parity-dapps-glue = "1.4" parity-dapps-glue = "1.7"

View File

@ -1,7 +1,7 @@
[package] [package]
description = "Parity built-in dapps." description = "Parity built-in dapps."
name = "parity-ui-dev" name = "parity-ui-dev"
version = "1.4.0" version = "1.7.0"
license = "GPL-3.0" license = "GPL-3.0"
authors = ["Parity Technologies <admin@parity.io>"] authors = ["Parity Technologies <admin@parity.io>"]
build = "build.rs" build = "build.rs"
@ -11,8 +11,8 @@ default = ["with-syntex"]
with-syntex = ["parity-dapps-glue/with-syntex"] with-syntex = ["parity-dapps-glue/with-syntex"]
[build-dependencies] [build-dependencies]
parity-dapps-glue = "1.4" parity-dapps-glue = "1.7"
[dependencies] [dependencies]
parity-dapps-glue = "1.4" parity-dapps-glue = "1.7"

View File

@ -1,6 +1,6 @@
{ {
"name": "parity.js", "name": "parity.js",
"version": "1.7.22", "version": "1.7.26",
"main": "release/index.js", "main": "release/index.js",
"jsnext:main": "src/index.js", "jsnext:main": "src/index.js",
"author": "Parity Team <admin@parity.io>", "author": "Parity Team <admin@parity.io>",

View File

@ -42,7 +42,7 @@ export default class Personal {
// FIXME: Because of the different API instances, the "wait for valid changes" approach // FIXME: Because of the different API instances, the "wait for valid changes" approach
// doesn't work. Since the defaultAccount is critical to operation, we poll in exactly // doesn't work. Since the defaultAccount is critical to operation, we poll in exactly
// same way we do in ../eth (ala same as eth_blockNumber) and update. This should be moved // same way we do in ../eth (ala eth_blockNumber) and update. This should be moved
// to pub-sub as it becomes available // to pub-sub as it becomes available
_defaultAccount = (timerDisabled = false) => { _defaultAccount = (timerDisabled = false) => {
const nextTimeout = (timeout = 1000) => { const nextTimeout = (timeout = 1000) => {

View File

@ -17,6 +17,10 @@
import Abi from '~/abi'; import Abi from '~/abi';
import Func from '~/abi/spec/function'; import Func from '~/abi/spec/function';
import { abiDecode } from './decode';
import { cleanupValue } from './format';
import { sha3 } from './sha3';
export function encodeMethodCallAbi (methodAbi = {}, values = []) { export function encodeMethodCallAbi (methodAbi = {}, values = []) {
const func = new Func(methodAbi); const func = new Func(methodAbi);
const tokens = Abi.encodeTokens(func.inputParamTypes(), values); const tokens = Abi.encodeTokens(func.inputParamTypes(), values);
@ -36,3 +40,30 @@ export function abiEncode (methodName, inputTypes, data) {
return result; return result;
} }
export function abiUnencode (abi, data) {
const callsig = data.substr(2, 8);
const op = abi.find((field) => {
return field.type === 'function' &&
abiSignature(field.name, field.inputs.map((input) => input.type)).substr(2, 8) === callsig;
});
if (!op) {
console.warn(`Unknown function ID: ${callsig}`);
return null;
}
let argsByIndex = abiDecode(op.inputs.map((field) => field.type), '0x' + data.substr(10))
.map((value, index) => cleanupValue(value, op.inputs[index].type));
const argsByName = op.inputs.reduce((result, field, index) => {
result[field.name] = argsByIndex[index];
return result;
}, {});
return [op.name, argsByName, argsByIndex];
}
export function abiSignature (name, inputs) {
return sha3(`${name}(${inputs.join()})`);
}

View File

@ -14,7 +14,7 @@
// 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/>.
import { abiEncode, encodeMethodCallAbi } from './encode'; import { abiEncode, abiUnencode, abiSignature, encodeMethodCallAbi } from './encode';
const ABI = { const ABI = {
type: 'function', type: 'function',
@ -51,7 +51,11 @@ describe('api/util/encode', () => {
}); });
it('encodes variable values', () => { it('encodes variable values', () => {
expect(abiEncode('hintUrl', ['bytes32', 'string'], ['0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', 'http://foo.bar/'])).to.equal(`0x${VARIABLE}`); expect(
abiEncode(
'hintUrl', ['bytes32', 'string'], ['0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', 'http://foo.bar/']
)
).to.equal(`0x${VARIABLE}`);
}); });
it('encodes only the data with null name', () => { it('encodes only the data with null name', () => {
@ -60,4 +64,27 @@ describe('api/util/encode', () => {
).to.equal(`0x${RESULT.substr(8)}`); ).to.equal(`0x${RESULT.substr(8)}`);
}); });
}); });
describe('abiUnencode', () => {
it('decodes data correctly from abi', () => {
expect(
abiUnencode([{
name: 'test',
type: 'function',
inputs: [
{ type: 'uint', name: 'arga' }
]
}], '0x1acb6f7700000000000000000000000000000038')
).to.deep.equal(['test', { arga: 56 }, [56]]);
});
});
// Same example as in abi/util/signature.spec.js
describe('abiSignature', () => {
it('encodes baz(uint32,bool) correctly', () => {
expect(
abiSignature('baz', ['uint32', 'bool'])
).to.equal('0xcdcd77c0992ec5bbfc459984220f8c45084cc24d9b6efed1fae540db8de801d2');
});
});
}); });

View File

@ -20,6 +20,38 @@ export function bytesToHex (bytes) {
return '0x' + bytes.map((b) => ('0' + b.toString(16)).slice(-2)).join(''); return '0x' + bytes.map((b) => ('0' + b.toString(16)).slice(-2)).join('');
} }
export function cleanupValue (value, type) {
// TODO: make work with arbitrary depth arrays
if (value instanceof Array && type.match(/bytes[0-9]+/)) {
// figure out if it's an ASCII string hiding in there:
let ascii = '';
for (let index = 0, ended = false; index < value.length && ascii !== null; ++index) {
const val = value[index];
if (val === 0) {
ended = true;
} else {
ascii += String.fromCharCode(val);
}
if ((ended && val !== 0) || (!ended && (val < 32 || val >= 128))) {
ascii = null;
}
}
value = ascii === null
? bytesToHex(value)
: ascii;
}
if (type.substr(0, 4) === 'uint' && +type.substr(4) <= 48) {
value = +value;
}
return value;
}
export function hexToBytes (hex) { export function hexToBytes (hex) {
const raw = toHex(hex).slice(2); const raw = toHex(hex).slice(2);
const bytes = []; const bytes = [];

View File

@ -14,7 +14,7 @@
// 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/>.
import { bytesToHex, hexToBytes, hexToAscii, bytesToAscii, asciiToHex } from './format'; import { bytesToHex, cleanupValue, hexToBytes, hexToAscii, bytesToAscii, asciiToHex } from './format';
describe('api/util/format', () => { describe('api/util/format', () => {
describe('bytesToHex', () => { describe('bytesToHex', () => {
@ -27,6 +27,28 @@ describe('api/util/format', () => {
}); });
}); });
describe('cleanupValue', () => {
it('returns unknown values as the original', () => {
expect(cleanupValue('original', 'unknown')).to.equal('original');
});
it('returns ascii arrays as ascii', () => {
expect(cleanupValue([97, 115, 99, 105, 105, 0], 'bytes32')).to.equal('ascii');
});
it('returns non-ascii arrays as hex strings', () => {
expect(cleanupValue([97, 200, 0, 0], 'bytes4')).to.equal('0x61c80000');
});
it('returns uint (>48) as the original', () => {
expect(cleanupValue('original', 'uint49')).to.equal('original');
});
it('returns uint (<=48) as the number value', () => {
expect(cleanupValue('12345', 'uint48')).to.equal(12345);
});
});
describe('hexToBytes', () => { describe('hexToBytes', () => {
it('correctly converts an empty string', () => { it('correctly converts an empty string', () => {
expect(hexToBytes('')).to.deep.equal([]); expect(hexToBytes('')).to.deep.equal([]);

View File

@ -16,8 +16,8 @@
import { isAddress as isAddressValid, toChecksumAddress } from '../../abi/util/address'; import { isAddress as isAddressValid, toChecksumAddress } from '../../abi/util/address';
import { abiDecode, decodeCallData, decodeMethodInput, methodToAbi } from './decode'; import { abiDecode, decodeCallData, decodeMethodInput, methodToAbi } from './decode';
import { abiEncode, encodeMethodCallAbi } from './encode'; import { abiEncode, abiUnencode, abiSignature, encodeMethodCallAbi } from './encode';
import { bytesToHex, hexToAscii, asciiToHex } from './format'; import { bytesToHex, hexToAscii, asciiToHex, cleanupValue } from './format';
import { fromWei, toWei } from './wei'; import { fromWei, toWei } from './wei';
import { sha3 } from './sha3'; import { sha3 } from './sha3';
import { isArray, isFunction, isHex, isInstanceOf, isString } from './types'; import { isArray, isFunction, isHex, isInstanceOf, isString } from './types';
@ -26,6 +26,9 @@ import { createIdentityImg } from './identity';
export default { export default {
abiDecode, abiDecode,
abiEncode, abiEncode,
abiUnencode,
abiSignature,
cleanupValue,
isAddressValid, isAddressValid,
isArray, isArray,
isFunction, isFunction,

View File

@ -15,24 +15,10 @@
/* along with Parity. If not, see <http://www.gnu.org/licenses/>. /* along with Parity. If not, see <http://www.gnu.org/licenses/>.
*/ */
.button {
/* TODO remove !important once material design lite is used */
padding: 0 !important;
}
.icon { .icon {
/* TODO remove !important once material design lite is used */ /* TODO remove !important once material design lite is used */
margin: 0 !important;
width: 30px !important;
height: 30px !important; height: 30px !important;
} margin: 0 !important;
padding: 0 !important;
.menuIcon { width: 30px !important;
display: inline-block;
vertical-align: middle;
}
.menuText {
display: inline-block;
line-height: 24px;
vertical-align: top;
} }

View File

@ -17,83 +17,50 @@
import React, { Component, PropTypes } from 'react'; import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
import IconMenu from 'material-ui/IconMenu';
import IconButton from 'material-ui/IconButton/IconButton';
import AccountIcon from 'material-ui/svg-icons/action/account-circle'; import AccountIcon from 'material-ui/svg-icons/action/account-circle';
import MenuItem from 'material-ui/MenuItem';
import { init } from './actions';
import IdentityIcon from '../IdentityIcon'; import IdentityIcon from '../IdentityIcon';
import Address from '../ui/address';
import { select } from './actions';
import styles from './accounts.css'; import styles from './accounts.css';
class Accounts extends Component { class Accounts extends Component {
static propTypes = { static propTypes = {
all: PropTypes.object.isRequired, selected: PropTypes.oneOfType([
selected: PropTypes.object, PropTypes.oneOf([ null ]),
PropTypes.string
]),
onInit: PropTypes.func.isRequired
};
select: PropTypes.func.isRequired componentWillMount () {
this.props.onInit();
} }
render () { render () {
const { all, selected } = this.props; const { selected } = this.props;
const origin = { horizontal: 'right', vertical: 'top' }; if (!selected) {
return (
const accountsButton = ( <AccountIcon
<IconButton className={ styles.button }> className={ styles.icon }
{ selected color='white'
? ( />
<IdentityIcon );
className={ styles.icon } }
address={ selected.address }
/>
) : (
<AccountIcon
className={ styles.icon }
color='white'
/>
)
}
</IconButton>);
return ( return (
<IconMenu <IdentityIcon
value={ selected ? this.renderAccount(selected) : null } className={ styles.icon }
onChange={ this.onAccountSelect } address={ selected }
iconButtonElement={ accountsButton } />
anchorOrigin={ origin }
targetOrigin={ origin }
>
{ Object.values(all).map(this.renderAccount) }
</IconMenu>
); );
} }
renderAccount = (account) => {
const { selected } = this.props;
const isSelected = selected && selected.address === account.address;
return (
<MenuItem
key={ account.address }
value={ account.address }
checked={ isSelected }
insetChildren={ !isSelected }
>
<Address address={ account.address } />
</MenuItem>
);
};
onAccountSelect = (e, address) => {
this.props.select(address);
};
} }
const mapStateToProps = (state) => state.accounts; const mapStateToProps = (state) => state.accounts;
const mapDispatchToProps = (dispatch) => bindActionCreators({ select }, dispatch); const mapDispatchToProps = (dispatch) => bindActionCreators({
onInit: init
}, dispatch);
export default connect(mapStateToProps, mapDispatchToProps)(Accounts); export default connect(mapStateToProps, mapDispatchToProps)(Accounts);

View File

@ -14,4 +14,27 @@
// 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/>.
import { api } from '../parity';
export const select = (address) => ({ type: 'accounts select', address }); export const select = (address) => ({ type: 'accounts select', address });
export const init = () => (dispatch) => {
api.subscribe('parity_defaultAccount', (error, accountAddress) => {
if (error) {
return console.error(error);
}
if (accountAddress) {
dispatch(select(accountAddress));
}
});
return api.parity
.defaultAccount()
.then((accountAddress) => {
dispatch(select(accountAddress));
})
.catch((error) => {
console.error(error);
});
};

View File

@ -16,9 +16,11 @@
*/ */
.header { .header {
align-items: center;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin: 0; padding: .3em 1em; margin: 0;
padding: 0.3em 1em;
color: #fff; color: #fff;
background-color: #333; background-color: #333;
} }
@ -54,6 +56,7 @@
background: #f80; background: #f80;
bottom: 0; bottom: 0;
color: #fff; color: #fff;
cursor: pointer;
left: 0; left: 0;
opacity: 1; opacity: 1;
padding: 1.5em; padding: 1.5em;

View File

@ -49,6 +49,10 @@ export default class Application extends Component {
fee: nullableProptype(PropTypes.object.isRequired) fee: nullableProptype(PropTypes.object.isRequired)
}; };
state = {
showWarning: true
};
render () { render () {
const { contract, fee } = this.props; const { contract, fee } = this.props;
let warning = null; let warning = null;
@ -65,9 +69,7 @@ export default class Application extends Component {
<Lookup /> <Lookup />
{ this.renderActions() } { this.renderActions() }
<Events /> <Events />
<div className={ styles.warning }> { this.renderWarning() }
WARNING: The name registry is experimental. Please ensure that you understand the risks, benefits & consequences of registering a name before doing so. A non-refundable fee of { api.util.fromWei(fee).toFormat(3) }<small>ETH</small> is required for all registrations.
</div>
</div> </div>
) : ( ) : (
<CircularProgress size={ 60 } /> <CircularProgress size={ 60 } />
@ -98,4 +100,39 @@ export default class Application extends Component {
</div> </div>
); );
} }
renderWarning () {
const { showWarning } = this.state;
const { fee } = this.props;
if (!showWarning) {
return null;
}
return (
<div
className={ styles.warning }
onClick={ this.handleHideWarning }
>
<span>
WARNING: The name registry is experimental. Please ensure that you understand the risks,
benefits & consequences of registering a name before doing so.
</span>
{
fee && api.util.fromWei(fee).gt(0)
? (
<span>
&nbsp;A non-refundable fee of { api.util.fromWei(fee).toFormat(3) } <small>ETH</small>
&nbsp;is required for all registrations.
</span>
)
: null
}
</div>
);
}
handleHideWarning = () => {
this.setState({ showWarning: false });
}
} }

View File

@ -33,11 +33,11 @@ export const reserveFail = (name, error) => ({ type: 'names reserve fail', name,
export const reserve = (name) => (dispatch, getState) => { export const reserve = (name) => (dispatch, getState) => {
const state = getState(); const state = getState();
const account = state.accounts.selected; const accountAddress = state.accounts.selected;
const contract = state.contract; const contract = state.contract;
const fee = state.fee; const fee = state.fee;
if (!contract || !account) { if (!contract || !accountAddress) {
return; return;
} }
@ -58,7 +58,7 @@ export const reserve = (name) => (dispatch, getState) => {
const { reserve } = contract.instance; const { reserve } = contract.instance;
const options = { const options = {
from: account.address, from: accountAddress,
value: fee value: fee
}; };
const values = [ const values = [
@ -88,10 +88,10 @@ export const dropFail = (name, error) => ({ type: 'names drop fail', name, error
export const drop = (name) => (dispatch, getState) => { export const drop = (name) => (dispatch, getState) => {
const state = getState(); const state = getState();
const account = state.accounts.selected; const accountAddress = state.accounts.selected;
const contract = state.contract; const contract = state.contract;
if (!contract || !account) { if (!contract || !accountAddress) {
return; return;
} }
@ -105,14 +105,14 @@ export const drop = (name) => (dispatch, getState) => {
return getOwner(contract, name) return getOwner(contract, name)
.then((owner) => { .then((owner) => {
if (owner.toLowerCase() !== account.address.toLowerCase()) { if (owner.toLowerCase() !== accountAddress.toLowerCase()) {
throw new Error(`you are not the owner of "${name}"`); throw new Error(`you are not the owner of "${name}"`);
} }
const { drop } = contract.instance; const { drop } = contract.instance;
const options = { const options = {
from: account.address from: accountAddress
}; };
const values = [ const values = [

View File

@ -30,10 +30,10 @@ export const fail = (error) => ({ type: 'records update fail', error });
export const update = (name, key, value) => (dispatch, getState) => { export const update = (name, key, value) => (dispatch, getState) => {
const state = getState(); const state = getState();
const account = state.accounts.selected; const accountAddress = state.accounts.selected;
const contract = state.contract; const contract = state.contract;
if (!contract || !account) { if (!contract || !accountAddress) {
return; return;
} }
@ -42,7 +42,7 @@ export const update = (name, key, value) => (dispatch, getState) => {
return getOwner(contract, name) return getOwner(contract, name)
.then((owner) => { .then((owner) => {
if (owner.toLowerCase() !== account.address.toLowerCase()) { if (owner.toLowerCase() !== accountAddress.toLowerCase()) {
throw new Error(`you are not the owner of "${name}"`); throw new Error(`you are not the owner of "${name}"`);
} }
@ -51,7 +51,7 @@ export const update = (name, key, value) => (dispatch, getState) => {
: contract.instance.setData || contract.instance.set; : contract.instance.setData || contract.instance.set;
const options = { const options = {
from: account.address from: accountAddress
}; };
const values = [ const values = [

View File

@ -30,10 +30,10 @@ export const fail = (action, error) => ({ type: `reverse ${action} fail`, error
export const propose = (name, address) => (dispatch, getState) => { export const propose = (name, address) => (dispatch, getState) => {
const state = getState(); const state = getState();
const account = state.accounts.selected; const accountAddress = state.accounts.selected;
const contract = state.contract; const contract = state.contract;
if (!contract || !account) { if (!contract || !accountAddress) {
return; return;
} }
@ -42,14 +42,14 @@ export const propose = (name, address) => (dispatch, getState) => {
return getOwner(contract, name) return getOwner(contract, name)
.then((owner) => { .then((owner) => {
if (owner.toLowerCase() !== account.address.toLowerCase()) { if (owner.toLowerCase() !== accountAddress.toLowerCase()) {
throw new Error(`you are not the owner of "${name}"`); throw new Error(`you are not the owner of "${name}"`);
} }
const { proposeReverse } = contract.instance; const { proposeReverse } = contract.instance;
const options = { const options = {
from: account.address from: accountAddress
}; };
const values = [ const values = [
@ -74,10 +74,10 @@ export const propose = (name, address) => (dispatch, getState) => {
export const confirm = (name) => (dispatch, getState) => { export const confirm = (name) => (dispatch, getState) => {
const state = getState(); const state = getState();
const account = state.accounts.selected; const accountAddress = state.accounts.selected;
const contract = state.contract; const contract = state.contract;
if (!contract || !account) { if (!contract || !accountAddress) {
return; return;
} }
@ -86,14 +86,14 @@ export const confirm = (name) => (dispatch, getState) => {
return getOwner(contract, name) return getOwner(contract, name)
.then((owner) => { .then((owner) => {
if (owner.toLowerCase() !== account.address.toLowerCase()) { if (owner.toLowerCase() !== accountAddress.toLowerCase()) {
throw new Error(`you are not the owner of "${name}"`); throw new Error(`you are not the owner of "${name}"`);
} }
const { confirmReverse } = contract.instance; const { confirmReverse } = contract.instance;
const options = { const options = {
from: account.address from: accountAddress
}; };
const values = [ const values = [

View File

@ -31,8 +31,8 @@ export default (state = initialState, action) => {
return { ...state, all: accounts }; return { ...state, all: accounts };
} }
if (action.type === 'accounts select' && state.all[action.address]) { if (action.type === 'accounts select') {
return { ...state, selected: state.all[action.address] }; return { ...state, selected: action.address };
} }
return state; return state;

View File

@ -22,7 +22,7 @@ const etherscanUrl = (hash, isTestnet, netVersion) => {
hash = hash.toLowerCase().replace(leading0x, ''); hash = hash.toLowerCase().replace(leading0x, '');
const type = hash.length === 40 ? 'address' : 'tx'; const type = hash.length === 40 ? 'address' : 'tx';
return `https://${externalUrl(isTestnet, netVersion)}/${type}/0x${hash}`; return `${externalUrl(isTestnet, netVersion)}/${type}/0x${hash}`;
}; };
export default etherscanUrl; export default etherscanUrl;

View File

@ -145,6 +145,7 @@ export default class CreationType extends Component {
items={ TYPES } items={ TYPES }
noStretch noStretch
onSelectClick={ this.onChange } onSelectClick={ this.onChange }
onSelectDoubleClick={ this.onSelect }
renderItem={ this.renderItem } renderItem={ this.renderItem }
/> />
); );
@ -180,4 +181,11 @@ export default class CreationType extends Component {
store.setCreateType(item.key); store.setCreateType(item.key);
} }
onSelect = (item) => {
const { store } = this.props;
store.setCreateType(item.key);
store.nextStage();
}
} }

View File

@ -82,11 +82,16 @@ export default class Container extends Component {
to={ link } to={ link }
> >
{ card } { card }
{ this.renderHover() }
</Link> </Link>
) )
: card : (
<div>
{ card }
{ this.renderHover() }
</div>
)
} }
{ this.renderHover() }
</div> </div>
); );
} }

View File

@ -14,6 +14,7 @@
// 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/>.
import { noop } from 'lodash';
import React, { Component, PropTypes } from 'react'; import React, { Component, PropTypes } from 'react';
import { StarIcon } from '~/ui/Icons'; import { StarIcon } from '~/ui/Icons';
@ -29,8 +30,13 @@ export default class SelectionList extends Component {
noStretch: PropTypes.bool, noStretch: PropTypes.bool,
onDefaultClick: PropTypes.func, onDefaultClick: PropTypes.func,
onSelectClick: PropTypes.func.isRequired, onSelectClick: PropTypes.func.isRequired,
onSelectDoubleClick: PropTypes.func,
renderItem: PropTypes.func.isRequired renderItem: PropTypes.func.isRequired
} };
static defaultProps = {
onSelectDoubleClick: noop
};
render () { render () {
const { items, noStretch } = this.props; const { items, noStretch } = this.props;
@ -45,23 +51,28 @@ export default class SelectionList extends Component {
} }
renderItem = (item, index) => { renderItem = (item, index) => {
const { isChecked, onDefaultClick, onSelectClick, renderItem } = this.props; const { isChecked, onDefaultClick, onSelectClick, onSelectDoubleClick, renderItem } = this.props;
const isSelected = isChecked const isSelected = isChecked
? isChecked(item) ? isChecked(item)
: item.checked; : item.checked;
const makeDefault = () => { const handleClick = () => {
onDefaultClick(item); onSelectClick(item);
return false; return false;
}; };
const selectItem = () => { const handleDoubleClick = () => {
onSelectClick(item); onSelectDoubleClick(item);
return false; return false;
}; };
let defaultIcon = null; let defaultIcon = null;
if (onDefaultClick) { if (onDefaultClick) {
const makeDefault = () => {
onDefaultClick(item);
return false;
};
defaultIcon = ( defaultIcon = (
<div className={ styles.overlay }> <div className={ styles.overlay }>
{ {
@ -85,7 +96,8 @@ export default class SelectionList extends Component {
<div className={ classes.join(' ') }> <div className={ classes.join(' ') }>
<div <div
className={ styles.content } className={ styles.content }
onClick={ selectItem } onClick={ handleClick }
onDoubleClick={ handleDoubleClick }
> >
{ renderItem(item, index) } { renderItem(item, index) }
</div> </div>

View File

@ -8,11 +8,13 @@ authors = ["Parity Technologies <admin@parity.io>"]
[dependencies] [dependencies]
log = "0.3" log = "0.3"
env_logger = "0.3" env_logger = "0.3"
ethcore-util = { path = "../util" }
isatty = "0.1" isatty = "0.1"
lazy_static = "0.2" lazy_static = "0.2"
regex = "0.1" regex = "0.1"
time = "0.1" time = "0.1"
parking_lot = "0.3"
arrayvec = "0.3"
ansi_term = "0.9"
[profile.release] [profile.release]
debug = true debug = true

View File

@ -16,7 +16,7 @@
//! Logger for parity executables //! Logger for parity executables
extern crate ethcore_util as util; extern crate arrayvec;
extern crate log as rlog; extern crate log as rlog;
extern crate isatty; extern crate isatty;
extern crate regex; extern crate regex;
@ -24,6 +24,10 @@ extern crate env_logger;
extern crate time; extern crate time;
#[macro_use] #[macro_use]
extern crate lazy_static; extern crate lazy_static;
extern crate parking_lot;
extern crate ansi_term;
mod rotating;
use std::{env, thread, fs}; use std::{env, thread, fs};
use std::sync::{Weak, Arc}; use std::sync::{Weak, Arc};
@ -31,8 +35,10 @@ use std::io::Write;
use isatty::{stderr_isatty, stdout_isatty}; use isatty::{stderr_isatty, stdout_isatty};
use env_logger::LogBuilder; use env_logger::LogBuilder;
use regex::Regex; use regex::Regex;
use util::{Mutex, RotatingLogger} ; use ansi_term::Colour;
use util::log::Colour; use parking_lot::Mutex;
pub use rotating::{RotatingLogger, init_log};
#[derive(Debug, PartialEq, Clone)] #[derive(Debug, PartialEq, Clone)]
pub struct Config { pub struct Config {

View File

@ -20,7 +20,6 @@ use std::env;
use rlog::LogLevelFilter; use rlog::LogLevelFilter;
use env_logger::LogBuilder; use env_logger::LogBuilder;
use arrayvec::ArrayVec; use arrayvec::ArrayVec;
pub use ansi_term::{Colour, Style};
use parking_lot::{RwLock, RwLockReadGuard}; use parking_lot::{RwLock, RwLockReadGuard};

View File

@ -22,7 +22,7 @@ use std::cmp::max;
use cli::{Args, ArgsError}; use cli::{Args, ArgsError};
use util::{Hashable, H256, U256, Uint, Bytes, version_data, Address}; use util::{Hashable, H256, U256, Uint, Bytes, version_data, Address};
use util::journaldb::Algorithm; use util::journaldb::Algorithm;
use util::log::Colour; use util::Colour;
use ethsync::{NetworkConfiguration, is_valid_node_url, AllowIP}; use ethsync::{NetworkConfiguration, is_valid_node_url, AllowIP};
use ethcore::ethstore::ethkey::Secret; use ethcore::ethstore::ethkey::Secret;
use ethcore::client::{VMType}; use ethcore::client::{VMType};
@ -824,7 +824,7 @@ impl Configuration {
} }
fn directories(&self) -> Directories { fn directories(&self) -> Directories {
use util::path; use path;
let local_path = default_local_path(); let local_path = default_local_path();
let base_path = self.args.flag_base_path.as_ref().map_or_else(|| default_data_path(), |s| s.clone()); let base_path = self.args.flag_base_path.as_ref().map_or_else(|| default_data_path(), |s| s.clone());

View File

@ -18,7 +18,7 @@ use std::{io, env};
use std::io::{Write, BufReader, BufRead}; use std::io::{Write, BufReader, BufRead};
use std::time::Duration; use std::time::Duration;
use std::fs::File; use std::fs::File;
use util::{clean_0x, U256, Uint, Address, path, CompactionProfile}; use util::{clean_0x, U256, Uint, Address, CompactionProfile};
use util::journaldb::Algorithm; use util::journaldb::Algorithm;
use ethcore::client::{Mode, BlockId, VMType, DatabaseCompactionProfile, ClientConfig, VerifierType}; use ethcore::client::{Mode, BlockId, VMType, DatabaseCompactionProfile, ClientConfig, VerifierType};
use ethcore::miner::{PendingSet, GasLimit, PrioritizationStrategy}; use ethcore::miner::{PendingSet, GasLimit, PrioritizationStrategy};
@ -27,6 +27,7 @@ use dir::DatabaseDirectories;
use upgrade::{upgrade, upgrade_data_paths}; use upgrade::{upgrade, upgrade_data_paths};
use migration::migrate; use migration::migrate;
use ethsync::is_valid_node_url; use ethsync::is_valid_node_url;
use path;
pub fn to_duration(s: &str) -> Result<Duration, String> { pub fn to_duration(s: &str) -> Result<Duration, String> {
to_seconds(s).map(Duration::from_secs) to_seconds(s).map(Duration::from_secs)
@ -465,7 +466,7 @@ but the first password is trimmed
#[test] #[test]
#[cfg(not(windows))] #[cfg(not(windows))]
fn test_geth_ipc_path() { fn test_geth_ipc_path() {
use util::path; use path;
assert_eq!(geth_ipc_path(true), path::ethereum::with_testnet("geth.ipc").to_str().unwrap().to_owned()); assert_eq!(geth_ipc_path(true), path::ethereum::with_testnet("geth.ipc").to_str().unwrap().to_owned());
assert_eq!(geth_ipc_path(false), path::ethereum::with_default("geth.ipc").to_str().unwrap().to_owned()); assert_eq!(geth_ipc_path(false), path::ethereum::with_default("geth.ipc").to_str().unwrap().to_owned());
} }

View File

@ -61,6 +61,7 @@ extern crate parity_reactor;
extern crate parity_updater as updater; extern crate parity_updater as updater;
extern crate parity_local_store as local_store; extern crate parity_local_store as local_store;
extern crate rpc_cli; extern crate rpc_cli;
extern crate path;
#[macro_use] #[macro_use]
extern crate log as rlog; extern crate log as rlog;

View File

@ -33,7 +33,7 @@ use ethsync::{ManageNetwork, SyncProvider};
use hash_fetch::fetch::Client as FetchClient; use hash_fetch::fetch::Client as FetchClient;
use jsonrpc_core::{MetaIoHandler}; use jsonrpc_core::{MetaIoHandler};
use updater::Updater; use updater::Updater;
use util::RotatingLogger; use ethcore_logger::RotatingLogger;
#[derive(Debug, PartialEq, Clone, Eq, Hash)] #[derive(Debug, PartialEq, Clone, Eq, Hash)]
pub enum Api { pub enum Api {

View File

@ -20,9 +20,9 @@ use ctrlc::CtrlC;
use fdlimit::raise_fd_limit; use fdlimit::raise_fd_limit;
use ethcore_rpc::{NetworkSettings, informant, is_major_importing}; use ethcore_rpc::{NetworkSettings, informant, is_major_importing};
use ethsync::NetworkConfiguration; use ethsync::NetworkConfiguration;
use util::{Colour, version, RotatingLogger, Mutex, Condvar}; use util::{Colour, version, Mutex, Condvar};
use io::{MayPanic, ForwardPanic, PanicHandler}; use io::{MayPanic, ForwardPanic, PanicHandler};
use ethcore_logger::{Config as LogConfig}; use ethcore_logger::{Config as LogConfig, RotatingLogger};
use ethcore::miner::{StratumOptions, Stratum}; use ethcore::miner::{StratumOptions, Stratum};
use ethcore::client::{Client, Mode, DatabaseCompactionProfile, VMType, BlockChainClient}; use ethcore::client::{Client, Mode, DatabaseCompactionProfile, VMType, BlockChainClient};
use ethcore::service::ClientService; use ethcore::service::ClientService;

View File

@ -28,7 +28,7 @@ use ethcore_signer as signer;
use helpers::replace_home; use helpers::replace_home;
use parity_reactor::TokioRemote; use parity_reactor::TokioRemote;
use rpc_apis; use rpc_apis;
use util::path::restrict_permissions_owner; use path::restrict_permissions_owner;
use util::H256; use util::H256;
const CODES_FILENAME: &'static str = "authcodes"; const CODES_FILENAME: &'static str = "authcodes";

View File

@ -36,6 +36,7 @@ ethsync = { path = "../sync" }
ethjson = { path = "../json" } ethjson = { path = "../json" }
ethcore-devtools = { path = "../devtools" } ethcore-devtools = { path = "../devtools" }
ethcore-light = { path = "../ethcore/light" } ethcore-light = { path = "../ethcore/light" }
ethcore-logger = { path = "../logger" }
parity-updater = { path = "../updater" } parity-updater = { path = "../updater" }
parity-reactor = { path = "../util/reactor" } parity-reactor = { path = "../util/reactor" }
rlp = { path = "../util/rlp" } rlp = { path = "../util/rlp" }

View File

@ -41,6 +41,7 @@ extern crate ethcrypto as crypto;
extern crate ethkey; extern crate ethkey;
extern crate ethstore; extern crate ethstore;
extern crate ethsync; extern crate ethsync;
extern crate ethcore_logger;
extern crate fetch; extern crate fetch;
extern crate parity_reactor; extern crate parity_reactor;
extern crate parity_updater as updater; extern crate parity_updater as updater;

View File

@ -19,7 +19,7 @@ use std::sync::Arc;
use std::collections::{BTreeMap, HashSet}; use std::collections::{BTreeMap, HashSet};
use futures::{future, Future, BoxFuture}; use futures::{future, Future, BoxFuture};
use util::RotatingLogger; use ethcore_logger::RotatingLogger;
use util::misc::version_data; use util::misc::version_data;
use crypto::ecies; use crypto::ecies;

View File

@ -20,7 +20,8 @@ use std::str::FromStr;
use std::collections::{BTreeMap, HashSet}; use std::collections::{BTreeMap, HashSet};
use futures::{future, Future, BoxFuture}; use futures::{future, Future, BoxFuture};
use util::{RotatingLogger, Address}; use ethcore_logger::RotatingLogger;
use util::Address;
use util::misc::version_data; use util::misc::version_data;
use crypto::ecies; use crypto::ecies;

View File

@ -15,7 +15,7 @@
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
use std::sync::Arc; use std::sync::Arc;
use util::log::RotatingLogger; use ethcore_logger::RotatingLogger;
use util::Address; use util::Address;
use ethsync::ManageNetwork; use ethsync::ManageNetwork;
use ethcore::account_provider::AccountProvider; use ethcore::account_provider::AccountProvider;

View File

@ -18,7 +18,7 @@
use std::fmt; use std::fmt;
use serde::{Serialize, Serializer}; use serde::{Serialize, Serializer};
use util::log::Colour; use util::Colour;
use util::bytes::ToPretty; use util::bytes::ToPretty;
use v1::types::{U256, TransactionRequest, RichRawTransaction, H160, H256, H520, Bytes, TransactionCondition, Origin}; use v1::types::{U256, TransactionRequest, RichRawTransaction, H160, H256, H520, Bytes, TransactionCondition, Origin};

View File

@ -18,7 +18,7 @@
use v1::types::{Bytes, H160, U256, TransactionCondition}; use v1::types::{Bytes, H160, U256, TransactionCondition};
use v1::helpers; use v1::helpers;
use util::log::Colour; use util::Colour;
use std::fmt; use std::fmt;

View File

@ -16,8 +16,8 @@ jsonrpc-core = { git = "https://github.com/paritytech/jsonrpc.git", branch = "pa
jsonrpc-server-utils = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" } jsonrpc-server-utils = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
log = "0.3" log = "0.3"
env_logger = "0.3" env_logger = "0.3"
parity-dapps-glue = { version = "1.4", optional = true }
ws = { git = "https://github.com/paritytech/ws-rs.git", branch = "mio-upstream-stable" } ws = { git = "https://github.com/paritytech/ws-rs.git", branch = "mio-upstream-stable" }
parity-dapps-glue = { version = "1.7", optional = true }
ethcore-util = { path = "../util" } ethcore-util = { path = "../util" }
ethcore-io = { path = "../util/io" } ethcore-io = { path = "../util/io" }
ethcore-rpc = { path = "../rpc" } ethcore-rpc = { path = "../rpc" }

View File

@ -23,6 +23,7 @@ semver = "0.5"
ethcore-ipc-nano = { path = "../ipc/nano" } ethcore-ipc-nano = { path = "../ipc/nano" }
futures = "0.1" futures = "0.1"
tokio-core = "0.1" tokio-core = "0.1"
ethcore-logger = { path = "../logger" }
[profile.release] [profile.release]
debug = true debug = true

View File

@ -24,6 +24,7 @@ extern crate ethcore_util as util;
extern crate ethcore_ipc as ipc; extern crate ethcore_ipc as ipc;
extern crate semver; extern crate semver;
extern crate futures; extern crate futures;
extern crate ethcore_logger;
#[cfg(test)] extern crate tokio_core; #[cfg(test)] extern crate tokio_core;
extern crate ethcore_devtools as devtools; extern crate ethcore_devtools as devtools;
@ -327,6 +328,8 @@ mod tests {
use tokio_core::io; use tokio_core::io;
use futures::{Future, future}; use futures::{Future, future};
use ethcore_logger::init_log;
pub struct VoidManager; pub struct VoidManager;
impl JobDispatcher for VoidManager { impl JobDispatcher for VoidManager {
@ -335,32 +338,6 @@ mod tests {
} }
} }
lazy_static! {
static ref LOG_DUMMY: bool = {
use log::LogLevelFilter;
use env_logger::LogBuilder;
use std::env;
let mut builder = LogBuilder::new();
builder.filter(None, LogLevelFilter::Info);
if let Ok(log) = env::var("RUST_LOG") {
builder.parse(&log);
}
if let Ok(_) = builder.init() {
println!("logger initialized");
}
true
};
}
/// Intialize log with default settings
#[cfg(test)]
fn init_log() {
let _ = *LOG_DUMMY;
}
fn dummy_request(addr: &SocketAddr, data: &str) -> Vec<u8> { fn dummy_request(addr: &SocketAddr, data: &str) -> Vec<u8> {
let mut core = Core::new().expect("Tokio Core should be created with no errors"); let mut core = Core::new().expect("Tokio Core should be created with no errors");
let mut buffer = vec![0u8; 2048]; let mut buffer = vec![0u8; 2048];

View File

@ -42,8 +42,8 @@ impl From<PushMessageError> for Error {
} }
} }
#[ipc(client_ident="RemoteJobDispatcher")]
/// Interface that can provide pow/blockchain-specific responses for the clients /// Interface that can provide pow/blockchain-specific responses for the clients
#[ipc(client_ident="RemoteJobDispatcher")]
pub trait JobDispatcher: Send + Sync { pub trait JobDispatcher: Send + Sync {
// json for initial client handshake // json for initial client handshake
fn initial(&self) -> Option<String> { None } fn initial(&self) -> Option<String> { None }
@ -55,8 +55,8 @@ pub trait JobDispatcher: Send + Sync {
fn submit(&self, payload: Vec<String>) -> Result<(), Error>; fn submit(&self, payload: Vec<String>) -> Result<(), Error>;
} }
#[ipc(client_ident="RemoteWorkHandler")]
/// Interface that can handle requests to push job for workers /// Interface that can handle requests to push job for workers
#[ipc(client_ident="RemoteWorkHandler")]
pub trait PushWorkHandler: Send + Sync { pub trait PushWorkHandler: Send + Sync {
/// push the same work package for all workers (`payload`: json of pow-specific set of work specification) /// push the same work package for all workers (`payload`: json of pow-specific set of work specification)
fn push_work_all(&self, payload: String) -> Result<(), Error>; fn push_work_all(&self, payload: String) -> Result<(), Error>;

View File

@ -20,6 +20,7 @@ parity-hash-fetch = { path = "../hash-fetch" }
ipc-common-types = { path = "../ipc-common-types" } ipc-common-types = { path = "../ipc-common-types" }
ethcore-ipc = { path = "../ipc/rpc" } ethcore-ipc = { path = "../ipc/rpc" }
parity-reactor = { path = "../util/reactor" } parity-reactor = { path = "../util/reactor" }
path = { path = "../util/path" }
[profile.release] [profile.release]
debug = true debug = true

View File

@ -26,6 +26,7 @@ extern crate ethsync;
extern crate ethcore_ipc as ipc; extern crate ethcore_ipc as ipc;
extern crate target_info; extern crate target_info;
extern crate parity_reactor; extern crate parity_reactor;
extern crate path;
mod updater; mod updater;
mod operations; mod operations;

View File

@ -21,7 +21,7 @@ use std::path::{PathBuf};
use target_info::Target; use target_info::Target;
use util::misc; use util::misc;
use ipc_common_types::{VersionInfo, ReleaseTrack}; use ipc_common_types::{VersionInfo, ReleaseTrack};
use util::path::restrict_permissions_owner; use path::restrict_permissions_owner;
use util::{Address, H160, H256, Mutex, Bytes}; use util::{Address, H160, H256, Mutex, Bytes};
use ethsync::{SyncProvider}; use ethsync::{SyncProvider};
use ethcore::client::{BlockId, BlockChainClient, ChainNotify}; use ethcore::client::{BlockId, BlockChainClient, ChainNotify};

View File

@ -11,11 +11,9 @@ build = "build.rs"
log = "0.3" log = "0.3"
env_logger = "0.3" env_logger = "0.3"
rustc-serialize = "0.3" rustc-serialize = "0.3"
arrayvec = "0.3"
rand = "0.3.12" rand = "0.3.12"
time = "0.1.34" time = "0.1.34"
rocksdb = { git = "https://github.com/ethcore/rust-rocksdb" } rocksdb = { git = "https://github.com/ethcore/rust-rocksdb" }
lazy_static = "0.2"
eth-secp256k1 = { git = "https://github.com/ethcore/rust-secp256k1" } eth-secp256k1 = { git = "https://github.com/ethcore/rust-secp256k1" }
rust-crypto = "0.2.34" rust-crypto = "0.2.34"
elastic-array = { git = "https://github.com/ethcore/elastic-array" } elastic-array = { git = "https://github.com/ethcore/elastic-array" }
@ -32,11 +30,12 @@ ethcore-bigint = { path = "bigint" }
parking_lot = "0.3" parking_lot = "0.3"
using_queue = { path = "using_queue" } using_queue = { path = "using_queue" }
table = { path = "table" } table = { path = "table" }
ansi_term = "0.7" ansi_term = "0.9"
tiny-keccak= "1.0" tiny-keccak= "1.0"
ethcore-bloom-journal = { path = "bloom" } ethcore-bloom-journal = { path = "bloom" }
regex = "0.1" regex = "0.1"
lru-cache = "0.1.0" lru-cache = "0.1.0"
ethcore-logger = { path = "../logger" }
[features] [features]
default = [] default = []

View File

@ -19,7 +19,7 @@ clippy = { version = "0.0.103", optional = true}
igd = "0.5.0" igd = "0.5.0"
libc = "0.2.7" libc = "0.2.7"
parking_lot = "0.3" parking_lot = "0.3"
ansi_term = "0.7" ansi_term = "0.9"
rustc-serialize = "0.3" rustc-serialize = "0.3"
ethcore-io = { path = "../io" } ethcore-io = { path = "../io" }
ethcore-util = { path = ".." } ethcore-util = { path = ".." }
@ -27,6 +27,8 @@ ethcore-devtools = { path = "../../devtools" }
ethkey = { path = "../../ethkey" } ethkey = { path = "../../ethkey" }
ethcrypto = { path = "../../ethcrypto" } ethcrypto = { path = "../../ethcrypto" }
rlp = { path = "../rlp" } rlp = { path = "../rlp" }
path = { path = "../path" }
ethcore-logger = { path ="../../logger" }
[features] [features]
default = [] default = []

View File

@ -40,7 +40,7 @@ use node_table::*;
use stats::NetworkStats; use stats::NetworkStats;
use discovery::{Discovery, TableUpdates, NodeEntry}; use discovery::{Discovery, TableUpdates, NodeEntry};
use ip_utils::{map_external_address, select_public_address}; use ip_utils::{map_external_address, select_public_address};
use util::path::restrict_permissions_owner; use path::restrict_permissions_owner;
use parking_lot::{Mutex, RwLock}; use parking_lot::{Mutex, RwLock};
type Slab<T> = ::slab::Slab<T, usize>; type Slab<T> = ::slab::Slab<T, usize>;

View File

@ -71,6 +71,8 @@ extern crate ethkey;
extern crate ethcrypto as crypto; extern crate ethcrypto as crypto;
extern crate rlp; extern crate rlp;
extern crate bytes; extern crate bytes;
extern crate path;
extern crate ethcore_logger;
#[macro_use] #[macro_use]
extern crate log; extern crate log;

View File

@ -98,7 +98,7 @@ fn net_service() {
#[test] #[test]
fn net_connect() { fn net_connect() {
::util::log::init_log(); ::ethcore_logger::init_log();
let key1 = Random.generate().unwrap(); let key1 = Random.generate().unwrap();
let mut config1 = NetworkConfiguration::new_local(); let mut config1 = NetworkConfiguration::new_local();
config1.use_secret = Some(key1.secret().clone()); config1.use_secret = Some(key1.secret().clone());

6
util/path/Cargo.toml Normal file
View File

@ -0,0 +1,6 @@
[package]
name = "path"
version = "0.1.0"
authors = ["debris <marek.kotewicz@gmail.com>"]
[dependencies]

View File

@ -553,7 +553,7 @@ mod tests {
use hashdb::{HashDB, DBValue}; use hashdb::{HashDB, DBValue};
use super::*; use super::*;
use super::super::traits::JournalDB; use super::super::traits::JournalDB;
use log::init_log; use ethcore_logger::init_log;
use kvdb::{DatabaseConfig}; use kvdb::{DatabaseConfig};
#[test] #[test]

View File

@ -456,7 +456,7 @@ mod tests {
use common::*; use common::*;
use super::*; use super::*;
use hashdb::{HashDB, DBValue}; use hashdb::{HashDB, DBValue};
use log::init_log; use ethcore_logger::init_log;
use journaldb::JournalDB; use journaldb::JournalDB;
use kvdb::Database; use kvdb::Database;

View File

@ -93,7 +93,6 @@ extern crate rocksdb;
extern crate env_logger; extern crate env_logger;
extern crate crypto as rcrypto; extern crate crypto as rcrypto;
extern crate secp256k1; extern crate secp256k1;
extern crate arrayvec;
extern crate elastic_array; extern crate elastic_array;
extern crate time; extern crate time;
extern crate ethcore_devtools as devtools; extern crate ethcore_devtools as devtools;
@ -108,9 +107,8 @@ extern crate regex;
extern crate lru_cache; extern crate lru_cache;
extern crate heapsize; extern crate heapsize;
extern crate itertools; extern crate itertools;
extern crate ethcore_logger;
#[macro_use]
extern crate lazy_static;
#[macro_use] #[macro_use]
extern crate log as rlog; extern crate log as rlog;
@ -137,8 +135,6 @@ pub mod trie;
pub mod nibbleslice; pub mod nibbleslice;
pub mod nibblevec; pub mod nibblevec;
pub mod semantic_version; pub mod semantic_version;
pub mod log;
pub mod path;
pub mod snappy; pub mod snappy;
pub mod cache; pub mod cache;
mod timer; mod timer;
@ -153,9 +149,9 @@ pub use triehash::*;
pub use trie::{Trie, TrieMut, TrieDB, TrieDBMut, TrieFactory, TrieError, SecTrieDB, SecTrieDBMut}; pub use trie::{Trie, TrieMut, TrieDB, TrieDBMut, TrieFactory, TrieError, SecTrieDB, SecTrieDBMut};
pub use nibbleslice::*; pub use nibbleslice::*;
pub use semantic_version::*; pub use semantic_version::*;
pub use log::*;
pub use kvdb::*; pub use kvdb::*;
pub use timer::*; pub use timer::*;
pub use ansi_term::{Colour, Style};
/// 160-bit integer representing account address /// 160-bit integer representing account address
pub type Address = H160; pub type Address = H160;

View File

@ -958,7 +958,7 @@ mod tests {
#[test] #[test]
fn playpen() { fn playpen() {
::log::init_log(); ::ethcore_logger::init_log();
let mut seed = H256::new(); let mut seed = H256::new();
for test_i in 0..10 { for test_i in 0..10 {