From 53fc186e9eda8c8d0078e55c0f26a765d52f40d3 Mon Sep 17 00:00:00 2001 From: Lorenzo Gentile Date: Thu, 30 Jan 2025 16:04:37 +0100 Subject: [PATCH] added case with non-zero arguments --- .../zktracer/module/oob/OobOperation.java | 2 +- .../LowGasStipendPrecompileCallTests.java | 35 ++++++++++--------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/OobOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/OobOperation.java index 0ed637c7d..94ddefbee 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/OobOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/OobOperation.java @@ -944,10 +944,10 @@ private void setEcpairing(PrecompileCommonOobCall prcCommonOobCall) { } else { noCall(4); } - insufficientGasForPrecompile = insufficientGas; // Set hubSuccess final boolean hubSuccess = isMultipleOf192 && !insufficientGas; + insufficientGasForPrecompile = !hubSuccess; // TODO: this is for testing purposes, not accurate prcCommonOobCall.setHubSuccess(hubSuccess); // Set returnGas diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/precompiles/LowGasStipendPrecompileCallTests.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/precompiles/LowGasStipendPrecompileCallTests.java index 059823340..16ad5f7f7 100644 --- a/arithmetization/src/test/java/net/consensys/linea/zktracer/precompiles/LowGasStipendPrecompileCallTests.java +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/precompiles/LowGasStipendPrecompileCallTests.java @@ -13,23 +13,21 @@ import net.consensys.linea.zktracer.opcode.OpCode; import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.datatypes.Address; -import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.junit.jupiter.params.provider.ValueSource; public class LowGasStipendPrecompileCallTests { @ParameterizedTest @MethodSource("lowGasStipendPrecompileCallTestSource") - void lowGasStipendPrecompileCallTest(Address precompileAddress) { + void lowGasStipendPrecompileCallTest(Address precompileAddress, boolean isZeroArgument) { final Bytes bytecode = BytecodeCompiler.newProgram() - .push(0) // retSize - .push(0) // retOffset - .push(0) // argsSize - .push(0) // argsOffset + .push(isZeroArgument ? 0 : 1) // retSize + .push(isZeroArgument ? 0 : 1) // retOffset + .push(isZeroArgument ? 0 : 1) // argsSize + .push(isZeroArgument ? 0 : 1) // argsOffset .push(0) // value .push(precompileAddress) // address .push(1) // gas, that is deliberately insufficient @@ -42,22 +40,25 @@ void lowGasStipendPrecompileCallTest(Address precompileAddress) { boolean insufficientGasForPrecompile = false; for (int i = 0; i < hub.oob().operations().size(); i++) { final OobOperation operation = hub.oob().operations().get(i); - insufficientGasForPrecompile = insufficientGasForPrecompile || operation.isInsufficientGasForPrecompile(); + insufficientGasForPrecompile = + insufficientGasForPrecompile || operation.isInsufficientGasForPrecompile(); } assertTrue(insufficientGasForPrecompile); } static Stream lowGasStipendPrecompileCallTestSource() { List arguments = new ArrayList<>(); - arguments.add(Arguments.of(Address.ECREC)); - arguments.add(Arguments.of(Address.SHA256)); - arguments.add(Arguments.of(Address.RIPEMD160)); - arguments.add(Arguments.of(Address.ID)); - arguments.add(Arguments.of(Address.MODEXP)); - arguments.add(Arguments.of(Address.ALTBN128_ADD)); - arguments.add(Arguments.of(Address.ALTBN128_MUL)); - arguments.add(Arguments.of(Address.ALTBN128_PAIRING)); - arguments.add(Arguments.of(Address.BLAKE2B_F_COMPRESSION)); + for (boolean isZeroArgument : new boolean[] {true, false}) { + arguments.add(Arguments.of(Address.ECREC, isZeroArgument)); + arguments.add(Arguments.of(Address.SHA256, isZeroArgument)); + arguments.add(Arguments.of(Address.RIPEMD160, isZeroArgument)); + arguments.add(Arguments.of(Address.ID, isZeroArgument)); + arguments.add(Arguments.of(Address.MODEXP, isZeroArgument)); + arguments.add(Arguments.of(Address.ALTBN128_ADD, isZeroArgument)); + arguments.add(Arguments.of(Address.ALTBN128_MUL, isZeroArgument)); + arguments.add(Arguments.of(Address.ALTBN128_PAIRING, isZeroArgument)); + arguments.add(Arguments.of(Address.BLAKE2B_F_COMPRESSION, isZeroArgument)); + } return arguments.stream(); } }