Merge branch 'master' of github.com:ethcore/parity
This commit is contained in:
commit
f3a6da7c1e
92
Cargo.lock
generated
92
Cargo.lock
generated
@ -1,6 +1,6 @@
|
|||||||
[root]
|
[root]
|
||||||
name = "parity"
|
name = "parity"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"ansi_term 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"clippy 0.0.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clippy 0.0.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -8,16 +8,16 @@ dependencies = [
|
|||||||
"daemonize 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"daemonize 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"docopt 0.6.80 (registry+https://github.com/rust-lang/crates.io-index)",
|
"docopt 0.6.80 (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 1.2.0",
|
"ethcore 1.3.0",
|
||||||
"ethcore-dapps 1.2.0",
|
"ethcore-dapps 1.3.0",
|
||||||
"ethcore-devtools 1.2.0",
|
"ethcore-devtools 1.3.0",
|
||||||
"ethcore-ipc 1.2.0",
|
"ethcore-ipc 1.3.0",
|
||||||
"ethcore-ipc-codegen 1.2.0",
|
"ethcore-ipc-codegen 1.3.0",
|
||||||
"ethcore-ipc-nano 1.2.0",
|
"ethcore-ipc-nano 1.3.0",
|
||||||
"ethcore-rpc 1.2.0",
|
"ethcore-rpc 1.3.0",
|
||||||
"ethcore-signer 1.2.0",
|
"ethcore-signer 1.3.0",
|
||||||
"ethcore-util 1.2.0",
|
"ethcore-util 1.3.0",
|
||||||
"ethsync 1.2.0",
|
"ethsync 1.3.0",
|
||||||
"fdlimit 0.1.0",
|
"fdlimit 0.1.0",
|
||||||
"hyper 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"hyper 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"json-ipc-server 0.2.3 (git+https://github.com/ethcore/json-ipc-server.git)",
|
"json-ipc-server 0.2.3 (git+https://github.com/ethcore/json-ipc-server.git)",
|
||||||
@ -238,7 +238,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethash"
|
name = "ethash"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
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)",
|
||||||
"primal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"primal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -247,17 +247,17 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethcore"
|
name = "ethcore"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bloomchain 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bloomchain 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"clippy 0.0.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clippy 0.0.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"crossbeam 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
"crossbeam 0.2.9 (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)",
|
||||||
"ethash 1.2.0",
|
"ethash 1.3.0",
|
||||||
"ethcore-devtools 1.2.0",
|
"ethcore-devtools 1.3.0",
|
||||||
"ethcore-ipc 1.2.0",
|
"ethcore-ipc 1.3.0",
|
||||||
"ethcore-ipc-codegen 1.2.0",
|
"ethcore-ipc-codegen 1.3.0",
|
||||||
"ethcore-util 1.2.0",
|
"ethcore-util 1.3.0",
|
||||||
"ethjson 0.1.0",
|
"ethjson 0.1.0",
|
||||||
"ethstore 0.1.0",
|
"ethstore 0.1.0",
|
||||||
"heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -273,11 +273,11 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethcore-dapps"
|
name = "ethcore-dapps"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clippy 0.0.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clippy 0.0.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"ethcore-rpc 1.2.0",
|
"ethcore-rpc 1.3.0",
|
||||||
"ethcore-util 1.2.0",
|
"ethcore-util 1.3.0",
|
||||||
"hyper 0.9.3 (git+https://github.com/ethcore/hyper)",
|
"hyper 0.9.3 (git+https://github.com/ethcore/hyper)",
|
||||||
"jsonrpc-core 2.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"jsonrpc-core 2.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"jsonrpc-http-server 5.1.0 (git+https://github.com/ethcore/jsonrpc-http-server.git)",
|
"jsonrpc-http-server 5.1.0 (git+https://github.com/ethcore/jsonrpc-http-server.git)",
|
||||||
@ -297,24 +297,24 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethcore-devtools"
|
name = "ethcore-devtools"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"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)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethcore-ipc"
|
name = "ethcore-ipc"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ethcore-devtools 1.2.0",
|
"ethcore-devtools 1.3.0",
|
||||||
"ethcore-util 1.2.0",
|
"ethcore-util 1.3.0",
|
||||||
"nanomsg 0.5.1 (git+https://github.com/ethcore/nanomsg.rs.git)",
|
"nanomsg 0.5.1 (git+https://github.com/ethcore/nanomsg.rs.git)",
|
||||||
"semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethcore-ipc-codegen"
|
name = "ethcore-ipc-codegen"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aster 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"aster 0.17.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.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -325,9 +325,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethcore-ipc-nano"
|
name = "ethcore-ipc-nano"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ethcore-ipc 1.2.0",
|
"ethcore-ipc 1.3.0",
|
||||||
"jsonrpc-core 2.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"jsonrpc-core 2.0.7 (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)",
|
||||||
"nanomsg 0.5.1 (git+https://github.com/ethcore/nanomsg.rs.git)",
|
"nanomsg 0.5.1 (git+https://github.com/ethcore/nanomsg.rs.git)",
|
||||||
@ -335,15 +335,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethcore-rpc"
|
name = "ethcore-rpc"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clippy 0.0.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clippy 0.0.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"ethash 1.2.0",
|
"ethash 1.3.0",
|
||||||
"ethcore 1.2.0",
|
"ethcore 1.3.0",
|
||||||
"ethcore-devtools 1.2.0",
|
"ethcore-devtools 1.3.0",
|
||||||
"ethcore-util 1.2.0",
|
"ethcore-util 1.3.0",
|
||||||
"ethjson 0.1.0",
|
"ethjson 0.1.0",
|
||||||
"ethsync 1.2.0",
|
"ethsync 1.3.0",
|
||||||
"json-ipc-server 0.2.3 (git+https://github.com/ethcore/json-ipc-server.git)",
|
"json-ipc-server 0.2.3 (git+https://github.com/ethcore/json-ipc-server.git)",
|
||||||
"jsonrpc-core 2.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"jsonrpc-core 2.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"jsonrpc-http-server 5.1.0 (git+https://github.com/ethcore/jsonrpc-http-server.git)",
|
"jsonrpc-http-server 5.1.0 (git+https://github.com/ethcore/jsonrpc-http-server.git)",
|
||||||
@ -358,12 +358,12 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethcore-signer"
|
name = "ethcore-signer"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clippy 0.0.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clippy 0.0.77 (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-rpc 1.2.0",
|
"ethcore-rpc 1.3.0",
|
||||||
"ethcore-util 1.2.0",
|
"ethcore-util 1.3.0",
|
||||||
"jsonrpc-core 2.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"jsonrpc-core 2.0.7 (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)",
|
||||||
"parity-minimal-sysui 0.1.0 (git+https://github.com/ethcore/parity-dapps-minimal-sysui-rs.git)",
|
"parity-minimal-sysui 0.1.0 (git+https://github.com/ethcore/parity-dapps-minimal-sysui-rs.git)",
|
||||||
@ -374,7 +374,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethcore-util"
|
name = "ethcore-util"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
"arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"bigint 0.1.0",
|
"bigint 0.1.0",
|
||||||
@ -384,7 +384,7 @@ dependencies = [
|
|||||||
"elastic-array 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"elastic-array 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"eth-secp256k1 0.5.4 (git+https://github.com/ethcore/rust-secp256k1)",
|
"eth-secp256k1 0.5.4 (git+https://github.com/ethcore/rust-secp256k1)",
|
||||||
"ethcore-devtools 1.2.0",
|
"ethcore-devtools 1.3.0",
|
||||||
"heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"igd 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"igd 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"itertools 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
"itertools 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -412,7 +412,7 @@ dependencies = [
|
|||||||
name = "ethjson"
|
name = "ethjson"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ethcore-util 1.2.0",
|
"ethcore-util 1.3.0",
|
||||||
"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)",
|
||||||
"serde 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_codegen 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_codegen 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -449,12 +449,12 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethsync"
|
name = "ethsync"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clippy 0.0.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clippy 0.0.77 (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 1.2.0",
|
"ethcore 1.3.0",
|
||||||
"ethcore-util 1.2.0",
|
"ethcore-util 1.3.0",
|
||||||
"heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"heapsize 0.3.5 (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)",
|
||||||
"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)",
|
||||||
@ -936,7 +936,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "parity-dapps-builtins"
|
name = "parity-dapps-builtins"
|
||||||
version = "0.5.1"
|
version = "0.5.1"
|
||||||
source = "git+https://github.com/ethcore/parity-dapps-builtins-rs.git#650b0d94d076635904b86c1fd45c5f4a2061463f"
|
source = "git+https://github.com/ethcore/parity-dapps-builtins-rs.git#7408838e8ca3b57c6b0cf5da2e31e0e275959955"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"parity-dapps 0.3.0 (git+https://github.com/ethcore/parity-dapps-rs.git)",
|
"parity-dapps 0.3.0 (git+https://github.com/ethcore/parity-dapps-rs.git)",
|
||||||
]
|
]
|
||||||
@ -952,7 +952,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "parity-dapps-wallet"
|
name = "parity-dapps-wallet"
|
||||||
version = "0.6.1"
|
version = "0.6.1"
|
||||||
source = "git+https://github.com/ethcore/parity-dapps-wallet-rs.git#8923d4c73359c75ce04f0639bbcde46adb846b81"
|
source = "git+https://github.com/ethcore/parity-dapps-wallet-rs.git#867994fe25038f000f1cc09cd024a83700a03930"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"parity-dapps 0.3.0 (git+https://github.com/ethcore/parity-dapps-rs.git)",
|
"parity-dapps 0.3.0 (git+https://github.com/ethcore/parity-dapps-rs.git)",
|
||||||
]
|
]
|
||||||
@ -960,7 +960,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "parity-minimal-sysui"
|
name = "parity-minimal-sysui"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/ethcore/parity-dapps-minimal-sysui-rs.git#3c6ad40680126a760eb867b07b506ea996819ce3"
|
source = "git+https://github.com/ethcore/parity-dapps-minimal-sysui-rs.git#cc5ea4bd786982f0509a8d3d5deb4217c659af85"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "phf"
|
name = "phf"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
description = "Ethcore client."
|
description = "Ethcore client."
|
||||||
name = "parity"
|
name = "parity"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
authors = ["Ethcore <admin@ethcore.io>"]
|
authors = ["Ethcore <admin@ethcore.io>"]
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
@ -31,7 +31,7 @@ In a near-future release, it will be easy to install Dapps and use them through
|
|||||||
If you run into an issue while using parity, feel free to file one in this repository
|
If you run into an issue while using parity, feel free to file one in this repository
|
||||||
or hop on our [gitter chat room]([gitter-url]) to ask a question. We are glad to help!
|
or hop on our [gitter chat room]([gitter-url]) to ask a question. We are glad to help!
|
||||||
|
|
||||||
Parity's current release is 1.1. You can download it at https://ethcore.io/parity.html or follow the instructions
|
Parity's current release is 1.2. You can download it at https://ethcore.io/parity.html or follow the instructions
|
||||||
below to build from source.
|
below to build from source.
|
||||||
|
|
||||||
----
|
----
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
description = "Parity Dapps crate"
|
description = "Parity Dapps crate"
|
||||||
name = "ethcore-dapps"
|
name = "ethcore-dapps"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
authors = ["Ethcore <admin@ethcore.io"]
|
authors = ["Ethcore <admin@ethcore.io"]
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
@ -3,7 +3,7 @@ description = "Ethcore Database"
|
|||||||
homepage = "http://ethcore.io"
|
homepage = "http://ethcore.io"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
name = "ethcore-db"
|
name = "ethcore-db"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
authors = ["Ethcore <admin@ethcore.io>"]
|
authors = ["Ethcore <admin@ethcore.io>"]
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ description = "Ethcore development/test/build tools"
|
|||||||
homepage = "http://ethcore.io"
|
homepage = "http://ethcore.io"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
name = "ethcore-devtools"
|
name = "ethcore-devtools"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
authors = ["Ethcore <admin@ethcore.io>"]
|
authors = ["Ethcore <admin@ethcore.io>"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
@ -2,24 +2,26 @@ FROM centos:latest
|
|||||||
WORKDIR /build
|
WORKDIR /build
|
||||||
# install tools and dependencies
|
# install tools and dependencies
|
||||||
RUN yum -y update&& \
|
RUN yum -y update&& \
|
||||||
yum install -y git make gcc-c++ gcc file
|
yum install -y git make gcc-c++ gcc file binutils
|
||||||
# install rustup
|
# install rustup
|
||||||
RUN curl -sSf https://static.rust-lang.org/rustup.sh -o rustup.sh &&\
|
RUN curl -sSf https://static.rust-lang.org/rustup.sh -o rustup.sh &&\
|
||||||
ls&&\
|
ls&&\
|
||||||
sh rustup.sh -s -- --disable-sudo
|
sh rustup.sh -s -- --disable-sudo
|
||||||
# show backtraces
|
# show backtraces
|
||||||
ENV RUST_BACKTRACE 1
|
ENV RUST_BACKTRACE 1
|
||||||
|
# set compiler
|
||||||
ENV CXX g++
|
ENV CXX g++
|
||||||
ENV CC gcc
|
ENV CC gcc
|
||||||
|
# show tools
|
||||||
RUN rustc -vV && \
|
RUN rustc -vV && \
|
||||||
cargo -V && \
|
cargo -V && \
|
||||||
gcc -v &&\
|
gcc -v &&\
|
||||||
g++ -v
|
g++ -v
|
||||||
# git clone parity
|
# build parity
|
||||||
RUN git clone https://github.com/ethcore/parity && \
|
RUN git clone https://github.com/ethcore/parity && \
|
||||||
cd parity&&\
|
cd parity&&\
|
||||||
ls -a&&\
|
ls -a&&\
|
||||||
cargo build --release --verbose && \
|
cargo build --release --verbose && \
|
||||||
ls /build/parity/target/release/parity && \
|
ls /build/parity/target/release/parity && \
|
||||||
file /build/parity/target/release/parity && \
|
strip /build/parity/target/release/parity
|
||||||
RUN file /build/parity/target/release/parity
|
RUN file /build/parity/target/release/parity
|
||||||
|
47
docker/ubuntu-aarch64/Dockerfile
Normal file
47
docker/ubuntu-aarch64/Dockerfile
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
FROM ubuntu:14.04
|
||||||
|
WORKDIR /build
|
||||||
|
# install tools and dependencies
|
||||||
|
RUN apt-get -y update && \
|
||||||
|
apt-get install -y --force-yes --no-install-recommends \
|
||||||
|
curl git make g++ gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \
|
||||||
|
libc6-arm64-cross libc6-dev-arm64-cross wget file ca-certificates \
|
||||||
|
binutils-aarch64-linux-gnu \
|
||||||
|
&& \
|
||||||
|
apt-get clean
|
||||||
|
|
||||||
|
# install rustup
|
||||||
|
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
|
||||||
|
|
||||||
|
# rustup directory
|
||||||
|
ENV PATH /root/.cargo/bin:$PATH
|
||||||
|
|
||||||
|
ENV RUST_TARGETS="aarch64-unknown-linux-gnu"
|
||||||
|
|
||||||
|
# multirust add arm--linux-gnuabhf toolchain
|
||||||
|
RUN rustup target add aarch64-unknown-linux-gnu
|
||||||
|
|
||||||
|
# show backtraces
|
||||||
|
ENV RUST_BACKTRACE 1
|
||||||
|
|
||||||
|
# set compilers
|
||||||
|
ENV CXX aarch64-linux-gnu-g++
|
||||||
|
ENV CC aarch64-linux-gnu-gcc
|
||||||
|
|
||||||
|
# show tools
|
||||||
|
RUN rustc -vV && \
|
||||||
|
cargo -V && \
|
||||||
|
gcc -v &&\
|
||||||
|
g++ -v
|
||||||
|
|
||||||
|
# build parity
|
||||||
|
RUN git clone https://github.com/ethcore/parity && \
|
||||||
|
cd parity && \
|
||||||
|
mkdir -p .cargo && \
|
||||||
|
echo '[target.aarch64-unknown-linux-gnu]\n\
|
||||||
|
linker = "aarch64-linux-gnu-gcc"\n'\
|
||||||
|
>>.cargo/config && \
|
||||||
|
cat .cargo/config && \
|
||||||
|
cargo build --target aarch64-unknown-linux-gnu --release --verbose && \
|
||||||
|
ls /build/parity/target/aarch64-unknown-linux-gnu/release/parity && \
|
||||||
|
/usr/bin/aarch64-linux-gnu-strip /build/parity/target/aarch64-unknown-linux-gnu/release/parity
|
||||||
|
RUN file /build/parity/target/aarch64-unknown-linux-gnu/release/parity
|
@ -18,33 +18,30 @@ ENV PATH /root/.cargo/bin:$PATH
|
|||||||
ENV RUST_TARGETS="arm-unknown-linux-gnueabihf"
|
ENV RUST_TARGETS="arm-unknown-linux-gnueabihf"
|
||||||
|
|
||||||
# multirust add arm--linux-gnuabhf toolchain
|
# multirust add arm--linux-gnuabhf toolchain
|
||||||
RUN rustup target add stable arm-unknown-linux-gnueabihf
|
RUN rustup target add armv7-unknown-linux-gnueabihf
|
||||||
|
|
||||||
# show backtraces
|
# show backtraces
|
||||||
ENV RUST_BACKTRACE 1
|
ENV RUST_BACKTRACE 1
|
||||||
|
|
||||||
# set compilers
|
# set compilers
|
||||||
ENV CXX arm-linux-gnueabihf-g++
|
ENV CXX arm-linux-gnueabihf-g++
|
||||||
ENV CC arm-linux-gnueabihf-gcc
|
ENV CC arm-linux-gnueabihf-gcc
|
||||||
|
|
||||||
|
# show tools
|
||||||
|
RUN rustc -vV && \
|
||||||
|
cargo -V && \
|
||||||
|
gcc -v &&\
|
||||||
|
g++ -v
|
||||||
|
|
||||||
# build parity
|
# build parity
|
||||||
RUN git clone https://github.com/ethcore/parity && \
|
RUN git clone https://github.com/ethcore/parity && \
|
||||||
cd parity && \
|
cd parity && \
|
||||||
git checkout master && \
|
|
||||||
wget https://github.com/nix-rust/nix/archive/v0.5.0.tar.gz && \
|
|
||||||
tar -xf v0.5.0.tar.gz && \
|
|
||||||
rm -rf v0.5.0.tar.gz && \
|
|
||||||
wget https://github.com/thkaw/mio/archive/v0.5.x.tar.gz && \
|
|
||||||
tar -xf v0.5.x.tar.gz && \
|
|
||||||
rm -rf v0.5.x.tar.gz && \
|
|
||||||
mkdir -p .cargo && \
|
mkdir -p .cargo && \
|
||||||
echo 'paths = ["nix-0.5.0","mio-0.5.x"]\n\
|
echo '[target.armv7-unknown-linux-gnueabihf]\n\
|
||||||
[target.arm-unknown-linux-gnueabihf]\n\
|
|
||||||
linker = "arm-linux-gnueabihf-gcc"\n'\
|
linker = "arm-linux-gnueabihf-gcc"\n'\
|
||||||
>>.cargo/config && \
|
>>.cargo/config && \
|
||||||
cat .cargo/config && \
|
cat .cargo/config && \
|
||||||
rustc -vV && \
|
cargo build --target armv7-unknown-linux-gnueabihf --release --verbose && \
|
||||||
cargo -V && \
|
ls /build/parity/target/armv7-unknown-linux-gnueabihf/release/parity && \
|
||||||
cargo build --target arm-unknown-linux-gnueabihf --release --verbose && \
|
/usr/bin/arm-linux-gnueabihf-strip /build/parity/target/armv7-unknown-linux-gnueabihf/release/parity
|
||||||
ls /build/parity/target/arm-unknown-linux-gnueabihf/release/parity && \
|
RUN file /build/parity/target/armv7-unknown-linux-gnueabihf/release/parity
|
||||||
file /build/parity/target/arm-unknown-linux-gnueabihf/release/parity && \
|
|
||||||
/usr/bin/arm-linux-gnueabihf-strip /build/parity/target/arm-unknown-linux-gnueabihf/release/parity
|
|
||||||
RUN file /build/parity/target/arm-unknown-linux-gnueabihf/release/parity
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
FROM ubuntu:14.04
|
FROM ubuntu:14.04
|
||||||
|
WORKDIR /build
|
||||||
# install tools and dependencies
|
# install tools and dependencies
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y \
|
apt-get install -y \
|
||||||
@ -11,11 +11,13 @@ RUN apt-get update && \
|
|||||||
wget \
|
wget \
|
||||||
git \
|
git \
|
||||||
g++ \
|
g++ \
|
||||||
|
binutils \
|
||||||
|
file \
|
||||||
# evmjit dependencies
|
# evmjit dependencies
|
||||||
zlib1g-dev \
|
zlib1g-dev \
|
||||||
libedit-dev
|
libedit-dev
|
||||||
|
|
||||||
# cmake, llvm and rocksdb ppas. then update ppas
|
# cmake and llvm ppas. then update ppas
|
||||||
RUN add-apt-repository -y "ppa:george-edison55/cmake-3.x" && \
|
RUN add-apt-repository -y "ppa:george-edison55/cmake-3.x" && \
|
||||||
add-apt-repository "deb http://llvm.org/apt/trusty/ llvm-toolchain-trusty-3.7 main" && \
|
add-apt-repository "deb http://llvm.org/apt/trusty/ llvm-toolchain-trusty-3.7 main" && \
|
||||||
apt-get update && \
|
apt-get update && \
|
||||||
@ -36,7 +38,16 @@ ENV PATH /root/.cargo/bin:$PATH
|
|||||||
# show backtraces
|
# show backtraces
|
||||||
ENV RUST_BACKTRACE 1
|
ENV RUST_BACKTRACE 1
|
||||||
|
|
||||||
|
# show tools
|
||||||
|
RUN rustc -vV && \
|
||||||
|
cargo -V && \
|
||||||
|
gcc -v &&\
|
||||||
|
g++ -v
|
||||||
|
|
||||||
# build parity
|
# build parity
|
||||||
RUN git clone https://github.com/ethcore/parity && \
|
RUN git clone https://github.com/ethcore/parity && \
|
||||||
cd parity && \
|
cd parity && \
|
||||||
cargo build --release --features ethcore/jit
|
cargo build --release --features ethcore/jit --verbose && \
|
||||||
|
ls /build/parity/target/release/parity && \
|
||||||
|
strip /build/parity/target/release/parity
|
||||||
|
RUN file /build/parity/target/release/parity
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
FROM ubuntu:14.04
|
FROM ubuntu:14.04
|
||||||
|
WORKDIR /build
|
||||||
# install tools and dependencies
|
# install tools and dependencies
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y \
|
apt-get install -y \
|
||||||
g++ \
|
g++ \
|
||||||
curl \
|
curl \
|
||||||
git \
|
git \
|
||||||
make
|
file \
|
||||||
|
binutils
|
||||||
|
|
||||||
# install rustup
|
# install rustup
|
||||||
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
|
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
|
||||||
@ -17,7 +18,16 @@ ENV PATH /root/.cargo/bin:$PATH
|
|||||||
# show backtraces
|
# show backtraces
|
||||||
ENV RUST_BACKTRACE 1
|
ENV RUST_BACKTRACE 1
|
||||||
|
|
||||||
|
# show tools
|
||||||
|
RUN rustc -vV && \
|
||||||
|
cargo -V && \
|
||||||
|
gcc -v &&\
|
||||||
|
g++ -v
|
||||||
|
|
||||||
# build parity
|
# build parity
|
||||||
RUN git clone https://github.com/ethcore/parity && \
|
RUN git clone https://github.com/ethcore/parity && \
|
||||||
cd parity && \
|
cd parity && \
|
||||||
cargo build --release
|
cargo build --release --verbose && \
|
||||||
|
ls /build/parity/target/release/parity && \
|
||||||
|
strip /build/parity/target/release/parity
|
||||||
|
RUN file /build/parity/target/release/parity
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ethash"
|
name = "ethash"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
authors = ["arkpar <arkadiy@ethcore.io"]
|
authors = ["arkpar <arkadiy@ethcore.io"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
@ -3,7 +3,7 @@ description = "Ethcore library"
|
|||||||
homepage = "http://ethcore.io"
|
homepage = "http://ethcore.io"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
name = "ethcore"
|
name = "ethcore"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
authors = ["Ethcore <admin@ethcore.io>"]
|
authors = ["Ethcore <admin@ethcore.io>"]
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ impl Engine for BasicAuthority {
|
|||||||
Schedule::new_homestead()
|
Schedule::new_homestead()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn populate_from_parent(&self, header: &mut Header, parent: &Header, gas_floor_target: U256) {
|
fn populate_from_parent(&self, header: &mut Header, parent: &Header, gas_floor_target: U256, _gas_ceil_target: U256) {
|
||||||
header.difficulty = parent.difficulty;
|
header.difficulty = parent.difficulty;
|
||||||
header.gas_limit = {
|
header.gas_limit = {
|
||||||
let gas_limit = parent.gas_limit;
|
let gas_limit = parent.gas_limit;
|
||||||
@ -254,7 +254,7 @@ mod tests {
|
|||||||
spec.ensure_db_good(db.as_hashdb_mut());
|
spec.ensure_db_good(db.as_hashdb_mut());
|
||||||
let last_hashes = vec![genesis_header.hash()];
|
let last_hashes = vec![genesis_header.hash()];
|
||||||
let vm_factory = Default::default();
|
let vm_factory = Default::default();
|
||||||
let b = OpenBlock::new(engine.deref(), &vm_factory, false, db, &genesis_header, last_hashes, None, addr, 3141562.into(), vec![]).unwrap();
|
let b = OpenBlock::new(engine.deref(), &vm_factory, false, db, &genesis_header, last_hashes, None, addr, (3141562.into(), 31415620.into()), vec![]).unwrap();
|
||||||
let b = b.close_and_lock();
|
let b = b.close_and_lock();
|
||||||
let seal = engine.generate_seal(b.block(), Some(&tap)).unwrap();
|
let seal = engine.generate_seal(b.block(), Some(&tap)).unwrap();
|
||||||
assert!(b.try_seal(engine.deref(), seal).is_ok());
|
assert!(b.try_seal(engine.deref(), seal).is_ok());
|
||||||
|
@ -222,7 +222,7 @@ impl<'x> OpenBlock<'x> {
|
|||||||
last_hashes: LastHashes,
|
last_hashes: LastHashes,
|
||||||
dao_rescue_block_gas_limit: Option<U256>,
|
dao_rescue_block_gas_limit: Option<U256>,
|
||||||
author: Address,
|
author: Address,
|
||||||
gas_floor_target: U256,
|
gas_range_target: (U256, U256),
|
||||||
extra_data: Bytes,
|
extra_data: Bytes,
|
||||||
) -> Result<Self, Error> {
|
) -> Result<Self, Error> {
|
||||||
let state = try!(State::from_existing(db, parent.state_root().clone(), engine.account_start_nonce()));
|
let state = try!(State::from_existing(db, parent.state_root().clone(), engine.account_start_nonce()));
|
||||||
@ -241,7 +241,7 @@ impl<'x> OpenBlock<'x> {
|
|||||||
r.block.base.header.extra_data = extra_data;
|
r.block.base.header.extra_data = extra_data;
|
||||||
r.block.base.header.note_dirty();
|
r.block.base.header.note_dirty();
|
||||||
|
|
||||||
engine.populate_from_parent(&mut r.block.base.header, parent, gas_floor_target);
|
engine.populate_from_parent(&mut r.block.base.header, parent, gas_range_target.0, gas_range_target.1);
|
||||||
engine.on_new_block(&mut r.block);
|
engine.on_new_block(&mut r.block);
|
||||||
Ok(r)
|
Ok(r)
|
||||||
}
|
}
|
||||||
@ -288,7 +288,7 @@ impl<'x> OpenBlock<'x> {
|
|||||||
/// Get the environment info concerning this block.
|
/// Get the environment info concerning this block.
|
||||||
pub fn env_info(&self) -> EnvInfo {
|
pub fn env_info(&self) -> EnvInfo {
|
||||||
// TODO: memoise.
|
// TODO: memoise.
|
||||||
const SOFT_FORK_BLOCK: u64 = 1775000;
|
const SOFT_FORK_BLOCK: u64 = 1_800_000;
|
||||||
EnvInfo {
|
EnvInfo {
|
||||||
number: self.block.base.header.number,
|
number: self.block.base.header.number,
|
||||||
author: self.block.base.header.author.clone(),
|
author: self.block.base.header.author.clone(),
|
||||||
@ -480,7 +480,7 @@ pub fn enact(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut b = try!(OpenBlock::new(engine, vm_factory, tracing, db, parent, last_hashes, dao_rescue_block_gas_limit, header.author().clone(), 3141562.into(), header.extra_data().clone()));
|
let mut b = try!(OpenBlock::new(engine, vm_factory, tracing, db, parent, last_hashes, dao_rescue_block_gas_limit, header.author().clone(), (3141562.into(), 31415620.into()), header.extra_data().clone()));
|
||||||
b.set_difficulty(*header.difficulty());
|
b.set_difficulty(*header.difficulty());
|
||||||
b.set_gas_limit(*header.gas_limit());
|
b.set_gas_limit(*header.gas_limit());
|
||||||
b.set_timestamp(header.timestamp());
|
b.set_timestamp(header.timestamp());
|
||||||
@ -555,7 +555,7 @@ mod tests {
|
|||||||
spec.ensure_db_good(db.as_hashdb_mut());
|
spec.ensure_db_good(db.as_hashdb_mut());
|
||||||
let last_hashes = vec![genesis_header.hash()];
|
let last_hashes = vec![genesis_header.hash()];
|
||||||
let vm_factory = Default::default();
|
let vm_factory = Default::default();
|
||||||
let b = OpenBlock::new(engine.deref(), &vm_factory, false, db, &genesis_header, last_hashes, None, Address::zero(), 3141562.into(), vec![]).unwrap();
|
let b = OpenBlock::new(engine.deref(), &vm_factory, false, db, &genesis_header, last_hashes, None, Address::zero(), (3141562.into(), 31415620.into()), vec![]).unwrap();
|
||||||
let b = b.close_and_lock();
|
let b = b.close_and_lock();
|
||||||
let _ = b.seal(engine.deref(), vec![]);
|
let _ = b.seal(engine.deref(), vec![]);
|
||||||
}
|
}
|
||||||
@ -571,7 +571,7 @@ mod tests {
|
|||||||
let mut db = db_result.take();
|
let mut db = db_result.take();
|
||||||
spec.ensure_db_good(db.as_hashdb_mut());
|
spec.ensure_db_good(db.as_hashdb_mut());
|
||||||
let vm_factory = Default::default();
|
let vm_factory = Default::default();
|
||||||
let b = OpenBlock::new(engine.deref(), &vm_factory, false, db, &genesis_header, vec![genesis_header.hash()], None, Address::zero(), 3141562.into(), vec![]).unwrap()
|
let b = OpenBlock::new(engine.deref(), &vm_factory, false, db, &genesis_header, vec![genesis_header.hash()], None, Address::zero(), (3141562.into(), 31415620.into()), vec![]).unwrap()
|
||||||
.close_and_lock().seal(engine.deref(), vec![]).unwrap();
|
.close_and_lock().seal(engine.deref(), vec![]).unwrap();
|
||||||
let orig_bytes = b.rlp_bytes();
|
let orig_bytes = b.rlp_bytes();
|
||||||
let orig_db = b.drain();
|
let orig_db = b.drain();
|
||||||
@ -599,7 +599,7 @@ mod tests {
|
|||||||
let mut db = db_result.take();
|
let mut db = db_result.take();
|
||||||
spec.ensure_db_good(db.as_hashdb_mut());
|
spec.ensure_db_good(db.as_hashdb_mut());
|
||||||
let vm_factory = Default::default();
|
let vm_factory = Default::default();
|
||||||
let mut open_block = OpenBlock::new(engine.deref(), &vm_factory, false, db, &genesis_header, vec![genesis_header.hash()], None, Address::zero(), 3141562.into(), vec![]).unwrap();
|
let mut open_block = OpenBlock::new(engine.deref(), &vm_factory, false, db, &genesis_header, vec![genesis_header.hash()], None, Address::zero(), (3141562.into(), 31415620.into()), vec![]).unwrap();
|
||||||
let mut uncle1_header = Header::new();
|
let mut uncle1_header = Header::new();
|
||||||
uncle1_header.extra_data = b"uncle1".to_vec();
|
uncle1_header.extra_data = b"uncle1".to_vec();
|
||||||
let mut uncle2_header = Header::new();
|
let mut uncle2_header = Header::new();
|
||||||
|
@ -797,7 +797,7 @@ impl<V> BlockChainClient for Client<V> where V: Verifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<V> MiningBlockChainClient for Client<V> where V: Verifier {
|
impl<V> MiningBlockChainClient for Client<V> where V: Verifier {
|
||||||
fn prepare_open_block(&self, author: Address, gas_floor_target: U256, extra_data: Bytes) -> OpenBlock {
|
fn prepare_open_block(&self, author: Address, gas_range_target: (U256, U256), extra_data: Bytes) -> OpenBlock {
|
||||||
let engine = self.engine.deref().deref();
|
let engine = self.engine.deref().deref();
|
||||||
let h = self.chain.best_block_hash();
|
let h = self.chain.best_block_hash();
|
||||||
|
|
||||||
@ -810,7 +810,7 @@ impl<V> MiningBlockChainClient for Client<V> where V: Verifier {
|
|||||||
self.build_last_hashes(h.clone()),
|
self.build_last_hashes(h.clone()),
|
||||||
self.dao_rescue_block_gas_limit(h.clone()),
|
self.dao_rescue_block_gas_limit(h.clone()),
|
||||||
author,
|
author,
|
||||||
gas_floor_target,
|
gas_range_target,
|
||||||
extra_data,
|
extra_data,
|
||||||
).expect("OpenBlock::new only fails if parent state root invalid; state root of best block's header is never invalid; qed");
|
).expect("OpenBlock::new only fails if parent state root invalid; state root of best block's header is never invalid; qed");
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ pub trait BlockChainClient : Sync + Send {
|
|||||||
|
|
||||||
/// Get `Some` gas limit of SOFT_FORK_BLOCK, or `None` if chain is not yet that long.
|
/// Get `Some` gas limit of SOFT_FORK_BLOCK, or `None` if chain is not yet that long.
|
||||||
fn dao_rescue_block_gas_limit(&self, chain_hash: H256) -> Option<U256> {
|
fn dao_rescue_block_gas_limit(&self, chain_hash: H256) -> Option<U256> {
|
||||||
const SOFT_FORK_BLOCK: u64 = 1775000;
|
const SOFT_FORK_BLOCK: u64 = 1800000;
|
||||||
// shortcut if the canon chain is already known.
|
// shortcut if the canon chain is already known.
|
||||||
if self.chain_info().best_block_number > SOFT_FORK_BLOCK + 1000 {
|
if self.chain_info().best_block_number > SOFT_FORK_BLOCK + 1000 {
|
||||||
return self.block_header(BlockID::Number(SOFT_FORK_BLOCK)).map(|header| HeaderView::new(&header).gas_limit());
|
return self.block_header(BlockID::Number(SOFT_FORK_BLOCK)).map(|header| HeaderView::new(&header).gas_limit());
|
||||||
@ -251,6 +251,6 @@ pub trait BlockChainClient : Sync + Send {
|
|||||||
/// Extended client interface used for mining
|
/// Extended client interface used for mining
|
||||||
pub trait MiningBlockChainClient : BlockChainClient {
|
pub trait MiningBlockChainClient : BlockChainClient {
|
||||||
/// Returns OpenBlock prepared for closing.
|
/// Returns OpenBlock prepared for closing.
|
||||||
fn prepare_open_block(&self, author: Address, gas_floor_target: U256, extra_data: Bytes)
|
fn prepare_open_block(&self, author: Address, gas_range_target: (U256, U256), extra_data: Bytes)
|
||||||
-> OpenBlock;
|
-> OpenBlock;
|
||||||
}
|
}
|
||||||
|
@ -240,7 +240,7 @@ impl TestBlockChainClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl MiningBlockChainClient for TestBlockChainClient {
|
impl MiningBlockChainClient for TestBlockChainClient {
|
||||||
fn prepare_open_block(&self, _author: Address, _gas_floor_target: U256, _extra_data: Bytes) -> OpenBlock {
|
fn prepare_open_block(&self, _author: Address, _gas_range_target: (U256, U256), _extra_data: Bytes) -> OpenBlock {
|
||||||
unimplemented!();
|
unimplemented!();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ pub trait Engine : Sync + Send {
|
|||||||
|
|
||||||
/// Don't forget to call Super::populate_from_parent when subclassing & overriding.
|
/// Don't forget to call Super::populate_from_parent when subclassing & overriding.
|
||||||
// TODO: consider including State in the params.
|
// TODO: consider including State in the params.
|
||||||
fn populate_from_parent(&self, header: &mut Header, parent: &Header, _gas_floor_target: U256) {
|
fn populate_from_parent(&self, header: &mut Header, parent: &Header, _gas_floor_target: U256, _gas_ceil_target: U256) {
|
||||||
header.difficulty = parent.difficulty;
|
header.difficulty = parent.difficulty;
|
||||||
header.gas_limit = parent.gas_limit;
|
header.gas_limit = parent.gas_limit;
|
||||||
header.note_dirty();
|
header.note_dirty();
|
||||||
|
@ -112,15 +112,20 @@ impl Engine for Ethash {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn populate_from_parent(&self, header: &mut Header, parent: &Header, gas_floor_target: U256) {
|
fn populate_from_parent(&self, header: &mut Header, parent: &Header, gas_floor_target: U256, gas_ceil_target: U256) {
|
||||||
header.difficulty = self.calculate_difficuty(header, parent);
|
header.difficulty = self.calculate_difficuty(header, parent);
|
||||||
header.gas_limit = {
|
header.gas_limit = {
|
||||||
let gas_limit = parent.gas_limit;
|
let gas_limit = parent.gas_limit;
|
||||||
let bound_divisor = self.ethash_params.gas_limit_bound_divisor;
|
let bound_divisor = self.ethash_params.gas_limit_bound_divisor;
|
||||||
if gas_limit < gas_floor_target {
|
if gas_limit < gas_floor_target {
|
||||||
min(gas_floor_target, gas_limit + gas_limit / bound_divisor - 1.into())
|
min(gas_floor_target, gas_limit + gas_limit / bound_divisor - 1.into())
|
||||||
|
} else if gas_limit > gas_ceil_target {
|
||||||
|
max(gas_ceil_target, gas_limit - gas_limit / bound_divisor + 1.into())
|
||||||
} else {
|
} else {
|
||||||
max(gas_floor_target, gas_limit - gas_limit / bound_divisor + 1.into() + (header.gas_used * 6.into() / 5.into()) / bound_divisor)
|
min(gas_ceil_target,
|
||||||
|
max(gas_floor_target,
|
||||||
|
gas_limit - gas_limit / bound_divisor + 1.into() +
|
||||||
|
(header.gas_used * 6.into() / 5.into()) / bound_divisor))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
header.note_dirty();
|
header.note_dirty();
|
||||||
@ -237,8 +242,7 @@ impl Ethash {
|
|||||||
let mut target = if header.number < frontier_limit {
|
let mut target = if header.number < frontier_limit {
|
||||||
if header.timestamp >= parent.timestamp + duration_limit {
|
if header.timestamp >= parent.timestamp + duration_limit {
|
||||||
parent.difficulty - (parent.difficulty / difficulty_bound_divisor)
|
parent.difficulty - (parent.difficulty / difficulty_bound_divisor)
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
parent.difficulty + (parent.difficulty / difficulty_bound_divisor)
|
parent.difficulty + (parent.difficulty / difficulty_bound_divisor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -323,7 +327,7 @@ mod tests {
|
|||||||
spec.ensure_db_good(db.as_hashdb_mut());
|
spec.ensure_db_good(db.as_hashdb_mut());
|
||||||
let last_hashes = vec![genesis_header.hash()];
|
let last_hashes = vec![genesis_header.hash()];
|
||||||
let vm_factory = Default::default();
|
let vm_factory = Default::default();
|
||||||
let b = OpenBlock::new(engine.deref(), &vm_factory, false, db, &genesis_header, last_hashes, None, Address::zero(), 3141562.into(), vec![]).unwrap();
|
let b = OpenBlock::new(engine.deref(), &vm_factory, false, db, &genesis_header, last_hashes, None, Address::zero(), (3141562.into(), 31415620.into()), vec![]).unwrap();
|
||||||
let b = b.close();
|
let b = b.close();
|
||||||
assert_eq!(b.state().balance(&Address::zero()), U256::from_str("4563918244f40000").unwrap());
|
assert_eq!(b.state().balance(&Address::zero()), U256::from_str("4563918244f40000").unwrap());
|
||||||
}
|
}
|
||||||
@ -338,7 +342,7 @@ mod tests {
|
|||||||
spec.ensure_db_good(db.as_hashdb_mut());
|
spec.ensure_db_good(db.as_hashdb_mut());
|
||||||
let last_hashes = vec![genesis_header.hash()];
|
let last_hashes = vec![genesis_header.hash()];
|
||||||
let vm_factory = Default::default();
|
let vm_factory = Default::default();
|
||||||
let mut b = OpenBlock::new(engine.deref(), &vm_factory, false, db, &genesis_header, last_hashes, None, Address::zero(), 3141562.into(), vec![]).unwrap();
|
let mut b = OpenBlock::new(engine.deref(), &vm_factory, false, db, &genesis_header, last_hashes, None, Address::zero(), (3141562.into(), 31415620.into()), vec![]).unwrap();
|
||||||
let mut uncle = Header::new();
|
let mut uncle = Header::new();
|
||||||
let uncle_author = address_from_hex("ef2d6d194084c2de36e0dabfce45d046b37d1106");
|
let uncle_author = address_from_hex("ef2d6d194084c2de36e0dabfce45d046b37d1106");
|
||||||
uncle.author = uncle_author.clone();
|
uncle.author = uncle_author.clone();
|
||||||
|
@ -39,7 +39,7 @@ pub struct Miner {
|
|||||||
force_sealing: bool,
|
force_sealing: bool,
|
||||||
sealing_enabled: AtomicBool,
|
sealing_enabled: AtomicBool,
|
||||||
sealing_block_last_request: Mutex<u64>,
|
sealing_block_last_request: Mutex<u64>,
|
||||||
gas_floor_target: RwLock<U256>,
|
gas_range_target: RwLock<(U256, U256)>,
|
||||||
author: RwLock<Address>,
|
author: RwLock<Address>,
|
||||||
extra_data: RwLock<Bytes>,
|
extra_data: RwLock<Bytes>,
|
||||||
spec: Spec,
|
spec: Spec,
|
||||||
@ -55,7 +55,7 @@ impl Default for Miner {
|
|||||||
sealing_enabled: AtomicBool::new(false),
|
sealing_enabled: AtomicBool::new(false),
|
||||||
sealing_block_last_request: Mutex::new(0),
|
sealing_block_last_request: Mutex::new(0),
|
||||||
sealing_work: Mutex::new(UsingQueue::new(5)),
|
sealing_work: Mutex::new(UsingQueue::new(5)),
|
||||||
gas_floor_target: RwLock::new(U256::zero()),
|
gas_range_target: RwLock::new((U256::zero(), U256::zero())),
|
||||||
author: RwLock::new(Address::default()),
|
author: RwLock::new(Address::default()),
|
||||||
extra_data: RwLock::new(Vec::new()),
|
extra_data: RwLock::new(Vec::new()),
|
||||||
accounts: None,
|
accounts: None,
|
||||||
@ -73,7 +73,7 @@ impl Miner {
|
|||||||
sealing_enabled: AtomicBool::new(force_sealing),
|
sealing_enabled: AtomicBool::new(force_sealing),
|
||||||
sealing_block_last_request: Mutex::new(0),
|
sealing_block_last_request: Mutex::new(0),
|
||||||
sealing_work: Mutex::new(UsingQueue::new(5)),
|
sealing_work: Mutex::new(UsingQueue::new(5)),
|
||||||
gas_floor_target: RwLock::new(U256::zero()),
|
gas_range_target: RwLock::new((U256::zero(), U256::zero())),
|
||||||
author: RwLock::new(Address::default()),
|
author: RwLock::new(Address::default()),
|
||||||
extra_data: RwLock::new(Vec::new()),
|
extra_data: RwLock::new(Vec::new()),
|
||||||
accounts: None,
|
accounts: None,
|
||||||
@ -89,7 +89,7 @@ impl Miner {
|
|||||||
sealing_enabled: AtomicBool::new(force_sealing),
|
sealing_enabled: AtomicBool::new(force_sealing),
|
||||||
sealing_block_last_request: Mutex::new(0),
|
sealing_block_last_request: Mutex::new(0),
|
||||||
sealing_work: Mutex::new(UsingQueue::new(5)),
|
sealing_work: Mutex::new(UsingQueue::new(5)),
|
||||||
gas_floor_target: RwLock::new(U256::zero()),
|
gas_range_target: RwLock::new((U256::zero(), U256::zero())),
|
||||||
author: RwLock::new(Address::default()),
|
author: RwLock::new(Address::default()),
|
||||||
extra_data: RwLock::new(Vec::new()),
|
extra_data: RwLock::new(Vec::new()),
|
||||||
accounts: Some(accounts),
|
accounts: Some(accounts),
|
||||||
@ -131,7 +131,7 @@ impl Miner {
|
|||||||
trace!(target: "miner", "No existing work - making new block");
|
trace!(target: "miner", "No existing work - making new block");
|
||||||
chain.prepare_open_block(
|
chain.prepare_open_block(
|
||||||
self.author(),
|
self.author(),
|
||||||
self.gas_floor_target(),
|
(self.gas_floor_target(), self.gas_ceil_target()),
|
||||||
self.extra_data()
|
self.extra_data()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -341,7 +341,11 @@ impl MinerService for Miner {
|
|||||||
|
|
||||||
/// Set the gas limit we wish to target when sealing a new block.
|
/// Set the gas limit we wish to target when sealing a new block.
|
||||||
fn set_gas_floor_target(&self, target: U256) {
|
fn set_gas_floor_target(&self, target: U256) {
|
||||||
*self.gas_floor_target.write().unwrap() = target;
|
self.gas_range_target.write().unwrap().0 = target;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_gas_ceil_target(&self, target: U256) {
|
||||||
|
self.gas_range_target.write().unwrap().1 = target;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_minimal_gas_price(&self, min_gas_price: U256) {
|
fn set_minimal_gas_price(&self, min_gas_price: U256) {
|
||||||
@ -358,7 +362,7 @@ impl MinerService for Miner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn sensible_gas_limit(&self) -> U256 {
|
fn sensible_gas_limit(&self) -> U256 {
|
||||||
*self.gas_floor_target.read().unwrap() / 5.into()
|
self.gas_range_target.read().unwrap().0 / 5.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn transactions_limit(&self) -> usize {
|
fn transactions_limit(&self) -> usize {
|
||||||
@ -381,7 +385,12 @@ impl MinerService for Miner {
|
|||||||
|
|
||||||
/// Get the gas limit we wish to target when sealing a new block.
|
/// Get the gas limit we wish to target when sealing a new block.
|
||||||
fn gas_floor_target(&self) -> U256 {
|
fn gas_floor_target(&self) -> U256 {
|
||||||
*self.gas_floor_target.read().unwrap()
|
self.gas_range_target.read().unwrap().0
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the gas limit we wish to target when sealing a new block.
|
||||||
|
fn gas_ceil_target(&self) -> U256 {
|
||||||
|
self.gas_range_target.read().unwrap().1
|
||||||
}
|
}
|
||||||
|
|
||||||
fn import_transactions<T>(&self, chain: &MiningBlockChainClient, transactions: Vec<SignedTransaction>, fetch_account: T) ->
|
fn import_transactions<T>(&self, chain: &MiningBlockChainClient, transactions: Vec<SignedTransaction>, fetch_account: T) ->
|
||||||
|
@ -81,12 +81,19 @@ pub trait MinerService : Send + Sync {
|
|||||||
/// Set minimal gas price of transaction to be accepted for mining.
|
/// Set minimal gas price of transaction to be accepted for mining.
|
||||||
fn set_minimal_gas_price(&self, min_gas_price: U256);
|
fn set_minimal_gas_price(&self, min_gas_price: U256);
|
||||||
|
|
||||||
/// Get the gas limit we wish to target when sealing a new block.
|
/// Get the lower bound of the gas limit we wish to target when sealing a new block.
|
||||||
fn gas_floor_target(&self) -> U256;
|
fn gas_floor_target(&self) -> U256;
|
||||||
|
|
||||||
/// Set the gas limit we wish to target when sealing a new block.
|
/// Get the upper bound of the gas limit we wish to target when sealing a new block.
|
||||||
|
fn gas_ceil_target(&self) -> U256;
|
||||||
|
|
||||||
|
// TODO: coalesce into single set_range function.
|
||||||
|
/// Set the lower bound of gas limit we wish to target when sealing a new block.
|
||||||
fn set_gas_floor_target(&self, target: U256);
|
fn set_gas_floor_target(&self, target: U256);
|
||||||
|
|
||||||
|
/// Set the upper bound of gas limit we wish to target when sealing a new block.
|
||||||
|
fn set_gas_ceil_target(&self, target: U256);
|
||||||
|
|
||||||
/// Get current transactions limit in queue.
|
/// Get current transactions limit in queue.
|
||||||
fn transactions_limit(&self) -> usize;
|
fn transactions_limit(&self) -> usize;
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ fn can_mine() {
|
|||||||
let client_result = get_test_client_with_blocks(vec![dummy_blocks[0].clone()]);
|
let client_result = get_test_client_with_blocks(vec![dummy_blocks[0].clone()]);
|
||||||
let client = client_result.reference();
|
let client = client_result.reference();
|
||||||
|
|
||||||
let b = client.prepare_open_block(Address::default(), 31415926.into(), vec![]).close();
|
let b = client.prepare_open_block(Address::default(), (3141562.into(), 31415620.into()), vec![]).close();
|
||||||
|
|
||||||
assert_eq!(*b.block().header().parent_hash(), BlockView::new(&dummy_blocks[0]).header_view().sha3());
|
assert_eq!(*b.block().header().parent_hash(), BlockView::new(&dummy_blocks[0]).header_view().sha3());
|
||||||
}
|
}
|
||||||
|
@ -181,7 +181,7 @@ pub fn generate_dummy_client_with_spec_and_data<F>(get_test_spec: F, block_numbe
|
|||||||
last_hashes.clone(),
|
last_hashes.clone(),
|
||||||
None,
|
None,
|
||||||
author.clone(),
|
author.clone(),
|
||||||
3141562.into(),
|
(3141562.into(), 31415620.into()),
|
||||||
vec![]
|
vec![]
|
||||||
).unwrap();
|
).unwrap();
|
||||||
b.set_difficulty(U256::from(0x20000));
|
b.set_difficulty(U256::from(0x20000));
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "evmjit"
|
name = "evmjit"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
authors = ["debris <marek.kotewicz@gmail.com>"]
|
authors = ["debris <marek.kotewicz@gmail.com>"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
PARITY_DEB_URL=https://github.com/ethcore/parity/releases/download/v1.1.0/parity_linux_1.1.0-0_amd64.deb
|
PARITY_DEB_URL=https://github.com/ethcore/parity/releases/download/v1.2.0/parity_linux_1.2.0-0_amd64.deb
|
||||||
|
|
||||||
|
|
||||||
function run_installer()
|
function run_installer()
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ethcore-ipc-codegen"
|
name = "ethcore-ipc-codegen"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
authors = ["Nikolay Volf"]
|
authors = ["Nikolay Volf"]
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
description = "Macros to auto-generate implementations for ipc call"
|
description = "Macros to auto-generate implementations for ipc call"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ethcore-ipc-nano"
|
name = "ethcore-ipc-nano"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
authors = ["Nikolay Volf <nikolay@ethcore.io>"]
|
authors = ["Nikolay Volf <nikolay@ethcore.io>"]
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ethcore-ipc"
|
name = "ethcore-ipc"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
authors = ["Nikolay Volf <nikvolf@gmail.com>"]
|
authors = ["Nikolay Volf <nikvolf@gmail.com>"]
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
!define COMPANYNAME "Ethcore"
|
!define COMPANYNAME "Ethcore"
|
||||||
!define DESCRIPTION "Fast, light, robust Ethereum implementation"
|
!define DESCRIPTION "Fast, light, robust Ethereum implementation"
|
||||||
!define VERSIONMAJOR 1
|
!define VERSIONMAJOR 1
|
||||||
!define VERSIONMINOR 2
|
!define VERSIONMINOR 3
|
||||||
!define VERSIONBUILD 0
|
!define VERSIONBUILD 0
|
||||||
|
|
||||||
!addplugindir .\
|
!addplugindir .\
|
||||||
|
@ -117,7 +117,9 @@ API and Console Options:
|
|||||||
[default: $HOME/.parity/dapps]
|
[default: $HOME/.parity/dapps]
|
||||||
|
|
||||||
--signer Enable Trusted Signer WebSocket endpoint used by
|
--signer Enable Trusted Signer WebSocket endpoint used by
|
||||||
Signer UIs.
|
Signer UIs. Default if run with ui command.
|
||||||
|
--no-signer Disable Trusted Signer WebSocket endpoint used by
|
||||||
|
Signer UIs. Default if no command is specified.
|
||||||
--signer-port PORT Specify the port of Trusted Signer server
|
--signer-port PORT Specify the port of Trusted Signer server
|
||||||
[default: 8180].
|
[default: 8180].
|
||||||
--signer-path PATH Specify directory where Signer UIs tokens should
|
--signer-path PATH Specify directory where Signer UIs tokens should
|
||||||
@ -126,6 +128,9 @@ API and Console Options:
|
|||||||
output on start up. This will prevent it.
|
output on start up. This will prevent it.
|
||||||
|
|
||||||
Sealing/Mining Options:
|
Sealing/Mining Options:
|
||||||
|
--author ADDRESS Specify the block author (aka "coinbase") address
|
||||||
|
for sending block rewards from sealed blocks.
|
||||||
|
NOTE: MINING WILL NOT WORK WITHOUT THIS OPTION.
|
||||||
--force-sealing Force the node to author new blocks as if it were
|
--force-sealing Force the node to author new blocks as if it were
|
||||||
always sealing/mining.
|
always sealing/mining.
|
||||||
--usd-per-tx USD Amount of USD to be paid for a basic transaction
|
--usd-per-tx USD Amount of USD to be paid for a basic transaction
|
||||||
@ -137,9 +142,8 @@ Sealing/Mining Options:
|
|||||||
good value [default: auto].
|
good value [default: auto].
|
||||||
--gas-floor-target GAS Amount of gas per block to target when sealing a new
|
--gas-floor-target GAS Amount of gas per block to target when sealing a new
|
||||||
block [default: 3141592].
|
block [default: 3141592].
|
||||||
--author ADDRESS Specify the block author (aka "coinbase") address
|
--gas-cap GAS A cap on how large we will raise the gas limit per
|
||||||
for sending block rewards from sealed blocks
|
block due to transaction volume [default: 3141592].
|
||||||
[default: 0037a6b811ffeb6e072da21179d11b1406371c63].
|
|
||||||
--extra-data STRING Specify a custom extra-data for authored blocks, no
|
--extra-data STRING Specify a custom extra-data for authored blocks, no
|
||||||
more than 32 characters.
|
more than 32 characters.
|
||||||
--tx-limit LIMIT Limit of transactions kept in the queue (waiting to
|
--tx-limit LIMIT Limit of transactions kept in the queue (waiting to
|
||||||
@ -152,13 +156,9 @@ Footprint Options:
|
|||||||
off. auto uses last used value of this option (off
|
off. auto uses last used value of this option (off
|
||||||
if it does not exist) [default: auto].
|
if it does not exist) [default: auto].
|
||||||
--pruning METHOD Configure pruning of the state/storage trie. METHOD
|
--pruning METHOD Configure pruning of the state/storage trie. METHOD
|
||||||
may be one of auto, archive, fast, basic, light:
|
may be one of auto, archive, fast:
|
||||||
archive - keep all state trie data. No pruning.
|
archive - keep all state trie data. No pruning.
|
||||||
fast - maintain journal overlay. Fast but 50MB used.
|
fast - maintain journal overlay. Fast but 50MB used.
|
||||||
basic - reference count in disk DB. Slow, light, and
|
|
||||||
experimental!
|
|
||||||
light - early merges with partial tracking. Fast,
|
|
||||||
light, and experimental!
|
|
||||||
auto - use the method most recently synced or
|
auto - use the method most recently synced or
|
||||||
default to fast if none synced [default: auto].
|
default to fast if none synced [default: auto].
|
||||||
--cache-pref-size BYTES Specify the prefered size of the blockchain cache in
|
--cache-pref-size BYTES Specify the prefered size of the blockchain cache in
|
||||||
@ -278,14 +278,16 @@ pub struct Args {
|
|||||||
pub flag_dapps_pass: Option<String>,
|
pub flag_dapps_pass: Option<String>,
|
||||||
pub flag_dapps_path: String,
|
pub flag_dapps_path: String,
|
||||||
pub flag_signer: bool,
|
pub flag_signer: bool,
|
||||||
|
pub flag_no_signer: bool,
|
||||||
pub flag_signer_port: u16,
|
pub flag_signer_port: u16,
|
||||||
pub flag_signer_path: String,
|
pub flag_signer_path: String,
|
||||||
pub flag_no_token: bool,
|
pub flag_no_token: bool,
|
||||||
pub flag_force_sealing: bool,
|
pub flag_force_sealing: bool,
|
||||||
pub flag_author: String,
|
pub flag_author: Option<String>,
|
||||||
pub flag_usd_per_tx: String,
|
pub flag_usd_per_tx: String,
|
||||||
pub flag_usd_per_eth: String,
|
pub flag_usd_per_eth: String,
|
||||||
pub flag_gas_floor_target: String,
|
pub flag_gas_floor_target: String,
|
||||||
|
pub flag_gas_cap: String,
|
||||||
pub flag_extra_data: Option<String>,
|
pub flag_extra_data: Option<String>,
|
||||||
pub flag_tx_limit: usize,
|
pub flag_tx_limit: usize,
|
||||||
pub flag_logging: Option<String>,
|
pub flag_logging: Option<String>,
|
||||||
|
@ -67,11 +67,12 @@ impl Configuration {
|
|||||||
self.args.flag_maxpeers.unwrap_or(self.args.flag_peers) as u32
|
self.args.flag_maxpeers.unwrap_or(self.args.flag_peers) as u32
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn author(&self) -> Address {
|
pub fn author(&self) -> Option<Address> {
|
||||||
let d = self.args.flag_etherbase.as_ref().unwrap_or(&self.args.flag_author);
|
self.args.flag_etherbase.as_ref()
|
||||||
Address::from_str(clean_0x(d)).unwrap_or_else(|_| {
|
.or(self.args.flag_author.as_ref())
|
||||||
|
.map(|d| Address::from_str(clean_0x(d)).unwrap_or_else(|_| {
|
||||||
die!("{}: Invalid address for --author. Must be 40 hex characters, with or without the 0x at the beginning.", d)
|
die!("{}: Invalid address for --author. Must be 40 hex characters, with or without the 0x at the beginning.", d)
|
||||||
})
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn gas_floor_target(&self) -> U256 {
|
pub fn gas_floor_target(&self) -> U256 {
|
||||||
@ -85,7 +86,16 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn gas_ceil_target(&self) -> U256 {
|
||||||
|
if self.args.flag_dont_help_rescue_dao || self.args.flag_dogmatic {
|
||||||
|
10_000_000.into()
|
||||||
|
} else {
|
||||||
|
let d = &self.args.flag_gas_cap;
|
||||||
|
U256::from_dec_str(d).unwrap_or_else(|_| {
|
||||||
|
die!("{}: Invalid target gas ceiling given. Must be a decimal unsigned 256-bit number.", d)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn gas_price(&self) -> U256 {
|
pub fn gas_price(&self) -> U256 {
|
||||||
match self.args.flag_gasprice.as_ref() {
|
match self.args.flag_gasprice.as_ref() {
|
||||||
@ -121,16 +131,12 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn extra_data(&self) -> Bytes {
|
pub fn extra_data(&self) -> Bytes {
|
||||||
if !self.args.flag_dont_help_rescue_dao {
|
|
||||||
(b"rescuedao"[..]).to_owned()
|
|
||||||
} else {
|
|
||||||
match self.args.flag_extradata.as_ref().or(self.args.flag_extra_data.as_ref()) {
|
match self.args.flag_extradata.as_ref().or(self.args.flag_extra_data.as_ref()) {
|
||||||
Some(ref x) if x.len() <= 32 => x.as_bytes().to_owned(),
|
Some(ref x) if x.len() <= 32 => x.as_bytes().to_owned(),
|
||||||
None => version_data(),
|
None => version_data(),
|
||||||
Some(ref x) => { die!("{}: Extra data must be at most 32 characters.", x); }
|
Some(ref x) => { die!("{}: Extra data must be at most 32 characters.", x); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
pub fn spec(&self) -> Spec {
|
pub fn spec(&self) -> Spec {
|
||||||
match self.chain().as_str() {
|
match self.chain().as_str() {
|
||||||
@ -432,12 +438,37 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn signer_port(&self) -> Option<u16> {
|
pub fn signer_port(&self) -> Option<u16> {
|
||||||
if !self.args.flag_signer {
|
if !self.signer_enabled() {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(self.args.flag_signer_port)
|
Some(self.args.flag_signer_port)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn rpc_interface(&self) -> String {
|
||||||
|
match self.network_settings().rpc_interface.as_str() {
|
||||||
|
"all" => "0.0.0.0",
|
||||||
|
"local" => "127.0.0.1",
|
||||||
|
x => x,
|
||||||
|
}.into()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn dapps_interface(&self) -> String {
|
||||||
|
match self.args.flag_dapps_interface.as_str() {
|
||||||
|
"all" => "0.0.0.0",
|
||||||
|
"local" => "127.0.0.1",
|
||||||
|
x => x,
|
||||||
|
}.into()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn dapps_enabled(&self) -> bool {
|
||||||
|
!self.args.flag_dapps_off && !self.args.flag_no_dapps
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn signer_enabled(&self) -> bool {
|
||||||
|
(self.args.cmd_ui && !self.args.flag_no_signer) ||
|
||||||
|
(!self.args.cmd_ui && self.args.flag_signer)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -45,12 +45,7 @@ pub fn new(configuration: Configuration, deps: Dependencies) -> Option<WebappSer
|
|||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
let interface = match configuration.interface.as_str() {
|
let url = format!("{}:{}", configuration.interface, configuration.port);
|
||||||
"all" => "0.0.0.0",
|
|
||||||
"local" => "127.0.0.1",
|
|
||||||
x => x,
|
|
||||||
};
|
|
||||||
let url = format!("{}:{}", interface, configuration.port);
|
|
||||||
let addr = SocketAddr::from_str(&url).unwrap_or_else(|_| die!("{}: Invalid Webapps listen host/port given.", url));
|
let addr = SocketAddr::from_str(&url).unwrap_or_else(|_| die!("{}: Invalid Webapps listen host/port given.", url));
|
||||||
|
|
||||||
let auth = configuration.user.as_ref().map(|username| {
|
let auth = configuration.user.as_ref().map(|username| {
|
||||||
|
@ -192,14 +192,14 @@ fn execute_client(conf: Configuration, spec: Spec, client_config: ClientConfig)
|
|||||||
let sync_config = conf.sync_config(&spec);
|
let sync_config = conf.sync_config(&spec);
|
||||||
|
|
||||||
// Create and display a new token for UIs.
|
// Create and display a new token for UIs.
|
||||||
if conf.args.flag_signer && !conf.args.flag_no_token {
|
if conf.signer_enabled() && !conf.args.flag_no_token {
|
||||||
new_token(conf.directories().signer).unwrap_or_else(|e| {
|
new_token(conf.directories().signer).unwrap_or_else(|e| {
|
||||||
die!("Error generating token: {:?}", e)
|
die!("Error generating token: {:?}", e)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display warning about using unlock with signer
|
// Display warning about using unlock with signer
|
||||||
if conf.args.flag_signer && conf.args.flag_unlock.is_some() {
|
if conf.signer_enabled() && conf.args.flag_unlock.is_some() {
|
||||||
warn!("Using Trusted Signer and --unlock is not recommended!");
|
warn!("Using Trusted Signer and --unlock is not recommended!");
|
||||||
warn!("NOTE that Signer will not ask you to confirm transactions from unlocked account.");
|
warn!("NOTE that Signer will not ask you to confirm transactions from unlocked account.");
|
||||||
}
|
}
|
||||||
@ -209,8 +209,9 @@ fn execute_client(conf: Configuration, spec: Spec, client_config: ClientConfig)
|
|||||||
|
|
||||||
// Miner
|
// Miner
|
||||||
let miner = Miner::with_accounts(conf.args.flag_force_sealing, conf.spec(), account_service.clone());
|
let miner = Miner::with_accounts(conf.args.flag_force_sealing, conf.spec(), account_service.clone());
|
||||||
miner.set_author(conf.author());
|
miner.set_author(conf.author().unwrap_or(Default::default()));
|
||||||
miner.set_gas_floor_target(conf.gas_floor_target());
|
miner.set_gas_floor_target(conf.gas_floor_target());
|
||||||
|
miner.set_gas_ceil_target(conf.gas_ceil_target());
|
||||||
miner.set_extra_data(conf.extra_data());
|
miner.set_extra_data(conf.extra_data());
|
||||||
miner.set_minimal_gas_price(conf.gas_price());
|
miner.set_minimal_gas_price(conf.gas_price());
|
||||||
miner.set_transactions_limit(conf.args.flag_tx_limit);
|
miner.set_transactions_limit(conf.args.flag_tx_limit);
|
||||||
@ -252,7 +253,7 @@ fn execute_client(conf: Configuration, spec: Spec, client_config: ClientConfig)
|
|||||||
// Setup http rpc
|
// Setup http rpc
|
||||||
let rpc_server = rpc::new_http(rpc::HttpConfiguration {
|
let rpc_server = rpc::new_http(rpc::HttpConfiguration {
|
||||||
enabled: network_settings.rpc_enabled,
|
enabled: network_settings.rpc_enabled,
|
||||||
interface: network_settings.rpc_interface.clone(),
|
interface: conf.rpc_interface(),
|
||||||
port: network_settings.rpc_port,
|
port: network_settings.rpc_port,
|
||||||
apis: conf.rpc_apis(),
|
apis: conf.rpc_apis(),
|
||||||
cors: conf.rpc_cors(),
|
cors: conf.rpc_cors(),
|
||||||
@ -264,8 +265,8 @@ fn execute_client(conf: Configuration, spec: Spec, client_config: ClientConfig)
|
|||||||
|
|
||||||
if conf.args.flag_webapp { println!("WARNING: Flag -w/--webapp is deprecated. Dapps server is now on by default. Ignoring."); }
|
if conf.args.flag_webapp { println!("WARNING: Flag -w/--webapp is deprecated. Dapps server is now on by default. Ignoring."); }
|
||||||
let dapps_server = dapps::new(dapps::Configuration {
|
let dapps_server = dapps::new(dapps::Configuration {
|
||||||
enabled: !conf.args.flag_dapps_off && !conf.args.flag_no_dapps,
|
enabled: conf.dapps_enabled(),
|
||||||
interface: conf.args.flag_dapps_interface.clone(),
|
interface: conf.dapps_interface(),
|
||||||
port: conf.args.flag_dapps_port,
|
port: conf.args.flag_dapps_port,
|
||||||
user: conf.args.flag_dapps_user.clone(),
|
user: conf.args.flag_dapps_user.clone(),
|
||||||
pass: conf.args.flag_dapps_pass.clone(),
|
pass: conf.args.flag_dapps_pass.clone(),
|
||||||
@ -277,7 +278,7 @@ fn execute_client(conf: Configuration, spec: Spec, client_config: ClientConfig)
|
|||||||
|
|
||||||
// Set up a signer
|
// Set up a signer
|
||||||
let signer_server = signer::start(signer::Configuration {
|
let signer_server = signer::start(signer::Configuration {
|
||||||
enabled: deps_for_rpc_apis.signer_port.is_some(),
|
enabled: conf.signer_enabled(),
|
||||||
port: conf.args.flag_signer_port,
|
port: conf.args.flag_signer_port,
|
||||||
signer_path: conf.directories().signer,
|
signer_path: conf.directories().signer,
|
||||||
}, signer::Dependencies {
|
}, signer::Dependencies {
|
||||||
@ -296,7 +297,10 @@ fn execute_client(conf: Configuration, spec: Spec, client_config: ClientConfig)
|
|||||||
service.register_io_handler(io_handler).expect("Error registering IO handler");
|
service.register_io_handler(io_handler).expect("Error registering IO handler");
|
||||||
|
|
||||||
if conf.args.cmd_ui {
|
if conf.args.cmd_ui {
|
||||||
url::open("http://localhost:8080/")
|
if !conf.dapps_enabled() {
|
||||||
|
die_with_message("Cannot use UI command with Dapps turned off.");
|
||||||
|
}
|
||||||
|
url::open(&format!("http://{}:{}/", conf.dapps_interface(), conf.args.flag_dapps_port));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle exit
|
// Handle exit
|
||||||
|
@ -66,13 +66,8 @@ pub fn new_http(conf: HttpConfiguration, deps: &Dependencies) -> Option<RpcServe
|
|||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
let interface = match conf.interface.as_str() {
|
|
||||||
"all" => "0.0.0.0",
|
|
||||||
"local" => "127.0.0.1",
|
|
||||||
x => x,
|
|
||||||
};
|
|
||||||
let apis = conf.apis.split(',').collect();
|
let apis = conf.apis.split(',').collect();
|
||||||
let url = format!("{}:{}", interface, conf.port);
|
let url = format!("{}:{}", conf.interface, conf.port);
|
||||||
let addr = SocketAddr::from_str(&url).unwrap_or_else(|_| die!("{}: Invalid JSONRPC listen host/port given.", url));
|
let addr = SocketAddr::from_str(&url).unwrap_or_else(|_| die!("{}: Invalid JSONRPC listen host/port given.", url));
|
||||||
|
|
||||||
Some(setup_http_rpc_server(deps, &addr, conf.cors, apis))
|
Some(setup_http_rpc_server(deps, &addr, conf.cors, apis))
|
||||||
|
@ -49,11 +49,11 @@ pub fn open(url: &str) {
|
|||||||
#[cfg(target_os="macos")]
|
#[cfg(target_os="macos")]
|
||||||
pub fn open(url: &str) {
|
pub fn open(url: &str) {
|
||||||
use std;
|
use std;
|
||||||
let _ = std::process::Command::new("open").arg(url).output();
|
let _ = std::process::Command::new("open").arg(url).spawn();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os="linux")]
|
#[cfg(target_os="linux")]
|
||||||
pub fn open(url: &str) {
|
pub fn open(url: &str) {
|
||||||
use std;
|
use std;
|
||||||
let _ = std::process::Command::new("xdg-open").arg(url).output();
|
let _ = std::process::Command::new("xdg-open").arg(url).spawn();
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
description = "Ethcore jsonrpc"
|
description = "Ethcore jsonrpc"
|
||||||
name = "ethcore-rpc"
|
name = "ethcore-rpc"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
authors = ["Ethcore <admin@ethcore.io"]
|
authors = ["Ethcore <admin@ethcore.io"]
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
description = "Rpc test client."
|
description = "Rpc test client."
|
||||||
name = "rpctest"
|
name = "rpctest"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
authors = ["Ethcore <admin@ethcore.io>"]
|
authors = ["Ethcore <admin@ethcore.io>"]
|
||||||
|
|
||||||
|
@ -225,6 +225,14 @@ fn no_work_err() -> Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn no_author_err() -> Error {
|
||||||
|
Error {
|
||||||
|
code: ErrorCode::ServerError(error_codes::NO_AUTHOR_CODE),
|
||||||
|
message: "Author not configured. Run parity with --author to configure.".into(),
|
||||||
|
data: None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<C, S, M, EM> Eth for EthClient<C, S, M, EM> where
|
impl<C, S, M, EM> Eth for EthClient<C, S, M, EM> where
|
||||||
C: MiningBlockChainClient + 'static,
|
C: MiningBlockChainClient + 'static,
|
||||||
S: SyncProvider + 'static,
|
S: SyncProvider + 'static,
|
||||||
@ -474,6 +482,10 @@ impl<C, S, M, EM> Eth for EthClient<C, S, M, EM> where
|
|||||||
}
|
}
|
||||||
|
|
||||||
let miner = take_weak!(self.miner);
|
let miner = take_weak!(self.miner);
|
||||||
|
if miner.author().is_zero() {
|
||||||
|
warn!(target: "miner", "Cannot give work package - no author is configured. Use --author to configure!");
|
||||||
|
return Err(no_author_err())
|
||||||
|
}
|
||||||
miner.map_sealing_work(client.deref(), |b| {
|
miner.map_sealing_work(client.deref(), |b| {
|
||||||
let pow_hash = b.hash();
|
let pow_hash = b.hash();
|
||||||
let target = Ethash::difficulty_to_boundary(b.block().header().difficulty());
|
let target = Ethash::difficulty_to_boundary(b.block().header().difficulty());
|
||||||
|
@ -72,6 +72,10 @@ impl<C, M> Ethcore for EthcoreClient<C, M> where M: MinerService + 'static, C: M
|
|||||||
to_value(&take_weak!(self.miner).gas_floor_target())
|
to_value(&take_weak!(self.miner).gas_floor_target())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn gas_ceil_target(&self, _: Params) -> Result<Value, Error> {
|
||||||
|
to_value(&take_weak!(self.miner).gas_ceil_target())
|
||||||
|
}
|
||||||
|
|
||||||
fn dev_logs(&self, _params: Params) -> Result<Value, Error> {
|
fn dev_logs(&self, _params: Params) -> Result<Value, Error> {
|
||||||
let logs = self.logger.logs();
|
let logs = self.logger.logs();
|
||||||
to_value(&logs.deref().as_slice())
|
to_value(&logs.deref().as_slice())
|
||||||
|
@ -52,8 +52,15 @@ impl<M> EthcoreSet for EthcoreSetClient<M> where M: MinerService + 'static {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn set_gas_floor_target(&self, params: Params) -> Result<Value, Error> {
|
fn set_gas_floor_target(&self, params: Params) -> Result<Value, Error> {
|
||||||
from_params::<(U256,)>(params).and_then(|(gas_floor_target,)| {
|
from_params::<(U256,)>(params).and_then(|(target,)| {
|
||||||
take_weak!(self.miner).set_gas_floor_target(gas_floor_target);
|
take_weak!(self.miner).set_gas_floor_target(target);
|
||||||
|
to_value(&true)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_gas_ceil_target(&self, params: Params) -> Result<Value, Error> {
|
||||||
|
from_params::<(U256,)>(params).and_then(|(target,)| {
|
||||||
|
take_weak!(self.miner).set_gas_ceil_target(target);
|
||||||
to_value(&true)
|
to_value(&true)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,8 @@ mod error_codes {
|
|||||||
// NOTE [ToDr] Codes from [-32099, -32000]
|
// NOTE [ToDr] Codes from [-32099, -32000]
|
||||||
pub const UNSUPPORTED_REQUEST_CODE: i64 = -32000;
|
pub const UNSUPPORTED_REQUEST_CODE: i64 = -32000;
|
||||||
pub const NO_WORK_CODE: i64 = -32001;
|
pub const NO_WORK_CODE: i64 = -32001;
|
||||||
pub const UNKNOWN_ERROR: i64 = -32002;
|
pub const NO_AUTHOR_CODE: i64 = -32002;
|
||||||
|
pub const UNKNOWN_ERROR: i64 = -32009;
|
||||||
pub const TRANSACTION_ERROR: i64 = -32010;
|
pub const TRANSACTION_ERROR: i64 = -32010;
|
||||||
pub const ACCOUNT_LOCKED: i64 = -32020;
|
pub const ACCOUNT_LOCKED: i64 = -32020;
|
||||||
pub const SIGNER_DISABLED: i64 = -32030;
|
pub const SIGNER_DISABLED: i64 = -32030;
|
||||||
|
@ -39,7 +39,7 @@ pub struct TestMinerService {
|
|||||||
pub last_nonces: RwLock<HashMap<Address, U256>>,
|
pub last_nonces: RwLock<HashMap<Address, U256>>,
|
||||||
|
|
||||||
min_gas_price: RwLock<U256>,
|
min_gas_price: RwLock<U256>,
|
||||||
gas_floor_target: RwLock<U256>,
|
gas_range_target: RwLock<(U256, U256)>,
|
||||||
author: RwLock<Address>,
|
author: RwLock<Address>,
|
||||||
extra_data: RwLock<Bytes>,
|
extra_data: RwLock<Bytes>,
|
||||||
limit: RwLock<usize>,
|
limit: RwLock<usize>,
|
||||||
@ -54,7 +54,7 @@ impl Default for TestMinerService {
|
|||||||
pending_receipts: Mutex::new(BTreeMap::new()),
|
pending_receipts: Mutex::new(BTreeMap::new()),
|
||||||
last_nonces: RwLock::new(HashMap::new()),
|
last_nonces: RwLock::new(HashMap::new()),
|
||||||
min_gas_price: RwLock::new(U256::from(20_000_000)),
|
min_gas_price: RwLock::new(U256::from(20_000_000)),
|
||||||
gas_floor_target: RwLock::new(U256::from(12345)),
|
gas_range_target: RwLock::new((U256::from(12345), U256::from(54321))),
|
||||||
author: RwLock::new(Address::zero()),
|
author: RwLock::new(Address::zero()),
|
||||||
extra_data: RwLock::new(vec![1, 2, 3, 4]),
|
extra_data: RwLock::new(vec![1, 2, 3, 4]),
|
||||||
limit: RwLock::new(1024),
|
limit: RwLock::new(1024),
|
||||||
@ -81,9 +81,14 @@ impl MinerService for TestMinerService {
|
|||||||
*self.extra_data.write().unwrap() = extra_data;
|
*self.extra_data.write().unwrap() = extra_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Set the gas limit we wish to target when sealing a new block.
|
/// Set the lower gas limit we wish to target when sealing a new block.
|
||||||
fn set_gas_floor_target(&self, target: U256) {
|
fn set_gas_floor_target(&self, target: U256) {
|
||||||
*self.gas_floor_target.write().unwrap() = target;
|
self.gas_range_target.write().unwrap().0 = target;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the upper gas limit we wish to target when sealing a new block.
|
||||||
|
fn set_gas_ceil_target(&self, target: U256) {
|
||||||
|
self.gas_range_target.write().unwrap().1 = target;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_minimal_gas_price(&self, min_gas_price: U256) {
|
fn set_minimal_gas_price(&self, min_gas_price: U256) {
|
||||||
@ -111,7 +116,11 @@ impl MinerService for TestMinerService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn gas_floor_target(&self) -> U256 {
|
fn gas_floor_target(&self) -> U256 {
|
||||||
*self.gas_floor_target.read().unwrap()
|
self.gas_range_target.read().unwrap().0
|
||||||
|
}
|
||||||
|
|
||||||
|
fn gas_ceil_target(&self) -> U256 {
|
||||||
|
self.gas_range_target.read().unwrap().1
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Imports transactions to transaction queue.
|
/// Imports transactions to transaction queue.
|
||||||
|
@ -30,6 +30,9 @@ pub trait Ethcore: Sized + Send + Sync + 'static {
|
|||||||
/// Returns mining gas floor target.
|
/// Returns mining gas floor target.
|
||||||
fn gas_floor_target(&self, _: Params) -> Result<Value, Error>;
|
fn gas_floor_target(&self, _: Params) -> Result<Value, Error>;
|
||||||
|
|
||||||
|
/// Returns mining gas floor cap.
|
||||||
|
fn gas_ceil_target(&self, _: Params) -> Result<Value, Error>;
|
||||||
|
|
||||||
/// Returns minimal gas price for transaction to be included in queue.
|
/// Returns minimal gas price for transaction to be included in queue.
|
||||||
fn min_gas_price(&self, _: Params) -> Result<Value, Error>;
|
fn min_gas_price(&self, _: Params) -> Result<Value, Error>;
|
||||||
|
|
||||||
@ -70,6 +73,7 @@ pub trait Ethcore: Sized + Send + Sync + 'static {
|
|||||||
|
|
||||||
delegate.add_method("ethcore_extraData", Ethcore::extra_data);
|
delegate.add_method("ethcore_extraData", Ethcore::extra_data);
|
||||||
delegate.add_method("ethcore_gasFloorTarget", Ethcore::gas_floor_target);
|
delegate.add_method("ethcore_gasFloorTarget", Ethcore::gas_floor_target);
|
||||||
|
delegate.add_method("ethcore_gasCeilTarget", Ethcore::gas_ceil_target);
|
||||||
delegate.add_method("ethcore_minGasPrice", Ethcore::min_gas_price);
|
delegate.add_method("ethcore_minGasPrice", Ethcore::min_gas_price);
|
||||||
delegate.add_method("ethcore_transactionsLimit", Ethcore::transactions_limit);
|
delegate.add_method("ethcore_transactionsLimit", Ethcore::transactions_limit);
|
||||||
delegate.add_method("ethcore_devLogs", Ethcore::dev_logs);
|
delegate.add_method("ethcore_devLogs", Ethcore::dev_logs);
|
||||||
|
@ -28,6 +28,9 @@ pub trait EthcoreSet: Sized + Send + Sync + 'static {
|
|||||||
/// Sets new gas floor target for mined blocks.
|
/// Sets new gas floor target for mined blocks.
|
||||||
fn set_gas_floor_target(&self, _: Params) -> Result<Value, Error>;
|
fn set_gas_floor_target(&self, _: Params) -> Result<Value, Error>;
|
||||||
|
|
||||||
|
/// Sets new gas ceiling target for mined blocks.
|
||||||
|
fn set_gas_ceil_target(&self, _: Params) -> Result<Value, Error>;
|
||||||
|
|
||||||
/// Sets new extra data for mined blocks.
|
/// Sets new extra data for mined blocks.
|
||||||
fn set_extra_data(&self, _: Params) -> Result<Value, Error>;
|
fn set_extra_data(&self, _: Params) -> Result<Value, Error>;
|
||||||
|
|
||||||
@ -54,6 +57,7 @@ pub trait EthcoreSet: Sized + Send + Sync + 'static {
|
|||||||
let mut delegate = IoDelegate::new(Arc::new(self));
|
let mut delegate = IoDelegate::new(Arc::new(self));
|
||||||
delegate.add_method("ethcore_setMinGasPrice", EthcoreSet::set_min_gas_price);
|
delegate.add_method("ethcore_setMinGasPrice", EthcoreSet::set_min_gas_price);
|
||||||
delegate.add_method("ethcore_setGasFloorTarget", EthcoreSet::set_gas_floor_target);
|
delegate.add_method("ethcore_setGasFloorTarget", EthcoreSet::set_gas_floor_target);
|
||||||
|
delegate.add_method("ethcore_setGasCeilTarget", EthcoreSet::set_gas_ceil_target);
|
||||||
delegate.add_method("ethcore_setExtraData", EthcoreSet::set_extra_data);
|
delegate.add_method("ethcore_setExtraData", EthcoreSet::set_extra_data);
|
||||||
delegate.add_method("ethcore_setAuthor", EthcoreSet::set_author);
|
delegate.add_method("ethcore_setAuthor", EthcoreSet::set_author);
|
||||||
delegate.add_method("ethcore_setTransactionsLimit", EthcoreSet::set_transactions_limit);
|
delegate.add_method("ethcore_setTransactionsLimit", EthcoreSet::set_transactions_limit);
|
||||||
|
@ -3,7 +3,7 @@ description = "Ethcore Trusted Signer"
|
|||||||
homepage = "http://ethcore.io"
|
homepage = "http://ethcore.io"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
name = "ethcore-signer"
|
name = "ethcore-signer"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
authors = ["Ethcore <admin@ethcore.io>"]
|
authors = ["Ethcore <admin@ethcore.io>"]
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
description = "Ethcore blockchain sync"
|
description = "Ethcore blockchain sync"
|
||||||
name = "ethsync"
|
name = "ethsync"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
authors = ["Ethcore <admin@ethcore.io"]
|
authors = ["Ethcore <admin@ethcore.io"]
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ description = "Ethcore utility library"
|
|||||||
homepage = "http://ethcore.io"
|
homepage = "http://ethcore.io"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
name = "ethcore-util"
|
name = "ethcore-util"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
authors = ["Ethcore <admin@ethcore.io>"]
|
authors = ["Ethcore <admin@ethcore.io>"]
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
|
@ -20,10 +20,10 @@ use std::default::Default;
|
|||||||
use rocksdb::{DB, Writable, WriteBatch, IteratorMode, DBVector, DBIterator,
|
use rocksdb::{DB, Writable, WriteBatch, IteratorMode, DBVector, DBIterator,
|
||||||
IndexType, Options, DBCompactionStyle, BlockBasedOptions, Direction};
|
IndexType, Options, DBCompactionStyle, BlockBasedOptions, Direction};
|
||||||
|
|
||||||
const DB_FILE_SIZE_BASE: u64 = 128 * 1024 * 1024;
|
const DB_FILE_SIZE_BASE: u64 = 16 * 1024 * 1024;
|
||||||
const DB_FILE_SIZE_MULTIPLIER: i32 = 1;
|
const DB_FILE_SIZE_MULTIPLIER: i32 = 5;
|
||||||
const DB_BACKGROUND_FLUSHES: i32 = 4;
|
const DB_BACKGROUND_FLUSHES: i32 = 2;
|
||||||
const DB_BACKGROUND_COMPACTIONS: i32 = 4;
|
const DB_BACKGROUND_COMPACTIONS: i32 = 2;
|
||||||
|
|
||||||
/// Write transaction. Batches a sequence of put/delete operations for efficiency.
|
/// Write transaction. Batches a sequence of put/delete operations for efficiency.
|
||||||
pub struct DBTransaction {
|
pub struct DBTransaction {
|
||||||
|
Loading…
Reference in New Issue
Block a user