Make wasmtime the default when the feature is enabled (#8855)

* Make wasmtime the default when the feature is enabled

* Update client/cli/src/arg_enums.rs

Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>

Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
This commit is contained in:
Bastian Köcher
2021-05-19 10:29:32 +02:00
committed by GitHub
parent 0b30049417
commit 6a6f330412
4 changed files with 55 additions and 22 deletions
+45 -17
View File
@@ -20,26 +20,54 @@
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,
/// How to execute Wasm runtime code.
#[derive(Debug, Clone, Copy)]
pub enum WasmExecutionMethod {
/// Uses an interpreter.
Interpreted,
/// Uses a compiled runtime.
Compiled,
}
impl std::fmt::Display for WasmExecutionMethod {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Interpreted => write!(f, "Interpreted"),
Self::Compiled => write!(f, "Compiled"),
}
}
}
impl std::str::FromStr for WasmExecutionMethod {
type Err = String;
fn from_str(s: &str) -> Result<Self, String> {
if s.eq_ignore_ascii_case("interpreted-i-know-what-i-do") {
Ok(Self::Interpreted)
} else if s.eq_ignore_ascii_case("compiled") {
#[cfg(feature = "wasmtime")]
{
Ok(Self::Compiled)
}
#[cfg(not(feature = "wasmtime"))]
{
Err(format!("`Compiled` variant requires the `wasmtime` feature to be enabled"))
}
} else {
Err(format!("Unknown variant `{}`, known variants: {:?}", s, Self::variants()))
}
}
}
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()
/// Returns all the variants of this enum to be shown in the cli.
pub fn variants() -> &'static [&'static str] {
let variants = &["interpreted-i-know-what-i-do", "compiled"];
if cfg!(feature = "wasmtime") {
variants
} else {
&variants[..1]
}
}
}
@@ -181,7 +209,7 @@ impl std::str::FromStr for Database {
} else if s.eq_ignore_ascii_case("paritydb-experimental") {
Ok(Self::ParityDb)
} else {
Err(format!("Unknwon variant `{}`, known variants: {:?}", s, Self::variants()))
Err(format!("Unknown variant `{}`, known variants: {:?}", s, Self::variants()))
}
}
}
@@ -27,6 +27,12 @@ use sc_client_api::execution_extensions::ExecutionStrategies;
use structopt::StructOpt;
use std::path::PathBuf;
#[cfg(feature = "wasmtime")]
const WASM_METHOD_DEFAULT: &str = "Compiled";
#[cfg(not(feature = "wasmtime"))]
const WASM_METHOD_DEFAULT: &str = "interpreted-i-know-what-i-do";
/// Parameters for block import.
#[derive(Debug, StructOpt, Clone)]
pub struct ImportParams {
@@ -50,9 +56,9 @@ pub struct ImportParams {
#[structopt(
long = "wasm-execution",
value_name = "METHOD",
possible_values = &WasmExecutionMethod::enabled_variants(),
possible_values = &WasmExecutionMethod::variants(),
case_insensitive = true,
default_value = "Interpreted"
default_value = WASM_METHOD_DEFAULT
)]
pub wasm_method: WasmExecutionMethod,
@@ -76,7 +82,6 @@ pub struct ImportParams {
}
impl ImportParams {
/// Specify the state cache size.
pub fn state_cache_size(&self) -> usize {
self.state_cache_size