From 6bfb6fe6516259dbed41908f5ea49efa0e47b785 Mon Sep 17 00:00:00 2001 From: Dmitry S Date: Mon, 1 Apr 2019 15:51:09 +0300 Subject: [PATCH] run contract code storage routines only in case when no exceptions or revert occurs before (#1271) --- .../main/java/org/ethereum/vm/program/Program.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/ethereumj-core/src/main/java/org/ethereum/vm/program/Program.java b/ethereumj-core/src/main/java/org/ethereum/vm/program/Program.java index 18713fbf21..b8c11c5847 100644 --- a/ethereumj-core/src/main/java/org/ethereum/vm/program/Program.java +++ b/ethereumj-core/src/main/java/org/ethereum/vm/program/Program.java @@ -549,16 +549,9 @@ private void createContractImpl(DataWord value, byte[] programCode, byte[] newAd } // 4. CREATE THE CONTRACT OUT OF RETURN - byte[] code = result.getHReturn(); - - long storageCost = getLength(code) * getBlockchainConfig().getGasCost().getCREATE_DATA(); - if (result.isRevert()) { - long afterSpend = programInvoke.getGas().longValue() - result.getGasUsed(); - if (afterSpend < 0) { - result.setException(Program.Exception.notEnoughSpendingGas("No gas to return just created contract", - storageCost, this)); - } - } else { + if (!result.isRevert() && result.getException() == null) { + byte[] code = result.getHReturn(); + long storageCost = getLength(code) * getBlockchainConfig().getGasCost().getCREATE_DATA(); long afterSpend = programInvoke.getGas().longValue() - result.getGasUsed() - storageCost; if (afterSpend < 0) { if (!blockchainConfig.getConstants().createEmptyContractOnOOG()) {