mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-27 18:37:59 +00:00
9acf88f58b
* client: Replace `unsafe_rpc_expose` with an `RpcMethods` enum which can be either Default, Safe or Unsafe. The idea is to have the following: | | --rpc-external=false | --rpc-external=true | |--------------------- |------------------- |----------------- | | --rpc-methods=Default | | unsafe calls denied | | --rpc-methods=Safe | unsafe calls denied | unsafe calls denied | | --rpc-methods=Unsafe | | | Since the previous `unsafe-rpc-expose` option was confusing. * client: Only warn against exposing externally unsafe RPC method set * Apply suggestions from code review Co-Authored-By: Cecile Tonglet <cecile.tonglet@cecton.com> * cli: Rephrase doc comment for rpc_methods config * Improve debuggability of build_spec_works ...by printing to stderr the stderr of the command. This is normally suppressed for succesful tests but not for failing ones - if that's the case then it's useful to see the test failure reason inline rather than having to execute the command separately ourselves. * Rename RpcMethods::{Default => Auto} variant * Update bin/node/cli/tests/build_spec_works.rs Co-authored-by: Benjamin Kampmann <ben.kampmann@googlemail.com> Co-authored-by: Cecile Tonglet <cecile.tonglet@cecton.com> Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
186 lines
5.4 KiB
Rust
186 lines
5.4 KiB
Rust
// Copyright 2018-2020 Parity Technologies (UK) Ltd.
|
|
// This file is part of Substrate.
|
|
|
|
// Substrate 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.
|
|
|
|
// Substrate 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 Substrate. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
// NOTE: we allow missing docs here because arg_enum! creates the function variants without doc
|
|
#![allow(missing_docs)]
|
|
|
|
use structopt::clap::arg_enum;
|
|
|
|
arg_enum! {
|
|
/// How to execute Wasm runtime code
|
|
#[allow(missing_docs)]
|
|
#[derive(Debug, Clone, Copy)]
|
|
pub enum WasmExecutionMethod {
|
|
// Uses an interpreter.
|
|
Interpreted,
|
|
// Uses a compiled runtime.
|
|
Compiled,
|
|
}
|
|
}
|
|
|
|
impl WasmExecutionMethod {
|
|
/// Returns list of variants that are not disabled by feature flags.
|
|
pub fn enabled_variants() -> Vec<&'static str> {
|
|
Self::variants()
|
|
.iter()
|
|
.cloned()
|
|
.filter(|&name| cfg!(feature = "wasmtime") || name != "Compiled")
|
|
.collect()
|
|
}
|
|
}
|
|
|
|
impl Into<sc_service::config::WasmExecutionMethod> for WasmExecutionMethod {
|
|
fn into(self) -> sc_service::config::WasmExecutionMethod {
|
|
match self {
|
|
WasmExecutionMethod::Interpreted => {
|
|
sc_service::config::WasmExecutionMethod::Interpreted
|
|
}
|
|
#[cfg(feature = "wasmtime")]
|
|
WasmExecutionMethod::Compiled => sc_service::config::WasmExecutionMethod::Compiled,
|
|
#[cfg(not(feature = "wasmtime"))]
|
|
WasmExecutionMethod::Compiled => panic!(
|
|
"Substrate must be compiled with \"wasmtime\" feature for compiled Wasm execution"
|
|
),
|
|
}
|
|
}
|
|
}
|
|
|
|
arg_enum! {
|
|
#[allow(missing_docs)]
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
|
pub enum TracingReceiver {
|
|
Log,
|
|
Telemetry,
|
|
}
|
|
}
|
|
|
|
impl Into<sc_tracing::TracingReceiver> for TracingReceiver {
|
|
fn into(self) -> sc_tracing::TracingReceiver {
|
|
match self {
|
|
TracingReceiver::Log => sc_tracing::TracingReceiver::Log,
|
|
TracingReceiver::Telemetry => sc_tracing::TracingReceiver::Telemetry,
|
|
}
|
|
}
|
|
}
|
|
|
|
arg_enum! {
|
|
#[allow(missing_docs)]
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
|
pub enum NodeKeyType {
|
|
Ed25519
|
|
}
|
|
}
|
|
|
|
arg_enum! {
|
|
/// How to execute blocks
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
pub enum ExecutionStrategy {
|
|
// Execute with native build (if available, WebAssembly otherwise).
|
|
Native,
|
|
// Only execute with the WebAssembly build.
|
|
Wasm,
|
|
// Execute with both native (where available) and WebAssembly builds.
|
|
Both,
|
|
// Execute with the native build if possible; if it fails, then execute with WebAssembly.
|
|
NativeElseWasm,
|
|
}
|
|
}
|
|
|
|
impl Into<sc_client_api::ExecutionStrategy> for ExecutionStrategy {
|
|
fn into(self) -> sc_client_api::ExecutionStrategy {
|
|
match self {
|
|
ExecutionStrategy::Native => sc_client_api::ExecutionStrategy::NativeWhenPossible,
|
|
ExecutionStrategy::Wasm => sc_client_api::ExecutionStrategy::AlwaysWasm,
|
|
ExecutionStrategy::Both => sc_client_api::ExecutionStrategy::Both,
|
|
ExecutionStrategy::NativeElseWasm => sc_client_api::ExecutionStrategy::NativeElseWasm,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl ExecutionStrategy {
|
|
/// Returns the variant as `'&static str`.
|
|
pub fn as_str(&self) -> &'static str {
|
|
match self {
|
|
Self::Native => "Native",
|
|
Self::Wasm => "Wasm",
|
|
Self::Both => "Both",
|
|
Self::NativeElseWasm => "NativeElseWasm",
|
|
}
|
|
}
|
|
}
|
|
|
|
arg_enum! {
|
|
/// Available RPC methods.
|
|
#[allow(missing_docs)]
|
|
#[derive(Debug, Copy, Clone, PartialEq)]
|
|
pub enum RpcMethods {
|
|
// Expose every RPC method only when RPC is listening on `localhost`,
|
|
// otherwise serve only safe RPC methods.
|
|
Auto,
|
|
// Allow only a safe subset of RPC methods.
|
|
Safe,
|
|
// Expose every RPC method (even potentially unsafe ones).
|
|
Unsafe,
|
|
}
|
|
}
|
|
|
|
impl Into<sc_service::config::RpcMethods> for RpcMethods {
|
|
fn into(self) -> sc_service::config::RpcMethods {
|
|
match self {
|
|
RpcMethods::Auto => sc_service::config::RpcMethods::Auto,
|
|
RpcMethods::Safe => sc_service::config::RpcMethods::Safe,
|
|
RpcMethods::Unsafe => sc_service::config::RpcMethods::Unsafe,
|
|
}
|
|
}
|
|
}
|
|
|
|
arg_enum! {
|
|
/// Database backend
|
|
#[allow(missing_docs)]
|
|
#[derive(Debug, Clone, Copy)]
|
|
pub enum Database {
|
|
// Facebooks RocksDB
|
|
RocksDb,
|
|
// Subdb. https://github.com/paritytech/subdb/
|
|
SubDb,
|
|
// ParityDb. https://github.com/paritytech/parity-db/
|
|
ParityDb,
|
|
}
|
|
}
|
|
|
|
|
|
arg_enum! {
|
|
/// Whether off-chain workers are enabled.
|
|
#[allow(missing_docs)]
|
|
#[derive(Debug, Clone)]
|
|
pub enum OffchainWorkerEnabled {
|
|
Always,
|
|
Never,
|
|
WhenValidating,
|
|
}
|
|
}
|
|
|
|
/// Default value for the `--execution-syncing` parameter.
|
|
pub const DEFAULT_EXECUTION_SYNCING: ExecutionStrategy = ExecutionStrategy::NativeElseWasm;
|
|
/// Default value for the `--execution-import-block` parameter.
|
|
pub const DEFAULT_EXECUTION_IMPORT_BLOCK: ExecutionStrategy = ExecutionStrategy::NativeElseWasm;
|
|
/// Default value for the `--execution-block-construction` parameter.
|
|
pub const DEFAULT_EXECUTION_BLOCK_CONSTRUCTION: ExecutionStrategy = ExecutionStrategy::Wasm;
|
|
/// Default value for the `--execution-offchain-worker` parameter.
|
|
pub const DEFAULT_EXECUTION_OFFCHAIN_WORKER: ExecutionStrategy = ExecutionStrategy::Native;
|
|
/// Default value for the `--execution-other` parameter.
|
|
pub const DEFAULT_EXECUTION_OTHER: ExecutionStrategy = ExecutionStrategy::Native;
|