From 81db748987f9165d0bb54d30236f3f5418f9783b Mon Sep 17 00:00:00 2001 From: cl507523 Date: Wed, 21 Jan 2026 09:09:26 +0000 Subject: [PATCH 1/2] fix: use correct revision for interpreter --- src/evm/interpreter.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/evm/interpreter.cpp b/src/evm/interpreter.cpp index 983cff5b3..7d6922b6a 100644 --- a/src/evm/interpreter.cpp +++ b/src/evm/interpreter.cpp @@ -321,8 +321,11 @@ void BaseInterpreter::interpret() { size_t CodeSize = Mod->CodeSize; Byte *Code = Mod->Code; - static const auto *MetricsTable = - evmc_get_instruction_metrics_table(DEFAULT_REVISION); + evmc_revision Revision = Context.getInstance()->getRevision(); + const auto *MetricsTable = + evmc_get_instruction_metrics_table(Revision); + const auto *NamesTable = + evmc_get_instruction_names_table(Revision); const auto &Cache = Mod->getBytecodeCache(); const uint8_t *__restrict JumpDestMap = Cache.JumpDestMap.data(); const intx::uint256 *__restrict PushValueMap = Cache.PushValueMap.data(); @@ -349,6 +352,13 @@ void BaseInterpreter::interpret() { const uint8_t OpcodeU8 = static_cast(OpcodeByte); const evmc_opcode Op = static_cast(OpcodeByte); + // EVMC does not have opcodes like MCOPY... in CANCUN + if (Revision < EVMC_CANCUN && NamesTable[Op] == NULL) { + // Undefined instruction + Context.setStatus(EVMC_UNDEFINED_INSTRUCTION); + break; + } + switch (Op) { case evmc_opcode::OP_STOP: { const uint64_t RemainingGas = Frame->Msg.gas; From 329b2cec7c487bfb9ee9fd10f4b46d1cea2a1911 Mon Sep 17 00:00:00 2001 From: cl507523 Date: Thu, 22 Jan 2026 03:18:33 +0000 Subject: [PATCH 2/2] fix: code format --- src/evm/interpreter.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/evm/interpreter.cpp b/src/evm/interpreter.cpp index 7d6922b6a..a479b3afd 100644 --- a/src/evm/interpreter.cpp +++ b/src/evm/interpreter.cpp @@ -322,10 +322,8 @@ void BaseInterpreter::interpret() { size_t CodeSize = Mod->CodeSize; Byte *Code = Mod->Code; evmc_revision Revision = Context.getInstance()->getRevision(); - const auto *MetricsTable = - evmc_get_instruction_metrics_table(Revision); - const auto *NamesTable = - evmc_get_instruction_names_table(Revision); + const auto *MetricsTable = evmc_get_instruction_metrics_table(Revision); + const auto *NamesTable = evmc_get_instruction_names_table(Revision); const auto &Cache = Mod->getBytecodeCache(); const uint8_t *__restrict JumpDestMap = Cache.JumpDestMap.data(); const intx::uint256 *__restrict PushValueMap = Cache.PushValueMap.data();