Merge branch 'pip-msg' into lightcli
This commit is contained in:
commit
0abbd7ac97
153
Cargo.lock
generated
153
Cargo.lock
generated
@ -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]]
|
||||||
@ -580,11 +582,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)",
|
||||||
]
|
]
|
||||||
@ -593,10 +597,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",
|
||||||
@ -605,6 +610,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)",
|
||||||
@ -625,6 +631,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",
|
||||||
@ -682,7 +689,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)",
|
||||||
@ -698,6 +705,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)",
|
||||||
@ -713,8 +721,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)",
|
||||||
@ -722,9 +729,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)",
|
||||||
@ -1485,7 +1492,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)",
|
||||||
@ -1626,16 +1633,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]]
|
||||||
@ -1728,24 +1735,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]]
|
||||||
@ -1762,6 +1769,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)",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -1786,6 +1794,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"
|
||||||
@ -1873,20 +1885,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]]
|
||||||
@ -2306,23 +2320,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]]
|
||||||
@ -2349,7 +2384,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)",
|
||||||
@ -2535,11 +2570,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"
|
||||||
@ -2669,11 +2699,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"
|
||||||
@ -2772,7 +2802,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"
|
||||||
@ -2789,7 +2819,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"
|
||||||
@ -2805,8 +2835,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"
|
||||||
@ -2855,12 +2885,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"
|
||||||
@ -2882,7 +2914,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"
|
||||||
|
@ -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 }
|
||||||
|
|
||||||
|
@ -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" }
|
||||||
|
@ -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]
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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")]
|
||||||
|
@ -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"]
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
use ethcore::ids::BlockId;
|
use ethcore::ids::BlockId;
|
||||||
use util::{Bytes, H256, U256, HashDB, MemoryDB};
|
use util::{Bytes, H256, U256, HashDB, MemoryDB};
|
||||||
use util::trie::{self, TrieMut, TrieDBMut, Trie, TrieDB, Recorder};
|
use util::trie::{self, TrieMut, TrieDBMut, Trie, TrieDB, Recorder};
|
||||||
use rlp::{RlpStream, UntrustedRlp, View};
|
use rlp::{RlpStream, UntrustedRlp};
|
||||||
|
|
||||||
// encode a key.
|
// encode a key.
|
||||||
macro_rules! key {
|
macro_rules! key {
|
||||||
|
@ -35,7 +35,7 @@ use ethcore::encoded;
|
|||||||
use ethcore::header::Header;
|
use ethcore::header::Header;
|
||||||
use ethcore::ids::BlockId;
|
use ethcore::ids::BlockId;
|
||||||
|
|
||||||
use rlp::{Encodable, Decodable, Decoder, DecoderError, RlpStream, Rlp, View};
|
use rlp::{Encodable, Decodable, DecoderError, RlpStream, Rlp, UntrustedRlp};
|
||||||
use util::{H256, U256, HeapSizeOf, RwLock};
|
use util::{H256, U256, HeapSizeOf, RwLock};
|
||||||
use util::kvdb::{DBTransaction, KeyValueDB};
|
use util::kvdb::{DBTransaction, KeyValueDB};
|
||||||
|
|
||||||
@ -95,8 +95,7 @@ impl Encodable for Entry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Entry {
|
impl Decodable for Entry {
|
||||||
fn decode<D: Decoder>(decoder: &D) -> Result<Self, DecoderError> {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
let mut candidates = SmallVec::<[Candidate; 3]>::new();
|
let mut candidates = SmallVec::<[Candidate; 3]>::new();
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ use ethcore::transaction::UnverifiedTransaction;
|
|||||||
|
|
||||||
use io::TimerToken;
|
use io::TimerToken;
|
||||||
use network::{NetworkProtocolHandler, NetworkContext, PeerId};
|
use network::{NetworkProtocolHandler, NetworkContext, PeerId};
|
||||||
use rlp::{RlpStream, UntrustedRlp, View};
|
use rlp::{RlpStream, UntrustedRlp};
|
||||||
use util::hash::H256;
|
use util::hash::H256;
|
||||||
use util::{DBValue, Mutex, RwLock, U256};
|
use util::{DBValue, Mutex, RwLock, U256};
|
||||||
use time::{Duration, SteadyTime};
|
use time::{Duration, SteadyTime};
|
||||||
@ -726,7 +726,7 @@ impl LightProtocol {
|
|||||||
fn response(&self, peer: &PeerId, io: &IoContext, raw: UntrustedRlp) -> Result<(), Error> {
|
fn response(&self, peer: &PeerId, io: &IoContext, raw: UntrustedRlp) -> Result<(), Error> {
|
||||||
let (req_id, responses) = {
|
let (req_id, responses) = {
|
||||||
let id_guard = self.pre_verify_response(peer, &raw)?;
|
let id_guard = self.pre_verify_response(peer, &raw)?;
|
||||||
let responses: Vec<Response> = raw.val_at(2)?;
|
let responses: Vec<Response> = raw.list_at(2)?;
|
||||||
(id_guard.defuse(), responses)
|
(id_guard.defuse(), responses)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -127,8 +127,7 @@ impl Encodable for CostTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for CostTable {
|
impl Decodable for CostTable {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
let base = rlp.val_at(0)?;
|
let base = rlp.val_at(0)?;
|
||||||
|
|
||||||
let mut headers = None;
|
let mut headers = None;
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
//! Peer status and capabilities.
|
//! Peer status and capabilities.
|
||||||
|
|
||||||
use rlp::{DecoderError, RlpDecodable, Encodable, RlpStream, UntrustedRlp, View};
|
use rlp::{DecoderError, Encodable, Decodable, RlpStream, UntrustedRlp};
|
||||||
use util::{H256, U256};
|
use util::{H256, U256};
|
||||||
|
|
||||||
use super::request_credits::FlowParams;
|
use super::request_credits::FlowParams;
|
||||||
@ -91,7 +91,7 @@ struct Parser<'a> {
|
|||||||
impl<'a> Parser<'a> {
|
impl<'a> Parser<'a> {
|
||||||
// expect a specific next key, and decode the value.
|
// expect a specific next key, and decode the value.
|
||||||
// error on unexpected key or invalid value.
|
// error on unexpected key or invalid value.
|
||||||
fn expect<T: RlpDecodable>(&mut self, key: Key) -> Result<T, DecoderError> {
|
fn expect<T: Decodable>(&mut self, key: Key) -> Result<T, DecoderError> {
|
||||||
self.expect_raw(key).and_then(|item| item.as_val())
|
self.expect_raw(key).and_then(|item| item.as_val())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ impl<'a> Parser<'a> {
|
|||||||
|
|
||||||
// get the next key and value RLP.
|
// get the next key and value RLP.
|
||||||
fn get_next(&mut self) -> Result<Option<(Key, UntrustedRlp<'a>)>, DecoderError> {
|
fn get_next(&mut self) -> Result<Option<(Key, UntrustedRlp<'a>)>, DecoderError> {
|
||||||
while self.pos < self.rlp.item_count() {
|
while self.pos < self.rlp.item_count()? {
|
||||||
let pair = self.rlp.at(self.pos)?;
|
let pair = self.rlp.at(self.pos)?;
|
||||||
let k: String = pair.val_at(0)?;
|
let k: String = pair.val_at(0)?;
|
||||||
|
|
||||||
@ -374,7 +374,7 @@ mod tests {
|
|||||||
use super::*;
|
use super::*;
|
||||||
use super::super::request_credits::FlowParams;
|
use super::super::request_credits::FlowParams;
|
||||||
use util::{U256, H256};
|
use util::{U256, H256};
|
||||||
use rlp::{RlpStream, UntrustedRlp, View};
|
use rlp::{RlpStream, UntrustedRlp};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn full_handshake() {
|
fn full_handshake() {
|
||||||
@ -474,7 +474,7 @@ mod tests {
|
|||||||
let handshake = write_handshake(&status, &capabilities, Some(&flow_params));
|
let handshake = write_handshake(&status, &capabilities, Some(&flow_params));
|
||||||
let interleaved = {
|
let interleaved = {
|
||||||
let handshake = UntrustedRlp::new(&handshake);
|
let handshake = UntrustedRlp::new(&handshake);
|
||||||
let mut stream = RlpStream::new_list(handshake.item_count() * 3);
|
let mut stream = RlpStream::new_list(handshake.item_count().unwrap_or(0) * 3);
|
||||||
|
|
||||||
for item in handshake.iter() {
|
for item in handshake.iter() {
|
||||||
stream.append_raw(item.as_raw(), 1);
|
stream.append_raw(item.as_raw(), 1);
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ use ethcore::receipt::Receipt;
|
|||||||
use ethcore::state::{self, ProvedExecution};
|
use ethcore::state::{self, ProvedExecution};
|
||||||
use ethcore::transaction::SignedTransaction;
|
use ethcore::transaction::SignedTransaction;
|
||||||
|
|
||||||
use rlp::{RlpStream, UntrustedRlp, View};
|
use rlp::{RlpStream, UntrustedRlp};
|
||||||
use util::{Address, Bytes, DBValue, HashDB, H256, U256};
|
use util::{Address, Bytes, DBValue, HashDB, H256, U256};
|
||||||
use util::memorydb::MemoryDB;
|
use util::memorydb::MemoryDB;
|
||||||
use util::sha3::Hashable;
|
use util::sha3::Hashable;
|
||||||
|
@ -153,7 +153,7 @@ impl<T: ProvingBlockChainClient + ?Sized> Provider for T {
|
|||||||
|
|
||||||
fn block_receipts(&self, req: request::CompleteReceiptsRequest) -> Option<request::ReceiptsResponse> {
|
fn block_receipts(&self, req: request::CompleteReceiptsRequest) -> Option<request::ReceiptsResponse> {
|
||||||
BlockChainClient::block_receipts(self, &req.hash)
|
BlockChainClient::block_receipts(self, &req.hash)
|
||||||
.map(|x| ::request::ReceiptsResponse { receipts: ::rlp::decode(&x) })
|
.map(|x| ::request::ReceiptsResponse { receipts: ::rlp::decode_list(&x) })
|
||||||
}
|
}
|
||||||
|
|
||||||
fn account_proof(&self, req: request::CompleteAccountRequest) -> Option<request::AccountResponse> {
|
fn account_proof(&self, req: request::CompleteAccountRequest) -> Option<request::AccountResponse> {
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
//! Light protocol request types.
|
//! Light protocol request types.
|
||||||
|
|
||||||
use rlp::{Encodable, Decodable, Decoder, DecoderError, RlpStream, View};
|
use rlp::{Encodable, Decodable, DecoderError, RlpStream, UntrustedRlp};
|
||||||
use util::H256;
|
use util::H256;
|
||||||
|
|
||||||
mod builder;
|
mod builder;
|
||||||
@ -105,9 +105,7 @@ impl<T> From<T> for Field<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Decodable> Decodable for Field<T> {
|
impl<T: Decodable> Decodable for Field<T> {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
match rlp.val_at::<u8>(0)? {
|
match rlp.val_at::<u8>(0)? {
|
||||||
0 => Ok(Field::Scalar(rlp.val_at::<T>(1)?)),
|
0 => Ok(Field::Scalar(rlp.val_at::<T>(1)?)),
|
||||||
1 => Ok({
|
1 => Ok({
|
||||||
@ -184,9 +182,7 @@ impl From<u64> for HashOrNumber {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for HashOrNumber {
|
impl Decodable for HashOrNumber {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
rlp.as_val::<H256>().map(HashOrNumber::Hash)
|
rlp.as_val::<H256>().map(HashOrNumber::Hash)
|
||||||
.or_else(|_| rlp.as_val().map(HashOrNumber::Number))
|
.or_else(|_| rlp.as_val().map(HashOrNumber::Number))
|
||||||
}
|
}
|
||||||
@ -263,9 +259,7 @@ impl Request {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Request {
|
impl Decodable for Request {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
match rlp.val_at::<Kind>(0)? {
|
match rlp.val_at::<Kind>(0)? {
|
||||||
Kind::Headers => Ok(Request::Headers(rlp.val_at(1)?)),
|
Kind::Headers => Ok(Request::Headers(rlp.val_at(1)?)),
|
||||||
Kind::HeaderProof => Ok(Request::HeaderProof(rlp.val_at(1)?)),
|
Kind::HeaderProof => Ok(Request::HeaderProof(rlp.val_at(1)?)),
|
||||||
@ -382,9 +376,7 @@ pub enum Kind {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Kind {
|
impl Decodable for Kind {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
match rlp.as_val::<u8>()? {
|
match rlp.as_val::<u8>()? {
|
||||||
0 => Ok(Kind::Headers),
|
0 => Ok(Kind::Headers),
|
||||||
1 => Ok(Kind::HeaderProof),
|
1 => Ok(Kind::HeaderProof),
|
||||||
@ -458,9 +450,7 @@ impl Response {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Response {
|
impl Decodable for Response {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
match rlp.val_at::<Kind>(0)? {
|
match rlp.val_at::<Kind>(0)? {
|
||||||
Kind::Headers => Ok(Response::Headers(rlp.val_at(1)?)),
|
Kind::Headers => Ok(Response::Headers(rlp.val_at(1)?)),
|
||||||
Kind::HeaderProof => Ok(Response::HeaderProof(rlp.val_at(1)?)),
|
Kind::HeaderProof => Ok(Response::HeaderProof(rlp.val_at(1)?)),
|
||||||
@ -525,7 +515,7 @@ pub trait IncompleteRequest: Sized {
|
|||||||
pub mod header {
|
pub mod header {
|
||||||
use super::{Field, HashOrNumber, NoSuchOutput, OutputKind, Output};
|
use super::{Field, HashOrNumber, NoSuchOutput, OutputKind, Output};
|
||||||
use ethcore::encoded;
|
use ethcore::encoded;
|
||||||
use rlp::{Encodable, Decodable, Decoder, DecoderError, RlpStream, View};
|
use rlp::{Encodable, Decodable, DecoderError, RlpStream, UntrustedRlp};
|
||||||
|
|
||||||
/// Potentially incomplete headers request.
|
/// Potentially incomplete headers request.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
@ -541,8 +531,7 @@ pub mod header {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Incomplete {
|
impl Decodable for Incomplete {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
Ok(Incomplete {
|
Ok(Incomplete {
|
||||||
start: rlp.val_at(0)?,
|
start: rlp.val_at(0)?,
|
||||||
skip: rlp.val_at(1)?,
|
skip: rlp.val_at(1)?,
|
||||||
@ -623,9 +612,8 @@ pub mod header {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Response {
|
impl Decodable for Response {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
use ethcore::header::Header as FullHeader;
|
use ethcore::header::Header as FullHeader;
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
let mut headers = Vec::new();
|
let mut headers = Vec::new();
|
||||||
|
|
||||||
@ -655,7 +643,7 @@ pub mod header {
|
|||||||
/// Request and response for header proofs.
|
/// Request and response for header proofs.
|
||||||
pub mod header_proof {
|
pub mod header_proof {
|
||||||
use super::{Field, NoSuchOutput, OutputKind, Output};
|
use super::{Field, NoSuchOutput, OutputKind, Output};
|
||||||
use rlp::{Encodable, Decodable, Decoder, DecoderError, RlpStream, View};
|
use rlp::{Encodable, Decodable, DecoderError, RlpStream, UntrustedRlp};
|
||||||
use util::{Bytes, U256, H256};
|
use util::{Bytes, U256, H256};
|
||||||
|
|
||||||
/// Potentially incomplete header proof request.
|
/// Potentially incomplete header proof request.
|
||||||
@ -666,8 +654,7 @@ pub mod header_proof {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Incomplete {
|
impl Decodable for Incomplete {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
Ok(Incomplete {
|
Ok(Incomplete {
|
||||||
num: rlp.val_at(0)?,
|
num: rlp.val_at(0)?,
|
||||||
})
|
})
|
||||||
@ -738,11 +725,10 @@ pub mod header_proof {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Response {
|
impl Decodable for Response {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
Ok(Response {
|
Ok(Response {
|
||||||
proof: rlp.val_at(0)?,
|
proof: rlp.list_at(0)?,
|
||||||
hash: rlp.val_at(1)?,
|
hash: rlp.val_at(1)?,
|
||||||
td: rlp.val_at(2)?,
|
td: rlp.val_at(2)?,
|
||||||
})
|
})
|
||||||
@ -765,7 +751,7 @@ pub mod header_proof {
|
|||||||
pub mod block_receipts {
|
pub mod block_receipts {
|
||||||
use super::{Field, NoSuchOutput, OutputKind, Output};
|
use super::{Field, NoSuchOutput, OutputKind, Output};
|
||||||
use ethcore::receipt::Receipt;
|
use ethcore::receipt::Receipt;
|
||||||
use rlp::{Encodable, Decodable, Decoder, DecoderError, RlpStream, View};
|
use rlp::{Encodable, Decodable, DecoderError, RlpStream, UntrustedRlp};
|
||||||
use util::H256;
|
use util::H256;
|
||||||
|
|
||||||
/// Potentially incomplete block receipts request.
|
/// Potentially incomplete block receipts request.
|
||||||
@ -776,8 +762,7 @@ pub mod block_receipts {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Incomplete {
|
impl Decodable for Incomplete {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
Ok(Incomplete {
|
Ok(Incomplete {
|
||||||
hash: rlp.val_at(0)?,
|
hash: rlp.val_at(0)?,
|
||||||
})
|
})
|
||||||
@ -840,11 +825,10 @@ pub mod block_receipts {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Response {
|
impl Decodable for Response {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
Ok(Response {
|
Ok(Response {
|
||||||
receipts: rlp.as_val()?,
|
receipts: rlp.as_list()?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -860,7 +844,7 @@ pub mod block_receipts {
|
|||||||
pub mod block_body {
|
pub mod block_body {
|
||||||
use super::{Field, NoSuchOutput, OutputKind, Output};
|
use super::{Field, NoSuchOutput, OutputKind, Output};
|
||||||
use ethcore::encoded;
|
use ethcore::encoded;
|
||||||
use rlp::{Encodable, Decodable, Decoder, DecoderError, RlpStream, View};
|
use rlp::{Encodable, Decodable, DecoderError, RlpStream, UntrustedRlp};
|
||||||
use util::H256;
|
use util::H256;
|
||||||
|
|
||||||
/// Potentially incomplete block body request.
|
/// Potentially incomplete block body request.
|
||||||
@ -871,8 +855,7 @@ pub mod block_body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Incomplete {
|
impl Decodable for Incomplete {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
Ok(Incomplete {
|
Ok(Incomplete {
|
||||||
hash: rlp.val_at(0)?,
|
hash: rlp.val_at(0)?,
|
||||||
})
|
})
|
||||||
@ -935,15 +918,13 @@ pub mod block_body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Response {
|
impl Decodable for Response {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
use ethcore::header::Header as FullHeader;
|
use ethcore::header::Header as FullHeader;
|
||||||
use ethcore::transaction::UnverifiedTransaction;
|
use ethcore::transaction::UnverifiedTransaction;
|
||||||
|
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
// check body validity.
|
// check body validity.
|
||||||
let _: Vec<FullHeader> = rlp.val_at(0)?;
|
let _: Vec<FullHeader> = rlp.list_at(0)?;
|
||||||
let _: Vec<UnverifiedTransaction> = rlp.val_at(1)?;
|
let _: Vec<UnverifiedTransaction> = rlp.list_at(1)?;
|
||||||
|
|
||||||
Ok(Response {
|
Ok(Response {
|
||||||
body: encoded::Body::new(rlp.as_raw().to_owned()),
|
body: encoded::Body::new(rlp.as_raw().to_owned()),
|
||||||
@ -961,7 +942,7 @@ pub mod block_body {
|
|||||||
/// A request for an account proof.
|
/// A request for an account proof.
|
||||||
pub mod account {
|
pub mod account {
|
||||||
use super::{Field, NoSuchOutput, OutputKind, Output};
|
use super::{Field, NoSuchOutput, OutputKind, Output};
|
||||||
use rlp::{Encodable, Decodable, Decoder, DecoderError, RlpStream, View};
|
use rlp::{Encodable, Decodable, DecoderError, RlpStream, UntrustedRlp};
|
||||||
use util::{Bytes, U256, H256};
|
use util::{Bytes, U256, H256};
|
||||||
|
|
||||||
/// Potentially incomplete request for an account proof.
|
/// Potentially incomplete request for an account proof.
|
||||||
@ -974,8 +955,7 @@ pub mod account {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Incomplete {
|
impl Decodable for Incomplete {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
Ok(Incomplete {
|
Ok(Incomplete {
|
||||||
block_hash: rlp.val_at(0)?,
|
block_hash: rlp.val_at(0)?,
|
||||||
address_hash: rlp.val_at(1)?,
|
address_hash: rlp.val_at(1)?,
|
||||||
@ -1070,11 +1050,9 @@ pub mod account {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Response {
|
impl Decodable for Response {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
Ok(Response {
|
Ok(Response {
|
||||||
proof: rlp.val_at(0)?,
|
proof: rlp.list_at(0)?,
|
||||||
nonce: rlp.val_at(1)?,
|
nonce: rlp.val_at(1)?,
|
||||||
balance: rlp.val_at(2)?,
|
balance: rlp.val_at(2)?,
|
||||||
code_hash: rlp.val_at(3)?,
|
code_hash: rlp.val_at(3)?,
|
||||||
@ -1101,7 +1079,7 @@ pub mod account {
|
|||||||
/// A request for a storage proof.
|
/// A request for a storage proof.
|
||||||
pub mod storage {
|
pub mod storage {
|
||||||
use super::{Field, NoSuchOutput, OutputKind, Output};
|
use super::{Field, NoSuchOutput, OutputKind, Output};
|
||||||
use rlp::{Encodable, Decodable, Decoder, DecoderError, RlpStream, View};
|
use rlp::{Encodable, Decodable, DecoderError, RlpStream, UntrustedRlp};
|
||||||
use util::{Bytes, H256};
|
use util::{Bytes, H256};
|
||||||
|
|
||||||
/// Potentially incomplete request for an storage proof.
|
/// Potentially incomplete request for an storage proof.
|
||||||
@ -1116,8 +1094,7 @@ pub mod storage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Incomplete {
|
impl Decodable for Incomplete {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
Ok(Incomplete {
|
Ok(Incomplete {
|
||||||
block_hash: rlp.val_at(0)?,
|
block_hash: rlp.val_at(0)?,
|
||||||
address_hash: rlp.val_at(1)?,
|
address_hash: rlp.val_at(1)?,
|
||||||
@ -1220,11 +1197,9 @@ pub mod storage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Response {
|
impl Decodable for Response {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
Ok(Response {
|
Ok(Response {
|
||||||
proof: rlp.val_at(0)?,
|
proof: rlp.list_at(0)?,
|
||||||
value: rlp.val_at(1)?,
|
value: rlp.val_at(1)?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -1244,7 +1219,7 @@ pub mod storage {
|
|||||||
/// A request for contract code.
|
/// A request for contract code.
|
||||||
pub mod contract_code {
|
pub mod contract_code {
|
||||||
use super::{Field, NoSuchOutput, OutputKind, Output};
|
use super::{Field, NoSuchOutput, OutputKind, Output};
|
||||||
use rlp::{Encodable, Decodable, Decoder, DecoderError, RlpStream, View};
|
use rlp::{Encodable, Decodable, DecoderError, RlpStream, UntrustedRlp};
|
||||||
use util::{Bytes, H256};
|
use util::{Bytes, H256};
|
||||||
|
|
||||||
/// Potentially incomplete contract code request.
|
/// Potentially incomplete contract code request.
|
||||||
@ -1257,8 +1232,7 @@ pub mod contract_code {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Incomplete {
|
impl Decodable for Incomplete {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
Ok(Incomplete {
|
Ok(Incomplete {
|
||||||
block_hash: rlp.val_at(0)?,
|
block_hash: rlp.val_at(0)?,
|
||||||
code_hash: rlp.val_at(1)?,
|
code_hash: rlp.val_at(1)?,
|
||||||
@ -1338,8 +1312,7 @@ pub mod contract_code {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Response {
|
impl Decodable for Response {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
|
|
||||||
Ok(Response {
|
Ok(Response {
|
||||||
code: rlp.as_val()?,
|
code: rlp.as_val()?,
|
||||||
@ -1358,7 +1331,7 @@ pub mod contract_code {
|
|||||||
pub mod execution {
|
pub mod execution {
|
||||||
use super::{Field, NoSuchOutput, OutputKind, Output};
|
use super::{Field, NoSuchOutput, OutputKind, Output};
|
||||||
use ethcore::transaction::Action;
|
use ethcore::transaction::Action;
|
||||||
use rlp::{Encodable, Decodable, Decoder, DecoderError, RlpStream, View};
|
use rlp::{Encodable, Decodable, DecoderError, RlpStream, UntrustedRlp};
|
||||||
use util::{Bytes, Address, U256, H256, DBValue};
|
use util::{Bytes, Address, U256, H256, DBValue};
|
||||||
|
|
||||||
/// Potentially incomplete execution proof request.
|
/// Potentially incomplete execution proof request.
|
||||||
@ -1381,8 +1354,7 @@ pub mod execution {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Incomplete {
|
impl Decodable for Incomplete {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
Ok(Incomplete {
|
Ok(Incomplete {
|
||||||
block_hash: rlp.val_at(0)?,
|
block_hash: rlp.val_at(0)?,
|
||||||
from: rlp.val_at(1)?,
|
from: rlp.val_at(1)?,
|
||||||
@ -1481,8 +1453,7 @@ pub mod execution {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Response {
|
impl Decodable for Response {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
let mut items = Vec::new();
|
let mut items = Vec::new();
|
||||||
for raw_item in rlp.iter() {
|
for raw_item in rlp.iter() {
|
||||||
let mut item = DBValue::new();
|
let mut item = DBValue::new();
|
||||||
@ -1734,6 +1705,6 @@ mod tests {
|
|||||||
|
|
||||||
let rlp = UntrustedRlp::new(&out);
|
let rlp = UntrustedRlp::new(&out);
|
||||||
assert_eq!(rlp.val_at::<usize>(0).unwrap(), 100usize);
|
assert_eq!(rlp.val_at::<usize>(0).unwrap(), 100usize);
|
||||||
assert_eq!(rlp.val_at::<Vec<Request>>(1).unwrap(), reqs);
|
assert_eq!(rlp.list_at::<Request>(1).unwrap(), reqs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ use std::cmp;
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|
||||||
use rlp::{UntrustedRlp, RlpStream, Encodable, Decodable, Decoder, DecoderError, View};
|
use rlp::{UntrustedRlp, RlpStream, Encodable, Decodable, DecoderError};
|
||||||
use util::{Bytes, Address, Uint, Hashable, U256, H256, ordered_trie_root, SHA3_NULL_RLP};
|
use util::{Bytes, Address, Uint, Hashable, U256, H256, ordered_trie_root, SHA3_NULL_RLP};
|
||||||
use util::error::{Mismatch, OutOfBounds};
|
use util::error::{Mismatch, OutOfBounds};
|
||||||
|
|
||||||
@ -67,18 +67,17 @@ impl Block {
|
|||||||
|
|
||||||
|
|
||||||
impl Decodable for Block {
|
impl Decodable for Block {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
if decoder.as_raw().len() != decoder.as_rlp().payload_info()?.total() {
|
if rlp.as_raw().len() != rlp.payload_info()?.total() {
|
||||||
return Err(DecoderError::RlpIsTooBig);
|
return Err(DecoderError::RlpIsTooBig);
|
||||||
}
|
}
|
||||||
let d = decoder.as_rlp();
|
if rlp.item_count()? != 3 {
|
||||||
if d.item_count() != 3 {
|
|
||||||
return Err(DecoderError::RlpIncorrectListLen);
|
return Err(DecoderError::RlpIncorrectListLen);
|
||||||
}
|
}
|
||||||
Ok(Block {
|
Ok(Block {
|
||||||
header: d.val_at(0)?,
|
header: rlp.val_at(0)?,
|
||||||
transactions: d.val_at(1)?,
|
transactions: rlp.list_at(1)?,
|
||||||
uncles: d.val_at(2)?,
|
uncles: rlp.list_at(2)?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -154,13 +154,12 @@ impl HeapSizeOf for BlockDetails {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for BlockDetails {
|
impl Decodable for BlockDetails {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
let details = BlockDetails {
|
let details = BlockDetails {
|
||||||
number: d.val_at(0)?,
|
number: rlp.val_at(0)?,
|
||||||
total_difficulty: d.val_at(1)?,
|
total_difficulty: rlp.val_at(1)?,
|
||||||
parent: d.val_at(2)?,
|
parent: rlp.val_at(2)?,
|
||||||
children: d.val_at(3)?,
|
children: rlp.list_at(3)?,
|
||||||
};
|
};
|
||||||
Ok(details)
|
Ok(details)
|
||||||
}
|
}
|
||||||
@ -190,11 +189,10 @@ impl HeapSizeOf for TransactionAddress {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for TransactionAddress {
|
impl Decodable for TransactionAddress {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
let tx_address = TransactionAddress {
|
let tx_address = TransactionAddress {
|
||||||
block_hash: d.val_at(0)?,
|
block_hash: rlp.val_at(0)?,
|
||||||
index: d.val_at(1)?,
|
index: rlp.val_at(1)?,
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(tx_address)
|
Ok(tx_address)
|
||||||
@ -224,9 +222,9 @@ impl BlockReceipts {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for BlockReceipts {
|
impl Decodable for BlockReceipts {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
Ok(BlockReceipts {
|
Ok(BlockReceipts {
|
||||||
receipts: Decodable::decode(decoder)?
|
receipts: rlp.as_list()?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,8 +44,8 @@ impl Into<bc::Bloom> for Bloom {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Bloom {
|
impl Decodable for Bloom {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
Decodable::decode(decoder).map(Bloom)
|
LogBloom::decode(rlp).map(Bloom)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,8 +52,8 @@ impl Into<bc::BloomGroup> for BloomGroup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for BloomGroup {
|
impl Decodable for BloomGroup {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let blooms = Decodable::decode(decoder)?;
|
let blooms = rlp.as_list()?;
|
||||||
let group = BloomGroup {
|
let group = BloomGroup {
|
||||||
blooms: blooms
|
blooms: blooms
|
||||||
};
|
};
|
||||||
|
@ -66,7 +66,7 @@ use evm::{Factory as EvmFactory, Schedule};
|
|||||||
use miner::{Miner, MinerService, TransactionImportResult};
|
use miner::{Miner, MinerService, TransactionImportResult};
|
||||||
use snapshot::{self, io as snapshot_io};
|
use snapshot::{self, io as snapshot_io};
|
||||||
use factory::Factories;
|
use factory::Factories;
|
||||||
use rlp::{View, UntrustedRlp};
|
use rlp::UntrustedRlp;
|
||||||
use state_db::StateDB;
|
use state_db::StateDB;
|
||||||
use rand::OsRng;
|
use rand::OsRng;
|
||||||
use client::registry::Registry;
|
use client::registry::Registry;
|
||||||
@ -539,7 +539,7 @@ impl Client {
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Commit results
|
// Commit results
|
||||||
let receipts = ::rlp::decode(&receipts_bytes);
|
let receipts = ::rlp::decode_list(&receipts_bytes);
|
||||||
let mut batch = DBTransaction::new();
|
let mut batch = DBTransaction::new();
|
||||||
chain.insert_unordered_block(&mut batch, &block_bytes, receipts, None, false, true);
|
chain.insert_unordered_block(&mut batch, &block_bytes, receipts, None, false, true);
|
||||||
// Final commit to the DB
|
// Final commit to the DB
|
||||||
|
@ -21,7 +21,7 @@ use std::sync::Weak;
|
|||||||
use std::time::{UNIX_EPOCH, Duration};
|
use std::time::{UNIX_EPOCH, Duration};
|
||||||
use util::*;
|
use util::*;
|
||||||
use ethkey::{verify_address, Signature};
|
use ethkey::{verify_address, Signature};
|
||||||
use rlp::{UntrustedRlp, View, encode};
|
use rlp::{UntrustedRlp, encode};
|
||||||
use account_provider::AccountProvider;
|
use account_provider::AccountProvider;
|
||||||
use block::*;
|
use block::*;
|
||||||
use spec::CommonParams;
|
use spec::CommonParams;
|
||||||
|
@ -138,7 +138,7 @@ impl Engine for BasicAuthority {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn verify_block_family(&self, header: &Header, parent: &Header, _block: Option<&[u8]>) -> result::Result<(), Error> {
|
fn verify_block_family(&self, header: &Header, parent: &Header, _block: Option<&[u8]>) -> result::Result<(), Error> {
|
||||||
use rlp::{UntrustedRlp, View};
|
use rlp::UntrustedRlp;
|
||||||
// Check if the signature belongs to a validator, can depend on parent state.
|
// Check if the signature belongs to a validator, can depend on parent state.
|
||||||
let sig = UntrustedRlp::new(&header.seal()[0]).as_val::<H520>()?;
|
let sig = UntrustedRlp::new(&header.seal()[0]).as_val::<H520>()?;
|
||||||
let signer = public_to_address(&recover(&sig.into(), &header.bare_hash())?);
|
let signer = public_to_address(&recover(&sig.into(), &header.bare_hash())?);
|
||||||
|
@ -20,7 +20,7 @@ use util::*;
|
|||||||
use super::{Height, View, BlockHash, Step};
|
use super::{Height, View, BlockHash, Step};
|
||||||
use error::Error;
|
use error::Error;
|
||||||
use header::Header;
|
use header::Header;
|
||||||
use rlp::{Rlp, UntrustedRlp, RlpStream, Encodable, Decodable, Decoder, DecoderError, View as RlpView};
|
use rlp::{Rlp, UntrustedRlp, RlpStream, Encodable, Decodable, DecoderError};
|
||||||
use ethkey::{recover, public_to_address};
|
use ethkey::{recover, public_to_address};
|
||||||
use super::super::vote_collector::Message;
|
use super::super::vote_collector::Message;
|
||||||
|
|
||||||
@ -150,8 +150,8 @@ impl Step {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Step {
|
impl Decodable for Step {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
match decoder.as_rlp().as_val()? {
|
match rlp.as_val()? {
|
||||||
0u8 => Ok(Step::Propose),
|
0u8 => Ok(Step::Propose),
|
||||||
1 => Ok(Step::Prevote),
|
1 => Ok(Step::Prevote),
|
||||||
2 => Ok(Step::Precommit),
|
2 => Ok(Step::Precommit),
|
||||||
@ -168,8 +168,7 @@ impl Encodable for Step {
|
|||||||
|
|
||||||
/// (signature, (height, view, step, block_hash))
|
/// (signature, (height, view, step, block_hash))
|
||||||
impl Decodable for ConsensusMessage {
|
impl Decodable for ConsensusMessage {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
let m = rlp.at(1)?;
|
let m = rlp.at(1)?;
|
||||||
let block_message: H256 = m.val_at(3)?;
|
let block_message: H256 = m.val_at(3)?;
|
||||||
Ok(ConsensusMessage {
|
Ok(ConsensusMessage {
|
||||||
|
@ -33,7 +33,7 @@ use error::{Error, BlockError};
|
|||||||
use header::Header;
|
use header::Header;
|
||||||
use builtin::Builtin;
|
use builtin::Builtin;
|
||||||
use env_info::EnvInfo;
|
use env_info::EnvInfo;
|
||||||
use rlp::{UntrustedRlp, View as RlpView};
|
use rlp::UntrustedRlp;
|
||||||
use ethkey::{recover, public_to_address, Signature};
|
use ethkey::{recover, public_to_address, Signature};
|
||||||
use account_provider::AccountProvider;
|
use account_provider::AccountProvider;
|
||||||
use block::*;
|
use block::*;
|
||||||
|
@ -27,7 +27,7 @@ use transaction::UnverifiedTransaction;
|
|||||||
use engines::Engine;
|
use engines::Engine;
|
||||||
use evm::Schedule;
|
use evm::Schedule;
|
||||||
use ethjson;
|
use ethjson;
|
||||||
use rlp::{self, UntrustedRlp, View};
|
use rlp::{self, UntrustedRlp};
|
||||||
|
|
||||||
/// Parity tries to round block.gas_limit to multiple of this constant
|
/// Parity tries to round block.gas_limit to multiple of this constant
|
||||||
pub const PARITY_GAS_LIMIT_DETERMINANT: U256 = U256([37, 0, 0, 0]);
|
pub const PARITY_GAS_LIMIT_DETERMINANT: U256 = U256([37, 0, 0, 0]);
|
||||||
|
@ -261,9 +261,7 @@ impl Header {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Header {
|
impl Decodable for Header {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(r: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let r = decoder.as_rlp();
|
|
||||||
|
|
||||||
let mut blockheader = Header {
|
let mut blockheader = Header {
|
||||||
parent_hash: r.val_at(0)?,
|
parent_hash: r.val_at(0)?,
|
||||||
uncles_hash: r.val_at(1)?,
|
uncles_hash: r.val_at(1)?,
|
||||||
@ -283,7 +281,7 @@ impl Decodable for Header {
|
|||||||
bare_hash: RefCell::new(None),
|
bare_hash: RefCell::new(None),
|
||||||
};
|
};
|
||||||
|
|
||||||
for i in 13..r.item_count() {
|
for i in 13..r.item_count()? {
|
||||||
blockheader.seal.push(r.at(i)?.as_raw().to_vec())
|
blockheader.seal.push(r.at(i)?.as_raw().to_vec())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
use super::test_common::*;
|
use super::test_common::*;
|
||||||
use evm;
|
use evm;
|
||||||
use ethjson;
|
use ethjson;
|
||||||
use rlp::{UntrustedRlp, View};
|
use rlp::UntrustedRlp;
|
||||||
use transaction::{Action, UnverifiedTransaction};
|
use transaction::{Action, UnverifiedTransaction};
|
||||||
use ethstore::ethkey::public_to_address;
|
use ethstore::ethkey::public_to_address;
|
||||||
|
|
||||||
|
@ -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]
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
//! This migration compresses the state db.
|
//! This migration compresses the state db.
|
||||||
|
|
||||||
use util::migration::{SimpleMigration, Progress};
|
use util::migration::{SimpleMigration, Progress};
|
||||||
use rlp::{Compressible, UntrustedRlp, View, RlpType};
|
use rlp::{Compressible, UntrustedRlp, RlpType};
|
||||||
|
|
||||||
/// Compressing migration.
|
/// Compressing migration.
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
|
@ -26,8 +26,7 @@ use util::migration::{Batch, Config, Error, Migration, SimpleMigration, Progress
|
|||||||
use util::sha3::Hashable;
|
use util::sha3::Hashable;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use rlp::{decode, Rlp, RlpStream, View};
|
use rlp::{decode, Rlp, RlpStream};
|
||||||
|
|
||||||
|
|
||||||
// attempt to migrate a key, value pair. None if migration not possible.
|
// attempt to migrate a key, value pair. None if migration not possible.
|
||||||
fn attempt_migrate(mut key_h: H256, val: &[u8]) -> Option<H256> {
|
fn attempt_migrate(mut key_h: H256, val: &[u8]) -> Option<H256> {
|
||||||
@ -184,7 +183,7 @@ impl OverlayRecentV7 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// migrate all deleted keys.
|
// migrate all deleted keys.
|
||||||
let mut deleted_keys: Vec<H256> = rlp.val_at(2);
|
let mut deleted_keys: Vec<H256> = rlp.list_at(2);
|
||||||
for old_key in &mut deleted_keys {
|
for old_key in &mut deleted_keys {
|
||||||
if let Some(new) = self.migrated_keys.get(&*old_key) {
|
if let Some(new) = self.migrated_keys.get(&*old_key) {
|
||||||
*old_key = new.clone();
|
*old_key = new.clone();
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
//! This migration consolidates all databases into single one using Column Families.
|
//! This migration consolidates all databases into single one using Column Families.
|
||||||
|
|
||||||
use rlp::{Rlp, RlpStream, View};
|
use rlp::{Rlp, RlpStream};
|
||||||
use util::kvdb::Database;
|
use util::kvdb::Database;
|
||||||
use util::migration::{Batch, Config, Error, Migration, Progress};
|
use util::migration::{Batch, Config, Error, Migration, Progress};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
@ -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();
|
||||||
|
@ -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();
|
||||||
|
@ -22,7 +22,7 @@ use snapshot::Error;
|
|||||||
|
|
||||||
use util::{U256, H256, Bytes, HashDB, SHA3_EMPTY, SHA3_NULL_RLP};
|
use util::{U256, H256, Bytes, HashDB, SHA3_EMPTY, SHA3_NULL_RLP};
|
||||||
use util::trie::{TrieDB, Trie};
|
use util::trie::{TrieDB, Trie};
|
||||||
use rlp::{RlpStream, UntrustedRlp, View};
|
use rlp::{RlpStream, UntrustedRlp};
|
||||||
|
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|
||||||
@ -180,7 +180,7 @@ mod tests {
|
|||||||
|
|
||||||
use util::sha3::{SHA3_EMPTY, SHA3_NULL_RLP};
|
use util::sha3::{SHA3_EMPTY, SHA3_NULL_RLP};
|
||||||
use util::{Address, H256, HashDB, DBValue};
|
use util::{Address, H256, HashDB, DBValue};
|
||||||
use rlp::{UntrustedRlp, View};
|
use rlp::UntrustedRlp;
|
||||||
|
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ use block::Block;
|
|||||||
use header::Header;
|
use header::Header;
|
||||||
|
|
||||||
use views::BlockView;
|
use views::BlockView;
|
||||||
use rlp::{DecoderError, RlpStream, UntrustedRlp, View};
|
use rlp::{DecoderError, RlpStream, UntrustedRlp};
|
||||||
use util::{Bytes, Hashable, H256};
|
use util::{Bytes, Hashable, H256};
|
||||||
use util::triehash::ordered_trie_root;
|
use util::triehash::ordered_trie_root;
|
||||||
|
|
||||||
@ -101,8 +101,8 @@ impl AbridgedBlock {
|
|||||||
header.set_timestamp(rlp.val_at(6)?);
|
header.set_timestamp(rlp.val_at(6)?);
|
||||||
header.set_extra_data(rlp.val_at(7)?);
|
header.set_extra_data(rlp.val_at(7)?);
|
||||||
|
|
||||||
let transactions = rlp.val_at(8)?;
|
let transactions = rlp.list_at(8)?;
|
||||||
let uncles: Vec<Header> = rlp.val_at(9)?;
|
let uncles: Vec<Header> = rlp.list_at(9)?;
|
||||||
|
|
||||||
header.set_transactions_root(ordered_trie_root(
|
header.set_transactions_root(ordered_trie_root(
|
||||||
rlp.at(8)?.iter().map(|r| r.as_raw().to_owned())
|
rlp.at(8)?.iter().map(|r| r.as_raw().to_owned())
|
||||||
@ -114,7 +114,7 @@ impl AbridgedBlock {
|
|||||||
header.set_uncles_hash(uncles_rlp.as_raw().sha3());
|
header.set_uncles_hash(uncles_rlp.as_raw().sha3());
|
||||||
|
|
||||||
let mut seal_fields = Vec::new();
|
let mut seal_fields = Vec::new();
|
||||||
for i in (HEADER_FIELDS + BLOCK_FIELDS)..rlp.item_count() {
|
for i in (HEADER_FIELDS + BLOCK_FIELDS)..rlp.item_count()? {
|
||||||
let seal_rlp = rlp.at(i)?;
|
let seal_rlp = rlp.at(i)?;
|
||||||
seal_fields.push(seal_rlp.as_raw().to_owned());
|
seal_fields.push(seal_rlp.as_raw().to_owned());
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ use std::path::{Path, PathBuf};
|
|||||||
|
|
||||||
use util::Bytes;
|
use util::Bytes;
|
||||||
use util::hash::H256;
|
use util::hash::H256;
|
||||||
use rlp::{self, Encodable, RlpStream, UntrustedRlp, View};
|
use rlp::{self, Encodable, RlpStream, UntrustedRlp};
|
||||||
|
|
||||||
use super::ManifestData;
|
use super::ManifestData;
|
||||||
|
|
||||||
@ -57,12 +57,10 @@ impl Encodable for ChunkInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl rlp::Decodable for ChunkInfo {
|
impl rlp::Decodable for ChunkInfo {
|
||||||
fn decode<D: rlp::Decoder>(decoder: &D) -> Result<Self, rlp::DecoderError> {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, rlp::DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
let hash = rlp.val_at(0)?;
|
||||||
|
let len = rlp.val_at(1)?;
|
||||||
let hash = d.val_at(0)?;
|
let off = rlp.val_at(2)?;
|
||||||
let len = d.val_at(1)?;
|
|
||||||
let off = d.val_at(2)?;
|
|
||||||
Ok(ChunkInfo(hash, len, off))
|
Ok(ChunkInfo(hash, len, off))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -257,8 +255,8 @@ impl PackedReader {
|
|||||||
|
|
||||||
let rlp = UntrustedRlp::new(&manifest_buf);
|
let rlp = UntrustedRlp::new(&manifest_buf);
|
||||||
|
|
||||||
let state: Vec<ChunkInfo> = rlp.val_at(0)?;
|
let state: Vec<ChunkInfo> = rlp.list_at(0)?;
|
||||||
let blocks: Vec<ChunkInfo> = rlp.val_at(1)?;
|
let blocks: Vec<ChunkInfo> = rlp.list_at(1)?;
|
||||||
|
|
||||||
let manifest = ManifestData {
|
let manifest = ManifestData {
|
||||||
state_hashes: state.iter().map(|c| c.0).collect(),
|
state_hashes: state.iter().map(|c| c.0).collect(),
|
||||||
|
@ -37,7 +37,7 @@ use util::journaldb::{self, Algorithm, JournalDB};
|
|||||||
use util::kvdb::Database;
|
use util::kvdb::Database;
|
||||||
use util::trie::{TrieDB, TrieDBMut, Trie, TrieMut};
|
use util::trie::{TrieDB, TrieDBMut, Trie, TrieMut};
|
||||||
use util::sha3::SHA3_NULL_RLP;
|
use util::sha3::SHA3_NULL_RLP;
|
||||||
use rlp::{RlpStream, UntrustedRlp, View};
|
use rlp::{RlpStream, UntrustedRlp};
|
||||||
use bloom_journal::Bloom;
|
use bloom_journal::Bloom;
|
||||||
|
|
||||||
use self::block::AbridgedBlock;
|
use self::block::AbridgedBlock;
|
||||||
@ -408,10 +408,10 @@ impl StateRebuilder {
|
|||||||
pub fn feed(&mut self, chunk: &[u8], flag: &AtomicBool) -> Result<(), ::error::Error> {
|
pub fn feed(&mut self, chunk: &[u8], flag: &AtomicBool) -> Result<(), ::error::Error> {
|
||||||
let rlp = UntrustedRlp::new(chunk);
|
let rlp = UntrustedRlp::new(chunk);
|
||||||
let empty_rlp = StateAccount::new_basic(U256::zero(), U256::zero()).rlp();
|
let empty_rlp = StateAccount::new_basic(U256::zero(), U256::zero()).rlp();
|
||||||
let mut pairs = Vec::with_capacity(rlp.item_count());
|
let mut pairs = Vec::with_capacity(rlp.item_count()?);
|
||||||
|
|
||||||
// initialize the pairs vector with empty values so we have slots to write into.
|
// initialize the pairs vector with empty values so we have slots to write into.
|
||||||
pairs.resize(rlp.item_count(), (H256::new(), Vec::new()));
|
pairs.resize(rlp.item_count()?, (H256::new(), Vec::new()));
|
||||||
|
|
||||||
let status = rebuild_accounts(
|
let status = rebuild_accounts(
|
||||||
self.db.as_hashdb_mut(),
|
self.db.as_hashdb_mut(),
|
||||||
@ -601,7 +601,7 @@ impl BlockRebuilder {
|
|||||||
use util::triehash::ordered_trie_root;
|
use util::triehash::ordered_trie_root;
|
||||||
|
|
||||||
let rlp = UntrustedRlp::new(chunk);
|
let rlp = UntrustedRlp::new(chunk);
|
||||||
let item_count = rlp.item_count();
|
let item_count = rlp.item_count()?;
|
||||||
let num_blocks = (item_count - 3) as u64;
|
let num_blocks = (item_count - 3) as u64;
|
||||||
|
|
||||||
trace!(target: "snapshot", "restoring block chunk with {} blocks.", item_count - 3);
|
trace!(target: "snapshot", "restoring block chunk with {} blocks.", item_count - 3);
|
||||||
@ -621,7 +621,7 @@ impl BlockRebuilder {
|
|||||||
let pair = rlp.at(idx)?;
|
let pair = rlp.at(idx)?;
|
||||||
let abridged_rlp = pair.at(0)?.as_raw().to_owned();
|
let abridged_rlp = pair.at(0)?.as_raw().to_owned();
|
||||||
let abridged_block = AbridgedBlock::from_raw(abridged_rlp);
|
let abridged_block = AbridgedBlock::from_raw(abridged_rlp);
|
||||||
let receipts: Vec<::receipt::Receipt> = pair.val_at(1)?;
|
let receipts: Vec<::receipt::Receipt> = pair.list_at(1)?;
|
||||||
let receipts_root = ordered_trie_root(
|
let receipts_root = ordered_trie_root(
|
||||||
pair.at(1)?.iter().map(|r| r.as_raw().to_owned())
|
pair.at(1)?.iter().map(|r| r.as_raw().to_owned())
|
||||||
);
|
);
|
||||||
|
@ -34,7 +34,7 @@ use super::genesis::Genesis;
|
|||||||
use super::seal::Generic as GenericSeal;
|
use super::seal::Generic as GenericSeal;
|
||||||
use ethereum;
|
use ethereum;
|
||||||
use ethjson;
|
use ethjson;
|
||||||
use rlp::{Rlp, RlpStream, View};
|
use rlp::{Rlp, RlpStream};
|
||||||
|
|
||||||
/// Parameters common to all engines.
|
/// Parameters common to all engines.
|
||||||
#[derive(Debug, PartialEq, Clone, Default)]
|
#[derive(Debug, PartialEq, Clone, Default)]
|
||||||
|
@ -462,7 +462,7 @@ impl fmt::Debug for Account {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use rlp::{UntrustedRlp, RlpType, View, Compressible};
|
use rlp::{UntrustedRlp, RlpType, Compressible};
|
||||||
use util::*;
|
use util::*;
|
||||||
use super::*;
|
use super::*;
|
||||||
use account_db::*;
|
use account_db::*;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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() {
|
||||||
|
@ -25,7 +25,6 @@ use types::filter::Filter;
|
|||||||
use util::*;
|
use util::*;
|
||||||
use devtools::*;
|
use devtools::*;
|
||||||
use miner::Miner;
|
use miner::Miner;
|
||||||
use rlp::View;
|
|
||||||
use spec::Spec;
|
use spec::Spec;
|
||||||
use views::BlockView;
|
use views::BlockView;
|
||||||
use ethkey::{KeyPair, Secret};
|
use ethkey::{KeyPair, Secret};
|
||||||
|
@ -60,8 +60,8 @@ impl Into<BloomGroup> for BlockTracesBloomGroup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for BlockTracesBloom {
|
impl Decodable for BlockTracesBloom {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
Decodable::decode(decoder).map(BlockTracesBloom)
|
LogBloom::decode(rlp).map(BlockTracesBloom)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,8 +72,8 @@ impl Encodable for BlockTracesBloom {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for BlockTracesBloomGroup {
|
impl Decodable for BlockTracesBloomGroup {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let blooms = Decodable::decode(decoder)?;
|
let blooms = rlp.as_list()?;
|
||||||
let group = BlockTracesBloomGroup {
|
let group = BlockTracesBloomGroup {
|
||||||
blooms: blooms
|
blooms: blooms
|
||||||
};
|
};
|
||||||
|
@ -43,8 +43,7 @@ impl Encodable for BasicAccount {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for BasicAccount {
|
impl Decodable for BasicAccount {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
Ok(BasicAccount {
|
Ok(BasicAccount {
|
||||||
nonce: rlp.val_at(0)?,
|
nonce: rlp.val_at(0)?,
|
||||||
balance: rlp.val_at(1)?,
|
balance: rlp.val_at(1)?,
|
||||||
|
@ -29,7 +29,7 @@ use transaction::UnverifiedTransaction;
|
|||||||
use views;
|
use views;
|
||||||
|
|
||||||
use util::{Address, Hashable, H256, H2048, U256, HeapSizeOf};
|
use util::{Address, Hashable, H256, H2048, U256, HeapSizeOf};
|
||||||
use rlp::{Rlp, View};
|
use rlp::Rlp;
|
||||||
|
|
||||||
/// Owning header view.
|
/// Owning header view.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
|
@ -51,8 +51,8 @@ impl Encodable for CallType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for CallType {
|
impl Decodable for CallType {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
decoder.as_rlp().as_val().and_then(|v| Ok(match v {
|
rlp.as_val().and_then(|v| Ok(match v {
|
||||||
0u32 => CallType::None,
|
0u32 => CallType::None,
|
||||||
1 => CallType::Call,
|
1 => CallType::Call,
|
||||||
2 => CallType::CallCode,
|
2 => CallType::CallCode,
|
||||||
|
@ -47,12 +47,11 @@ impl Encodable for LogEntry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for LogEntry {
|
impl Decodable for LogEntry {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
let entry = LogEntry {
|
let entry = LogEntry {
|
||||||
address: d.val_at(0)?,
|
address: rlp.val_at(0)?,
|
||||||
topics: d.val_at(1)?,
|
topics: rlp.list_at(1)?,
|
||||||
data: d.val_at(2)?,
|
data: rlp.val_at(2)?,
|
||||||
};
|
};
|
||||||
Ok(entry)
|
Ok(entry)
|
||||||
}
|
}
|
||||||
|
@ -65,21 +65,20 @@ impl Encodable for Receipt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Receipt {
|
impl Decodable for Receipt {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
if rlp.item_count()? == 3 {
|
||||||
if d.item_count() == 3 {
|
|
||||||
Ok(Receipt {
|
Ok(Receipt {
|
||||||
state_root: None,
|
state_root: None,
|
||||||
gas_used: d.val_at(0)?,
|
gas_used: rlp.val_at(0)?,
|
||||||
log_bloom: d.val_at(1)?,
|
log_bloom: rlp.val_at(1)?,
|
||||||
logs: d.val_at(2)?,
|
logs: rlp.list_at(2)?,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
Ok(Receipt {
|
Ok(Receipt {
|
||||||
state_root: Some(d.val_at(0)?),
|
state_root: Some(rlp.val_at(0)?),
|
||||||
gas_used: d.val_at(1)?,
|
gas_used: rlp.val_at(1)?,
|
||||||
log_bloom: d.val_at(2)?,
|
log_bloom: rlp.val_at(2)?,
|
||||||
logs: d.val_at(3)?,
|
logs: rlp.list_at(3)?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,8 +53,8 @@ impl ManifestData {
|
|||||||
pub fn from_rlp(raw: &[u8]) -> Result<Self, DecoderError> {
|
pub fn from_rlp(raw: &[u8]) -> Result<Self, DecoderError> {
|
||||||
let decoder = UntrustedRlp::new(raw);
|
let decoder = UntrustedRlp::new(raw);
|
||||||
|
|
||||||
let state_hashes: Vec<H256> = decoder.val_at(0)?;
|
let state_hashes: Vec<H256> = decoder.list_at(0)?;
|
||||||
let block_hashes: Vec<H256> = decoder.val_at(1)?;
|
let block_hashes: Vec<H256> = decoder.list_at(1)?;
|
||||||
let state_root: H256 = decoder.val_at(2)?;
|
let state_root: H256 = decoder.val_at(2)?;
|
||||||
let block_number: u64 = decoder.val_at(3)?;
|
let block_number: u64 = decoder.val_at(3)?;
|
||||||
let block_hash: H256 = decoder.val_at(4)?;
|
let block_hash: H256 = decoder.val_at(4)?;
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
//! Trace errors.
|
//! Trace errors.
|
||||||
|
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use rlp::{Encodable, RlpStream, Decodable, Decoder, DecoderError, View};
|
use rlp::{Encodable, RlpStream, Decodable, DecoderError, UntrustedRlp};
|
||||||
use evm::Error as EvmError;
|
use evm::Error as EvmError;
|
||||||
|
|
||||||
/// Trace evm errors.
|
/// Trace evm errors.
|
||||||
@ -91,9 +91,9 @@ impl Encodable for Error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Error {
|
impl Decodable for Error {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
use self::Error::*;
|
use self::Error::*;
|
||||||
let value: u8 = decoder.as_rlp().as_val()?;
|
let value: u8 = rlp.as_val()?;
|
||||||
match value {
|
match value {
|
||||||
0 => Ok(OutOfGas),
|
0 => Ok(OutOfGas),
|
||||||
1 => Ok(BadJumpDestination),
|
1 => Ok(BadJumpDestination),
|
||||||
|
@ -64,9 +64,8 @@ impl Encodable for FlatTrace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for FlatTrace {
|
impl Decodable for FlatTrace {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(d: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
let v: Vec<usize> = d.list_at(3)?;
|
||||||
let v: Vec<usize> = d.val_at(3)?;
|
|
||||||
let res = FlatTrace {
|
let res = FlatTrace {
|
||||||
action: d.val_at(0)?,
|
action: d.val_at(0)?,
|
||||||
result: d.val_at(1)?,
|
result: d.val_at(1)?,
|
||||||
@ -108,8 +107,8 @@ impl Encodable for FlatTransactionTraces {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for FlatTransactionTraces {
|
impl Decodable for FlatTransactionTraces {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
Ok(FlatTransactionTraces(Decodable::decode(decoder)?))
|
Ok(FlatTransactionTraces(rlp.as_list()?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,8 +148,8 @@ impl Encodable for FlatBlockTraces {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for FlatBlockTraces {
|
impl Decodable for FlatBlockTraces {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
Ok(FlatBlockTraces(Decodable::decode(decoder)?))
|
Ok(FlatBlockTraces(rlp.as_list()?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,11 +45,10 @@ impl Encodable for CallResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for CallResult {
|
impl Decodable for CallResult {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
let res = CallResult {
|
let res = CallResult {
|
||||||
gas_used: d.val_at(0)?,
|
gas_used: rlp.val_at(0)?,
|
||||||
output: d.val_at(1)?,
|
output: rlp.val_at(1)?,
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
@ -78,12 +77,11 @@ impl Encodable for CreateResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for CreateResult {
|
impl Decodable for CreateResult {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
let res = CreateResult {
|
let res = CreateResult {
|
||||||
gas_used: d.val_at(0)?,
|
gas_used: rlp.val_at(0)?,
|
||||||
code: d.val_at(1)?,
|
code: rlp.val_at(1)?,
|
||||||
address: d.val_at(2)?,
|
address: rlp.val_at(2)?,
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
@ -141,15 +139,14 @@ impl Encodable for Call {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Call {
|
impl Decodable for Call {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
let res = Call {
|
let res = Call {
|
||||||
from: d.val_at(0)?,
|
from: rlp.val_at(0)?,
|
||||||
to: d.val_at(1)?,
|
to: rlp.val_at(1)?,
|
||||||
value: d.val_at(2)?,
|
value: rlp.val_at(2)?,
|
||||||
gas: d.val_at(3)?,
|
gas: rlp.val_at(3)?,
|
||||||
input: d.val_at(4)?,
|
input: rlp.val_at(4)?,
|
||||||
call_type: d.val_at(5)?,
|
call_type: rlp.val_at(5)?,
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
@ -201,13 +198,12 @@ impl Encodable for Create {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Create {
|
impl Decodable for Create {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
let res = Create {
|
let res = Create {
|
||||||
from: d.val_at(0)?,
|
from: rlp.val_at(0)?,
|
||||||
value: d.val_at(1)?,
|
value: rlp.val_at(1)?,
|
||||||
gas: d.val_at(2)?,
|
gas: rlp.val_at(2)?,
|
||||||
init: d.val_at(3)?,
|
init: rlp.val_at(3)?,
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
@ -252,12 +248,11 @@ impl Encodable for Suicide {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Suicide {
|
impl Decodable for Suicide {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
let res = Suicide {
|
let res = Suicide {
|
||||||
address: d.val_at(0)?,
|
address: rlp.val_at(0)?,
|
||||||
refund_address: d.val_at(1)?,
|
refund_address: rlp.val_at(1)?,
|
||||||
balance: d.val_at(2)?,
|
balance: rlp.val_at(2)?,
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
@ -298,13 +293,12 @@ impl Encodable for Action {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Action {
|
impl Decodable for Action {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
let action_type: u8 = rlp.val_at(0)?;
|
||||||
let action_type: u8 = d.val_at(0)?;
|
|
||||||
match action_type {
|
match action_type {
|
||||||
0 => d.val_at(1).map(Action::Call),
|
0 => rlp.val_at(1).map(Action::Call),
|
||||||
1 => d.val_at(1).map(Action::Create),
|
1 => rlp.val_at(1).map(Action::Create),
|
||||||
2 => d.val_at(1).map(Action::Suicide),
|
2 => rlp.val_at(1).map(Action::Suicide),
|
||||||
_ => Err(DecoderError::Custom("Invalid action type.")),
|
_ => Err(DecoderError::Custom("Invalid action type.")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -369,14 +363,13 @@ impl Encodable for Res {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Res {
|
impl Decodable for Res {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
let action_type: u8 = rlp.val_at(0)?;
|
||||||
let action_type: u8 = d.val_at(0)?;
|
|
||||||
match action_type {
|
match action_type {
|
||||||
0 => d.val_at(1).map(Res::Call),
|
0 => rlp.val_at(1).map(Res::Call),
|
||||||
1 => d.val_at(1).map(Res::Create),
|
1 => rlp.val_at(1).map(Res::Create),
|
||||||
2 => d.val_at(1).map(Res::FailedCall),
|
2 => rlp.val_at(1).map(Res::FailedCall),
|
||||||
3 => d.val_at(1).map(Res::FailedCreate),
|
3 => rlp.val_at(1).map(Res::FailedCreate),
|
||||||
4 => Ok(Res::None),
|
4 => Ok(Res::None),
|
||||||
_ => Err(DecoderError::Custom("Invalid result type.")),
|
_ => Err(DecoderError::Custom("Invalid result type.")),
|
||||||
}
|
}
|
||||||
@ -420,11 +413,10 @@ impl Encodable for MemoryDiff {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for MemoryDiff {
|
impl Decodable for MemoryDiff {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
Ok(MemoryDiff {
|
Ok(MemoryDiff {
|
||||||
offset: d.val_at(0)?,
|
offset: rlp.val_at(0)?,
|
||||||
data: d.val_at(1)?,
|
data: rlp.val_at(1)?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -448,11 +440,10 @@ impl Encodable for StorageDiff {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for StorageDiff {
|
impl Decodable for StorageDiff {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
Ok(StorageDiff {
|
Ok(StorageDiff {
|
||||||
location: d.val_at(0)?,
|
location: rlp.val_at(0)?,
|
||||||
value: d.val_at(1)?,
|
value: rlp.val_at(1)?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -482,13 +473,12 @@ impl Encodable for VMExecutedOperation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for VMExecutedOperation {
|
impl Decodable for VMExecutedOperation {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
Ok(VMExecutedOperation {
|
Ok(VMExecutedOperation {
|
||||||
gas_used: d.val_at(0)?,
|
gas_used: rlp.val_at(0)?,
|
||||||
stack_push: d.val_at(1)?,
|
stack_push: rlp.list_at(1)?,
|
||||||
mem_diff: d.val_at(2)?,
|
mem_diff: rlp.val_at(2)?,
|
||||||
store_diff: d.val_at(3)?,
|
store_diff: rlp.val_at(3)?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -518,13 +508,12 @@ impl Encodable for VMOperation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for VMOperation {
|
impl Decodable for VMOperation {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
let res = VMOperation {
|
let res = VMOperation {
|
||||||
pc: d.val_at(0)?,
|
pc: rlp.val_at(0)?,
|
||||||
instruction: d.val_at(1)?,
|
instruction: rlp.val_at(1)?,
|
||||||
gas_cost: d.val_at(2)?,
|
gas_cost: rlp.val_at(2)?,
|
||||||
executed: d.val_at(3)?,
|
executed: rlp.val_at(3)?,
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
@ -557,13 +546,12 @@ impl Encodable for VMTrace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for VMTrace {
|
impl Decodable for VMTrace {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
|
||||||
let res = VMTrace {
|
let res = VMTrace {
|
||||||
parent_step: d.val_at(0)?,
|
parent_step: rlp.val_at(0)?,
|
||||||
code: d.val_at(1)?,
|
code: rlp.val_at(1)?,
|
||||||
operations: d.val_at(2)?,
|
operations: rlp.list_at(2)?,
|
||||||
subs: d.val_at(3)?,
|
subs: rlp.list_at(3)?,
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
|
@ -42,8 +42,7 @@ impl Default for Action {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for Action {
|
impl Decodable for Action {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let rlp = decoder.as_rlp();
|
|
||||||
if rlp.is_empty() {
|
if rlp.is_empty() {
|
||||||
Ok(Action::Create)
|
Ok(Action::Create)
|
||||||
} else {
|
} else {
|
||||||
@ -243,12 +242,11 @@ impl Deref for UnverifiedTransaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Decodable for UnverifiedTransaction {
|
impl Decodable for UnverifiedTransaction {
|
||||||
fn decode<D>(decoder: &D) -> Result<Self, DecoderError> where D: Decoder {
|
fn decode(d: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||||
let d = decoder.as_rlp();
|
if d.item_count()? != 9 {
|
||||||
if d.item_count() != 9 {
|
|
||||||
return Err(DecoderError::RlpIncorrectListLen);
|
return Err(DecoderError::RlpIncorrectListLen);
|
||||||
}
|
}
|
||||||
let hash = decoder.as_raw().sha3();
|
let hash = d.as_raw().sha3();
|
||||||
Ok(UnverifiedTransaction {
|
Ok(UnverifiedTransaction {
|
||||||
unsigned: Transaction {
|
unsigned: Transaction {
|
||||||
nonce: d.val_at(0)?,
|
nonce: d.val_at(0)?,
|
||||||
|
@ -26,7 +26,7 @@ use engines::Engine;
|
|||||||
use error::{BlockError, Error};
|
use error::{BlockError, Error};
|
||||||
use blockchain::*;
|
use blockchain::*;
|
||||||
use header::{BlockNumber, Header};
|
use header::{BlockNumber, Header};
|
||||||
use rlp::{UntrustedRlp, View};
|
use rlp::UntrustedRlp;
|
||||||
use transaction::SignedTransaction;
|
use transaction::SignedTransaction;
|
||||||
use views::BlockView;
|
use views::BlockView;
|
||||||
use time::get_time;
|
use time::get_time;
|
||||||
@ -101,7 +101,7 @@ pub fn verify_block_family(header: &Header, bytes: &[u8], engine: &Engine, bc: &
|
|||||||
verify_parent(&header, &parent)?;
|
verify_parent(&header, &parent)?;
|
||||||
engine.verify_block_family(&header, &parent, Some(bytes))?;
|
engine.verify_block_family(&header, &parent, Some(bytes))?;
|
||||||
|
|
||||||
let num_uncles = UntrustedRlp::new(bytes).at(2)?.item_count();
|
let num_uncles = UntrustedRlp::new(bytes).at(2)?.item_count()?;
|
||||||
if num_uncles != 0 {
|
if num_uncles != 0 {
|
||||||
if num_uncles > engine.maximum_uncle_count() {
|
if num_uncles > engine.maximum_uncle_count() {
|
||||||
return Err(From::from(BlockError::TooManyUncles(OutOfBounds { min: None, max: Some(engine.maximum_uncle_count()), found: num_uncles })));
|
return Err(From::from(BlockError::TooManyUncles(OutOfBounds { min: None, max: Some(engine.maximum_uncle_count()), found: num_uncles })));
|
||||||
@ -264,7 +264,6 @@ mod tests {
|
|||||||
use transaction::*;
|
use transaction::*;
|
||||||
use tests::helpers::*;
|
use tests::helpers::*;
|
||||||
use types::log_entry::{LogEntry, LocalizedLogEntry};
|
use types::log_entry::{LogEntry, LocalizedLogEntry};
|
||||||
use rlp::View;
|
|
||||||
use time::get_time;
|
use time::get_time;
|
||||||
use encoded;
|
use encoded;
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ use util::*;
|
|||||||
use header::*;
|
use header::*;
|
||||||
use transaction::*;
|
use transaction::*;
|
||||||
use super::{TransactionView, HeaderView};
|
use super::{TransactionView, HeaderView};
|
||||||
use rlp::{Rlp, View};
|
use rlp::Rlp;
|
||||||
|
|
||||||
/// View onto block rlp.
|
/// View onto block rlp.
|
||||||
pub struct BlockView<'a> {
|
pub struct BlockView<'a> {
|
||||||
@ -69,7 +69,7 @@ impl<'a> BlockView<'a> {
|
|||||||
|
|
||||||
/// Return List of transactions in given block.
|
/// Return List of transactions in given block.
|
||||||
pub fn transactions(&self) -> Vec<UnverifiedTransaction> {
|
pub fn transactions(&self) -> Vec<UnverifiedTransaction> {
|
||||||
self.rlp.val_at(1)
|
self.rlp.list_at(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return List of transactions with additional localization info.
|
/// Return List of transactions with additional localization info.
|
||||||
@ -125,7 +125,7 @@ impl<'a> BlockView<'a> {
|
|||||||
|
|
||||||
/// Return list of uncles of given block.
|
/// Return list of uncles of given block.
|
||||||
pub fn uncles(&self) -> Vec<Header> {
|
pub fn uncles(&self) -> Vec<Header> {
|
||||||
self.rlp.val_at(2)
|
self.rlp.list_at(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return number of uncles in given block, without deserializing them.
|
/// Return number of uncles in given block, without deserializing them.
|
||||||
|
@ -20,7 +20,7 @@ use util::*;
|
|||||||
use header::*;
|
use header::*;
|
||||||
use transaction::*;
|
use transaction::*;
|
||||||
use super::{TransactionView, HeaderView};
|
use super::{TransactionView, HeaderView};
|
||||||
use rlp::{Rlp, View};
|
use rlp::Rlp;
|
||||||
|
|
||||||
/// View onto block rlp.
|
/// View onto block rlp.
|
||||||
pub struct BodyView<'a> {
|
pub struct BodyView<'a> {
|
||||||
@ -49,7 +49,7 @@ impl<'a> BodyView<'a> {
|
|||||||
|
|
||||||
/// Return List of transactions in given block.
|
/// Return List of transactions in given block.
|
||||||
pub fn transactions(&self) -> Vec<UnverifiedTransaction> {
|
pub fn transactions(&self) -> Vec<UnverifiedTransaction> {
|
||||||
self.rlp.val_at(0)
|
self.rlp.list_at(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return List of transactions with additional localization info.
|
/// Return List of transactions with additional localization info.
|
||||||
@ -99,7 +99,7 @@ impl<'a> BodyView<'a> {
|
|||||||
|
|
||||||
/// Return list of uncles of given block.
|
/// Return list of uncles of given block.
|
||||||
pub fn uncles(&self) -> Vec<Header> {
|
pub fn uncles(&self) -> Vec<Header> {
|
||||||
self.rlp.val_at(1)
|
self.rlp.list_at(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return number of uncles in given block, without deserializing them.
|
/// Return number of uncles in given block, without deserializing them.
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
//! View onto block header rlp
|
//! View onto block header rlp
|
||||||
|
|
||||||
use util::{U256, Bytes, Hashable, H256, Address, H2048};
|
use util::{U256, Bytes, Hashable, H256, Address, H2048};
|
||||||
use rlp::{Rlp, View};
|
use rlp::Rlp;
|
||||||
use header::BlockNumber;
|
use header::BlockNumber;
|
||||||
|
|
||||||
/// View onto block header rlp.
|
/// View onto block header rlp.
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
//! View onto transaction rlp
|
//! View onto transaction rlp
|
||||||
use util::{U256, Bytes, Hashable, H256};
|
use util::{U256, Bytes, Hashable, H256};
|
||||||
use rlp::{Rlp, View};
|
use rlp::Rlp;
|
||||||
|
|
||||||
/// View onto transaction rlp.
|
/// View onto transaction rlp.
|
||||||
pub struct TransactionView<'a> {
|
pub struct TransactionView<'a> {
|
||||||
|
@ -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 }
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,21 +720,15 @@ 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";
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn client_ident_renamed(cx: &ExtCtxt, item: &ast::Item) -> Option<String> {
|
|
||||||
for meta_items in item.attrs().iter().filter_map(get_ipc_meta_items) {
|
|
||||||
for meta_item in meta_items {
|
|
||||||
match meta_item.node {
|
match meta_item.node {
|
||||||
ast::MetaItemKind::NameValue(ref name, ref lit) if name == &"client_ident" => {
|
ast::MetaItemKind::NameValue(ref lit) if is_client_ident => {
|
||||||
if let Ok(s) = get_str_from_lit(cx, name, lit) {
|
if let Ok(s) = get_str_from_lit(cx, "client_ident", lit) {
|
||||||
return Some(s);
|
return Some(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -739,11 +736,15 @@ fn client_ident_renamed(cx: &ExtCtxt, item: &ast::Item) -> Option<String> {
|
|||||||
cx.span_err(
|
cx.span_err(
|
||||||
meta_item.span,
|
meta_item.span,
|
||||||
&format!("unknown client_ident container attribute `{}`",
|
&format!("unknown client_ident container attribute `{}`",
|
||||||
::syntax::print::pprust::meta_item_to_string(meta_item)));
|
::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,
|
||||||
|
@ -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; }
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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"
|
||||||
|
|
||||||
|
@ -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"
|
||||||
|
|
||||||
|
@ -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>",
|
||||||
|
@ -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) => {
|
||||||
|
@ -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()})`);
|
||||||
|
}
|
||||||
|
@ -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');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -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 = [];
|
||||||
|
@ -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([]);
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
|
||||||
}
|
}
|
||||||
|
@ -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 = (
|
|
||||||
<IconButton className={ styles.button }>
|
|
||||||
{ selected
|
|
||||||
? (
|
|
||||||
<IdentityIcon
|
|
||||||
className={ styles.icon }
|
|
||||||
address={ selected.address }
|
|
||||||
/>
|
|
||||||
) : (
|
|
||||||
<AccountIcon
|
<AccountIcon
|
||||||
className={ styles.icon }
|
className={ styles.icon }
|
||||||
color='white'
|
color='white'
|
||||||
/>
|
/>
|
||||||
)
|
|
||||||
}
|
|
||||||
</IconButton>);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<IconMenu
|
|
||||||
value={ selected ? this.renderAccount(selected) : null }
|
|
||||||
onChange={ this.onAccountSelect }
|
|
||||||
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 (
|
return (
|
||||||
<MenuItem
|
<IdentityIcon
|
||||||
key={ account.address }
|
className={ styles.icon }
|
||||||
value={ account.address }
|
address={ selected }
|
||||||
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);
|
||||||
|
@ -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);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
@ -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;
|
||||||
|
@ -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>
|
||||||
|
A non-refundable fee of { api.util.fromWei(fee).toFormat(3) } <small>ETH</small>
|
||||||
|
is required for all registrations.
|
||||||
|
</span>
|
||||||
|
)
|
||||||
|
: null
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
handleHideWarning = () => {
|
||||||
|
this.setState({ showWarning: false });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 = [
|
||||||
|
@ -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 = [
|
||||||
|
@ -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 = [
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,12 +82,17 @@ export default class Container extends Component {
|
|||||||
to={ link }
|
to={ link }
|
||||||
>
|
>
|
||||||
{ card }
|
{ card }
|
||||||
|
{ this.renderHover() }
|
||||||
</Link>
|
</Link>
|
||||||
)
|
)
|
||||||
: card
|
: (
|
||||||
}
|
<div>
|
||||||
|
{ card }
|
||||||
{ this.renderHover() }
|
{ this.renderHover() }
|
||||||
</div>
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -25,7 +25,7 @@ use ethcore::transaction::{
|
|||||||
};
|
};
|
||||||
use ethcore::service::ClientIoMessage;
|
use ethcore::service::ClientIoMessage;
|
||||||
use io::IoHandler;
|
use io::IoHandler;
|
||||||
use rlp::{UntrustedRlp, View};
|
use rlp::UntrustedRlp;
|
||||||
use util::kvdb::KeyValueDB;
|
use util::kvdb::KeyValueDB;
|
||||||
|
|
||||||
extern crate ethcore;
|
extern crate ethcore;
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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};
|
||||||
|
|
@ -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};
|
||||||
@ -826,7 +826,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());
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,6 @@ use ethcore::snapshot::{RestorationStatus, SnapshotService as SS};
|
|||||||
use number_prefix::{binary_prefix, Standalone, Prefixed};
|
use number_prefix::{binary_prefix, Standalone, Prefixed};
|
||||||
use ethcore_rpc::{is_major_importing};
|
use ethcore_rpc::{is_major_importing};
|
||||||
use ethcore_rpc::informant::RpcStats;
|
use ethcore_rpc::informant::RpcStats;
|
||||||
use rlp::View;
|
|
||||||
|
|
||||||
pub struct Informant {
|
pub struct Informant {
|
||||||
report: RwLock<Option<ClientReport>>,
|
report: RwLock<Option<ClientReport>>,
|
||||||
|
@ -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;
|
||||||
|
@ -35,6 +35,7 @@ use jsonrpc_core::{MetaIoHandler};
|
|||||||
use light::{TransactionQueue as LightTransactionQueue, Cache as LightDataCache};
|
use light::{TransactionQueue as LightTransactionQueue, Cache as LightDataCache};
|
||||||
use updater::Updater;
|
use updater::Updater;
|
||||||
use util::{Mutex, RwLock, RotatingLogger};
|
use util::{Mutex, RwLock, RotatingLogger};
|
||||||
|
use ethcore_logger::RotatingLogger;
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Clone, Eq, Hash)]
|
#[derive(Debug, PartialEq, Clone, Eq, Hash)]
|
||||||
pub enum Api {
|
pub enum Api {
|
||||||
|
@ -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;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user