diff --git a/src/evm/opcode_handlers.cpp b/src/evm/opcode_handlers.cpp index 7a9b9aed2..1b088d1c8 100644 --- a/src/evm/opcode_handlers.cpp +++ b/src/evm/opcode_handlers.cpp @@ -1239,13 +1239,13 @@ void CreateHandler::doExecute() { } Context->getInstance()->addGasRefund(Result.gas_refund); + // Always set return data from the host result, matching CALL handler + // behavior and EVM spec (EIP-211: RETURNDATA should reflect last sub-call). + Context->setReturnData(std::vector( + Result.output_data, Result.output_data + Result.output_size)); if (Result.status_code == EVMC_SUCCESS) { - Context->setReturnData(std::vector()); Frame->pop(); // pop the assume value Frame->push(intx::be::load(Result.create_address)); - } else { - Context->setReturnData(std::vector( - Result.output_data, Result.output_data + Result.output_size)); } Context->setStatus(EVMC_SUCCESS); }