diff --git a/ethereumj-core/src/main/java/org/ethereum/net/eth/EthHandler.java b/ethereumj-core/src/main/java/org/ethereum/net/eth/EthHandler.java index bf6719b3..680002fc 100644 --- a/ethereumj-core/src/main/java/org/ethereum/net/eth/EthHandler.java +++ b/ethereumj-core/src/main/java/org/ethereum/net/eth/EthHandler.java @@ -43,7 +43,7 @@ import static org.ethereum.net.message.StaticMessages.GET_TRANSACTIONS_MESSAGE; @Scope("prototype") public class EthHandler extends SimpleChannelInboundHandler { - public final static byte VERSION = 48; + public final static byte VERSION = 49; public final static byte NETWORK_ID = 0x0; private final static Logger logger = LoggerFactory.getLogger("net"); diff --git a/ethereumj-core/src/main/java/org/ethereum/vm/GasCost.java b/ethereumj-core/src/main/java/org/ethereum/vm/GasCost.java index 95ad26aa..1ada0196 100644 --- a/ethereumj-core/src/main/java/org/ethereum/vm/GasCost.java +++ b/ethereumj-core/src/main/java/org/ethereum/vm/GasCost.java @@ -12,8 +12,8 @@ public class GasCost { public static int STEP = 1; /** Cost 20 gas */ public static int BALANCE = 20; - /** Cost 20 gas */ - public static int SHA3 = 20; + /** Cost 10 gas */ + public static int SHA3 = 10; /** Cost 20 gas */ public static int SLOAD = 20; /** Cost 0 gas */ diff --git a/ethereumj-core/src/main/java/org/ethereum/vm/VM.java b/ethereumj-core/src/main/java/org/ethereum/vm/VM.java index 473e47bc..11a4a4a9 100644 --- a/ethereumj-core/src/main/java/org/ethereum/vm/VM.java +++ b/ethereumj-core/src/main/java/org/ethereum/vm/VM.java @@ -135,6 +135,13 @@ public class VM { case SHA3: gasCost = GasCost.SHA3; newMemSize = memNeeded(stack.peek(), stack.get(stack.size()-2)); + + DataWord size = stack.get(stack.size()-2); + long chunkUsed = (size.longValue() + 31) / 32; + gasCost += chunkUsed * GasCost.SHA3; + + //todo: calc how much bytes for sha3(): sha3 / 32 * 10 + break; case CALLDATACOPY: copySize = stack.get(stack.size()-3).longValue();