Remove deprecated flags
This commit is contained in:
parent
7dfa57999b
commit
751210c963
@ -166,8 +166,6 @@ fn main() {
|
|||||||
|
|
||||||
fn key_dir(location: &str, password: Option<Password>) -> Result<Box<dyn KeyDirectory>, Error> {
|
fn key_dir(location: &str, password: Option<Password>) -> Result<Box<dyn KeyDirectory>, Error> {
|
||||||
let dir: RootDiskDirectory = match location {
|
let dir: RootDiskDirectory = match location {
|
||||||
"geth" => RootDiskDirectory::create(dir::geth(false))?,
|
|
||||||
"geth-test" => RootDiskDirectory::create(dir::geth(true))?,
|
|
||||||
path if path.starts_with("parity") => {
|
path if path.starts_with("parity") => {
|
||||||
let chain = path.split('-').nth(1).unwrap_or("ethereum");
|
let chain = path.split('-').nth(1).unwrap_or("ethereum");
|
||||||
let path = dir::parity(chain);
|
let path = dir::parity(chain);
|
||||||
|
@ -27,7 +27,6 @@ use accounts_dir::{KeyDirectory, SetKeyError, VaultKey, VaultKeyDirectory};
|
|||||||
use ethkey::{
|
use ethkey::{
|
||||||
self, Address, ExtendedKeyPair, KeyPair, Message, Password, Public, Secret, Signature,
|
self, Address, ExtendedKeyPair, KeyPair, Message, Password, Public, Secret, Signature,
|
||||||
};
|
};
|
||||||
use import;
|
|
||||||
use json::{self, OpaqueKeyFile, Uuid};
|
use json::{self, OpaqueKeyFile, Uuid};
|
||||||
use presale::PresaleWallet;
|
use presale::PresaleWallet;
|
||||||
use random::Random;
|
use random::Random;
|
||||||
@ -330,38 +329,6 @@ impl SecretStore for EthStore {
|
|||||||
fn local_path(&self) -> PathBuf {
|
fn local_path(&self) -> PathBuf {
|
||||||
self.store.dir.path().cloned().unwrap_or_else(PathBuf::new)
|
self.store.dir.path().cloned().unwrap_or_else(PathBuf::new)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn list_geth_accounts(&self, testnet: bool) -> Vec<Address> {
|
|
||||||
import::read_geth_accounts(testnet)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn import_geth_accounts(
|
|
||||||
&self,
|
|
||||||
vault: SecretVaultRef,
|
|
||||||
desired: Vec<Address>,
|
|
||||||
testnet: bool,
|
|
||||||
) -> Result<Vec<StoreAccountRef>, Error> {
|
|
||||||
let imported_addresses = match vault {
|
|
||||||
SecretVaultRef::Root => import::import_geth_accounts(
|
|
||||||
&*self.store.dir,
|
|
||||||
desired.into_iter().collect(),
|
|
||||||
testnet,
|
|
||||||
),
|
|
||||||
SecretVaultRef::Vault(vault_name) => {
|
|
||||||
if let Some(vault) = self.store.vaults.lock().get(&vault_name) {
|
|
||||||
import::import_geth_accounts(
|
|
||||||
vault.as_key_directory(),
|
|
||||||
desired.into_iter().collect(),
|
|
||||||
testnet,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
Err(Error::VaultNotFound)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
imported_addresses.map(|a| a.into_iter().map(|a| StoreAccountRef::root(a)).collect())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Similar to `EthStore` but may store many accounts (with different passwords) for the same `Address`
|
/// Similar to `EthStore` but may store many accounts (with different passwords) for the same `Address`
|
||||||
|
@ -16,8 +16,7 @@
|
|||||||
|
|
||||||
use std::{collections::HashSet, fs, path::Path};
|
use std::{collections::HashSet, fs, path::Path};
|
||||||
|
|
||||||
use accounts_dir::{DiskKeyFileManager, KeyDirectory, KeyFileManager, RootDiskDirectory};
|
use accounts_dir::{DiskKeyFileManager, KeyDirectory, KeyFileManager};
|
||||||
use dir;
|
|
||||||
use ethkey::Address;
|
use ethkey::Address;
|
||||||
use Error;
|
use Error;
|
||||||
|
|
||||||
@ -66,37 +65,3 @@ pub fn import_accounts(
|
|||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Provide a `HashSet` of all accounts available for import from the Geth keystore.
|
|
||||||
pub fn read_geth_accounts(testnet: bool) -> Vec<Address> {
|
|
||||||
RootDiskDirectory::at(dir::geth(testnet))
|
|
||||||
.load()
|
|
||||||
.map(|d| d.into_iter().map(|a| a.address).collect())
|
|
||||||
.unwrap_or_else(|_| Vec::new())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Import specific `desired` accounts from the Geth keystore into `dst`.
|
|
||||||
pub fn import_geth_accounts(
|
|
||||||
dst: &dyn KeyDirectory,
|
|
||||||
desired: HashSet<Address>,
|
|
||||||
testnet: bool,
|
|
||||||
) -> Result<Vec<Address>, Error> {
|
|
||||||
let src = RootDiskDirectory::at(dir::geth(testnet));
|
|
||||||
let accounts = src.load()?;
|
|
||||||
let existing_accounts = dst
|
|
||||||
.load()?
|
|
||||||
.into_iter()
|
|
||||||
.map(|a| a.address)
|
|
||||||
.collect::<HashSet<_>>();
|
|
||||||
|
|
||||||
accounts
|
|
||||||
.into_iter()
|
|
||||||
.filter(|a| !existing_accounts.contains(&a.address))
|
|
||||||
.filter(|a| desired.contains(&a.address))
|
|
||||||
.map(|a| {
|
|
||||||
let address = a.address.clone();
|
|
||||||
dst.insert(a)?;
|
|
||||||
Ok(address)
|
|
||||||
})
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
|
@ -64,7 +64,7 @@ pub use self::{
|
|||||||
account::{Crypto, SafeAccount},
|
account::{Crypto, SafeAccount},
|
||||||
error::Error,
|
error::Error,
|
||||||
ethstore::{EthMultiStore, EthStore},
|
ethstore::{EthMultiStore, EthStore},
|
||||||
import::{import_account, import_accounts, read_geth_accounts},
|
import::{import_account, import_accounts},
|
||||||
json::OpaqueKeyFile as KeyFile,
|
json::OpaqueKeyFile as KeyFile,
|
||||||
parity_wordlist::random_phrase,
|
parity_wordlist::random_phrase,
|
||||||
presale::PresaleWallet,
|
presale::PresaleWallet,
|
||||||
|
@ -221,15 +221,6 @@ pub trait SecretStore: SimpleSecretStore {
|
|||||||
|
|
||||||
/// Returns local path of the store.
|
/// Returns local path of the store.
|
||||||
fn local_path(&self) -> PathBuf;
|
fn local_path(&self) -> PathBuf;
|
||||||
/// Lists all found geth accounts.
|
|
||||||
fn list_geth_accounts(&self, testnet: bool) -> Vec<Address>;
|
|
||||||
/// Imports geth accounts to the store/vault.
|
|
||||||
fn import_geth_accounts(
|
|
||||||
&self,
|
|
||||||
vault: SecretVaultRef,
|
|
||||||
desired: Vec<Address>,
|
|
||||||
testnet: bool,
|
|
||||||
) -> Result<Vec<StoreAccountRef>, Error>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl StoreAccountRef {
|
impl StoreAccountRef {
|
||||||
|
@ -572,27 +572,6 @@ impl AccountProvider {
|
|||||||
Ok(self.sstore.agree(&account, &password, other_public)?)
|
Ok(self.sstore.agree(&account, &password, other_public)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the underlying `SecretStore` reference if one exists.
|
|
||||||
pub fn list_geth_accounts(&self, testnet: bool) -> Vec<Address> {
|
|
||||||
self.sstore
|
|
||||||
.list_geth_accounts(testnet)
|
|
||||||
.into_iter()
|
|
||||||
.map(|a| Address::from(a).into())
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns the underlying `SecretStore` reference if one exists.
|
|
||||||
pub fn import_geth_accounts(
|
|
||||||
&self,
|
|
||||||
desired: Vec<Address>,
|
|
||||||
testnet: bool,
|
|
||||||
) -> Result<Vec<Address>, Error> {
|
|
||||||
self.sstore
|
|
||||||
.import_geth_accounts(SecretVaultRef::Root, desired, testnet)
|
|
||||||
.map(|a| a.into_iter().map(|a| a.address).collect())
|
|
||||||
.map_err(Into::into)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Create new vault.
|
/// Create new vault.
|
||||||
pub fn create_vault(&self, name: &str, password: &Password) -> Result<(), Error> {
|
pub fn create_vault(&self, name: &str, password: &Password) -> Result<(), Error> {
|
||||||
self.sstore.create_vault(name, password).map_err(Into::into)
|
self.sstore.create_vault(name, password).map_err(Into::into)
|
||||||
|
@ -22,7 +22,6 @@ pub enum AccountCmd {
|
|||||||
New(NewAccount),
|
New(NewAccount),
|
||||||
List(ListAccounts),
|
List(ListAccounts),
|
||||||
Import(ImportAccounts),
|
Import(ImportAccounts),
|
||||||
ImportFromGeth(ImportFromGethAccounts),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
@ -46,16 +45,6 @@ pub struct ImportAccounts {
|
|||||||
pub spec: SpecType,
|
pub spec: SpecType,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parameters for geth accounts' import
|
|
||||||
#[derive(Debug, PartialEq)]
|
|
||||||
pub struct ImportFromGethAccounts {
|
|
||||||
/// import mainnet (false) or testnet (true) accounts
|
|
||||||
pub testnet: bool,
|
|
||||||
/// directory to import accounts to
|
|
||||||
pub to: String,
|
|
||||||
pub spec: SpecType,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(feature = "accounts"))]
|
#[cfg(not(feature = "accounts"))]
|
||||||
pub fn execute(_cmd: AccountCmd) -> Result<String, String> {
|
pub fn execute(_cmd: AccountCmd) -> Result<String, String> {
|
||||||
Err("Account management is deprecated. Please see #9997 for alternatives:\nhttps://github.com/paritytech/parity-ethereum/issues/9997".into())
|
Err("Account management is deprecated. Please see #9997 for alternatives:\nhttps://github.com/paritytech/parity-ethereum/issues/9997".into())
|
||||||
@ -65,10 +54,7 @@ pub fn execute(_cmd: AccountCmd) -> Result<String, String> {
|
|||||||
mod command {
|
mod command {
|
||||||
use super::*;
|
use super::*;
|
||||||
use accounts::{AccountProvider, AccountProviderSettings};
|
use accounts::{AccountProvider, AccountProviderSettings};
|
||||||
use ethstore::{
|
use ethstore::{accounts_dir::RootDiskDirectory, import_account, import_accounts, EthStore};
|
||||||
accounts_dir::RootDiskDirectory, import_account, import_accounts, read_geth_accounts,
|
|
||||||
EthStore, SecretStore, SecretVaultRef,
|
|
||||||
};
|
|
||||||
use helpers::{password_from_file, password_prompt};
|
use helpers::{password_from_file, password_prompt};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
@ -77,7 +63,6 @@ mod command {
|
|||||||
AccountCmd::New(new_cmd) => new(new_cmd),
|
AccountCmd::New(new_cmd) => new(new_cmd),
|
||||||
AccountCmd::List(list_cmd) => list(list_cmd),
|
AccountCmd::List(list_cmd) => list(list_cmd),
|
||||||
AccountCmd::Import(import_cmd) => import(import_cmd),
|
AccountCmd::Import(import_cmd) => import(import_cmd),
|
||||||
AccountCmd::ImportFromGeth(import_geth_cmd) => import_geth(import_geth_cmd),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,25 +133,6 @@ mod command {
|
|||||||
|
|
||||||
Ok(format!("{} account(s) imported", imported))
|
Ok(format!("{} account(s) imported", imported))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn import_geth(i: ImportFromGethAccounts) -> Result<String, String> {
|
|
||||||
use ethstore::Error;
|
|
||||||
use std::io::ErrorKind;
|
|
||||||
|
|
||||||
let dir = Box::new(keys_dir(i.to, i.spec)?);
|
|
||||||
let secret_store = Box::new(secret_store(dir, None)?);
|
|
||||||
let geth_accounts = read_geth_accounts(i.testnet);
|
|
||||||
match secret_store.import_geth_accounts(SecretVaultRef::Root, geth_accounts, i.testnet) {
|
|
||||||
Ok(v) => Ok(format!(
|
|
||||||
"Successfully imported {} account(s) from geth.",
|
|
||||||
v.len()
|
|
||||||
)),
|
|
||||||
Err(Error::Io(ref io_err)) if io_err.kind() == ErrorKind::NotFound => {
|
|
||||||
Err("Failed to find geth keys folder.".into())
|
|
||||||
}
|
|
||||||
Err(err) => Err(format!("Import geth accounts failed. {}", err)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "accounts")]
|
#[cfg(feature = "accounts")]
|
||||||
|
@ -235,17 +235,6 @@ usage! {
|
|||||||
{
|
{
|
||||||
"Print the hashed light clients headers of the given --chain (default: mainnet) in a JSON format. To be used as hardcoded headers in a genesis file.",
|
"Print the hashed light clients headers of the given --chain (default: mainnet) in a JSON format. To be used as hardcoded headers in a genesis file.",
|
||||||
}
|
}
|
||||||
|
|
||||||
// CMD removed in 2.0
|
|
||||||
|
|
||||||
CMD cmd_dapp
|
|
||||||
{
|
|
||||||
"Manage dapps",
|
|
||||||
|
|
||||||
ARG arg_dapp_path: (Option<String>) = None,
|
|
||||||
"<PATH>",
|
|
||||||
"Path to the dapps",
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
// Global flags and arguments
|
// Global flags and arguments
|
||||||
@ -321,7 +310,7 @@ usage! {
|
|||||||
["Convenience Options"]
|
["Convenience Options"]
|
||||||
FLAG flag_unsafe_expose: (bool) = false, or |c: &Config| c.misc.as_ref()?.unsafe_expose,
|
FLAG flag_unsafe_expose: (bool) = false, or |c: &Config| c.misc.as_ref()?.unsafe_expose,
|
||||||
"--unsafe-expose",
|
"--unsafe-expose",
|
||||||
"All servers will listen on external interfaces and will be remotely accessible. It's equivalent with setting the following: --[ws,jsonrpc,ipfs-api,secretstore,stratum,dapps,secretstore-http]-interface=all --*-hosts=all This option is UNSAFE and should be used with great care!",
|
"All servers will listen on external interfaces and will be remotely accessible. It's equivalent with setting the following: --[ws,jsonrpc,ipfs-api,secretstore,stratum,secretstore-http]-interface=all --*-hosts=all This option is UNSAFE and should be used with great care!",
|
||||||
|
|
||||||
ARG arg_config: (String) = "$BASE/config.toml", or |_| None,
|
ARG arg_config: (String) = "$BASE/config.toml", or |_| None,
|
||||||
"-c, --config=[CONFIG]",
|
"-c, --config=[CONFIG]",
|
||||||
@ -494,9 +483,9 @@ usage! {
|
|||||||
"--jsonrpc-interface=[IP]",
|
"--jsonrpc-interface=[IP]",
|
||||||
"Specify the hostname portion of the HTTP JSON-RPC API server, IP should be an interface's IP address, or all (all interfaces) or local.",
|
"Specify the hostname portion of the HTTP JSON-RPC API server, IP should be an interface's IP address, or all (all interfaces) or local.",
|
||||||
|
|
||||||
ARG arg_jsonrpc_apis: (String) = "web3,eth,pubsub,net,parity,private,parity_pubsub,traces,rpc,shh,shh_pubsub", or |c: &Config| c.rpc.as_ref()?.apis.as_ref().map(|vec| vec.join(",")),
|
ARG arg_jsonrpc_apis: (String) = "web3,eth,pubsub,net,parity,private,parity_pubsub,traces,shh,shh_pubsub", or |c: &Config| c.rpc.as_ref()?.apis.as_ref().map(|vec| vec.join(",")),
|
||||||
"--jsonrpc-apis=[APIS]",
|
"--jsonrpc-apis=[APIS]",
|
||||||
"Specify the APIs available through the HTTP JSON-RPC interface using a comma-delimited list of API names. Possible names are: all, safe, debug, web3, net, eth, pubsub, personal, signer, parity, parity_pubsub, parity_accounts, parity_set, traces, rpc, secretstore, shh, shh_pubsub. You can also disable a specific API by putting '-' in the front, example: all,-personal. 'safe' enables the following APIs: web3, net, eth, pubsub, parity, parity_pubsub, traces, rpc, shh, shh_pubsub",
|
"Specify the APIs available through the HTTP JSON-RPC interface using a comma-delimited list of API names. Possible names are: all, safe, debug, web3, net, eth, pubsub, personal, signer, parity, parity_pubsub, parity_accounts, parity_set, traces, secretstore, shh, shh_pubsub. You can also disable a specific API by putting '-' in the front, example: all,-personal. 'safe' enables the following APIs: web3, net, eth, pubsub, parity, parity_pubsub, traces, shh, shh_pubsub",
|
||||||
|
|
||||||
ARG arg_jsonrpc_hosts: (String) = "none", or |c: &Config| c.rpc.as_ref()?.hosts.as_ref().map(|vec| vec.join(",")),
|
ARG arg_jsonrpc_hosts: (String) = "none", or |c: &Config| c.rpc.as_ref()?.hosts.as_ref().map(|vec| vec.join(",")),
|
||||||
"--jsonrpc-hosts=[HOSTS]",
|
"--jsonrpc-hosts=[HOSTS]",
|
||||||
@ -535,9 +524,9 @@ usage! {
|
|||||||
"--ws-interface=[IP]",
|
"--ws-interface=[IP]",
|
||||||
"Specify the hostname portion of the WebSockets JSON-RPC server, IP should be an interface's IP address, or all (all interfaces) or local.",
|
"Specify the hostname portion of the WebSockets JSON-RPC server, IP should be an interface's IP address, or all (all interfaces) or local.",
|
||||||
|
|
||||||
ARG arg_ws_apis: (String) = "web3,eth,pubsub,net,parity,parity_pubsub,private,traces,rpc,shh,shh_pubsub", or |c: &Config| c.websockets.as_ref()?.apis.as_ref().map(|vec| vec.join(",")),
|
ARG arg_ws_apis: (String) = "web3,eth,pubsub,net,parity,parity_pubsub,private,traces,shh,shh_pubsub", or |c: &Config| c.websockets.as_ref()?.apis.as_ref().map(|vec| vec.join(",")),
|
||||||
"--ws-apis=[APIS]",
|
"--ws-apis=[APIS]",
|
||||||
"Specify the JSON-RPC APIs available through the WebSockets interface using a comma-delimited list of API names. Possible names are: all, safe, web3, net, eth, pubsub, personal, signer, parity, parity_pubsub, parity_accounts, parity_set, traces, rpc, secretstore, shh, shh_pubsub. You can also disable a specific API by putting '-' in the front, example: all,-personal. 'safe' enables the following APIs: web3, net, eth, pubsub, parity, parity_pubsub, traces, rpc, shh, shh_pubsub",
|
"Specify the JSON-RPC APIs available through the WebSockets interface using a comma-delimited list of API names. Possible names are: all, safe, web3, net, eth, pubsub, personal, signer, parity, parity_pubsub, parity_accounts, parity_set, traces, secretstore, shh, shh_pubsub. You can also disable a specific API by putting '-' in the front, example: all,-personal. 'safe' enables the following APIs: web3, net, eth, pubsub, parity, parity_pubsub, traces, shh, shh_pubsub",
|
||||||
|
|
||||||
ARG arg_ws_origins: (String) = "parity://*,chrome-extension://*,moz-extension://*", or |c: &Config| c.websockets.as_ref()?.origins.as_ref().map(|vec| vec.join(",")),
|
ARG arg_ws_origins: (String) = "parity://*,chrome-extension://*,moz-extension://*", or |c: &Config| c.websockets.as_ref()?.origins.as_ref().map(|vec| vec.join(",")),
|
||||||
"--ws-origins=[URL]",
|
"--ws-origins=[URL]",
|
||||||
@ -560,9 +549,9 @@ usage! {
|
|||||||
"--ipc-path=[PATH]",
|
"--ipc-path=[PATH]",
|
||||||
"Specify custom path for JSON-RPC over IPC service.",
|
"Specify custom path for JSON-RPC over IPC service.",
|
||||||
|
|
||||||
ARG arg_ipc_apis: (String) = "web3,eth,pubsub,net,parity,parity_pubsub,parity_accounts,private,traces,rpc,shh,shh_pubsub", or |c: &Config| c.ipc.as_ref()?.apis.as_ref().map(|vec| vec.join(",")),
|
ARG arg_ipc_apis: (String) = "web3,eth,pubsub,net,parity,parity_pubsub,parity_accounts,private,traces,shh,shh_pubsub", or |c: &Config| c.ipc.as_ref()?.apis.as_ref().map(|vec| vec.join(",")),
|
||||||
"--ipc-apis=[APIS]",
|
"--ipc-apis=[APIS]",
|
||||||
"Specify custom API set available via JSON-RPC over IPC using a comma-delimited list of API names. Possible names are: all, safe, web3, net, eth, pubsub, personal, signer, parity, parity_pubsub, parity_accounts, parity_set, traces, rpc, secretstore, shh, shh_pubsub. You can also disable a specific API by putting '-' in the front, example: all,-personal. 'safe' enables the following APIs: web3, net, eth, pubsub, parity, parity_pubsub, traces, rpc, shh, shh_pubsub",
|
"Specify custom API set available via JSON-RPC over IPC using a comma-delimited list of API names. Possible names are: all, safe, web3, net, eth, pubsub, personal, signer, parity, parity_pubsub, parity_accounts, parity_set, traces, secretstore, shh, shh_pubsub. You can also disable a specific API by putting '-' in the front, example: all,-personal. 'safe' enables the following APIs: web3, net, eth, pubsub, parity, parity_pubsub, traces, shh, shh_pubsub",
|
||||||
|
|
||||||
["API and Console Options – IPFS"]
|
["API and Console Options – IPFS"]
|
||||||
FLAG flag_ipfs_api: (bool) = false, or |c: &Config| c.ipfs.as_ref()?.enable.clone(),
|
FLAG flag_ipfs_api: (bool) = false, or |c: &Config| c.ipfs.as_ref()?.enable.clone(),
|
||||||
@ -925,210 +914,6 @@ usage! {
|
|||||||
ARG arg_whisper_pool_size: (usize) = 10usize, or |c: &Config| c.whisper.as_ref()?.pool_size.clone(),
|
ARG arg_whisper_pool_size: (usize) = 10usize, or |c: &Config| c.whisper.as_ref()?.pool_size.clone(),
|
||||||
"--whisper-pool-size=[MB]",
|
"--whisper-pool-size=[MB]",
|
||||||
"Target size of the whisper message pool in megabytes.",
|
"Target size of the whisper message pool in megabytes.",
|
||||||
|
|
||||||
["Legacy Options"]
|
|
||||||
// Options that are hidden from config, but are still unique for its functionality.
|
|
||||||
|
|
||||||
FLAG flag_geth: (bool) = false, or |_| None,
|
|
||||||
"--geth",
|
|
||||||
"Run in Geth-compatibility mode. Sets the IPC path to be the same as Geth's. Overrides the --ipc-path and --ipcpath options. Alters RPCs to reflect Geth bugs. Includes the personal_ RPC by default.",
|
|
||||||
|
|
||||||
FLAG flag_import_geth_keys: (bool) = false, or |_| None,
|
|
||||||
"--import-geth-keys",
|
|
||||||
"Attempt to import keys from Geth client.",
|
|
||||||
|
|
||||||
// Options that either do nothing, or are replaced by other options.
|
|
||||||
// FLAG Removed in 1.6 or before.
|
|
||||||
|
|
||||||
FLAG flag_warp: (bool) = false, or |_| None,
|
|
||||||
"--warp",
|
|
||||||
"Does nothing; warp sync is enabled by default. Use --no-warp to disable.",
|
|
||||||
|
|
||||||
FLAG flag_jsonrpc: (bool) = false, or |_| None,
|
|
||||||
"-j, --jsonrpc",
|
|
||||||
"Does nothing; HTTP JSON-RPC is on by default now.",
|
|
||||||
|
|
||||||
FLAG flag_rpc: (bool) = false, or |_| None,
|
|
||||||
"--rpc",
|
|
||||||
"Does nothing; HTTP JSON-RPC is on by default now.",
|
|
||||||
|
|
||||||
FLAG flag_jsonrpc_off: (bool) = false, or |_| None,
|
|
||||||
"--jsonrpc-off",
|
|
||||||
"Equivalent to --no-jsonrpc.",
|
|
||||||
|
|
||||||
FLAG flag_webapp: (bool) = false, or |_| None,
|
|
||||||
"-w, --webapp",
|
|
||||||
"Does nothing; dapps server has been removed.",
|
|
||||||
|
|
||||||
FLAG flag_dapps_off: (bool) = false, or |_| None,
|
|
||||||
"--dapps-off",
|
|
||||||
"Equivalent to --no-dapps.",
|
|
||||||
|
|
||||||
FLAG flag_ipcdisable: (bool) = false, or |_| None,
|
|
||||||
"--ipcdisable",
|
|
||||||
"Equivalent to --no-ipc.",
|
|
||||||
|
|
||||||
FLAG flag_ipc_off: (bool) = false, or |_| None,
|
|
||||||
"--ipc-off",
|
|
||||||
"Equivalent to --no-ipc.",
|
|
||||||
|
|
||||||
FLAG flag_testnet: (bool) = false, or |_| None,
|
|
||||||
"--testnet",
|
|
||||||
"Testnet mode. Equivalent to --chain testnet. Overrides the --keys-path option.",
|
|
||||||
|
|
||||||
FLAG flag_nodiscover: (bool) = false, or |_| None,
|
|
||||||
"--nodiscover",
|
|
||||||
"Equivalent to --no-discovery.",
|
|
||||||
|
|
||||||
// FLAG Removed in 1.7.
|
|
||||||
|
|
||||||
FLAG flag_dapps_apis_all: (bool) = false, or |_| None,
|
|
||||||
"--dapps-apis-all",
|
|
||||||
"Dapps server is merged with HTTP JSON-RPC server. Use --jsonrpc-apis.",
|
|
||||||
|
|
||||||
// FLAG Removed in 1.11.
|
|
||||||
|
|
||||||
FLAG flag_public_node: (bool) = false, or |_| None,
|
|
||||||
"--public-node",
|
|
||||||
"Does nothing; Public node is removed from Parity.",
|
|
||||||
|
|
||||||
FLAG flag_force_ui: (bool) = false, or |_| None,
|
|
||||||
"--force-ui",
|
|
||||||
"Does nothing; UI is now a separate project.",
|
|
||||||
|
|
||||||
FLAG flag_no_ui: (bool) = false, or |_| None,
|
|
||||||
"--no-ui",
|
|
||||||
"Does nothing; UI is now a separate project.",
|
|
||||||
|
|
||||||
FLAG flag_ui_no_validation: (bool) = false, or |_| None,
|
|
||||||
"--ui-no-validation",
|
|
||||||
"Does nothing; UI is now a separate project.",
|
|
||||||
|
|
||||||
// FLAG Removed in 2.0.
|
|
||||||
|
|
||||||
FLAG flag_fast_and_loose: (bool) = false, or |_| None,
|
|
||||||
"--fast-and-loose",
|
|
||||||
"Does nothing; DB WAL is always activated.",
|
|
||||||
|
|
||||||
FLAG flag_no_dapps: (bool) = false, or |c: &Config| c.dapps.as_ref()?._legacy_disable.clone(),
|
|
||||||
"--no-dapps",
|
|
||||||
"Disable the Dapps server (e.g. status page).",
|
|
||||||
|
|
||||||
// ARG Removed in 1.6 or before.
|
|
||||||
|
|
||||||
ARG arg_etherbase: (Option<String>) = None, or |_| None,
|
|
||||||
"--etherbase=[ADDRESS]",
|
|
||||||
"Equivalent to --author ADDRESS.",
|
|
||||||
|
|
||||||
ARG arg_extradata: (Option<String>) = None, or |_| None,
|
|
||||||
"--extradata=[STRING]",
|
|
||||||
"Equivalent to --extra-data STRING.",
|
|
||||||
|
|
||||||
ARG arg_datadir: (Option<String>) = None, or |_| None,
|
|
||||||
"--datadir=[PATH]",
|
|
||||||
"Equivalent to --base-path PATH.",
|
|
||||||
|
|
||||||
ARG arg_networkid: (Option<u64>) = None, or |_| None,
|
|
||||||
"--networkid=[INDEX]",
|
|
||||||
"Equivalent to --network-id INDEX.",
|
|
||||||
|
|
||||||
ARG arg_peers: (Option<u16>) = None, or |_| None,
|
|
||||||
"--peers=[NUM]",
|
|
||||||
"Equivalent to --min-peers NUM.",
|
|
||||||
|
|
||||||
ARG arg_nodekey: (Option<String>) = None, or |_| None,
|
|
||||||
"--nodekey=[KEY]",
|
|
||||||
"Equivalent to --node-key KEY.",
|
|
||||||
|
|
||||||
ARG arg_rpcaddr: (Option<String>) = None, or |_| None,
|
|
||||||
"--rpcaddr=[IP]",
|
|
||||||
"Equivalent to --jsonrpc-interface IP.",
|
|
||||||
|
|
||||||
ARG arg_rpcport: (Option<u16>) = None, or |_| None,
|
|
||||||
"--rpcport=[PORT]",
|
|
||||||
"Equivalent to --jsonrpc-port PORT.",
|
|
||||||
|
|
||||||
ARG arg_rpcapi: (Option<String>) = None, or |_| None,
|
|
||||||
"--rpcapi=[APIS]",
|
|
||||||
"Equivalent to --jsonrpc-apis APIS.",
|
|
||||||
|
|
||||||
ARG arg_rpccorsdomain: (Option<String>) = None, or |_| None,
|
|
||||||
"--rpccorsdomain=[URL]",
|
|
||||||
"Equivalent to --jsonrpc-cors URL.",
|
|
||||||
|
|
||||||
ARG arg_ipcapi: (Option<String>) = None, or |_| None,
|
|
||||||
"--ipcapi=[APIS]",
|
|
||||||
"Equivalent to --ipc-apis APIS.",
|
|
||||||
|
|
||||||
ARG arg_ipcpath: (Option<String>) = None, or |_| None,
|
|
||||||
"--ipcpath=[PATH]",
|
|
||||||
"Equivalent to --ipc-path PATH.",
|
|
||||||
|
|
||||||
ARG arg_gasprice: (Option<String>) = None, or |_| None,
|
|
||||||
"--gasprice=[WEI]",
|
|
||||||
"Equivalent to --min-gas-price WEI.",
|
|
||||||
|
|
||||||
ARG arg_cache: (Option<u32>) = None, or |_| None,
|
|
||||||
"--cache=[MB]",
|
|
||||||
"Equivalent to --cache-size MB.",
|
|
||||||
|
|
||||||
// ARG Removed in 1.7.
|
|
||||||
|
|
||||||
ARG arg_dapps_port: (Option<u16>) = None, or |c: &Config| c.dapps.as_ref()?._legacy_port.clone(),
|
|
||||||
"--dapps-port=[PORT]",
|
|
||||||
"Does nothing; dapps server has been removed.",
|
|
||||||
|
|
||||||
ARG arg_dapps_interface: (Option<String>) = None, or |c: &Config| c.dapps.as_ref()?._legacy_interface.clone(),
|
|
||||||
"--dapps-interface=[IP]",
|
|
||||||
"Does nothing; dapps server has been removed.",
|
|
||||||
|
|
||||||
ARG arg_dapps_hosts: (Option<String>) = None, or |c: &Config| c.dapps.as_ref()?._legacy_hosts.as_ref().map(|vec| vec.join(",")),
|
|
||||||
"--dapps-hosts=[HOSTS]",
|
|
||||||
"Does nothing; dapps server has been removed.",
|
|
||||||
|
|
||||||
ARG arg_dapps_cors: (Option<String>) = None, or |c: &Config| c.dapps.as_ref()?._legacy_cors.clone(),
|
|
||||||
"--dapps-cors=[URL]",
|
|
||||||
"Does nothing; dapps server has been removed.",
|
|
||||||
|
|
||||||
ARG arg_dapps_user: (Option<String>) = None, or |c: &Config| c.dapps.as_ref()?._legacy_user.clone(),
|
|
||||||
"--dapps-user=[USERNAME]",
|
|
||||||
"Dapps server authentication has been removed.",
|
|
||||||
|
|
||||||
ARG arg_dapps_pass: (Option<String>) = None, or |c: &Config| c.dapps.as_ref()?._legacy_pass.clone(),
|
|
||||||
"--dapps-pass=[PASSWORD]",
|
|
||||||
"Dapps server authentication has been removed.",
|
|
||||||
|
|
||||||
// ARG removed in 1.11.
|
|
||||||
|
|
||||||
ARG arg_ui_interface: (Option<String>) = None, or |_| None,
|
|
||||||
"--ui-interface=[IP]",
|
|
||||||
"Does nothing; UI is now a separate project.",
|
|
||||||
|
|
||||||
ARG arg_ui_hosts: (Option<String>) = None, or |_| None,
|
|
||||||
"--ui-hosts=[HOSTS]",
|
|
||||||
"Does nothing; UI is now a separate project.",
|
|
||||||
|
|
||||||
ARG arg_ui_port: (Option<u16>) = None, or |_| None,
|
|
||||||
"--ui-port=[PORT]",
|
|
||||||
"Does nothing; UI is now a separate project.",
|
|
||||||
|
|
||||||
ARG arg_tx_queue_ban_count: (Option<u16>) = None, or |c: &Config| c.mining.as_ref()?.tx_queue_ban_count.clone(),
|
|
||||||
"--tx-queue-ban-count=[C]",
|
|
||||||
"Not supported.",
|
|
||||||
|
|
||||||
ARG arg_tx_queue_ban_time: (Option<u16>) = None, or |c: &Config| c.mining.as_ref()?.tx_queue_ban_time.clone(),
|
|
||||||
"--tx-queue-ban-time=[SEC]",
|
|
||||||
"Not supported.",
|
|
||||||
|
|
||||||
// ARG removed in 2.0.
|
|
||||||
|
|
||||||
ARG arg_dapps_path: (Option<String>) = None, or |c: &Config| c.dapps.as_ref()?._legacy_path.clone(),
|
|
||||||
"--dapps-path=[PATH]",
|
|
||||||
"Specify directory where dapps should be installed.",
|
|
||||||
|
|
||||||
ARG arg_ntp_servers: (Option<String>) = None, or |_| None,
|
|
||||||
"--ntp-servers=[HOSTS]",
|
|
||||||
"Does nothing; checking if clock is sync with NTP servers is now done on the UI.",
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1142,7 +927,6 @@ struct Config {
|
|||||||
rpc: Option<Rpc>,
|
rpc: Option<Rpc>,
|
||||||
websockets: Option<Ws>,
|
websockets: Option<Ws>,
|
||||||
ipc: Option<Ipc>,
|
ipc: Option<Ipc>,
|
||||||
dapps: Option<Dapps>,
|
|
||||||
secretstore: Option<SecretStore>,
|
secretstore: Option<SecretStore>,
|
||||||
private_tx: Option<PrivateTransactions>,
|
private_tx: Option<PrivateTransactions>,
|
||||||
ipfs: Option<Ipfs>,
|
ipfs: Option<Ipfs>,
|
||||||
@ -1175,9 +959,6 @@ struct Operating {
|
|||||||
light: Option<bool>,
|
light: Option<bool>,
|
||||||
no_persistent_txqueue: Option<bool>,
|
no_persistent_txqueue: Option<bool>,
|
||||||
no_hardcoded_sync: Option<bool>,
|
no_hardcoded_sync: Option<bool>,
|
||||||
|
|
||||||
#[serde(rename = "public_node")]
|
|
||||||
_legacy_public_node: Option<bool>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug, PartialEq, Deserialize)]
|
#[derive(Default, Debug, PartialEq, Deserialize)]
|
||||||
@ -1206,17 +987,6 @@ struct PrivateTransactions {
|
|||||||
#[serde(deny_unknown_fields)]
|
#[serde(deny_unknown_fields)]
|
||||||
struct Ui {
|
struct Ui {
|
||||||
path: Option<String>,
|
path: Option<String>,
|
||||||
|
|
||||||
#[serde(rename = "force")]
|
|
||||||
_legacy_force: Option<bool>,
|
|
||||||
#[serde(rename = "disable")]
|
|
||||||
_legacy_disable: Option<bool>,
|
|
||||||
#[serde(rename = "port")]
|
|
||||||
_legacy_port: Option<u16>,
|
|
||||||
#[serde(rename = "interface")]
|
|
||||||
_legacy_interface: Option<String>,
|
|
||||||
#[serde(rename = "hosts")]
|
|
||||||
_legacy_hosts: Option<Vec<String>>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug, PartialEq, Deserialize)]
|
#[derive(Default, Debug, PartialEq, Deserialize)]
|
||||||
@ -1279,27 +1049,6 @@ struct Ipc {
|
|||||||
apis: Option<Vec<String>>,
|
apis: Option<Vec<String>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug, PartialEq, Deserialize)]
|
|
||||||
#[serde(deny_unknown_fields)]
|
|
||||||
struct Dapps {
|
|
||||||
#[serde(rename = "disable")]
|
|
||||||
_legacy_disable: Option<bool>,
|
|
||||||
#[serde(rename = "port")]
|
|
||||||
_legacy_port: Option<u16>,
|
|
||||||
#[serde(rename = "interface")]
|
|
||||||
_legacy_interface: Option<String>,
|
|
||||||
#[serde(rename = "hosts")]
|
|
||||||
_legacy_hosts: Option<Vec<String>>,
|
|
||||||
#[serde(rename = "cors")]
|
|
||||||
_legacy_cors: Option<String>,
|
|
||||||
#[serde(rename = "path")]
|
|
||||||
_legacy_path: Option<String>,
|
|
||||||
#[serde(rename = "user")]
|
|
||||||
_legacy_user: Option<String>,
|
|
||||||
#[serde(rename = "pass")]
|
|
||||||
_legacy_pass: Option<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Default, Debug, PartialEq, Deserialize)]
|
#[derive(Default, Debug, PartialEq, Deserialize)]
|
||||||
#[serde(deny_unknown_fields)]
|
#[serde(deny_unknown_fields)]
|
||||||
struct SecretStore {
|
struct SecretStore {
|
||||||
@ -1435,8 +1184,8 @@ struct Light {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::{
|
use super::{
|
||||||
Account, Args, ArgsError, Config, Dapps, Footprint, Ipc, Ipfs, Light, Mining, Misc,
|
Account, Args, ArgsError, Config, Footprint, Ipc, Ipfs, Light, Mining, Misc, Network,
|
||||||
Network, Operating, Rpc, SecretStore, Snapshots, Ui, Whisper, Ws,
|
Operating, Rpc, SecretStore, Snapshots, Whisper, Ws,
|
||||||
};
|
};
|
||||||
use clap::ErrorKind as ClapErrorKind;
|
use clap::ErrorKind as ClapErrorKind;
|
||||||
use toml;
|
use toml;
|
||||||
@ -1456,21 +1205,12 @@ mod tests {
|
|||||||
assert_eq!(args.arg_chain, "dev");
|
assert_eq!(args.arg_chain, "dev");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn should_not_crash_on_warp() {
|
|
||||||
let args = Args::parse(&["parity", "--warp"]);
|
|
||||||
assert!(args.is_ok());
|
|
||||||
|
|
||||||
let args = Args::parse(&["parity", "account", "list", "--warp"]);
|
|
||||||
assert!(args.is_ok());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_reject_invalid_values() {
|
fn should_reject_invalid_values() {
|
||||||
let args = Args::parse(&["parity", "--cache=20"]);
|
let args = Args::parse(&["parity", "--jsonrpc-port=8545"]);
|
||||||
assert!(args.is_ok());
|
assert!(args.is_ok());
|
||||||
|
|
||||||
let args = Args::parse(&["parity", "--cache=asd"]);
|
let args = Args::parse(&["parity", "--jsonrpc-port=asd"]);
|
||||||
assert!(args.is_err());
|
assert!(args.is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1550,29 +1290,18 @@ mod tests {
|
|||||||
"~/.safe/1",
|
"~/.safe/1",
|
||||||
"--password",
|
"--password",
|
||||||
"~/.safe/2",
|
"~/.safe/2",
|
||||||
"--ui-port",
|
|
||||||
"8123",
|
|
||||||
])
|
])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
args.arg_password,
|
args.arg_password,
|
||||||
vec!["~/.safe/1".to_owned(), "~/.safe/2".to_owned()]
|
vec!["~/.safe/1".to_owned(), "~/.safe/2".to_owned()]
|
||||||
);
|
);
|
||||||
assert_eq!(args.arg_ui_port, Some(8123));
|
|
||||||
|
|
||||||
let args = Args::parse(&[
|
let args = Args::parse(&["parity", "--password", "~/.safe/1,~/.safe/2"]).unwrap();
|
||||||
"parity",
|
|
||||||
"--password",
|
|
||||||
"~/.safe/1,~/.safe/2",
|
|
||||||
"--ui-port",
|
|
||||||
"8123",
|
|
||||||
])
|
|
||||||
.unwrap();
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
args.arg_password,
|
args.arg_password,
|
||||||
vec!["~/.safe/1".to_owned(), "~/.safe/2".to_owned()]
|
vec!["~/.safe/1".to_owned(), "~/.safe/2".to_owned()]
|
||||||
);
|
);
|
||||||
assert_eq!(args.arg_ui_port, Some(8123));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -1638,7 +1367,6 @@ mod tests {
|
|||||||
args,
|
args,
|
||||||
Args {
|
Args {
|
||||||
// Commands
|
// Commands
|
||||||
cmd_dapp: false,
|
|
||||||
cmd_daemon: false,
|
cmd_daemon: false,
|
||||||
cmd_account: false,
|
cmd_account: false,
|
||||||
cmd_account_new: false,
|
cmd_account_new: false,
|
||||||
@ -1678,7 +1406,6 @@ mod tests {
|
|||||||
|
|
||||||
arg_signer_sign_id: None,
|
arg_signer_sign_id: None,
|
||||||
arg_signer_reject_id: None,
|
arg_signer_reject_id: None,
|
||||||
arg_dapp_path: None,
|
|
||||||
arg_account_import_path: None,
|
arg_account_import_path: None,
|
||||||
arg_wallet_import_path: None,
|
arg_wallet_import_path: None,
|
||||||
arg_db_reset_num: 10,
|
arg_db_reset_num: 10,
|
||||||
@ -1691,7 +1418,6 @@ mod tests {
|
|||||||
arg_auto_update_delay: 200u16,
|
arg_auto_update_delay: 200u16,
|
||||||
arg_auto_update_check_frequency: 50u16,
|
arg_auto_update_check_frequency: 50u16,
|
||||||
arg_release_track: "current".into(),
|
arg_release_track: "current".into(),
|
||||||
flag_public_node: false,
|
|
||||||
flag_no_download: false,
|
flag_no_download: false,
|
||||||
flag_no_consensus: false,
|
flag_no_consensus: false,
|
||||||
arg_chain: "xyz".into(),
|
arg_chain: "xyz".into(),
|
||||||
@ -1725,13 +1451,7 @@ mod tests {
|
|||||||
arg_private_sstore_url: Some("http://localhost:8082".into()),
|
arg_private_sstore_url: Some("http://localhost:8082".into()),
|
||||||
arg_private_sstore_threshold: Some(0),
|
arg_private_sstore_threshold: Some(0),
|
||||||
|
|
||||||
flag_force_ui: false,
|
|
||||||
flag_no_ui: false,
|
|
||||||
arg_ui_port: None,
|
|
||||||
arg_ui_interface: None,
|
|
||||||
arg_ui_hosts: None,
|
|
||||||
arg_ui_path: "$HOME/.parity/signer".into(),
|
arg_ui_path: "$HOME/.parity/signer".into(),
|
||||||
flag_ui_no_validation: false,
|
|
||||||
|
|
||||||
// -- Networking Options
|
// -- Networking Options
|
||||||
flag_no_warp: false,
|
flag_no_warp: false,
|
||||||
@ -1751,6 +1471,7 @@ mod tests {
|
|||||||
flag_reserved_only: false,
|
flag_reserved_only: false,
|
||||||
flag_no_ancient_blocks: false,
|
flag_no_ancient_blocks: false,
|
||||||
flag_no_serve_light: false,
|
flag_no_serve_light: false,
|
||||||
|
arg_warp_barrier: None,
|
||||||
|
|
||||||
// -- API and Console Options
|
// -- API and Console Options
|
||||||
// RPC
|
// RPC
|
||||||
@ -1760,7 +1481,7 @@ mod tests {
|
|||||||
arg_jsonrpc_port: 8545u16,
|
arg_jsonrpc_port: 8545u16,
|
||||||
arg_jsonrpc_interface: "local".into(),
|
arg_jsonrpc_interface: "local".into(),
|
||||||
arg_jsonrpc_cors: "null".into(),
|
arg_jsonrpc_cors: "null".into(),
|
||||||
arg_jsonrpc_apis: "web3,eth,net,parity,traces,rpc,secretstore".into(),
|
arg_jsonrpc_apis: "web3,eth,net,parity,traces,secretstore".into(),
|
||||||
arg_jsonrpc_hosts: "none".into(),
|
arg_jsonrpc_hosts: "none".into(),
|
||||||
arg_jsonrpc_server_threads: None,
|
arg_jsonrpc_server_threads: None,
|
||||||
arg_jsonrpc_threads: 4,
|
arg_jsonrpc_threads: 4,
|
||||||
@ -1772,7 +1493,7 @@ mod tests {
|
|||||||
flag_no_ws: false,
|
flag_no_ws: false,
|
||||||
arg_ws_port: 8546u16,
|
arg_ws_port: 8546u16,
|
||||||
arg_ws_interface: "local".into(),
|
arg_ws_interface: "local".into(),
|
||||||
arg_ws_apis: "web3,eth,net,parity,traces,rpc,secretstore".into(),
|
arg_ws_apis: "web3,eth,net,parity,traces,secretstore".into(),
|
||||||
arg_ws_origins: "none".into(),
|
arg_ws_origins: "none".into(),
|
||||||
arg_ws_hosts: "none".into(),
|
arg_ws_hosts: "none".into(),
|
||||||
arg_ws_max_connections: 100,
|
arg_ws_max_connections: 100,
|
||||||
@ -1780,13 +1501,9 @@ mod tests {
|
|||||||
// IPC
|
// IPC
|
||||||
flag_no_ipc: false,
|
flag_no_ipc: false,
|
||||||
arg_ipc_path: "$HOME/.parity/jsonrpc.ipc".into(),
|
arg_ipc_path: "$HOME/.parity/jsonrpc.ipc".into(),
|
||||||
arg_ipc_apis: "web3,eth,net,parity,parity_accounts,personal,traces,rpc,secretstore"
|
arg_ipc_apis: "web3,eth,net,parity,parity_accounts,personal,traces,secretstore"
|
||||||
.into(),
|
.into(),
|
||||||
|
|
||||||
// DAPPS
|
|
||||||
arg_dapps_path: Some("$HOME/.parity/dapps".into()),
|
|
||||||
flag_no_dapps: false,
|
|
||||||
|
|
||||||
// SECRETSTORE
|
// SECRETSTORE
|
||||||
flag_no_secretstore: false,
|
flag_no_secretstore: false,
|
||||||
flag_no_secretstore_http: false,
|
flag_no_secretstore_http: false,
|
||||||
@ -1841,8 +1558,6 @@ mod tests {
|
|||||||
arg_tx_queue_mem_limit: 4u32,
|
arg_tx_queue_mem_limit: 4u32,
|
||||||
arg_tx_queue_locals: Some("0xdeadbeefcafe0000000000000000000000000000".into()),
|
arg_tx_queue_locals: Some("0xdeadbeefcafe0000000000000000000000000000".into()),
|
||||||
arg_tx_queue_strategy: "gas_factor".into(),
|
arg_tx_queue_strategy: "gas_factor".into(),
|
||||||
arg_tx_queue_ban_count: Some(1u16),
|
|
||||||
arg_tx_queue_ban_time: Some(180u16),
|
|
||||||
flag_remove_solved: false,
|
flag_remove_solved: false,
|
||||||
arg_notify_work: Some("http://localhost:3001".into()),
|
arg_notify_work: Some("http://localhost:3001".into()),
|
||||||
flag_refuse_service_transactions: false,
|
flag_refuse_service_transactions: false,
|
||||||
@ -1864,7 +1579,6 @@ mod tests {
|
|||||||
arg_cache_size_queue: 50u32,
|
arg_cache_size_queue: 50u32,
|
||||||
arg_cache_size_state: 25u32,
|
arg_cache_size_state: 25u32,
|
||||||
arg_cache_size: Some(128),
|
arg_cache_size: Some(128),
|
||||||
flag_fast_and_loose: false,
|
|
||||||
arg_db_compaction: "ssd".into(),
|
arg_db_compaction: "ssd".into(),
|
||||||
arg_fat_db: "auto".into(),
|
arg_fat_db: "auto".into(),
|
||||||
flag_scale_verifiers: true,
|
flag_scale_verifiers: true,
|
||||||
@ -1896,48 +1610,10 @@ mod tests {
|
|||||||
flag_whisper: false,
|
flag_whisper: false,
|
||||||
arg_whisper_pool_size: 20,
|
arg_whisper_pool_size: 20,
|
||||||
|
|
||||||
// -- Legacy Options
|
|
||||||
flag_warp: false,
|
|
||||||
flag_geth: false,
|
|
||||||
flag_testnet: false,
|
|
||||||
flag_import_geth_keys: false,
|
|
||||||
arg_warp_barrier: None,
|
|
||||||
arg_datadir: None,
|
|
||||||
arg_networkid: None,
|
|
||||||
arg_peers: None,
|
|
||||||
arg_nodekey: None,
|
|
||||||
flag_nodiscover: false,
|
|
||||||
flag_jsonrpc: false,
|
|
||||||
flag_jsonrpc_off: false,
|
|
||||||
flag_webapp: false,
|
|
||||||
flag_dapps_off: false,
|
|
||||||
flag_rpc: false,
|
|
||||||
arg_rpcaddr: None,
|
|
||||||
arg_rpcport: None,
|
|
||||||
arg_rpcapi: None,
|
|
||||||
arg_rpccorsdomain: None,
|
|
||||||
flag_ipcdisable: false,
|
|
||||||
flag_ipc_off: false,
|
|
||||||
arg_ipcapi: None,
|
|
||||||
arg_ipcpath: None,
|
|
||||||
arg_gasprice: None,
|
|
||||||
arg_etherbase: None,
|
|
||||||
arg_extradata: None,
|
|
||||||
arg_cache: None,
|
|
||||||
// Legacy-Dapps
|
|
||||||
arg_dapps_port: Some(8080),
|
|
||||||
arg_dapps_interface: Some("local".into()),
|
|
||||||
arg_dapps_hosts: Some("none".into()),
|
|
||||||
arg_dapps_cors: None,
|
|
||||||
arg_dapps_user: Some("test_user".into()),
|
|
||||||
arg_dapps_pass: Some("test_pass".into()),
|
|
||||||
flag_dapps_apis_all: false,
|
|
||||||
|
|
||||||
// -- Internal Options
|
// -- Internal Options
|
||||||
flag_can_restart: false,
|
flag_can_restart: false,
|
||||||
|
|
||||||
// -- Miscellaneous Options
|
// -- Miscellaneous Options
|
||||||
arg_ntp_servers: None,
|
|
||||||
flag_version: false,
|
flag_version: false,
|
||||||
arg_logging: Some("own_tx=trace".into()),
|
arg_logging: Some("own_tx=trace".into()),
|
||||||
arg_log_file: Some("/var/log/parity.log".into()),
|
arg_log_file: Some("/var/log/parity.log".into()),
|
||||||
@ -1996,7 +1672,6 @@ mod tests {
|
|||||||
light: None,
|
light: None,
|
||||||
no_hardcoded_sync: None,
|
no_hardcoded_sync: None,
|
||||||
no_persistent_txqueue: None,
|
no_persistent_txqueue: None,
|
||||||
_legacy_public_node: None,
|
|
||||||
}),
|
}),
|
||||||
account: Some(Account {
|
account: Some(Account {
|
||||||
unlock: Some(vec!["0x1".into(), "0x2".into(), "0x3".into()]),
|
unlock: Some(vec!["0x1".into(), "0x2".into(), "0x3".into()]),
|
||||||
@ -2005,14 +1680,7 @@ mod tests {
|
|||||||
refresh_time: None,
|
refresh_time: None,
|
||||||
fast_unlock: None,
|
fast_unlock: None,
|
||||||
}),
|
}),
|
||||||
ui: Some(Ui {
|
ui: None,
|
||||||
path: None,
|
|
||||||
_legacy_force: None,
|
|
||||||
_legacy_disable: Some(true),
|
|
||||||
_legacy_port: None,
|
|
||||||
_legacy_interface: None,
|
|
||||||
_legacy_hosts: None,
|
|
||||||
}),
|
|
||||||
network: Some(Network {
|
network: Some(Network {
|
||||||
warp: Some(false),
|
warp: Some(false),
|
||||||
warp_barrier: None,
|
warp_barrier: None,
|
||||||
@ -2061,16 +1729,6 @@ mod tests {
|
|||||||
path: None,
|
path: None,
|
||||||
apis: Some(vec!["rpc".into(), "eth".into()]),
|
apis: Some(vec!["rpc".into(), "eth".into()]),
|
||||||
}),
|
}),
|
||||||
dapps: Some(Dapps {
|
|
||||||
_legacy_disable: None,
|
|
||||||
_legacy_port: Some(8080),
|
|
||||||
_legacy_path: None,
|
|
||||||
_legacy_interface: None,
|
|
||||||
_legacy_hosts: None,
|
|
||||||
_legacy_cors: None,
|
|
||||||
_legacy_user: Some("username".into()),
|
|
||||||
_legacy_pass: Some("password".into())
|
|
||||||
}),
|
|
||||||
secretstore: Some(SecretStore {
|
secretstore: Some(SecretStore {
|
||||||
disable: None,
|
disable: None,
|
||||||
disable_http: None,
|
disable_http: None,
|
||||||
|
@ -8,10 +8,6 @@ max_peers = 100
|
|||||||
# You won't be able to use IPC to interact with Parity.
|
# You won't be able to use IPC to interact with Parity.
|
||||||
disable = true
|
disable = true
|
||||||
|
|
||||||
[dapps]
|
|
||||||
# You won't be able to access any web Dapps.
|
|
||||||
disable = true
|
|
||||||
|
|
||||||
[mining]
|
[mining]
|
||||||
# Prepare a block to seal even when there are no miners connected.
|
# Prepare a block to seal even when there are no miners connected.
|
||||||
force_sealing = true
|
force_sealing = true
|
||||||
|
@ -6,7 +6,6 @@ auto_update = "none"
|
|||||||
auto_update_delay = 200
|
auto_update_delay = 200
|
||||||
auto_update_check_frequency = 50
|
auto_update_check_frequency = 50
|
||||||
release_track = "current"
|
release_track = "current"
|
||||||
public_node = false
|
|
||||||
no_download = false
|
no_download = false
|
||||||
no_consensus = false
|
no_consensus = false
|
||||||
no_persistent_txqueue = false
|
no_persistent_txqueue = false
|
||||||
@ -34,10 +33,6 @@ sstore_url = "http://localhost:8082"
|
|||||||
sstore_threshold = 0
|
sstore_threshold = 0
|
||||||
|
|
||||||
[ui]
|
[ui]
|
||||||
force = false
|
|
||||||
disable = false
|
|
||||||
port = 8180
|
|
||||||
interface = "127.0.0.1"
|
|
||||||
path = "$HOME/.parity/signer"
|
path = "$HOME/.parity/signer"
|
||||||
|
|
||||||
[network]
|
[network]
|
||||||
@ -62,7 +57,7 @@ disable = false
|
|||||||
port = 8545
|
port = 8545
|
||||||
interface = "local"
|
interface = "local"
|
||||||
cors = ["null"]
|
cors = ["null"]
|
||||||
apis = ["web3", "eth", "net", "parity", "traces", "rpc", "secretstore"]
|
apis = ["web3", "eth", "net", "parity", "traces", "secretstore"]
|
||||||
hosts = ["none"]
|
hosts = ["none"]
|
||||||
allow_missing_blocks = false
|
allow_missing_blocks = false
|
||||||
|
|
||||||
@ -71,23 +66,13 @@ disable = false
|
|||||||
port = 8546
|
port = 8546
|
||||||
interface = "local"
|
interface = "local"
|
||||||
origins = ["none"]
|
origins = ["none"]
|
||||||
apis = ["web3", "eth", "net", "parity", "traces", "rpc", "secretstore"]
|
apis = ["web3", "eth", "net", "parity", "traces", "secretstore"]
|
||||||
hosts = ["none"]
|
hosts = ["none"]
|
||||||
|
|
||||||
[ipc]
|
[ipc]
|
||||||
disable = false
|
disable = false
|
||||||
path = "$HOME/.parity/jsonrpc.ipc"
|
path = "$HOME/.parity/jsonrpc.ipc"
|
||||||
apis = ["web3", "eth", "net", "parity", "parity_accounts", "personal", "traces", "rpc", "secretstore"]
|
apis = ["web3", "eth", "net", "parity", "parity_accounts", "personal", "traces", "secretstore"]
|
||||||
|
|
||||||
[dapps]
|
|
||||||
disable = false
|
|
||||||
port = 8080
|
|
||||||
interface = "local"
|
|
||||||
hosts = ["none"]
|
|
||||||
path = "$HOME/.parity/dapps"
|
|
||||||
# authorization:
|
|
||||||
user = "test_user"
|
|
||||||
pass = "test_pass"
|
|
||||||
|
|
||||||
[secretstore]
|
[secretstore]
|
||||||
disable = false
|
disable = false
|
||||||
|
@ -8,9 +8,6 @@ chain = "./chain.json"
|
|||||||
unlock = ["0x1", "0x2", "0x3"]
|
unlock = ["0x1", "0x2", "0x3"]
|
||||||
password = ["passwdfile path"]
|
password = ["passwdfile path"]
|
||||||
|
|
||||||
[ui]
|
|
||||||
disable = true
|
|
||||||
|
|
||||||
[network]
|
[network]
|
||||||
warp = false
|
warp = false
|
||||||
discovery = true
|
discovery = true
|
||||||
@ -35,11 +32,6 @@ port = 8180
|
|||||||
[ipc]
|
[ipc]
|
||||||
apis = ["rpc", "eth"]
|
apis = ["rpc", "eth"]
|
||||||
|
|
||||||
[dapps]
|
|
||||||
port = 8080
|
|
||||||
user = "username"
|
|
||||||
pass = "password"
|
|
||||||
|
|
||||||
[secretstore]
|
[secretstore]
|
||||||
http_port = 8082
|
http_port = 8082
|
||||||
port = 8083
|
port = 8083
|
||||||
|
@ -41,7 +41,7 @@ use std::{
|
|||||||
};
|
};
|
||||||
use sync::{self, validate_node_url, NetworkConfiguration};
|
use sync::{self, validate_node_url, NetworkConfiguration};
|
||||||
|
|
||||||
use account::{AccountCmd, ImportAccounts, ImportFromGethAccounts, ListAccounts, NewAccount};
|
use account::{AccountCmd, ImportAccounts, ListAccounts, NewAccount};
|
||||||
use blockchain::{
|
use blockchain::{
|
||||||
BlockchainCmd, ExportBlockchain, ExportState, ImportBlockchain, KillBlockchain, ResetBlockchain,
|
BlockchainCmd, ExportBlockchain, ExportState, ImportBlockchain, KillBlockchain, ResetBlockchain,
|
||||||
};
|
};
|
||||||
@ -55,9 +55,8 @@ use ethcore_logger::Config as LogConfig;
|
|||||||
use ethcore_private_tx::{EncryptorConfig, ProviderConfig};
|
use ethcore_private_tx::{EncryptorConfig, ProviderConfig};
|
||||||
use export_hardcoded_sync::ExportHsyncCmd;
|
use export_hardcoded_sync::ExportHsyncCmd;
|
||||||
use helpers::{
|
use helpers::{
|
||||||
geth_ipc_path, parity_ipc_path, to_address, to_addresses, to_block_id, to_bootnodes,
|
parity_ipc_path, to_address, to_addresses, to_block_id, to_bootnodes, to_duration, to_mode,
|
||||||
to_duration, to_mode, to_pending_set, to_price, to_queue_penalization, to_queue_strategy,
|
to_pending_set, to_price, to_queue_penalization, to_queue_strategy, to_u256,
|
||||||
to_u256,
|
|
||||||
};
|
};
|
||||||
use ipfs::Configuration as IpfsConfiguration;
|
use ipfs::Configuration as IpfsConfiguration;
|
||||||
use network::IpFilter;
|
use network::IpFilter;
|
||||||
@ -162,7 +161,6 @@ impl Configuration {
|
|||||||
let fat_db = self.args.arg_fat_db.parse()?;
|
let fat_db = self.args.arg_fat_db.parse()?;
|
||||||
let compaction = self.args.arg_db_compaction.parse()?;
|
let compaction = self.args.arg_db_compaction.parse()?;
|
||||||
let warp_sync = !self.args.flag_no_warp;
|
let warp_sync = !self.args.flag_no_warp;
|
||||||
let geth_compatibility = self.args.flag_geth;
|
|
||||||
let experimental_rpcs = self.args.flag_jsonrpc_experimental;
|
let experimental_rpcs = self.args.flag_jsonrpc_experimental;
|
||||||
let ipfs_conf = self.ipfs_config();
|
let ipfs_conf = self.ipfs_config();
|
||||||
let secretstore_conf = self.secretstore_config()?;
|
let secretstore_conf = self.secretstore_config()?;
|
||||||
@ -258,13 +256,6 @@ impl Configuration {
|
|||||||
unreachable!();
|
unreachable!();
|
||||||
};
|
};
|
||||||
Cmd::Account(account_cmd)
|
Cmd::Account(account_cmd)
|
||||||
} else if self.args.flag_import_geth_keys {
|
|
||||||
let account_cmd = AccountCmd::ImportFromGeth(ImportFromGethAccounts {
|
|
||||||
spec: spec,
|
|
||||||
to: dirs.keys,
|
|
||||||
testnet: self.args.flag_testnet,
|
|
||||||
});
|
|
||||||
Cmd::Account(account_cmd)
|
|
||||||
} else if self.args.cmd_wallet {
|
} else if self.args.cmd_wallet {
|
||||||
let presale_cmd = ImportWallet {
|
let presale_cmd = ImportWallet {
|
||||||
iterations: keys_iterations,
|
iterations: keys_iterations,
|
||||||
@ -442,7 +433,6 @@ impl Configuration {
|
|||||||
vm_type: vm_type,
|
vm_type: vm_type,
|
||||||
warp_sync: warp_sync,
|
warp_sync: warp_sync,
|
||||||
warp_barrier: self.args.arg_warp_barrier,
|
warp_barrier: self.args.arg_warp_barrier,
|
||||||
geth_compatibility: geth_compatibility,
|
|
||||||
experimental_rpcs,
|
experimental_rpcs,
|
||||||
net_settings: self.network_settings()?,
|
net_settings: self.network_settings()?,
|
||||||
ipfs_conf: ipfs_conf,
|
ipfs_conf: ipfs_conf,
|
||||||
@ -502,12 +492,7 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn author(&self) -> Result<Address, String> {
|
fn author(&self) -> Result<Address, String> {
|
||||||
to_address(
|
to_address(self.args.arg_author.clone())
|
||||||
self.args
|
|
||||||
.arg_etherbase
|
|
||||||
.clone()
|
|
||||||
.or(self.args.arg_author.clone()),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn engine_signer(&self) -> Result<Address, String> {
|
fn engine_signer(&self) -> Result<Address, String> {
|
||||||
@ -528,7 +513,7 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn cache_config(&self) -> CacheConfig {
|
fn cache_config(&self) -> CacheConfig {
|
||||||
match self.args.arg_cache_size.or(self.args.arg_cache) {
|
match self.args.arg_cache_size {
|
||||||
Some(size) => CacheConfig::new_with_total_cache_size(size),
|
Some(size) => CacheConfig::new_with_total_cache_size(size),
|
||||||
None => CacheConfig::new(
|
None => CacheConfig::new(
|
||||||
self.args.arg_cache_size_db,
|
self.args.arg_cache_size_db,
|
||||||
@ -553,13 +538,7 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn chain(&self) -> Result<SpecType, String> {
|
fn chain(&self) -> Result<SpecType, String> {
|
||||||
let name = if self.args.flag_testnet {
|
Ok(self.args.arg_chain.parse()?)
|
||||||
"testnet".to_owned()
|
|
||||||
} else {
|
|
||||||
self.args.arg_chain.clone()
|
|
||||||
};
|
|
||||||
|
|
||||||
Ok(name.parse()?)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_dev_chain(&self) -> Result<bool, String> {
|
fn is_dev_chain(&self) -> Result<bool, String> {
|
||||||
@ -608,7 +587,7 @@ impl Configuration {
|
|||||||
let cfg = AccountsConfig {
|
let cfg = AccountsConfig {
|
||||||
iterations: keys_iterations,
|
iterations: keys_iterations,
|
||||||
refresh_time: self.args.arg_accounts_refresh,
|
refresh_time: self.args.arg_accounts_refresh,
|
||||||
testnet: self.args.flag_testnet,
|
testnet: false,
|
||||||
password_files: self
|
password_files: self
|
||||||
.args
|
.args
|
||||||
.arg_password
|
.arg_password
|
||||||
@ -747,9 +726,7 @@ impl Configuration {
|
|||||||
U256::from_dec_str(&format!("{:.0}", wei_per_gas)).unwrap()
|
U256::from_dec_str(&format!("{:.0}", wei_per_gas)).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(dec) = self.args.arg_gasprice.as_ref() {
|
if let Some(dec) = self.args.arg_min_gas_price {
|
||||||
return Ok(GasPricerConfig::Fixed(to_u256(dec)?));
|
|
||||||
} else if let Some(dec) = self.args.arg_min_gas_price {
|
|
||||||
return Ok(GasPricerConfig::Fixed(U256::from(dec)));
|
return Ok(GasPricerConfig::Fixed(U256::from(dec)));
|
||||||
} else if self.chain()? != SpecType::Foundation {
|
} else if self.chain()? != SpecType::Foundation {
|
||||||
return Ok(GasPricerConfig::Fixed(U256::zero()));
|
return Ok(GasPricerConfig::Fixed(U256::zero()));
|
||||||
@ -785,12 +762,7 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn extra_data(&self) -> Result<Bytes, String> {
|
fn extra_data(&self) -> Result<Bytes, String> {
|
||||||
match self
|
match &self.args.arg_extra_data {
|
||||||
.args
|
|
||||||
.arg_extradata
|
|
||||||
.as_ref()
|
|
||||||
.or(self.args.arg_extra_data.as_ref())
|
|
||||||
{
|
|
||||||
Some(x) if x.len() <= 32 => Ok(x.as_bytes().to_owned()),
|
Some(x) if x.len() <= 32 => Ok(x.as_bytes().to_owned()),
|
||||||
None => Ok(version_data()),
|
None => Ok(version_data()),
|
||||||
Some(_) => Err("Extra data must be at most 32 characters".into()),
|
Some(_) => Err("Extra data must be at most 32 characters".into()),
|
||||||
@ -892,7 +864,7 @@ impl Configuration {
|
|||||||
Some(Ok(key)) => Some(key),
|
Some(Ok(key)) => Some(key),
|
||||||
Some(Err(err)) => return Err(err),
|
Some(Err(err)) => return Err(err),
|
||||||
};
|
};
|
||||||
ret.discovery_enabled = !self.args.flag_no_discovery && !self.args.flag_nodiscover;
|
ret.discovery_enabled = !self.args.flag_no_discovery;
|
||||||
ret.max_peers = self.max_peers();
|
ret.max_peers = self.max_peers();
|
||||||
ret.min_peers = self.min_peers();
|
ret.min_peers = self.min_peers();
|
||||||
ret.snapshot_peers = self.snapshot_peers();
|
ret.snapshot_peers = self.snapshot_peers();
|
||||||
@ -916,23 +888,11 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn network_id(&self) -> Option<u64> {
|
fn network_id(&self) -> Option<u64> {
|
||||||
self.args.arg_network_id.or(self.args.arg_networkid)
|
self.args.arg_network_id
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rpc_apis(&self) -> String {
|
fn rpc_apis(&self) -> String {
|
||||||
let mut apis: Vec<&str> = self
|
self.args.arg_jsonrpc_apis.clone()
|
||||||
.args
|
|
||||||
.arg_rpcapi
|
|
||||||
.as_ref()
|
|
||||||
.unwrap_or(&self.args.arg_jsonrpc_apis)
|
|
||||||
.split(",")
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
if self.args.flag_geth {
|
|
||||||
apis.insert(0, "personal");
|
|
||||||
}
|
|
||||||
|
|
||||||
apis.join(",")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn cors(cors: &str) -> Option<Vec<String>> {
|
fn cors(cors: &str) -> Option<Vec<String>> {
|
||||||
@ -946,11 +906,7 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn rpc_cors(&self) -> Option<Vec<String>> {
|
fn rpc_cors(&self) -> Option<Vec<String>> {
|
||||||
let cors = self
|
let cors = self.args.arg_jsonrpc_cors.to_owned();
|
||||||
.args
|
|
||||||
.arg_rpccorsdomain
|
|
||||||
.clone()
|
|
||||||
.unwrap_or_else(|| self.args.arg_jsonrpc_cors.to_owned());
|
|
||||||
Self::cors(&cors)
|
Self::cors(&cors)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1002,24 +958,9 @@ impl Configuration {
|
|||||||
|
|
||||||
fn ipc_config(&self) -> Result<IpcConfiguration, String> {
|
fn ipc_config(&self) -> Result<IpcConfiguration, String> {
|
||||||
let conf = IpcConfiguration {
|
let conf = IpcConfiguration {
|
||||||
enabled: !(self.args.flag_ipcdisable
|
enabled: !self.args.flag_no_ipc,
|
||||||
|| self.args.flag_ipc_off
|
|
||||||
|| self.args.flag_no_ipc),
|
|
||||||
socket_addr: self.ipc_path(),
|
socket_addr: self.ipc_path(),
|
||||||
apis: {
|
apis: self.args.arg_ipc_apis.parse()?,
|
||||||
let mut apis = self
|
|
||||||
.args
|
|
||||||
.arg_ipcapi
|
|
||||||
.clone()
|
|
||||||
.unwrap_or(self.args.arg_ipc_apis.clone());
|
|
||||||
if self.args.flag_geth {
|
|
||||||
if !apis.is_empty() {
|
|
||||||
apis.push_str(",");
|
|
||||||
}
|
|
||||||
apis.push_str("personal");
|
|
||||||
}
|
|
||||||
apis.parse()?
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(conf)
|
Ok(conf)
|
||||||
@ -1029,8 +970,7 @@ impl Configuration {
|
|||||||
let conf = HttpConfiguration {
|
let conf = HttpConfiguration {
|
||||||
enabled: self.rpc_enabled(),
|
enabled: self.rpc_enabled(),
|
||||||
interface: self.rpc_interface(),
|
interface: self.rpc_interface(),
|
||||||
port: self.args.arg_ports_shift
|
port: self.args.arg_ports_shift + self.args.arg_jsonrpc_port,
|
||||||
+ self.args.arg_rpcport.unwrap_or(self.args.arg_jsonrpc_port),
|
|
||||||
apis: self.rpc_apis().parse()?,
|
apis: self.rpc_apis().parse()?,
|
||||||
hosts: self.rpc_hosts(),
|
hosts: self.rpc_hosts(),
|
||||||
cors: self.rpc_cors(),
|
cors: self.rpc_cors(),
|
||||||
@ -1163,7 +1103,6 @@ impl Configuration {
|
|||||||
.args
|
.args
|
||||||
.arg_base_path
|
.arg_base_path
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.or_else(|| self.args.arg_datadir.as_ref())
|
|
||||||
.map_or_else(|| default_data_path(), |s| s.clone());
|
.map_or_else(|| default_data_path(), |s| s.clone());
|
||||||
let data_path = replace_home("", &base_path);
|
let data_path = replace_home("", &base_path);
|
||||||
let is_using_base_path = self.args.arg_base_path.is_some();
|
let is_using_base_path = self.args.arg_base_path.is_some();
|
||||||
@ -1208,19 +1147,11 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn ipc_path(&self) -> String {
|
fn ipc_path(&self) -> String {
|
||||||
if self.args.flag_geth {
|
parity_ipc_path(
|
||||||
geth_ipc_path(self.args.flag_testnet)
|
&self.directories().base,
|
||||||
} else {
|
&self.args.arg_ipc_path,
|
||||||
parity_ipc_path(
|
self.args.arg_ports_shift,
|
||||||
&self.directories().base,
|
)
|
||||||
&self
|
|
||||||
.args
|
|
||||||
.arg_ipcpath
|
|
||||||
.clone()
|
|
||||||
.unwrap_or(self.args.arg_ipc_path.clone()),
|
|
||||||
self.args.arg_ports_shift,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn interface(&self, interface: &str) -> String {
|
fn interface(&self, interface: &str) -> String {
|
||||||
@ -1237,12 +1168,7 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn rpc_interface(&self) -> String {
|
fn rpc_interface(&self) -> String {
|
||||||
let rpc_interface = self
|
self.interface(&self.args.arg_jsonrpc_interface)
|
||||||
.args
|
|
||||||
.arg_rpcaddr
|
|
||||||
.clone()
|
|
||||||
.unwrap_or(self.args.arg_jsonrpc_interface.clone());
|
|
||||||
self.interface(&rpc_interface)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ws_interface(&self) -> String {
|
fn ws_interface(&self) -> String {
|
||||||
@ -1326,7 +1252,7 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn rpc_enabled(&self) -> bool {
|
fn rpc_enabled(&self) -> bool {
|
||||||
!self.args.flag_jsonrpc_off && !self.args.flag_no_jsonrpc
|
!self.args.flag_no_jsonrpc
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ws_enabled(&self) -> bool {
|
fn ws_enabled(&self) -> bool {
|
||||||
@ -1742,7 +1668,6 @@ mod tests {
|
|||||||
tracing: Default::default(),
|
tracing: Default::default(),
|
||||||
compaction: Default::default(),
|
compaction: Default::default(),
|
||||||
vm_type: Default::default(),
|
vm_type: Default::default(),
|
||||||
geth_compatibility: false,
|
|
||||||
experimental_rpcs: false,
|
experimental_rpcs: false,
|
||||||
net_settings: Default::default(),
|
net_settings: Default::default(),
|
||||||
ipfs_conf: Default::default(),
|
ipfs_conf: Default::default(),
|
||||||
@ -1874,7 +1799,7 @@ mod tests {
|
|||||||
// given
|
// given
|
||||||
|
|
||||||
// when
|
// when
|
||||||
let conf = parse(&["parity", "--testnet", "--identity", "testname"]);
|
let conf = parse(&["parity", "--chain", "goerli", "--identity", "testname"]);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
@ -1891,49 +1816,6 @@ mod tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn should_parse_rpc_settings_with_geth_compatiblity() {
|
|
||||||
// given
|
|
||||||
fn assert(conf: Configuration) {
|
|
||||||
let net = conf.network_settings().unwrap();
|
|
||||||
assert_eq!(net.rpc_enabled, true);
|
|
||||||
assert_eq!(net.rpc_interface, "0.0.0.0".to_owned());
|
|
||||||
assert_eq!(net.rpc_port, 8000);
|
|
||||||
assert_eq!(conf.rpc_cors(), None);
|
|
||||||
assert_eq!(conf.rpc_apis(), "web3,eth".to_owned());
|
|
||||||
}
|
|
||||||
|
|
||||||
// when
|
|
||||||
let conf1 = parse(&[
|
|
||||||
"parity",
|
|
||||||
"-j",
|
|
||||||
"--jsonrpc-port",
|
|
||||||
"8000",
|
|
||||||
"--jsonrpc-interface",
|
|
||||||
"all",
|
|
||||||
"--jsonrpc-cors",
|
|
||||||
"*",
|
|
||||||
"--jsonrpc-apis",
|
|
||||||
"web3,eth",
|
|
||||||
]);
|
|
||||||
let conf2 = parse(&[
|
|
||||||
"parity",
|
|
||||||
"--rpc",
|
|
||||||
"--rpcport",
|
|
||||||
"8000",
|
|
||||||
"--rpcaddr",
|
|
||||||
"all",
|
|
||||||
"--rpccorsdomain",
|
|
||||||
"*",
|
|
||||||
"--rpcapi",
|
|
||||||
"web3,eth",
|
|
||||||
]);
|
|
||||||
|
|
||||||
// then
|
|
||||||
assert(conf1);
|
|
||||||
assert(conf2);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_parse_rpc_hosts() {
|
fn should_parse_rpc_hosts() {
|
||||||
// given
|
// given
|
||||||
@ -2005,33 +1887,9 @@ mod tests {
|
|||||||
|
|
||||||
// when
|
// when
|
||||||
let conf0 = parse(&["parity", "--ui-path=signer"]);
|
let conf0 = parse(&["parity", "--ui-path=signer"]);
|
||||||
let conf1 = parse(&["parity", "--ui-path=signer", "--ui-no-validation"]);
|
|
||||||
let conf2 = parse(&["parity", "--ui-path=signer", "--ui-port", "3123"]);
|
|
||||||
let conf3 = parse(&["parity", "--ui-path=signer", "--ui-interface", "test"]);
|
|
||||||
let conf4 = parse(&["parity", "--ui-path=signer", "--force-ui"]);
|
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assert_eq!(conf0.directories().signer, "signer".to_owned());
|
assert_eq!(conf0.directories().signer, "signer".to_owned());
|
||||||
|
|
||||||
assert!(conf1.ws_config().unwrap().hosts.is_some());
|
|
||||||
assert_eq!(
|
|
||||||
conf1.ws_config().unwrap().origins,
|
|
||||||
Some(vec![
|
|
||||||
"parity://*".into(),
|
|
||||||
"chrome-extension://*".into(),
|
|
||||||
"moz-extension://*".into()
|
|
||||||
])
|
|
||||||
);
|
|
||||||
assert_eq!(conf1.directories().signer, "signer".to_owned());
|
|
||||||
|
|
||||||
assert!(conf2.ws_config().unwrap().hosts.is_some());
|
|
||||||
assert_eq!(conf2.directories().signer, "signer".to_owned());
|
|
||||||
|
|
||||||
assert!(conf3.ws_config().unwrap().hosts.is_some());
|
|
||||||
assert_eq!(conf3.directories().signer, "signer".to_owned());
|
|
||||||
|
|
||||||
assert!(conf4.ws_config().unwrap().hosts.is_some());
|
|
||||||
assert_eq!(conf4.directories().signer, "signer".to_owned());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -2122,7 +1980,7 @@ mod tests {
|
|||||||
ApiSet::List(set) => assert_eq!(set, ApiSet::All.list_apis()),
|
ApiSet::List(set) => assert_eq!(set, ApiSet::All.list_apis()),
|
||||||
_ => panic!("Incorrect rpc apis"),
|
_ => panic!("Incorrect rpc apis"),
|
||||||
}
|
}
|
||||||
// "web3,eth,net,personal,parity,parity_set,traces,rpc,parity_accounts");
|
// "web3,eth,net,personal,parity,parity_set,traces,parity_accounts");
|
||||||
assert_eq!(c.http_conf.hosts, None);
|
assert_eq!(c.http_conf.hosts, None);
|
||||||
assert_eq!(c.ipfs_conf.hosts, None);
|
assert_eq!(c.ipfs_conf.hosts, None);
|
||||||
}
|
}
|
||||||
@ -2145,7 +2003,7 @@ mod tests {
|
|||||||
ApiSet::List(set) => assert_eq!(set, ApiSet::All.list_apis()),
|
ApiSet::List(set) => assert_eq!(set, ApiSet::All.list_apis()),
|
||||||
_ => panic!("Incorrect rpc apis"),
|
_ => panic!("Incorrect rpc apis"),
|
||||||
}
|
}
|
||||||
// "web3,eth,net,personal,parity,parity_set,traces,rpc,parity_accounts");
|
// "web3,eth,net,personal,parity,parity_set,traces,parity_accounts");
|
||||||
assert_eq!(c.http_conf.hosts, None);
|
assert_eq!(c.http_conf.hosts, None);
|
||||||
assert_eq!(c.ipfs_conf.hosts, None);
|
assert_eq!(c.ipfs_conf.hosts, None);
|
||||||
}
|
}
|
||||||
|
@ -1,300 +0,0 @@
|
|||||||
// Copyright 2015-2019 Parity Technologies (UK) Ltd.
|
|
||||||
// This file is part of Parity Ethereum.
|
|
||||||
|
|
||||||
// Parity Ethereum is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
|
|
||||||
// Parity Ethereum is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
use cli::Args;
|
|
||||||
use std::fmt;
|
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
|
||||||
pub enum Deprecated {
|
|
||||||
DoesNothing(&'static str),
|
|
||||||
Replaced(&'static str, &'static str),
|
|
||||||
Removed(&'static str),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Display for Deprecated {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
|
||||||
match *self {
|
|
||||||
Deprecated::DoesNothing(s) => {
|
|
||||||
write!(f, "Option '{}' does nothing. It's on by default.", s)
|
|
||||||
}
|
|
||||||
Deprecated::Replaced(old, new) => write!(
|
|
||||||
f,
|
|
||||||
"Option '{}' is deprecated. Please use '{}' instead.",
|
|
||||||
old, new
|
|
||||||
),
|
|
||||||
Deprecated::Removed(s) => write!(
|
|
||||||
f,
|
|
||||||
"Option '{}' has been removed and is no longer supported.",
|
|
||||||
s
|
|
||||||
),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn find_deprecated(args: &Args) -> Vec<Deprecated> {
|
|
||||||
let mut result = vec![];
|
|
||||||
|
|
||||||
// Removed in 1.6 or before.
|
|
||||||
|
|
||||||
if args.flag_warp {
|
|
||||||
result.push(Deprecated::DoesNothing("--warp"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_jsonrpc {
|
|
||||||
result.push(Deprecated::DoesNothing("--jsonrpc"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_rpc {
|
|
||||||
result.push(Deprecated::DoesNothing("--rpc"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_jsonrpc_off {
|
|
||||||
result.push(Deprecated::Replaced("--jsonrpc-off", "--no-jsonrpc"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_webapp {
|
|
||||||
result.push(Deprecated::DoesNothing("--webapp"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_dapps_off {
|
|
||||||
result.push(Deprecated::Replaced("--dapps-off", "--no-dapps"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_ipcdisable {
|
|
||||||
result.push(Deprecated::Replaced("--ipcdisable", "--no-ipc"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_ipc_off {
|
|
||||||
result.push(Deprecated::Replaced("--ipc-off", "--no-ipc"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_etherbase.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--etherbase", "--author"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_extradata.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--extradata", "--extra-data"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_testnet {
|
|
||||||
result.push(Deprecated::Replaced("--testnet", "--chain testnet"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_nodiscover {
|
|
||||||
result.push(Deprecated::Replaced("--nodiscover", "--no-discovery"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_datadir.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--datadir", "--base-path"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_networkid.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--networkid", "--network-id"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_peers.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--peers", "--min-peers"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_nodekey.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--nodekey", "--node-key"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_rpcaddr.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--rpcaddr", "--jsonrpc-interface"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_rpcport.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--rpcport", "--jsonrpc-port"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_rpcapi.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--rpcapi", "--jsonrpc-api"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_rpccorsdomain.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--rpccorsdomain", "--jsonrpc-cors"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_ipcapi.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--ipcapi", "--ipc-apis"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_ipcpath.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--ipcpath", "--ipc-path"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_gasprice.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--gasprice", "--min-gas-price"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_cache.is_some() {
|
|
||||||
result.push(Deprecated::Replaced("--cache", "--cache-size"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Removed in 1.7.
|
|
||||||
|
|
||||||
if args.arg_dapps_port.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--dapps-port"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_dapps_interface.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--dapps-interface"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_dapps_hosts.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--dapps-hosts"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_dapps_cors.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--dapps-cors"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_dapps_user.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--dapps-user"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_dapps_pass.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--dapps-pass"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_dapps_apis_all {
|
|
||||||
result.push(Deprecated::Replaced("--dapps-apis-all", "--jsonrpc-apis"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Removed in 1.11.
|
|
||||||
|
|
||||||
if args.flag_public_node {
|
|
||||||
result.push(Deprecated::Removed("--public-node"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_force_ui {
|
|
||||||
result.push(Deprecated::Removed("--force-ui"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_no_ui {
|
|
||||||
result.push(Deprecated::Removed("--no-ui"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_ui_no_validation {
|
|
||||||
result.push(Deprecated::Removed("--ui-no-validation"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_ui_interface.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--ui-interface"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_ui_hosts.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--ui-hosts"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_ui_port.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--ui-port"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_tx_queue_ban_count.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--tx-queue-ban-count"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_tx_queue_ban_time.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--tx-queue-ban-time"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Removed in 2.0.
|
|
||||||
|
|
||||||
if args.flag_fast_and_loose {
|
|
||||||
result.push(Deprecated::Removed("--fast-and-loose"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.cmd_dapp {
|
|
||||||
result.push(Deprecated::Removed("parity dapp"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_dapp_path.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--dapp-path"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.flag_no_dapps {
|
|
||||||
result.push(Deprecated::Removed("--no-dapps"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_dapps_path.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--dapps-path"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.arg_ntp_servers.is_some() {
|
|
||||||
result.push(Deprecated::Removed("--ntp-servers"));
|
|
||||||
}
|
|
||||||
|
|
||||||
result
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::{find_deprecated, Deprecated};
|
|
||||||
use cli::Args;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_find_deprecated() {
|
|
||||||
assert_eq!(find_deprecated(&Args::default()), vec![]);
|
|
||||||
assert_eq!(
|
|
||||||
find_deprecated(&{
|
|
||||||
let mut args = Args::default();
|
|
||||||
args.flag_warp = true;
|
|
||||||
args.flag_jsonrpc = true;
|
|
||||||
args.flag_rpc = true;
|
|
||||||
args.flag_jsonrpc_off = true;
|
|
||||||
args.flag_webapp = true;
|
|
||||||
args.flag_dapps_off = true;
|
|
||||||
args.flag_ipcdisable = true;
|
|
||||||
args.flag_ipc_off = true;
|
|
||||||
args.arg_etherbase = Some(Default::default());
|
|
||||||
args.arg_extradata = Some(Default::default());
|
|
||||||
args.arg_dapps_port = Some(Default::default());
|
|
||||||
args.arg_dapps_interface = Some(Default::default());
|
|
||||||
args.arg_dapps_hosts = Some(Default::default());
|
|
||||||
args.arg_dapps_cors = Some(Default::default());
|
|
||||||
args.arg_dapps_user = Some(Default::default());
|
|
||||||
args.arg_dapps_pass = Some(Default::default());
|
|
||||||
args.flag_dapps_apis_all = true;
|
|
||||||
args.flag_fast_and_loose = true;
|
|
||||||
args.arg_ntp_servers = Some(Default::default());
|
|
||||||
args
|
|
||||||
}),
|
|
||||||
vec![
|
|
||||||
Deprecated::DoesNothing("--warp"),
|
|
||||||
Deprecated::DoesNothing("--jsonrpc"),
|
|
||||||
Deprecated::DoesNothing("--rpc"),
|
|
||||||
Deprecated::Replaced("--jsonrpc-off", "--no-jsonrpc"),
|
|
||||||
Deprecated::DoesNothing("--webapp"),
|
|
||||||
Deprecated::Replaced("--dapps-off", "--no-dapps"),
|
|
||||||
Deprecated::Replaced("--ipcdisable", "--no-ipc"),
|
|
||||||
Deprecated::Replaced("--ipc-off", "--no-ipc"),
|
|
||||||
Deprecated::Replaced("--etherbase", "--author"),
|
|
||||||
Deprecated::Replaced("--extradata", "--extra-data"),
|
|
||||||
Deprecated::Removed("--dapps-port"),
|
|
||||||
Deprecated::Removed("--dapps-interface"),
|
|
||||||
Deprecated::Removed("--dapps-hosts"),
|
|
||||||
Deprecated::Removed("--dapps-cors"),
|
|
||||||
Deprecated::Removed("--dapps-user"),
|
|
||||||
Deprecated::Removed("--dapps-pass"),
|
|
||||||
Deprecated::Replaced("--dapps-apis-all", "--jsonrpc-apis"),
|
|
||||||
Deprecated::Removed("--fast-and-loose"),
|
|
||||||
Deprecated::Removed("--ntp-servers"),
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -25,7 +25,6 @@ use ethereum_types::{clean_0x, Address, U256};
|
|||||||
use ethkey::Password;
|
use ethkey::Password;
|
||||||
use journaldb::Algorithm;
|
use journaldb::Algorithm;
|
||||||
use miner::pool::PrioritizationStrategy;
|
use miner::pool::PrioritizationStrategy;
|
||||||
use path;
|
|
||||||
use std::{
|
use std::{
|
||||||
collections::HashSet,
|
collections::HashSet,
|
||||||
fs::File,
|
fs::File,
|
||||||
@ -188,27 +187,6 @@ pub fn flush_stdout() {
|
|||||||
io::stdout().flush().expect("stdout is flushable; qed");
|
io::stdout().flush().expect("stdout is flushable; qed");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns default geth ipc path.
|
|
||||||
pub fn geth_ipc_path(testnet: bool) -> String {
|
|
||||||
// Windows path should not be hardcoded here.
|
|
||||||
// Instead it should be a part of path::ethereum
|
|
||||||
if cfg!(windows) {
|
|
||||||
return r"\\.\pipe\geth.ipc".to_owned();
|
|
||||||
}
|
|
||||||
|
|
||||||
if testnet {
|
|
||||||
path::ethereum::with_testnet("geth.ipc")
|
|
||||||
.to_str()
|
|
||||||
.unwrap()
|
|
||||||
.to_owned()
|
|
||||||
} else {
|
|
||||||
path::ethereum::with_default("geth.ipc")
|
|
||||||
.to_str()
|
|
||||||
.unwrap()
|
|
||||||
.to_owned()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Formats and returns parity ipc path.
|
/// Formats and returns parity ipc path.
|
||||||
pub fn parity_ipc_path(base: &str, path: &str, shift: u16) -> String {
|
pub fn parity_ipc_path(base: &str, path: &str, shift: u16) -> String {
|
||||||
let mut path = path.to_owned();
|
let mut path = path.to_owned();
|
||||||
@ -391,8 +369,8 @@ pub fn passwords_from_files(files: &[String]) -> Result<Vec<Password>, String> {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::{
|
use super::{
|
||||||
geth_ipc_path, join_set, password_from_file, to_address, to_addresses, to_block_id,
|
join_set, password_from_file, to_address, to_addresses, to_block_id, to_bootnodes,
|
||||||
to_bootnodes, to_duration, to_mode, to_pending_set, to_price, to_u256,
|
to_duration, to_mode, to_pending_set, to_price, to_u256,
|
||||||
};
|
};
|
||||||
use ethcore::{
|
use ethcore::{
|
||||||
client::{BlockId, Mode},
|
client::{BlockId, Mode},
|
||||||
@ -581,33 +559,6 @@ but the first password is trimmed
|
|||||||
assert_eq!(to_price("2.33").unwrap(), 2.33);
|
assert_eq!(to_price("2.33").unwrap(), 2.33);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
#[cfg(windows)]
|
|
||||||
fn test_geth_ipc_path() {
|
|
||||||
assert_eq!(geth_ipc_path(true), r"\\.\pipe\geth.ipc".to_owned());
|
|
||||||
assert_eq!(geth_ipc_path(false), r"\\.\pipe\geth.ipc".to_owned());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
#[cfg(not(windows))]
|
|
||||||
fn test_geth_ipc_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(false),
|
|
||||||
path::ethereum::with_default("geth.ipc")
|
|
||||||
.to_str()
|
|
||||||
.unwrap()
|
|
||||||
.to_owned()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_to_bootnodes() {
|
fn test_to_bootnodes() {
|
||||||
let one_bootnode = "enode://e731347db0521f3476e6bbbb83375dcd7133a1601425ebd15fd10f3835fd4c304fba6282087ca5a0deeafadf0aa0d4fd56c3323331901c1f38bd181c283e3e35@128.199.55.137:30303";
|
let one_bootnode = "enode://e731347db0521f3476e6bbbb83375dcd7133a1601425ebd15fd10f3835fd4c304fba6282087ca5a0deeafadf0aa0d4fd56c3323331901c1f38bd181c283e3e35@128.199.55.137:30303";
|
||||||
|
@ -99,7 +99,6 @@ mod cache;
|
|||||||
mod cli;
|
mod cli;
|
||||||
mod configuration;
|
mod configuration;
|
||||||
mod db;
|
mod db;
|
||||||
mod deprecated;
|
|
||||||
mod export_hardcoded_sync;
|
mod export_hardcoded_sync;
|
||||||
mod helpers;
|
mod helpers;
|
||||||
mod informant;
|
mod informant;
|
||||||
@ -122,7 +121,6 @@ use std::{fs::File, io::BufReader, sync::Arc};
|
|||||||
|
|
||||||
use cli::Args;
|
use cli::Args;
|
||||||
use configuration::{Cmd, Execute};
|
use configuration::{Cmd, Execute};
|
||||||
use deprecated::find_deprecated;
|
|
||||||
use hash::keccak_buffer;
|
use hash::keccak_buffer;
|
||||||
|
|
||||||
#[cfg(feature = "memory_profiling")]
|
#[cfg(feature = "memory_profiling")]
|
||||||
@ -267,10 +265,5 @@ where
|
|||||||
Cr: Fn(String) + 'static + Send,
|
Cr: Fn(String) + 'static + Send,
|
||||||
Rr: Fn() + 'static + Send,
|
Rr: Fn() + 'static + Send,
|
||||||
{
|
{
|
||||||
let deprecated = find_deprecated(&conf.args);
|
|
||||||
for d in deprecated {
|
|
||||||
println!("{}", d);
|
|
||||||
}
|
|
||||||
|
|
||||||
execute(conf.into_command()?, logger, on_client_rq, on_updater_rq)
|
execute(conf.into_command()?, logger, on_client_rq, on_updater_rq)
|
||||||
}
|
}
|
||||||
|
@ -219,7 +219,6 @@ fn main_direct(force_can_restart: bool) -> i32 {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if let Some(spec_override) = take_spec_name_override() {
|
if let Some(spec_override) = take_spec_name_override() {
|
||||||
conf.args.flag_testnet = false;
|
|
||||||
conf.args.arg_chain = spec_override;
|
conf.args.arg_chain = spec_override;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
cmp::PartialEq,
|
cmp::PartialEq,
|
||||||
collections::{BTreeMap, HashSet},
|
collections::HashSet,
|
||||||
str::FromStr,
|
str::FromStr,
|
||||||
sync::{Arc, Weak},
|
sync::{Arc, Weak},
|
||||||
};
|
};
|
||||||
@ -62,8 +62,6 @@ pub enum Api {
|
|||||||
Parity,
|
Parity,
|
||||||
/// Traces (Safe)
|
/// Traces (Safe)
|
||||||
Traces,
|
Traces,
|
||||||
/// Rpc (Safe)
|
|
||||||
Rpc,
|
|
||||||
/// Private transaction manager (Safe)
|
/// Private transaction manager (Safe)
|
||||||
Private,
|
Private,
|
||||||
/// Whisper (Safe)
|
/// Whisper (Safe)
|
||||||
@ -102,7 +100,6 @@ impl FromStr for Api {
|
|||||||
"personal" => Ok(Personal),
|
"personal" => Ok(Personal),
|
||||||
"private" => Ok(Private),
|
"private" => Ok(Private),
|
||||||
"pubsub" => Ok(EthPubSub),
|
"pubsub" => Ok(EthPubSub),
|
||||||
"rpc" => Ok(Rpc),
|
|
||||||
"secretstore" => Ok(SecretStore),
|
"secretstore" => Ok(SecretStore),
|
||||||
"shh" => Ok(Whisper),
|
"shh" => Ok(Whisper),
|
||||||
"shh_pubsub" => Ok(WhisperPubSub),
|
"shh_pubsub" => Ok(WhisperPubSub),
|
||||||
@ -171,33 +168,6 @@ impl FromStr for ApiSet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn to_modules(apis: &HashSet<Api>) -> BTreeMap<String, String> {
|
|
||||||
let mut modules = BTreeMap::new();
|
|
||||||
for api in apis {
|
|
||||||
let (name, version) = match *api {
|
|
||||||
Api::Debug => ("debug", "1.0"),
|
|
||||||
Api::Eth => ("eth", "1.0"),
|
|
||||||
Api::EthPubSub => ("pubsub", "1.0"),
|
|
||||||
Api::Net => ("net", "1.0"),
|
|
||||||
Api::Parity => ("parity", "1.0"),
|
|
||||||
Api::ParityAccounts => ("parity_accounts", "1.0"),
|
|
||||||
Api::ParityPubSub => ("parity_pubsub", "1.0"),
|
|
||||||
Api::ParitySet => ("parity_set", "1.0"),
|
|
||||||
Api::Personal => ("personal", "1.0"),
|
|
||||||
Api::Private => ("private", "1.0"),
|
|
||||||
Api::Rpc => ("rpc", "1.0"),
|
|
||||||
Api::SecretStore => ("secretstore", "1.0"),
|
|
||||||
Api::Signer => ("signer", "1.0"),
|
|
||||||
Api::Traces => ("traces", "1.0"),
|
|
||||||
Api::Web3 => ("web3", "1.0"),
|
|
||||||
Api::Whisper => ("shh", "1.0"),
|
|
||||||
Api::WhisperPubSub => ("shh_pubsub", "1.0"),
|
|
||||||
};
|
|
||||||
modules.insert(name.into(), version.into());
|
|
||||||
}
|
|
||||||
modules
|
|
||||||
}
|
|
||||||
|
|
||||||
macro_rules! add_signing_methods {
|
macro_rules! add_signing_methods {
|
||||||
($namespace:ident, $handler:expr, $deps:expr, $dispatch:expr) => {{
|
($namespace:ident, $handler:expr, $deps:expr, $dispatch:expr) => {{
|
||||||
let deps = &$deps;
|
let deps = &$deps;
|
||||||
@ -246,7 +216,6 @@ pub struct FullDependencies {
|
|||||||
pub settings: Arc<NetworkSettings>,
|
pub settings: Arc<NetworkSettings>,
|
||||||
pub net_service: Arc<dyn ManageNetwork>,
|
pub net_service: Arc<dyn ManageNetwork>,
|
||||||
pub updater: Arc<Updater>,
|
pub updater: Arc<Updater>,
|
||||||
pub geth_compatibility: bool,
|
|
||||||
pub experimental_rpcs: bool,
|
pub experimental_rpcs: bool,
|
||||||
pub ws_address: Option<Host>,
|
pub ws_address: Option<Host>,
|
||||||
pub fetch: FetchClient,
|
pub fetch: FetchClient,
|
||||||
@ -301,9 +270,6 @@ impl FullDependencies {
|
|||||||
&self.miner,
|
&self.miner,
|
||||||
&self.external_miner,
|
&self.external_miner,
|
||||||
EthClientOptions {
|
EthClientOptions {
|
||||||
pending_nonce_from_queue: self.geth_compatibility,
|
|
||||||
allow_pending_receipt_query: !self.geth_compatibility,
|
|
||||||
send_block_number_in_get_work: !self.geth_compatibility,
|
|
||||||
gas_price_percentile: self.gas_price_percentile,
|
gas_price_percentile: self.gas_price_percentile,
|
||||||
allow_missing_blocks: self.allow_missing_blocks,
|
allow_missing_blocks: self.allow_missing_blocks,
|
||||||
allow_experimental_rpcs: self.experimental_rpcs,
|
allow_experimental_rpcs: self.experimental_rpcs,
|
||||||
@ -352,7 +318,6 @@ impl FullDependencies {
|
|||||||
PersonalClient::new(
|
PersonalClient::new(
|
||||||
&self.accounts,
|
&self.accounts,
|
||||||
dispatcher.clone(),
|
dispatcher.clone(),
|
||||||
self.geth_compatibility,
|
|
||||||
self.experimental_rpcs,
|
self.experimental_rpcs,
|
||||||
)
|
)
|
||||||
.to_delegate(),
|
.to_delegate(),
|
||||||
@ -438,10 +403,6 @@ impl FullDependencies {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
Api::Traces => handler.extend_with(TracesClient::new(&self.client).to_delegate()),
|
Api::Traces => handler.extend_with(TracesClient::new(&self.client).to_delegate()),
|
||||||
Api::Rpc => {
|
|
||||||
let modules = to_modules(&apis);
|
|
||||||
handler.extend_with(RpcClient::new(modules).to_delegate());
|
|
||||||
}
|
|
||||||
Api::SecretStore => {
|
Api::SecretStore => {
|
||||||
#[cfg(feature = "accounts")]
|
#[cfg(feature = "accounts")]
|
||||||
handler.extend_with(SecretStoreClient::new(&self.accounts).to_delegate());
|
handler.extend_with(SecretStoreClient::new(&self.accounts).to_delegate());
|
||||||
@ -511,7 +472,6 @@ pub struct LightDependencies<T> {
|
|||||||
pub transaction_queue: Arc<RwLock<LightTransactionQueue>>,
|
pub transaction_queue: Arc<RwLock<LightTransactionQueue>>,
|
||||||
pub ws_address: Option<Host>,
|
pub ws_address: Option<Host>,
|
||||||
pub fetch: FetchClient,
|
pub fetch: FetchClient,
|
||||||
pub geth_compatibility: bool,
|
|
||||||
pub experimental_rpcs: bool,
|
pub experimental_rpcs: bool,
|
||||||
pub executor: Executor,
|
pub executor: Executor,
|
||||||
pub whisper_rpc: Option<::whisper::RpcFactory>,
|
pub whisper_rpc: Option<::whisper::RpcFactory>,
|
||||||
@ -603,7 +563,6 @@ impl<C: LightChainClient + 'static> LightDependencies<C> {
|
|||||||
PersonalClient::new(
|
PersonalClient::new(
|
||||||
&self.accounts,
|
&self.accounts,
|
||||||
dispatcher.clone(),
|
dispatcher.clone(),
|
||||||
self.geth_compatibility,
|
|
||||||
self.experimental_rpcs,
|
self.experimental_rpcs,
|
||||||
)
|
)
|
||||||
.to_delegate(),
|
.to_delegate(),
|
||||||
@ -677,10 +636,6 @@ impl<C: LightChainClient + 'static> LightDependencies<C> {
|
|||||||
.to_delegate(),
|
.to_delegate(),
|
||||||
),
|
),
|
||||||
Api::Traces => handler.extend_with(light::TracesClient.to_delegate()),
|
Api::Traces => handler.extend_with(light::TracesClient.to_delegate()),
|
||||||
Api::Rpc => {
|
|
||||||
let modules = to_modules(&apis);
|
|
||||||
handler.extend_with(RpcClient::new(modules).to_delegate());
|
|
||||||
}
|
|
||||||
Api::SecretStore => {
|
Api::SecretStore => {
|
||||||
#[cfg(feature = "accounts")]
|
#[cfg(feature = "accounts")]
|
||||||
handler.extend_with(SecretStoreClient::new(&self.accounts).to_delegate());
|
handler.extend_with(SecretStoreClient::new(&self.accounts).to_delegate());
|
||||||
@ -738,7 +693,6 @@ impl ApiSet {
|
|||||||
Api::Eth,
|
Api::Eth,
|
||||||
Api::EthPubSub,
|
Api::EthPubSub,
|
||||||
Api::Parity,
|
Api::Parity,
|
||||||
Api::Rpc,
|
|
||||||
Api::Whisper,
|
Api::Whisper,
|
||||||
Api::WhisperPubSub,
|
Api::WhisperPubSub,
|
||||||
Api::Private,
|
Api::Private,
|
||||||
@ -802,7 +756,6 @@ mod test {
|
|||||||
assert_eq!(Api::ParityAccounts, "parity_accounts".parse().unwrap());
|
assert_eq!(Api::ParityAccounts, "parity_accounts".parse().unwrap());
|
||||||
assert_eq!(Api::ParitySet, "parity_set".parse().unwrap());
|
assert_eq!(Api::ParitySet, "parity_set".parse().unwrap());
|
||||||
assert_eq!(Api::Traces, "traces".parse().unwrap());
|
assert_eq!(Api::Traces, "traces".parse().unwrap());
|
||||||
assert_eq!(Api::Rpc, "rpc".parse().unwrap());
|
|
||||||
assert_eq!(Api::SecretStore, "secretstore".parse().unwrap());
|
assert_eq!(Api::SecretStore, "secretstore".parse().unwrap());
|
||||||
assert_eq!(Api::Private, "private".parse().unwrap());
|
assert_eq!(Api::Private, "private".parse().unwrap());
|
||||||
assert_eq!(Api::Whisper, "shh".parse().unwrap());
|
assert_eq!(Api::Whisper, "shh".parse().unwrap());
|
||||||
@ -834,7 +787,6 @@ mod test {
|
|||||||
Api::Parity,
|
Api::Parity,
|
||||||
Api::ParityPubSub,
|
Api::ParityPubSub,
|
||||||
Api::Traces,
|
Api::Traces,
|
||||||
Api::Rpc,
|
|
||||||
Api::Whisper,
|
Api::Whisper,
|
||||||
Api::WhisperPubSub,
|
Api::WhisperPubSub,
|
||||||
Api::Private,
|
Api::Private,
|
||||||
@ -855,7 +807,6 @@ mod test {
|
|||||||
Api::Parity,
|
Api::Parity,
|
||||||
Api::ParityPubSub,
|
Api::ParityPubSub,
|
||||||
Api::Traces,
|
Api::Traces,
|
||||||
Api::Rpc,
|
|
||||||
Api::Whisper,
|
Api::Whisper,
|
||||||
Api::WhisperPubSub,
|
Api::WhisperPubSub,
|
||||||
Api::Private,
|
Api::Private,
|
||||||
@ -880,7 +831,6 @@ mod test {
|
|||||||
Api::Parity,
|
Api::Parity,
|
||||||
Api::ParityPubSub,
|
Api::ParityPubSub,
|
||||||
Api::Traces,
|
Api::Traces,
|
||||||
Api::Rpc,
|
|
||||||
Api::SecretStore,
|
Api::SecretStore,
|
||||||
Api::Whisper,
|
Api::Whisper,
|
||||||
Api::WhisperPubSub,
|
Api::WhisperPubSub,
|
||||||
@ -910,7 +860,6 @@ mod test {
|
|||||||
Api::Parity,
|
Api::Parity,
|
||||||
Api::ParityPubSub,
|
Api::ParityPubSub,
|
||||||
Api::Traces,
|
Api::Traces,
|
||||||
Api::Rpc,
|
|
||||||
Api::SecretStore,
|
Api::SecretStore,
|
||||||
Api::Whisper,
|
Api::Whisper,
|
||||||
Api::WhisperPubSub,
|
Api::WhisperPubSub,
|
||||||
@ -939,7 +888,6 @@ mod test {
|
|||||||
Api::Parity,
|
Api::Parity,
|
||||||
Api::ParityPubSub,
|
Api::ParityPubSub,
|
||||||
Api::Traces,
|
Api::Traces,
|
||||||
Api::Rpc,
|
|
||||||
Api::Whisper,
|
Api::Whisper,
|
||||||
Api::WhisperPubSub,
|
Api::WhisperPubSub,
|
||||||
Api::Private,
|
Api::Private,
|
||||||
|
@ -117,7 +117,6 @@ pub struct RunCmd {
|
|||||||
pub fat_db: Switch,
|
pub fat_db: Switch,
|
||||||
pub compaction: DatabaseCompactionProfile,
|
pub compaction: DatabaseCompactionProfile,
|
||||||
pub vm_type: VMType,
|
pub vm_type: VMType,
|
||||||
pub geth_compatibility: bool,
|
|
||||||
pub experimental_rpcs: bool,
|
pub experimental_rpcs: bool,
|
||||||
pub net_settings: NetworkSettings,
|
pub net_settings: NetworkSettings,
|
||||||
pub ipfs_conf: ipfs::Configuration,
|
pub ipfs_conf: ipfs::Configuration,
|
||||||
@ -375,7 +374,6 @@ where
|
|||||||
transaction_queue: txq,
|
transaction_queue: txq,
|
||||||
ws_address: cmd.ws_conf.address(),
|
ws_address: cmd.ws_conf.address(),
|
||||||
fetch: fetch,
|
fetch: fetch,
|
||||||
geth_compatibility: cmd.geth_compatibility,
|
|
||||||
experimental_rpcs: cmd.experimental_rpcs,
|
experimental_rpcs: cmd.experimental_rpcs,
|
||||||
executor: runtime.executor(),
|
executor: runtime.executor(),
|
||||||
whisper_rpc: whisper_factory,
|
whisper_rpc: whisper_factory,
|
||||||
@ -865,7 +863,6 @@ where
|
|||||||
settings: Arc::new(cmd.net_settings.clone()),
|
settings: Arc::new(cmd.net_settings.clone()),
|
||||||
net_service: manage_network.clone(),
|
net_service: manage_network.clone(),
|
||||||
updater: updater.clone(),
|
updater: updater.clone(),
|
||||||
geth_compatibility: cmd.geth_compatibility,
|
|
||||||
experimental_rpcs: cmd.experimental_rpcs,
|
experimental_rpcs: cmd.experimental_rpcs,
|
||||||
ws_address: cmd.ws_conf.address(),
|
ws_address: cmd.ws_conf.address(),
|
||||||
fetch: fetch.clone(),
|
fetch: fetch.clone(),
|
||||||
|
@ -70,12 +70,6 @@ const EXTRA_INFO_PROOF: &str = "Object exists in blockchain (fetched earlier), e
|
|||||||
/// Eth RPC options
|
/// Eth RPC options
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
pub struct EthClientOptions {
|
pub struct EthClientOptions {
|
||||||
/// Return nonce from transaction queue when pending block not available.
|
|
||||||
pub pending_nonce_from_queue: bool,
|
|
||||||
/// Returns receipt from pending blocks
|
|
||||||
pub allow_pending_receipt_query: bool,
|
|
||||||
/// Send additional block number when asking for work
|
|
||||||
pub send_block_number_in_get_work: bool,
|
|
||||||
/// Gas Price Percentile used as default gas price.
|
/// Gas Price Percentile used as default gas price.
|
||||||
pub gas_price_percentile: usize,
|
pub gas_price_percentile: usize,
|
||||||
/// Return 'null' instead of an error if ancient block sync is still in
|
/// Return 'null' instead of an error if ancient block sync is still in
|
||||||
@ -100,9 +94,6 @@ impl EthClientOptions {
|
|||||||
impl Default for EthClientOptions {
|
impl Default for EthClientOptions {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
EthClientOptions {
|
EthClientOptions {
|
||||||
pending_nonce_from_queue: false,
|
|
||||||
allow_pending_receipt_query: true,
|
|
||||||
send_block_number_in_get_work: true,
|
|
||||||
gas_price_percentile: 50,
|
gas_price_percentile: 50,
|
||||||
allow_missing_blocks: false,
|
allow_missing_blocks: false,
|
||||||
allow_experimental_rpcs: false,
|
allow_experimental_rpcs: false,
|
||||||
@ -788,9 +779,6 @@ where
|
|||||||
|
|
||||||
fn transaction_count(&self, address: H160, num: Option<BlockNumber>) -> BoxFuture<U256> {
|
fn transaction_count(&self, address: H160, num: Option<BlockNumber>) -> BoxFuture<U256> {
|
||||||
let res = match num.unwrap_or_default() {
|
let res = match num.unwrap_or_default() {
|
||||||
BlockNumber::Pending if self.options.pending_nonce_from_queue => {
|
|
||||||
Ok(self.miner.next_nonce(&*self.client, &address))
|
|
||||||
}
|
|
||||||
BlockNumber::Pending => {
|
BlockNumber::Pending => {
|
||||||
let info = self.client.chain_info();
|
let info = self.client.chain_info();
|
||||||
let nonce = self
|
let nonce = self
|
||||||
@ -953,11 +941,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn transaction_receipt(&self, hash: H256) -> BoxFuture<Option<Receipt>> {
|
fn transaction_receipt(&self, hash: H256) -> BoxFuture<Option<Receipt>> {
|
||||||
if self.options.allow_pending_receipt_query {
|
let best_block = self.client.chain_info().best_block_number;
|
||||||
let best_block = self.client.chain_info().best_block_number;
|
if let Some(receipt) = self.miner.pending_receipt(best_block, &hash) {
|
||||||
if let Some(receipt) = self.miner.pending_receipt(best_block, &hash) {
|
return Box::new(future::ok(Some(receipt.into())));
|
||||||
return Box::new(future::ok(Some(receipt.into())));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let receipt = self.client.transaction_receipt(TransactionId::Hash(hash));
|
let receipt = self.client.transaction_receipt(TransactionId::Hash(hash));
|
||||||
@ -1067,19 +1053,12 @@ where
|
|||||||
.as_secs();
|
.as_secs();
|
||||||
if no_new_work_timeout > 0 && timestamp + no_new_work_timeout < now {
|
if no_new_work_timeout > 0 && timestamp + no_new_work_timeout < now {
|
||||||
Err(errors::no_new_work())
|
Err(errors::no_new_work())
|
||||||
} else if self.options.send_block_number_in_get_work {
|
|
||||||
Ok(Work {
|
|
||||||
pow_hash,
|
|
||||||
seed_hash: seed_hash.into(),
|
|
||||||
target,
|
|
||||||
number: Some(number),
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
Ok(Work {
|
Ok(Work {
|
||||||
pow_hash,
|
pow_hash,
|
||||||
seed_hash: seed_hash.into(),
|
seed_hash: seed_hash.into(),
|
||||||
target,
|
target,
|
||||||
number: None,
|
number: Some(number),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,6 @@ mod parity_set;
|
|||||||
mod personal;
|
mod personal;
|
||||||
mod private;
|
mod private;
|
||||||
mod pubsub;
|
mod pubsub;
|
||||||
mod rpc;
|
|
||||||
#[cfg(any(test, feature = "accounts"))]
|
#[cfg(any(test, feature = "accounts"))]
|
||||||
mod secretstore;
|
mod secretstore;
|
||||||
mod signer;
|
mod signer;
|
||||||
@ -58,7 +57,6 @@ pub use self::{
|
|||||||
parity_set::ParitySetClient,
|
parity_set::ParitySetClient,
|
||||||
private::PrivateClient,
|
private::PrivateClient,
|
||||||
pubsub::PubSubClient,
|
pubsub::PubSubClient,
|
||||||
rpc::RpcClient,
|
|
||||||
signer::SignerClient,
|
signer::SignerClient,
|
||||||
signing::SigningQueueClient,
|
signing::SigningQueueClient,
|
||||||
signing_unsafe::SigningUnsafeClient,
|
signing_unsafe::SigningUnsafeClient,
|
||||||
|
@ -225,19 +225,6 @@ impl ParityAccounts for ParityAccountsClient {
|
|||||||
Ok(true)
|
Ok(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn import_geth_accounts(&self, addresses: Vec<H160>) -> Result<Vec<H160>> {
|
|
||||||
self.deprecation_notice("parity_importGethAccounts");
|
|
||||||
self.accounts
|
|
||||||
.import_geth_accounts(into_vec(addresses), false)
|
|
||||||
.map(into_vec)
|
|
||||||
.map_err(|e| errors::account("Couldn't import Geth accounts", e))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn geth_accounts(&self) -> Result<Vec<H160>> {
|
|
||||||
self.deprecation_notice("parity_listGethAccounts");
|
|
||||||
Ok(into_vec(self.accounts.list_geth_accounts(false)))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn create_vault(&self, name: String, password: Password) -> Result<bool> {
|
fn create_vault(&self, name: String, password: Password) -> Result<bool> {
|
||||||
self.deprecation_notice("parity_newVault");
|
self.deprecation_notice("parity_newVault");
|
||||||
|
|
||||||
@ -376,10 +363,3 @@ impl ParityAccounts for ParityAccountsClient {
|
|||||||
.map_err(|e| errors::account("Could not sign message.", e))
|
.map_err(|e| errors::account("Could not sign message.", e))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn into_vec<A, B>(a: Vec<A>) -> Vec<B>
|
|
||||||
where
|
|
||||||
A: Into<B>,
|
|
||||||
{
|
|
||||||
a.into_iter().map(Into::into).collect()
|
|
||||||
}
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
|
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
//! Account management (personal) rpc implementation
|
//! Account management (personal) rpc implementation
|
||||||
use std::{sync::Arc, time::Duration};
|
use std::sync::Arc;
|
||||||
|
|
||||||
use accounts::AccountProvider;
|
use accounts::AccountProvider;
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
@ -48,7 +48,6 @@ use v1::{
|
|||||||
pub struct PersonalClient<D: Dispatcher> {
|
pub struct PersonalClient<D: Dispatcher> {
|
||||||
accounts: Arc<AccountProvider>,
|
accounts: Arc<AccountProvider>,
|
||||||
dispatcher: D,
|
dispatcher: D,
|
||||||
allow_perm_unlock: bool,
|
|
||||||
allow_experimental_rpcs: bool,
|
allow_experimental_rpcs: bool,
|
||||||
deprecation_notice: DeprecationNotice,
|
deprecation_notice: DeprecationNotice,
|
||||||
}
|
}
|
||||||
@ -58,13 +57,11 @@ impl<D: Dispatcher> PersonalClient<D> {
|
|||||||
pub fn new(
|
pub fn new(
|
||||||
accounts: &Arc<AccountProvider>,
|
accounts: &Arc<AccountProvider>,
|
||||||
dispatcher: D,
|
dispatcher: D,
|
||||||
allow_perm_unlock: bool,
|
|
||||||
allow_experimental_rpcs: bool,
|
allow_experimental_rpcs: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
PersonalClient {
|
PersonalClient {
|
||||||
accounts: accounts.clone(),
|
accounts: accounts.clone(),
|
||||||
dispatcher,
|
dispatcher,
|
||||||
allow_perm_unlock,
|
|
||||||
allow_experimental_rpcs,
|
allow_experimental_rpcs,
|
||||||
deprecation_notice: DeprecationNotice::default(),
|
deprecation_notice: DeprecationNotice::default(),
|
||||||
}
|
}
|
||||||
@ -159,23 +156,14 @@ impl<D: Dispatcher + 'static> Personal for PersonalClient<D> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let r = match (self.allow_perm_unlock, duration) {
|
let r = match duration {
|
||||||
(false, None) => store.unlock_account_temporarily(account, account_pass.into()),
|
None => store.unlock_account_temporarily(account, account_pass.into()),
|
||||||
(false, _) => {
|
_ => {
|
||||||
return Err(errors::unsupported(
|
return Err(errors::unsupported(
|
||||||
"Time-unlocking is not supported when permanent unlock is disabled.",
|
"Time-unlocking is not supported when permanent unlock is disabled.",
|
||||||
Some("Use personal_sendTransaction or enable permanent unlocking, instead."),
|
Some("Use personal_sendTransaction instead."),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
(true, Some(0)) => store.unlock_account_permanently(account, account_pass.into()),
|
|
||||||
(true, Some(d)) => store.unlock_account_timed(
|
|
||||||
account,
|
|
||||||
account_pass.into(),
|
|
||||||
Duration::from_secs(d.into()),
|
|
||||||
),
|
|
||||||
(true, None) => {
|
|
||||||
store.unlock_account_timed(account, account_pass.into(), Duration::from_secs(300))
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
match r {
|
match r {
|
||||||
Ok(_) => Ok(true),
|
Ok(_) => Ok(true),
|
||||||
|
@ -1,66 +0,0 @@
|
|||||||
// Copyright 2015-2019 Parity Technologies (UK) Ltd.
|
|
||||||
// This file is part of Parity Ethereum.
|
|
||||||
|
|
||||||
// Parity Ethereum is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
|
|
||||||
// Parity Ethereum is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
//! RPC generic methods implementation.
|
|
||||||
use jsonrpc_core::Result;
|
|
||||||
use std::collections::BTreeMap;
|
|
||||||
use v1::traits::Rpc;
|
|
||||||
|
|
||||||
/// RPC generic methods implementation.
|
|
||||||
pub struct RpcClient {
|
|
||||||
modules: BTreeMap<String, String>,
|
|
||||||
valid_apis: Vec<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl RpcClient {
|
|
||||||
/// Creates new `RpcClient`.
|
|
||||||
pub fn new(modules: BTreeMap<String, String>) -> Self {
|
|
||||||
// geth 1.3.6 fails upon receiving unknown api
|
|
||||||
let valid_apis = vec!["web3", "eth", "net", "personal", "rpc"];
|
|
||||||
|
|
||||||
RpcClient {
|
|
||||||
modules,
|
|
||||||
valid_apis: valid_apis.into_iter().map(ToOwned::to_owned).collect(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Rpc for RpcClient {
|
|
||||||
fn rpc_modules(&self) -> Result<BTreeMap<String, String>> {
|
|
||||||
let modules = self
|
|
||||||
.modules
|
|
||||||
.iter()
|
|
||||||
.fold(BTreeMap::new(), |mut map, (k, v)| {
|
|
||||||
map.insert(k.to_owned(), v.to_owned());
|
|
||||||
map
|
|
||||||
});
|
|
||||||
|
|
||||||
Ok(modules)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn modules(&self) -> Result<BTreeMap<String, String>> {
|
|
||||||
let modules = self
|
|
||||||
.modules
|
|
||||||
.iter()
|
|
||||||
.filter(|&(k, _v)| self.valid_apis.contains(k))
|
|
||||||
.fold(BTreeMap::new(), |mut map, (k, v)| {
|
|
||||||
map.insert(k.to_owned(), v.to_owned());
|
|
||||||
map
|
|
||||||
});
|
|
||||||
|
|
||||||
Ok(modules)
|
|
||||||
}
|
|
||||||
}
|
|
@ -49,7 +49,7 @@ pub use self::{
|
|||||||
traits::{
|
traits::{
|
||||||
Debug, Eth, EthFilter, EthPubSub, EthSigning, Net, Parity, ParityAccounts,
|
Debug, Eth, EthFilter, EthPubSub, EthSigning, Net, Parity, ParityAccounts,
|
||||||
ParityAccountsInfo, ParitySet, ParitySetAccounts, ParitySigning, Personal, Private, PubSub,
|
ParityAccountsInfo, ParitySet, ParitySetAccounts, ParitySigning, Personal, Private, PubSub,
|
||||||
Rpc, SecretStore, Signer, Traces, Web3,
|
SecretStore, Signer, Traces, Web3,
|
||||||
},
|
},
|
||||||
types::Origin,
|
types::Origin,
|
||||||
};
|
};
|
||||||
|
@ -142,9 +142,6 @@ impl EthTester {
|
|||||||
&miner_service,
|
&miner_service,
|
||||||
&external_miner,
|
&external_miner,
|
||||||
EthClientOptions {
|
EthClientOptions {
|
||||||
pending_nonce_from_queue: false,
|
|
||||||
allow_pending_receipt_query: true,
|
|
||||||
send_block_number_in_get_work: true,
|
|
||||||
gas_price_percentile: 50,
|
gas_price_percentile: 50,
|
||||||
allow_experimental_rpcs: true,
|
allow_experimental_rpcs: true,
|
||||||
allow_missing_blocks: false,
|
allow_missing_blocks: false,
|
||||||
|
@ -642,38 +642,6 @@ fn rpc_eth_transaction_count() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn rpc_eth_transaction_count_next_nonce() {
|
|
||||||
let tester = EthTester::new_with_options(EthClientOptions::with(|options| {
|
|
||||||
options.pending_nonce_from_queue = true;
|
|
||||||
}));
|
|
||||||
tester.miner.increment_nonce(&1.into());
|
|
||||||
|
|
||||||
let request1 = r#"{
|
|
||||||
"jsonrpc": "2.0",
|
|
||||||
"method": "eth_getTransactionCount",
|
|
||||||
"params": ["0x0000000000000000000000000000000000000001", "pending"],
|
|
||||||
"id": 1
|
|
||||||
}"#;
|
|
||||||
let response1 = r#"{"jsonrpc":"2.0","result":"0x1","id":1}"#;
|
|
||||||
assert_eq!(
|
|
||||||
tester.io.handle_request_sync(request1),
|
|
||||||
Some(response1.to_owned())
|
|
||||||
);
|
|
||||||
|
|
||||||
let request2 = r#"{
|
|
||||||
"jsonrpc": "2.0",
|
|
||||||
"method": "eth_getTransactionCount",
|
|
||||||
"params": ["0x0000000000000000000000000000000000000002", "pending"],
|
|
||||||
"id": 1
|
|
||||||
}"#;
|
|
||||||
let response2 = r#"{"jsonrpc":"2.0","result":"0x0","id":1}"#;
|
|
||||||
assert_eq!(
|
|
||||||
tester.io.handle_request_sync(request2),
|
|
||||||
Some(response2.to_owned())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn rpc_eth_block_transaction_count_by_hash() {
|
fn rpc_eth_block_transaction_count_by_hash() {
|
||||||
let request = r#"{
|
let request = r#"{
|
||||||
@ -1341,24 +1309,6 @@ fn rpc_get_work_returns_correct_work_package() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn rpc_get_work_should_not_return_block_number() {
|
|
||||||
let eth_tester = EthTester::new_with_options(EthClientOptions::with(|options| {
|
|
||||||
options.send_block_number_in_get_work = false;
|
|
||||||
}));
|
|
||||||
eth_tester.miner.set_author(miner::Author::External(
|
|
||||||
Address::from_str("d46e8dd67c5d32be8058bb8eb970870f07244567").unwrap(),
|
|
||||||
));
|
|
||||||
|
|
||||||
let request = r#"{"jsonrpc": "2.0", "method": "eth_getWork", "params": [], "id": 1}"#;
|
|
||||||
let response = r#"{"jsonrpc":"2.0","result":["0x76c7bd86693aee93d1a80a408a09a0585b1a1292afcb56192f171d925ea18e2d","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000800000000000000000000000000000000000000000000000000000000000"],"id":1}"#;
|
|
||||||
|
|
||||||
assert_eq!(
|
|
||||||
eth_tester.io.handle_request_sync(request),
|
|
||||||
Some(response.to_owned())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn rpc_get_work_should_timeout() {
|
fn rpc_get_work_should_timeout() {
|
||||||
let eth_tester = EthTester::default();
|
let eth_tester = EthTester::default();
|
||||||
|
@ -29,7 +29,6 @@ mod parity_set;
|
|||||||
#[cfg(any(test, feature = "accounts"))]
|
#[cfg(any(test, feature = "accounts"))]
|
||||||
mod personal;
|
mod personal;
|
||||||
mod pubsub;
|
mod pubsub;
|
||||||
mod rpc;
|
|
||||||
#[cfg(any(test, feature = "accounts"))]
|
#[cfg(any(test, feature = "accounts"))]
|
||||||
mod secretstore;
|
mod secretstore;
|
||||||
mod signer;
|
mod signer;
|
||||||
|
@ -77,7 +77,7 @@ fn setup_with(c: Config) -> PersonalTester {
|
|||||||
let reservations = Arc::new(Mutex::new(nonce::Reservations::new(runtime.executor())));
|
let reservations = Arc::new(Mutex::new(nonce::Reservations::new(runtime.executor())));
|
||||||
|
|
||||||
let dispatcher = FullDispatcher::new(client, miner.clone(), reservations, 50);
|
let dispatcher = FullDispatcher::new(client, miner.clone(), reservations, 50);
|
||||||
let personal = PersonalClient::new(&accounts, dispatcher, false, c.allow_experimental_rpcs);
|
let personal = PersonalClient::new(&accounts, dispatcher, c.allow_experimental_rpcs);
|
||||||
|
|
||||||
let mut io = IoHandler::default();
|
let mut io = IoHandler::default();
|
||||||
io.extend_with(personal.to_delegate());
|
io.extend_with(personal.to_delegate());
|
||||||
@ -383,39 +383,6 @@ fn ec_recover_invalid_signature() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn should_not_unlock_account_temporarily_if_allow_perm_is_disabled() {
|
|
||||||
let tester = setup();
|
|
||||||
let address = tester.accounts.new_account(&"password123".into()).unwrap();
|
|
||||||
|
|
||||||
let request = r#"{
|
|
||||||
"jsonrpc": "2.0",
|
|
||||||
"method": "personal_unlockAccount",
|
|
||||||
"params": [
|
|
||||||
""#
|
|
||||||
.to_owned()
|
|
||||||
+ &format!("0x{:x}", address)
|
|
||||||
+ r#"",
|
|
||||||
"password123",
|
|
||||||
"0x100"
|
|
||||||
],
|
|
||||||
"id": 1
|
|
||||||
}"#;
|
|
||||||
let response = r#"{"jsonrpc":"2.0","error":{"code":-32000,"message":"Time-unlocking is not supported when permanent unlock is disabled.","data":"Use personal_sendTransaction or enable permanent unlocking, instead."},"id":1}"#;
|
|
||||||
assert_eq!(
|
|
||||||
tester.io.handle_request_sync(&request),
|
|
||||||
Some(response.into())
|
|
||||||
);
|
|
||||||
|
|
||||||
assert!(
|
|
||||||
tester
|
|
||||||
.accounts
|
|
||||||
.sign(address, None, Default::default())
|
|
||||||
.is_err(),
|
|
||||||
"Should not unlock account."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_unlock_account_permanently() {
|
fn should_unlock_account_permanently() {
|
||||||
let tester = setup();
|
let tester = setup();
|
||||||
|
@ -1,52 +0,0 @@
|
|||||||
// Copyright 2015-2019 Parity Technologies (UK) Ltd.
|
|
||||||
// This file is part of Parity Ethereum.
|
|
||||||
|
|
||||||
// Parity Ethereum is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
|
|
||||||
// Parity Ethereum is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
use jsonrpc_core::IoHandler;
|
|
||||||
use std::collections::BTreeMap;
|
|
||||||
use v1::{Rpc, RpcClient};
|
|
||||||
|
|
||||||
fn rpc_client() -> RpcClient {
|
|
||||||
let mut modules = BTreeMap::new();
|
|
||||||
modules.insert("rpc".to_owned(), "1.0".to_owned());
|
|
||||||
modules.insert("web3".to_owned(), "1.0".to_owned());
|
|
||||||
modules.insert("ethcore".to_owned(), "1.0".to_owned());
|
|
||||||
RpcClient::new(modules)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn modules() {
|
|
||||||
let rpc = rpc_client().to_delegate();
|
|
||||||
let mut io = IoHandler::new();
|
|
||||||
io.extend_with(rpc);
|
|
||||||
|
|
||||||
let request = r#"{"jsonrpc": "2.0", "method": "modules", "params": [], "id": 1}"#;
|
|
||||||
let response = r#"{"jsonrpc":"2.0","result":{"rpc":"1.0","web3":"1.0"},"id":1}"#;
|
|
||||||
|
|
||||||
assert_eq!(io.handle_request_sync(request), Some(response.to_owned()));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn rpc_modules() {
|
|
||||||
let rpc = rpc_client().to_delegate();
|
|
||||||
let mut io = IoHandler::new();
|
|
||||||
io.extend_with(rpc);
|
|
||||||
|
|
||||||
let request = r#"{"jsonrpc": "2.0", "method": "rpc_modules", "params": [], "id": 1}"#;
|
|
||||||
let response =
|
|
||||||
r#"{"jsonrpc":"2.0","result":{"ethcore":"1.0","rpc":"1.0","web3":"1.0"},"id":1}"#;
|
|
||||||
|
|
||||||
assert_eq!(io.handle_request_sync(request), Some(response.to_owned()));
|
|
||||||
}
|
|
@ -28,7 +28,6 @@ pub mod parity_signing;
|
|||||||
pub mod personal;
|
pub mod personal;
|
||||||
pub mod private;
|
pub mod private;
|
||||||
pub mod pubsub;
|
pub mod pubsub;
|
||||||
pub mod rpc;
|
|
||||||
pub mod secretstore;
|
pub mod secretstore;
|
||||||
pub mod signer;
|
pub mod signer;
|
||||||
pub mod traces;
|
pub mod traces;
|
||||||
@ -47,7 +46,6 @@ pub use self::{
|
|||||||
personal::Personal,
|
personal::Personal,
|
||||||
private::Private,
|
private::Private,
|
||||||
pubsub::PubSub,
|
pubsub::PubSub,
|
||||||
rpc::Rpc,
|
|
||||||
secretstore::SecretStore,
|
secretstore::SecretStore,
|
||||||
signer::Signer,
|
signer::Signer,
|
||||||
traces::Traces,
|
traces::Traces,
|
||||||
|
@ -86,14 +86,6 @@ pub trait ParityAccounts {
|
|||||||
#[rpc(name = "parity_setAccountMeta")]
|
#[rpc(name = "parity_setAccountMeta")]
|
||||||
fn set_account_meta(&self, _: H160, _: String) -> Result<bool>;
|
fn set_account_meta(&self, _: H160, _: String) -> Result<bool>;
|
||||||
|
|
||||||
/// Imports a number of Geth accounts, with the list provided as the argument.
|
|
||||||
#[rpc(name = "parity_importGethAccounts")]
|
|
||||||
fn import_geth_accounts(&self, _: Vec<H160>) -> Result<Vec<H160>>;
|
|
||||||
|
|
||||||
/// Returns the accounts available for importing from Geth.
|
|
||||||
#[rpc(name = "parity_listGethAccounts")]
|
|
||||||
fn geth_accounts(&self) -> Result<Vec<H160>>;
|
|
||||||
|
|
||||||
/// Create new vault.
|
/// Create new vault.
|
||||||
#[rpc(name = "parity_newVault")]
|
#[rpc(name = "parity_newVault")]
|
||||||
fn create_vault(&self, _: String, _: Password) -> Result<bool>;
|
fn create_vault(&self, _: String, _: Password) -> Result<bool>;
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
// Copyright 2015-2019 Parity Technologies (UK) Ltd.
|
|
||||||
// This file is part of Parity Ethereum.
|
|
||||||
|
|
||||||
// Parity Ethereum is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
|
|
||||||
// Parity Ethereum is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
//! RPC interface.
|
|
||||||
|
|
||||||
use std::collections::BTreeMap;
|
|
||||||
|
|
||||||
use jsonrpc_core::Result;
|
|
||||||
use jsonrpc_derive::rpc;
|
|
||||||
|
|
||||||
/// RPC Interface.
|
|
||||||
#[rpc(server)]
|
|
||||||
pub trait Rpc {
|
|
||||||
/// Returns supported modules for Geth 1.3.6
|
|
||||||
/// @ignore
|
|
||||||
#[rpc(name = "modules")]
|
|
||||||
fn modules(&self) -> Result<BTreeMap<String, String>>;
|
|
||||||
|
|
||||||
/// Returns supported modules for Geth 1.4.0
|
|
||||||
/// @ignore
|
|
||||||
#[rpc(name = "rpc_modules")]
|
|
||||||
fn rpc_modules(&self) -> Result<BTreeMap<String, String>>;
|
|
||||||
}
|
|
@ -289,16 +289,6 @@ fn home() -> PathBuf {
|
|||||||
home_dir().expect("Failed to get home dir")
|
home_dir().expect("Failed to get home dir")
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Geth path
|
|
||||||
pub fn geth(testnet: bool) -> PathBuf {
|
|
||||||
let mut base = geth_base();
|
|
||||||
if testnet {
|
|
||||||
base.push("testnet");
|
|
||||||
}
|
|
||||||
base.push("keystore");
|
|
||||||
base
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Parity path for specific chain
|
/// Parity path for specific chain
|
||||||
pub fn parity(chain: &str) -> PathBuf {
|
pub fn parity(chain: &str) -> PathBuf {
|
||||||
let mut base = parity_base();
|
let mut base = parity_base();
|
||||||
@ -321,13 +311,6 @@ mod platform {
|
|||||||
home.push("keys");
|
home.push("keys");
|
||||||
home
|
home
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn geth_base() -> PathBuf {
|
|
||||||
let mut home = super::home();
|
|
||||||
home.push("Library");
|
|
||||||
home.push("Ethereum");
|
|
||||||
home
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
@ -346,14 +329,6 @@ mod platform {
|
|||||||
home.push("keys");
|
home.push("keys");
|
||||||
home
|
home
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn geth_base() -> PathBuf {
|
|
||||||
let mut home = super::home();
|
|
||||||
home.push("AppData");
|
|
||||||
home.push("Roaming");
|
|
||||||
home.push("Ethereum");
|
|
||||||
home
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(any(target_os = "macos", windows)))]
|
#[cfg(not(any(target_os = "macos", windows)))]
|
||||||
@ -371,12 +346,6 @@ mod platform {
|
|||||||
home.push("keys");
|
home.push("keys");
|
||||||
home
|
home
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn geth_base() -> PathBuf {
|
|
||||||
let mut home = super::home();
|
|
||||||
home.push(".ethereum");
|
|
||||||
home
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
Loading…
Reference in New Issue
Block a user