From cef99150eb6ea3831be873ab6fd85e1fb2a29522 Mon Sep 17 00:00:00 2001 From: Lane Rettig Date: Thu, 31 May 2018 01:41:52 -0300 Subject: [PATCH 1/2] Take CREATE gas before doing 63/64 calculation --- src/eei.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/eei.cpp b/src/eei.cpp index 6a06b8ce8..0ff213929 100644 --- a/src/eei.cpp +++ b/src/eei.cpp @@ -801,15 +801,17 @@ inline int64_t maxCallGas(int64_t gas) { } create_message.code_hash = {}; - create_message.gas = result.gasLeft - (result.gasLeft / 64); create_message.depth = msg.depth + 1; create_message.kind = EVMC_CREATE; create_message.flags = 0; evmc_result create_result; - takeInterfaceGas(create_message.gas); takeInterfaceGas(GasSchedule::create); + + create_message.gas = maxCallGas(result.gasLeft); + takeInterfaceGas(create_message.gas); + context->fn_table->call(&create_result, context, &create_message); if (create_result.status_code == EVMC_SUCCESS) { From 43039fff9324b0f6e818375e83d1655abfbfd8f1 Mon Sep 17 00:00:00 2001 From: Lane Rettig Date: Sat, 2 Jun 2018 20:41:03 -0300 Subject: [PATCH 2/2] Refund remaining gas after CREATE Same as after CALL* --- src/eei.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/eei.cpp b/src/eei.cpp index 0ff213929..6c381208c 100644 --- a/src/eei.cpp +++ b/src/eei.cpp @@ -814,6 +814,9 @@ inline int64_t maxCallGas(int64_t gas) { context->fn_table->call(&create_result, context, &create_message); + /* Return unspent gas */ + result.gasLeft += create_result.gas_left; + if (create_result.status_code == EVMC_SUCCESS) { storeUint160(create_result.create_address, resultOffset); lastReturnData.clear();