diff --git a/lib/modAvmVersion1.jar b/lib/modAvmVersion1.jar index 3411dff48f..57063854d9 100644 Binary files a/lib/modAvmVersion1.jar and b/lib/modAvmVersion1.jar differ diff --git a/lib/modAvmVersion2.jar b/lib/modAvmVersion2.jar index 0750b9e3e3..88e545469a 100644 Binary files a/lib/modAvmVersion2.jar and b/lib/modAvmVersion2.jar differ diff --git a/modAionImpl/src/org/aion/zero/impl/vm/precompiled/ExternalStateForPrecompiled.java b/modAionImpl/src/org/aion/zero/impl/vm/precompiled/ExternalStateForPrecompiled.java index 896f5b2652..268f2e675c 100644 --- a/modAionImpl/src/org/aion/zero/impl/vm/precompiled/ExternalStateForPrecompiled.java +++ b/modAionImpl/src/org/aion/zero/impl/vm/precompiled/ExternalStateForPrecompiled.java @@ -133,6 +133,9 @@ public BigInteger getBalance(AionAddress address) { */ @Override public void addBalance(AionAddress address, BigInteger amount) { + if (!this.isLocalCall && getBalance(address).add(amount).signum() < 0) { + throw new IllegalArgumentException("This balance adjustment leads to a negative balance!"); + } this.repository.addBalance(address, amount); } @@ -255,6 +258,9 @@ public boolean accountBalanceIsAtLeast(AionAddress address, BigInteger amount) { @Override public void deductEnergyCost(AionAddress address, BigInteger energyCost) { if (!this.isLocalCall) { + if (getBalance(address).subtract(energyCost).signum() < 0) { + throw new IllegalArgumentException("This balance adjustment leads to a negative balance!"); + } this.repository.addBalance(address, energyCost.negate()); } }