diff --git a/runtime/near-vm-runner/src/wasmer_runner.rs b/runtime/near-vm-runner/src/wasmer_runner.rs index 32026e71924..645d1c7ff14 100644 --- a/runtime/near-vm-runner/src/wasmer_runner.rs +++ b/runtime/near-vm-runner/src/wasmer_runner.rs @@ -101,7 +101,21 @@ impl IntoVMError for wasmer_runtime::error::RuntimeError { // Failed unwinder may happen in the case of deep recursion/stack overflow. // Also can be thrown on unreachable instruction, which is quite unfortunate. InvokeError::FailedWithNoError => VMError::FunctionCallError( - FunctionCallError::Nondeterministic("FailedWithNoError".to_string()), + // XXX: this is a hot-fix. Initially, we treated this error + // case as a normal one (so, we stored this error in our + // state, etc.) + // + // Then, in + // https://github.com/near/nearcore/pull/4181#discussion_r606267838 + // we reasoned that this error actually happens + // non-deterministically, so it's better to panic in this + // case. + // + // However, when rolling this out, we noticed that this + // error happens deterministically for at least one + // contract, so here we flip it back to some deterministic + // error, which won't cause the node to panic. + FunctionCallError::WasmTrap(WasmTrap::Unreachable) ), // Indicates that a trap occurred that is not known to Wasmer. // As of 0.17.0, thrown only from Cranelift BE.