diff --git a/ethereumj-core/src/main/java/org/ethereum/vm/Program.java b/ethereumj-core/src/main/java/org/ethereum/vm/Program.java index 84a6aa8e..68f019f8 100644 --- a/ethereumj-core/src/main/java/org/ethereum/vm/Program.java +++ b/ethereumj-core/src/main/java/org/ethereum/vm/Program.java @@ -322,10 +322,17 @@ public class Program { return; } + byte[] senderAddress = this.getOwnerAddress().getLast20Bytes(); + BigInteger endowment = value.value(); + BigInteger senderBalance = result.getRepository().getBalance(senderAddress); + if (senderBalance.compareTo(endowment) < 0) { + stackPushZero(); + return; + } + // [1] FETCH THE CODE FROM THE MEMORY byte[] programCode = memoryChunk(memStart, memSize).array(); - byte[] senderAddress = this.getOwnerAddress().getLast20Bytes(); if (logger.isInfoEnabled()) logger.info("creating a new contract inside contract run: [{}]", Hex.toHexString(senderAddress)); @@ -346,12 +353,6 @@ public class Program { } // [4] TRANSFER THE BALANCE - BigInteger endowment = value.value(); - BigInteger senderBalance = result.getRepository().getBalance(senderAddress); - if (senderBalance.compareTo(endowment) < 0) { - stackPushZero(); - return; - } result.getRepository().addBalance(senderAddress, endowment.negate()); BigInteger newBalance = result.getRepository().addBalance(newAddress, endowment); diff --git a/ethereumj-core/src/test/java/test/ethereum/jsontestsuite/GitHubStateTest.java b/ethereumj-core/src/test/java/test/ethereum/jsontestsuite/GitHubStateTest.java index e0a12b20..17f61ac8 100644 --- a/ethereumj-core/src/test/java/test/ethereum/jsontestsuite/GitHubStateTest.java +++ b/ethereumj-core/src/test/java/test/ethereum/jsontestsuite/GitHubStateTest.java @@ -44,8 +44,6 @@ public class GitHubStateTest { public void stInitCodeTest() throws ParseException { // [V] Set excluded = new HashSet<>(); - excluded.add("CallContractToCreateContractOOG"); - excluded.add("CallContractToCreateContractNoCash"); excluded.add("CallContractToCreateContractWhichWouldCreateContractInInitCode"); String json = JSONReader.loadJSON("StateTests/stInitCodeTest.json");