From 0eb9cacd1efc2a5b8ae4d21c85122fabd22c6929 Mon Sep 17 00:00:00 2001 From: Francois Bojarski Date: Tue, 8 Oct 2024 10:30:49 +0530 Subject: [PATCH 01/10] reconnect MMIO constraints Signed-off-by: Francois Bojarski --- linea-constraints | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linea-constraints b/linea-constraints index 1c658b55b..be4425277 160000 --- a/linea-constraints +++ b/linea-constraints @@ -1 +1 @@ -Subproject commit 1c658b55bcde39395b636f1ff70cb93aaee2d06b +Subproject commit be44252774502f8eae7e87ca26f9ae6891689951 From d2911d017304bcf593a03050ab6c3e8332948f8b Mon Sep 17 00:00:00 2001 From: Francois Bojarski Date: Tue, 8 Oct 2024 12:23:24 +0530 Subject: [PATCH 02/10] cleaning + fix too much MMIO inst for modexp data if only one MMIO non trivil inst Signed-off-by: Francois Bojarski --- .../linea/zktracer/module/mmio/Mmio.java | 37 +++++++++---------- .../linea/zktracer/module/mmu/Mmu.java | 10 ++--- .../zktracer/module/mmu/MmuOperation.java | 11 ++++-- .../module/mmu/instructions/ModexpData.java | 4 +- 4 files changed, 30 insertions(+), 32 deletions(-) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmio/Mmio.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmio/Mmio.java index 917fc87dd..114c5eaef 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmio/Mmio.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmio/Mmio.java @@ -87,26 +87,23 @@ public void commit(List buffers) { Trace trace = new Trace(buffers); int stamp = 0; for (MmuOperation mmuOperation : mmu.operations().getAll()) { - if (mmuOperation.traceMe()) { - - final MmuData currentMmuData = mmuOperation.mmuData(); - - for (int currentMmioInstNumber = 0; - currentMmioInstNumber < currentMmuData.numberMmioInstructions(); - currentMmioInstNumber++) { - stamp++; - - final MmioInstructions mmioInstructions = - new MmioInstructions(currentMmuData, currentMmioInstNumber); - final MmioData mmioData = - mmioInstructions.compute( - currentMmuData - .mmuToMmioInstructions() - .get(currentMmioInstNumber) - .mmioInstruction()); - - trace(trace, mmioData, stamp); - } + + final MmuData currentMmuData = mmuOperation.mmuData(); + + for (int currentMmioInstNumber = 0; + currentMmioInstNumber < currentMmuData.mmuToMmioInstructions().size(); + currentMmioInstNumber++) { + + final MmioInstructions mmioInstructions = + new MmioInstructions(currentMmuData, currentMmioInstNumber); + final MmioData mmioData = + mmioInstructions.compute( + currentMmuData + .mmuToMmioInstructions() + .get(currentMmioInstNumber) + .mmioInstruction()); + + trace(trace, mmioData, ++stamp); } } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/Mmu.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/Mmu.java index c39bbbb5e..d56753871 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/Mmu.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/Mmu.java @@ -59,14 +59,10 @@ public void commit(List buffers) { for (MmuOperation mmuOperation : operations.getAll()) { Preconditions.checkState(mmuOperation.traceMe(), "Cannot compute if traceMe is false"); - if (mmuOperation.traceMe()) { - mmuOperation.getCFI(); - mmuOperation.fillLimb(); + mmuOperation.getCFI(); + mmuOperation.fillLimb(); - mmuStamp += 1; - mmuOperation.trace(mmuStamp, mmioStamp, trace); - mmioStamp += mmuOperation.mmuData().numberMmioInstructions(); - } + mmioStamp = mmuOperation.trace(++mmuStamp, mmioStamp, trace); } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java index 4113ebac4..6932637df 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java @@ -93,7 +93,7 @@ public int mmioLineCount() { return mmioLineCount; } - void trace(final int mmuStamp, final int mmioStamp, Trace trace) { + int trace(final int mmuStamp, final int mmioStamp, Trace trace) { setInstructionFlag(); @@ -104,7 +104,9 @@ void trace(final int mmuStamp, final int mmioStamp, Trace trace) { tracePreprocessingRows(mmuData, mmuStamp, mmioStamp, trace); // Trace Micro Instructions Rows - traceMicroRows(mmuStamp, mmioStamp, trace); + final int finalMmioStamp = traceMicroRows(mmuStamp, mmioStamp, trace); + + return finalMmioStamp; } private void setInstructionFlag() { @@ -337,7 +339,7 @@ private List generateRowTypeList() { return output; } - private void traceMicroRows(final long mmuStamp, int mmioStamp, Trace trace) { + private int traceMicroRows(final long mmuStamp, int mmioStamp, Trace trace) { final List rowType = generateRowTypeList(); final HubToMmuValues mmuHubInput = mmuData.hubToMmuValues(); @@ -345,7 +347,7 @@ private void traceMicroRows(final long mmuStamp, int mmioStamp, Trace trace) { final MmuToMmioConstantValues mmioConstantValues = mmuData.mmuToMmioConstantValues(); - for (int i = 0; i < mmuData().numberMmioInstructions(); i++) { + for (int i = 0; i < mmuData().mmuToMmioInstructions().size(); i++) { mmioStamp += 1; traceFillMmuInstructionFlag(trace); traceOutAndBin(trace); @@ -390,5 +392,6 @@ private void traceMicroRows(final long mmuStamp, int mmioStamp, Trace trace) { .pMicroTotalSize(Bytes.minimalBytes(mmioConstantValues.totalSize())) .fillAndValidateRow(); } + return mmioStamp; } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/instructions/ModexpData.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/instructions/ModexpData.java index 5789a1209..486ff2f3a 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/instructions/ModexpData.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/instructions/ModexpData.java @@ -263,7 +263,9 @@ public MmuData setMicroInstructions(MmuData mmuData) { middleMicroInstruction(mmuData, sourceLimbOffset, targetLimbOffset); } - lastMicroInstruction(mmuData); + if (initialTotalNonTrivial > 1) { + lastMicroInstruction(mmuData); + } // Right Zeroes for (int i = 0; i < initialTotalRightZeroes; i++) { From 6efb519296779fefc96e5664360490d3ad808532 Mon Sep 17 00:00:00 2001 From: Francois Bojarski Date: Tue, 8 Oct 2024 12:43:05 +0530 Subject: [PATCH 03/10] fix no limb for limb vanishes instruction Signed-off-by: Francois Bojarski --- .../linea/zktracer/module/mmu/MmuOperation.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java index 6932637df..3cbbe1512 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java @@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.*; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.LLARGE; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMIO_INST_LIMB_VANISHES; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_ANY_TO_RAM_WITH_PADDING; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_BLAKE; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_EXO_TO_RAM_TRANSPLANTS; @@ -104,9 +105,7 @@ int trace(final int mmuStamp, final int mmioStamp, Trace trace) { tracePreprocessingRows(mmuData, mmuStamp, mmioStamp, trace); // Trace Micro Instructions Rows - final int finalMmioStamp = traceMicroRows(mmuStamp, mmioStamp, trace); - - return finalMmioStamp; + return traceMicroRows(mmuStamp, mmioStamp, trace); } private void setInstructionFlag() { @@ -161,7 +160,13 @@ public void fillLimb() { final boolean exoIsTarget = mmuData.exoLimbIsTarget(); checkArgument(exoIsSource == !exoIsTarget, "ExoLimb is either the source or the target"); - for (MmuToMmioInstruction mmioInst : this.mmuData.mmuToMmioInstructions()) { + for (MmuToMmioInstruction mmioInst : mmuData.mmuToMmioInstructions()) { + + // Limb remains zero for LIMB_VANISHES instructions + if (mmioInst.mmioInstruction() == MMIO_INST_LIMB_VANISHES) { + return; + } + final int offset = (int) (exoIsSource @@ -197,7 +202,7 @@ private void traceFillMmuInstructionFlag(Trace trace) { } private void traceOutAndBin(Trace trace) { - MmuOutAndBinValues mmuOutAndBinRecord = mmuData.outAndBinValues(); + final MmuOutAndBinValues mmuOutAndBinRecord = mmuData.outAndBinValues(); trace .out1(Bytes.minimalBytes(mmuOutAndBinRecord.out1())) From 03f2e2bc20c50112ae940d4324b45756bb0fc03a Mon Sep 17 00:00:00 2001 From: Francois Bojarski Date: Tue, 8 Oct 2024 16:23:25 +0530 Subject: [PATCH 04/10] fix lookup mmio -> BLKMDXP Signed-off-by: Francois Bojarski --- .../module/hub/fragment/imc/mmu/MmuCall.java | 11 +++++----- .../ModexpSubsection.java | 2 +- .../zktracer/module/mmu/MmuOperation.java | 20 +++++++++---------- .../linea/zktracer/types/Bytecodes.java | 9 ++++++--- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java index e0d4cc7a0..6c46eb6be 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java @@ -62,7 +62,9 @@ import static net.consensys.linea.zktracer.module.hub.precompiles.ModexpMetadata.BASE_MIN_OFFSET; import static net.consensys.linea.zktracer.module.hub.precompiles.ModexpMetadata.EBS_MIN_OFFSET; import static net.consensys.linea.zktracer.module.hub.precompiles.ModexpMetadata.MBS_MIN_OFFSET; +import static net.consensys.linea.zktracer.module.limits.precompiles.ModexpEffectiveCall.PROVER_MAX_INPUT_BYTE_SIZE; import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Utils.leftPadTo; import static org.apache.tuweni.bytes.Bytes.minimalBytes; import java.util.Optional; @@ -173,7 +175,6 @@ final MmuCall setEcData() { return this.exoIsEcData(true).updateExoSum(EXO_SUM_WEIGHT_ECDATA); } - // TODO: make the instruction an enum public MmuCall(final Hub hub, final int instruction) { hub.defers().scheduleForPostTransaction(this); this.instruction = instruction; @@ -709,7 +710,7 @@ public static MmuCall forModexpExtractBase( .sourceId(modexpSubsection.callSection.hubStamp()) .sourceRamBytes(Optional.of(modexpSubsection.callerMemorySnapshot)) .targetId(modexpSubsection.exoModuleOperationId()) - .exoBytes(Optional.of(modExpMetadata.base())) + .exoBytes(Optional.of(leftPadTo(modExpMetadata.base(), PROVER_MAX_INPUT_BYTE_SIZE))) .sourceOffset(EWord.of(BASE_MIN_OFFSET)) .size(modExpMetadata.bbs().toInt()) .referenceOffset(modexpSubsection.callDataMemorySpan.offset()) @@ -731,7 +732,7 @@ public static MmuCall forModexpExtractExponent( .sourceId(modexpSubsection.callSection.hubStamp()) .sourceRamBytes(Optional.of(modexpSubsection.callerMemorySnapshot)) .targetId(modexpSubsection.exoModuleOperationId()) - .exoBytes(Optional.of(modExpMetadata.exp())) + .exoBytes(Optional.of(leftPadTo(modExpMetadata.exp(), PROVER_MAX_INPUT_BYTE_SIZE))) .sourceOffset(EWord.of(BASE_MIN_OFFSET + modExpMetadata.bbs().toInt())) .size(modExpMetadata.ebs().toInt()) .referenceOffset(modexpSubsection.callDataMemorySpan.offset()) @@ -752,7 +753,7 @@ public static MmuCall forModexpExtractModulus( .sourceId(modexpSubsection.callSection.hubStamp()) .sourceRamBytes(Optional.of(modexpSubsection.callerMemorySnapshot)) .targetId(modexpSubsection.exoModuleOperationId()) - .exoBytes(Optional.of(modExpMetadata.mod())) + .exoBytes(Optional.of(leftPadTo(modExpMetadata.mod(), PROVER_MAX_INPUT_BYTE_SIZE))) .sourceOffset( EWord.of(BASE_MIN_OFFSET + modExpMetadata.bbs().toInt() + modExpMetadata.ebs().toInt())) .size(modExpMetadata.mbs().toInt()) @@ -766,7 +767,7 @@ public static MmuCall forModexpFullResultCopy( final Hub hub, final ModexpSubsection modexpSubsection, final ModexpMetadata modExpMetadata) { return new MmuCall(hub, MMU_INST_EXO_TO_RAM_TRANSPLANTS) .sourceId(modexpSubsection.exoModuleOperationId()) - .exoBytes(Optional.of(modexpSubsection.returnData())) + .exoBytes(Optional.of(leftPadTo(modexpSubsection.returnData(), PROVER_MAX_INPUT_BYTE_SIZE))) .targetId(modexpSubsection.returnDataContextNumber()) .targetRamBytes(Optional.of(Bytes.EMPTY)) .size(MODEXP_COMPONENT_BYTE_SIZE) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/call/precompileSubsection/ModexpSubsection.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/call/precompileSubsection/ModexpSubsection.java index b6b4151a5..aee2e4f15 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/call/precompileSubsection/ModexpSubsection.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/call/precompileSubsection/ModexpSubsection.java @@ -144,7 +144,7 @@ public void resolveAtContextReEntry(Hub hub, CallFrame callFrame) { } modexpMetaData.rawResult(returnData); - hub.blakeModexpData().callModexp(modexpMetaData, this.exoModuleOperationId()); + hub.blakeModexpData().callModexp(modexpMetaData, exoModuleOperationId()); fragments().add(seventhImcFragment); if (modexpMetaData.extractModulus()) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java index 3cbbe1512..db2153cf1 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java @@ -163,18 +163,16 @@ public void fillLimb() { for (MmuToMmioInstruction mmioInst : mmuData.mmuToMmioInstructions()) { // Limb remains zero for LIMB_VANISHES instructions - if (mmioInst.mmioInstruction() == MMIO_INST_LIMB_VANISHES) { - return; + if (mmioInst.mmioInstruction() != MMIO_INST_LIMB_VANISHES) { + final int offset = + (int) + (exoIsSource + ? mmioInst.sourceLimbOffset() * LLARGE + mmioInst.sourceByteOffset() + : mmioInst.targetLimbOffset() * LLARGE + mmioInst.targetByteOffset()); + final int sizeToExtract = mmioInst.size() == 0 ? LLARGE : mmioInst.size(); + final Bytes16 exoLimb = readBytes(mmuData.exoBytes(), offset, sizeToExtract); + mmioInst.limb(exoLimb); } - - final int offset = - (int) - (exoIsSource - ? mmioInst.sourceLimbOffset() * LLARGE + mmioInst.sourceByteOffset() - : mmioInst.targetLimbOffset() * LLARGE + mmioInst.targetByteOffset()); - final int sizeToExtract = mmioInst.size() == 0 ? LLARGE : mmioInst.size(); - final Bytes16 exoLimb = readBytes(mmuData.exoBytes(), offset, sizeToExtract); - mmioInst.limb(exoLimb); } } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java index 28973a6c6..a8e9366e4 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java @@ -15,7 +15,9 @@ package net.consensys.linea.zktracer.types; -import net.consensys.linea.zktracer.module.constants.GlobalConstants; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.LLARGE; +import static net.consensys.linea.zktracer.types.Utils.rightPadTo; + import org.apache.tuweni.bytes.Bytes; public class Bytecodes { @@ -27,10 +29,11 @@ public static Bytes16 readBytes(final Bytes data, final long offset, final int s final long dataLengthToExtract = Math.min(sizeToRead, data.size() - offset); - return Bytes16.rightPad(data.slice((int) offset, (int) dataLengthToExtract)); + return Bytes16.leftPad( + rightPadTo(data.slice((int) offset, (int) dataLengthToExtract), sizeToRead)); } public static Bytes16 readLimb(final Bytes data, final long limbOffset) { - return readBytes(data, GlobalConstants.LLARGE * limbOffset, GlobalConstants.LLARGE); + return readBytes(data, LLARGE * limbOffset, LLARGE); } } From 1297355efe478906a6fa71283f11f661a461e763 Mon Sep 17 00:00:00 2001 From: Francois Bojarski Date: Tue, 8 Oct 2024 16:32:56 +0530 Subject: [PATCH 05/10] clean: kill duplicate constant Signed-off-by: Francois Bojarski --- .../zktracer/module/hub/fragment/imc/mmu/MmuCall.java | 9 ++++----- .../call/precompileSubsection/ModexpSubsection.java | 8 ++++---- .../module/limits/precompiles/ModexpEffectiveCall.java | 1 - 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java index 6c46eb6be..b7ef831f9 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java @@ -62,7 +62,6 @@ import static net.consensys.linea.zktracer.module.hub.precompiles.ModexpMetadata.BASE_MIN_OFFSET; import static net.consensys.linea.zktracer.module.hub.precompiles.ModexpMetadata.EBS_MIN_OFFSET; import static net.consensys.linea.zktracer.module.hub.precompiles.ModexpMetadata.MBS_MIN_OFFSET; -import static net.consensys.linea.zktracer.module.limits.precompiles.ModexpEffectiveCall.PROVER_MAX_INPUT_BYTE_SIZE; import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; import static net.consensys.linea.zktracer.types.Utils.leftPadTo; import static org.apache.tuweni.bytes.Bytes.minimalBytes; @@ -710,7 +709,7 @@ public static MmuCall forModexpExtractBase( .sourceId(modexpSubsection.callSection.hubStamp()) .sourceRamBytes(Optional.of(modexpSubsection.callerMemorySnapshot)) .targetId(modexpSubsection.exoModuleOperationId()) - .exoBytes(Optional.of(leftPadTo(modExpMetadata.base(), PROVER_MAX_INPUT_BYTE_SIZE))) + .exoBytes(Optional.of(leftPadTo(modExpMetadata.base(), MODEXP_COMPONENT_BYTE_SIZE))) .sourceOffset(EWord.of(BASE_MIN_OFFSET)) .size(modExpMetadata.bbs().toInt()) .referenceOffset(modexpSubsection.callDataMemorySpan.offset()) @@ -732,7 +731,7 @@ public static MmuCall forModexpExtractExponent( .sourceId(modexpSubsection.callSection.hubStamp()) .sourceRamBytes(Optional.of(modexpSubsection.callerMemorySnapshot)) .targetId(modexpSubsection.exoModuleOperationId()) - .exoBytes(Optional.of(leftPadTo(modExpMetadata.exp(), PROVER_MAX_INPUT_BYTE_SIZE))) + .exoBytes(Optional.of(leftPadTo(modExpMetadata.exp(), MODEXP_COMPONENT_BYTE_SIZE))) .sourceOffset(EWord.of(BASE_MIN_OFFSET + modExpMetadata.bbs().toInt())) .size(modExpMetadata.ebs().toInt()) .referenceOffset(modexpSubsection.callDataMemorySpan.offset()) @@ -753,7 +752,7 @@ public static MmuCall forModexpExtractModulus( .sourceId(modexpSubsection.callSection.hubStamp()) .sourceRamBytes(Optional.of(modexpSubsection.callerMemorySnapshot)) .targetId(modexpSubsection.exoModuleOperationId()) - .exoBytes(Optional.of(leftPadTo(modExpMetadata.mod(), PROVER_MAX_INPUT_BYTE_SIZE))) + .exoBytes(Optional.of(leftPadTo(modExpMetadata.mod(), MODEXP_COMPONENT_BYTE_SIZE))) .sourceOffset( EWord.of(BASE_MIN_OFFSET + modExpMetadata.bbs().toInt() + modExpMetadata.ebs().toInt())) .size(modExpMetadata.mbs().toInt()) @@ -767,7 +766,7 @@ public static MmuCall forModexpFullResultCopy( final Hub hub, final ModexpSubsection modexpSubsection, final ModexpMetadata modExpMetadata) { return new MmuCall(hub, MMU_INST_EXO_TO_RAM_TRANSPLANTS) .sourceId(modexpSubsection.exoModuleOperationId()) - .exoBytes(Optional.of(leftPadTo(modexpSubsection.returnData(), PROVER_MAX_INPUT_BYTE_SIZE))) + .exoBytes(Optional.of(leftPadTo(modexpSubsection.returnData(), MODEXP_COMPONENT_BYTE_SIZE))) .targetId(modexpSubsection.returnDataContextNumber()) .targetRamBytes(Optional.of(Bytes.EMPTY)) .size(MODEXP_COMPONENT_BYTE_SIZE) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/call/precompileSubsection/ModexpSubsection.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/call/precompileSubsection/ModexpSubsection.java index aee2e4f15..65c6ad064 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/call/precompileSubsection/ModexpSubsection.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/call/precompileSubsection/ModexpSubsection.java @@ -16,6 +16,7 @@ package net.consensys.linea.zktracer.module.hub.section.call.precompileSubsection; import static com.google.common.base.Preconditions.*; +import static net.consensys.linea.zktracer.module.blake2fmodexpdata.BlakeModexpDataOperation.MODEXP_COMPONENT_BYTE_SIZE; import static net.consensys.linea.zktracer.module.hub.fragment.imc.mmu.MmuCall.forModexpExtractBase; import static net.consensys.linea.zktracer.module.hub.fragment.imc.mmu.MmuCall.forModexpExtractBbs; import static net.consensys.linea.zktracer.module.hub.fragment.imc.mmu.MmuCall.forModexpExtractEbs; @@ -29,7 +30,6 @@ import static net.consensys.linea.zktracer.module.hub.fragment.imc.oob.precompiles.ModexpXbsCase.OOB_INST_MODEXP_EBS; import static net.consensys.linea.zktracer.module.hub.fragment.imc.oob.precompiles.ModexpXbsCase.OOB_INST_MODEXP_MBS; import static net.consensys.linea.zktracer.module.hub.fragment.scenario.PrecompileScenarioFragment.PrecompileScenario.PRC_FAILURE_KNOWN_TO_RAM; -import static net.consensys.linea.zktracer.module.limits.precompiles.ModexpEffectiveCall.PROVER_MAX_INPUT_BYTE_SIZE; import java.math.BigInteger; @@ -60,17 +60,17 @@ public ModexpSubsection(final Hub hub, final CallSection callSection) { if (modexpMetaData .bbs() .toUnsignedBigInteger() - .compareTo(BigInteger.valueOf(PROVER_MAX_INPUT_BYTE_SIZE)) + .compareTo(BigInteger.valueOf(MODEXP_COMPONENT_BYTE_SIZE)) >= 0 || modexpMetaData .mbs() .toUnsignedBigInteger() - .compareTo(BigInteger.valueOf(PROVER_MAX_INPUT_BYTE_SIZE)) + .compareTo(BigInteger.valueOf(MODEXP_COMPONENT_BYTE_SIZE)) >= 0 || modexpMetaData .ebs() .toUnsignedBigInteger() - .compareTo(BigInteger.valueOf(PROVER_MAX_INPUT_BYTE_SIZE)) + .compareTo(BigInteger.valueOf(MODEXP_COMPONENT_BYTE_SIZE)) >= 0) { hub.modexpEffectiveCall().addPrecompileLimit(Integer.MAX_VALUE); return; diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/ModexpEffectiveCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/ModexpEffectiveCall.java index 029d96350..7a15381cd 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/ModexpEffectiveCall.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/ModexpEffectiveCall.java @@ -29,7 +29,6 @@ @Accessors(fluent = true) public class ModexpEffectiveCall implements CountingOnlyModule { private final CountOnlyOperation counts = new CountOnlyOperation(); - public static final int PROVER_MAX_INPUT_BYTE_SIZE = 4096 / 8; @Override public String moduleKey() { From 733c301434ecf1c6c4b913caea88f869b339351c Mon Sep 17 00:00:00 2001 From: Francois Bojarski Date: Wed, 9 Oct 2024 11:58:38 +0530 Subject: [PATCH 06/10] fix source CN to extract arg for modexp Signed-off-by: Francois Bojarski --- .../linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java | 6 +++--- linea-constraints | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java index b7ef831f9..2a5e7582f 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java @@ -706,7 +706,7 @@ public static MmuCall forModexpExtractBase( final Hub hub, final ModexpSubsection modexpSubsection, final ModexpMetadata modExpMetadata) { if (modExpMetadata.extractBase()) { return new MmuCall(hub, MMU_INST_MODEXP_DATA) - .sourceId(modexpSubsection.callSection.hubStamp()) + .sourceId(hub.currentFrame().contextNumber()) // called at ContextReEntry .sourceRamBytes(Optional.of(modexpSubsection.callerMemorySnapshot)) .targetId(modexpSubsection.exoModuleOperationId()) .exoBytes(Optional.of(leftPadTo(modExpMetadata.base(), MODEXP_COMPONENT_BYTE_SIZE))) @@ -728,7 +728,7 @@ public static MmuCall forModexpExtractExponent( final Hub hub, final ModexpSubsection modexpSubsection, final ModexpMetadata modExpMetadata) { if (modExpMetadata.extractExponent()) { return new MmuCall(hub, MMU_INST_MODEXP_DATA) - .sourceId(modexpSubsection.callSection.hubStamp()) + .sourceId(hub.currentFrame().contextNumber()) // called at ContextReEntry .sourceRamBytes(Optional.of(modexpSubsection.callerMemorySnapshot)) .targetId(modexpSubsection.exoModuleOperationId()) .exoBytes(Optional.of(leftPadTo(modExpMetadata.exp(), MODEXP_COMPONENT_BYTE_SIZE))) @@ -749,7 +749,7 @@ public static MmuCall forModexpExtractExponent( public static MmuCall forModexpExtractModulus( final Hub hub, final ModexpSubsection modexpSubsection, final ModexpMetadata modExpMetadata) { return new MmuCall(hub, MMU_INST_MODEXP_DATA) - .sourceId(modexpSubsection.callSection.hubStamp()) + .sourceId(hub.currentFrame().contextNumber()) // called at ContextReEntry .sourceRamBytes(Optional.of(modexpSubsection.callerMemorySnapshot)) .targetId(modexpSubsection.exoModuleOperationId()) .exoBytes(Optional.of(leftPadTo(modExpMetadata.mod(), MODEXP_COMPONENT_BYTE_SIZE))) diff --git a/linea-constraints b/linea-constraints index be4425277..1bebc8a68 160000 --- a/linea-constraints +++ b/linea-constraints @@ -1 +1 @@ -Subproject commit be44252774502f8eae7e87ca26f9ae6891689951 +Subproject commit 1bebc8a68e7c8cc46171dd8ecce339f2a2559513 From 039aeb97b44dda0791bff397878a9d6f6cb7cad1 Mon Sep 17 00:00:00 2001 From: Francois Bojarski Date: Wed, 9 Oct 2024 16:33:36 +0530 Subject: [PATCH 07/10] fix: generating the limb needs to know TBO Signed-off-by: Francois Bojarski --- .../linea/zktracer/module/mmu/MmuOperation.java | 3 ++- .../consensys/linea/zktracer/types/Bytecodes.java | 12 +++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java index db2153cf1..bfca85fbc 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java @@ -170,7 +170,8 @@ public void fillLimb() { ? mmioInst.sourceLimbOffset() * LLARGE + mmioInst.sourceByteOffset() : mmioInst.targetLimbOffset() * LLARGE + mmioInst.targetByteOffset()); final int sizeToExtract = mmioInst.size() == 0 ? LLARGE : mmioInst.size(); - final Bytes16 exoLimb = readBytes(mmuData.exoBytes(), offset, sizeToExtract); + final Bytes16 exoLimb = + readBytes(mmuData.exoBytes(), offset, sizeToExtract, mmioInst.targetByteOffset()); mmioInst.limb(exoLimb); } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java index a8e9366e4..a3a6edf00 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java @@ -22,18 +22,20 @@ public class Bytecodes { - public static Bytes16 readBytes(final Bytes data, final long offset, final int sizeToRead) { - if (offset >= data.size()) { + public static Bytes16 readBytes( + final Bytes data, final long sourceOffset, final int size, final int targetOffset) { + if (sourceOffset >= data.size()) { return Bytes16.ZERO; } - final long dataLengthToExtract = Math.min(sizeToRead, data.size() - offset); + final long dataLengthToExtract = Math.min(size, data.size() - sourceOffset); return Bytes16.leftPad( - rightPadTo(data.slice((int) offset, (int) dataLengthToExtract), sizeToRead)); + rightPadTo( + data.slice((int) sourceOffset, (int) dataLengthToExtract), LLARGE - targetOffset)); } public static Bytes16 readLimb(final Bytes data, final long limbOffset) { - return readBytes(data, LLARGE * limbOffset, LLARGE); + return readBytes(data, LLARGE * limbOffset, LLARGE, 0); } } From c32a012ddc3dd9c2e74fd450a3f418a99e572f43 Mon Sep 17 00:00:00 2001 From: Francois Bojarski Date: Wed, 9 Oct 2024 19:07:18 +0530 Subject: [PATCH 08/10] fix source Id for Identity PRC MMU call Signed-off-by: Francois Bojarski --- .../linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java index 2a5e7582f..3adc37e8d 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/MmuCall.java @@ -142,7 +142,7 @@ public void dontTraceMe() { } private MmuCall updateExoSum(final int exoValue) { - this.exoSum += exoValue; + exoSum += exoValue; return this; } @@ -445,7 +445,7 @@ public static MmuCall forIdentityExtractCallData( final Hub hub, PrecompileSubsection precompileSubsection) { return new MmuCall(hub, MMU_INST_RAM_TO_RAM_SANS_PADDING) - .sourceId(precompileSubsection.callSection.hubStamp()) + .sourceId(hub.currentFrame().contextNumber()) // called at ContextReEntry .sourceRamBytes(Optional.of(precompileSubsection.callerMemorySnapshot)) .targetId(precompileSubsection.exoModuleOperationId()) .targetRamBytes(Optional.of(Bytes.EMPTY)) From 8e4568b2eb82a9b83a50e7f4d81dd1b3f2243ed8 Mon Sep 17 00:00:00 2001 From: Francois Bojarski Date: Thu, 10 Oct 2024 11:04:46 +0530 Subject: [PATCH 09/10] fix (again) reading exo Bytes Signed-off-by: Francois Bojarski --- .../consensys/linea/zktracer/module/mmu/MmuData.java | 10 ++++++---- .../linea/zktracer/module/mmu/MmuOperation.java | 10 ++++------ .../net/consensys/linea/zktracer/types/Bytecodes.java | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuData.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuData.java index e9f0df7f8..87e10554b 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuData.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuData.java @@ -18,6 +18,9 @@ import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_ANY_TO_RAM_WITH_PADDING; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_BLAKE; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_EXO_TO_RAM_TRANSPLANTS; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_MODEXP_DATA; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_MODEXP_ZERO; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_RAM_TO_EXO_WITH_PADDING; import java.util.ArrayList; import java.util.List; @@ -26,7 +29,6 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; -import net.consensys.linea.zktracer.module.constants.GlobalConstants; import net.consensys.linea.zktracer.module.hub.fragment.imc.mmu.MmuCall; import net.consensys.linea.zktracer.module.mmu.values.HubToMmuValues; import net.consensys.linea.zktracer.module.mmu.values.MmuEucCallRecord; @@ -62,9 +64,9 @@ public class MmuData { private static final List MMU_INST_EXO_IS_TARGET = List.of( MMU_INST_BLAKE, - GlobalConstants.MMU_INST_MODEXP_DATA, - GlobalConstants.MMU_INST_MODEXP_ZERO, - GlobalConstants.MMU_INST_RAM_TO_EXO_WITH_PADDING); + MMU_INST_MODEXP_DATA, + MMU_INST_MODEXP_ZERO, + MMU_INST_RAM_TO_EXO_WITH_PADDING); public MmuData(final MmuCall mmuCall) { this( diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java index bfca85fbc..b040713d9 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java @@ -170,19 +170,17 @@ public void fillLimb() { ? mmioInst.sourceLimbOffset() * LLARGE + mmioInst.sourceByteOffset() : mmioInst.targetLimbOffset() * LLARGE + mmioInst.targetByteOffset()); final int sizeToExtract = mmioInst.size() == 0 ? LLARGE : mmioInst.size(); + final int exoByteOffset = + exoIsSource ? mmioInst.sourceByteOffset() : mmioInst.targetByteOffset(); final Bytes16 exoLimb = - readBytes(mmuData.exoBytes(), offset, sizeToExtract, mmioInst.targetByteOffset()); + readBytes(mmuData.exoBytes(), offset, sizeToExtract, exoByteOffset); + ; mmioInst.limb(exoLimb); } } } } - private boolean exoLimbIsSource() { - return List.of(MMU_INST_ANY_TO_RAM_WITH_PADDING, MMU_INST_EXO_TO_RAM_TRANSPLANTS) - .contains(this.mmuData.hubToMmuValues().mmuInstruction()); - } - private void traceFillMmuInstructionFlag(Trace trace) { trace .isMload(isMload) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java index a3a6edf00..fb49bbbfe 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java @@ -23,7 +23,7 @@ public class Bytecodes { public static Bytes16 readBytes( - final Bytes data, final long sourceOffset, final int size, final int targetOffset) { + final Bytes data, final long sourceOffset, final int size, final int exoByteOffset) { if (sourceOffset >= data.size()) { return Bytes16.ZERO; } @@ -32,7 +32,7 @@ public static Bytes16 readBytes( return Bytes16.leftPad( rightPadTo( - data.slice((int) sourceOffset, (int) dataLengthToExtract), LLARGE - targetOffset)); + data.slice((int) sourceOffset, (int) dataLengthToExtract), LLARGE - exoByteOffset)); } public static Bytes16 readLimb(final Bytes data, final long limbOffset) { From 3037ade3a784d1b64fb409104a1db9d132673ac8 Mon Sep 17 00:00:00 2001 From: Francois Bojarski Date: Thu, 10 Oct 2024 18:17:53 +0530 Subject: [PATCH 10/10] some more fixes Signed-off-by: Francois Bojarski --- .../hub/fragment/imc/mmu/opcode/CodeCopy.java | 4 +-- .../hub/section/copy/CodeCopySection.java | 19 +++----------- .../zktracer/module/mmu/MmuOperation.java | 26 ++++++++++--------- .../linea/zktracer/types/Bytecode.java | 14 +++------- linea-constraints | 2 +- 5 files changed, 24 insertions(+), 41 deletions(-) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/opcode/CodeCopy.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/opcode/CodeCopy.java index 1ae9b3132..2534e6955 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/opcode/CodeCopy.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/mmu/opcode/CodeCopy.java @@ -38,7 +38,7 @@ public CodeCopy(final Hub hub) { this.hub = hub; this.contract = hub.currentFrame().metadata(); - this.exoBytes(Optional.of(hub.romLex().getCodeByMetadata(contract))) + this.exoBytes(Optional.of(hub.currentFrame().code().bytecode())) .targetId(hub.currentFrame().contextNumber()) .targetRamBytes( Optional.of( @@ -54,6 +54,6 @@ public CodeCopy(final Hub hub) { @Override public int sourceId() { - return this.hub.romLex().getCodeFragmentIndexByMetadata(this.contract); + return hub.romLex().getCodeFragmentIndexByMetadata(contract); } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/copy/CodeCopySection.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/copy/CodeCopySection.java index c56f8b7db..abe1df070 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/copy/CodeCopySection.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/copy/CodeCopySection.java @@ -28,9 +28,6 @@ import net.consensys.linea.zktracer.module.hub.fragment.imc.mmu.MmuCall; import net.consensys.linea.zktracer.module.hub.section.TraceSection; import net.consensys.linea.zktracer.module.hub.signals.Exceptions; -import org.hyperledger.besu.datatypes.Address; -import org.hyperledger.besu.evm.account.Account; -import org.hyperledger.besu.evm.frame.MessageFrame; public class CodeCopySection extends TraceSection { @@ -66,19 +63,9 @@ public CodeCopySection(Hub hub) { this.addFragment(contextFragment); // Account row - final MessageFrame frame = hub.messageFrame(); - final Address codeAddress = frame.getContractAddress(); - final Account codeAccount = frame.getWorldUpdater().get(codeAddress); - - final boolean warmth = frame.isAddressWarm(codeAddress); - checkArgument(warmth); - final AccountSnapshot codeAccountSnapshot = - AccountSnapshot.fromAccount( - codeAccount, - warmth, - hub.deploymentNumberOf(codeAddress), - hub.deploymentStatusOf(codeAddress)); + AccountSnapshot.canonical(hub, hub.messageFrame().getContractAddress()); + checkArgument(codeAccountSnapshot.isWarm()); final DomSubStampsSubFragment doingDomSubStamps = DomSubStampsSubFragment.standardDomSubStamps(this.hubStamp(), 0); // Specifics for CODECOPY @@ -94,7 +81,7 @@ public CodeCopySection(Hub hub) { final boolean triggerMmu = mxpCall.mayTriggerNontrivialMmuOperation; if (triggerMmu) { - MmuCall mmuCall = MmuCall.codeCopy(hub); + final MmuCall mmuCall = MmuCall.codeCopy(hub); imcFragment.callMmu(mmuCall); } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java index b040713d9..cc38b9783 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java @@ -35,6 +35,7 @@ import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_RIGHT_PADDED_WORD_EXTRACTION; import static net.consensys.linea.zktracer.module.mmio.MmioData.lineCountOfMmioInstruction; import static net.consensys.linea.zktracer.types.Bytecodes.readBytes; +import static net.consensys.linea.zktracer.types.Bytecodes.readLimb; import static net.consensys.linea.zktracer.types.Conversions.*; import java.util.ArrayList; @@ -164,18 +165,19 @@ public void fillLimb() { // Limb remains zero for LIMB_VANISHES instructions if (mmioInst.mmioInstruction() != MMIO_INST_LIMB_VANISHES) { - final int offset = - (int) - (exoIsSource - ? mmioInst.sourceLimbOffset() * LLARGE + mmioInst.sourceByteOffset() - : mmioInst.targetLimbOffset() * LLARGE + mmioInst.targetByteOffset()); - final int sizeToExtract = mmioInst.size() == 0 ? LLARGE : mmioInst.size(); - final int exoByteOffset = - exoIsSource ? mmioInst.sourceByteOffset() : mmioInst.targetByteOffset(); - final Bytes16 exoLimb = - readBytes(mmuData.exoBytes(), offset, sizeToExtract, exoByteOffset); - ; - mmioInst.limb(exoLimb); + + if (exoIsSource) { + mmioInst.limb(readLimb(mmuData.exoBytes(), mmioInst.sourceLimbOffset())); + } else { + final int offset = + (int) mmioInst.targetLimbOffset() * LLARGE + mmioInst.targetByteOffset(); + final int sizeToExtract = mmioInst.size() == 0 ? LLARGE : mmioInst.size(); + final int exoByteOffset = mmioInst.targetByteOffset(); + final Bytes16 exoLimb = + readBytes(mmuData.exoBytes(), offset, sizeToExtract, exoByteOffset); + ; + mmioInst.limb(exoLimb); + } } } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecode.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecode.java index d5c9ad76d..f916ef74b 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecode.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecode.java @@ -18,12 +18,15 @@ import java.util.Objects; import java.util.concurrent.*; +import lombok.Getter; +import lombok.experimental.Accessors; import lombok.extern.slf4j.Slf4j; import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.datatypes.Hash; import org.hyperledger.besu.evm.Code; @Slf4j +@Accessors(fluent = true) /** This class is intended to store a bytecode and its memoized hash. */ public final class Bytecode { /** initializing the executor service before creating the EMPTY bytecode. */ @@ -33,7 +36,7 @@ public final class Bytecode { public static Bytecode EMPTY = new Bytecode(Bytes.EMPTY); /** The bytecode. */ - private final Bytes bytecode; + @Getter private final Bytes bytecode; /** The bytecode hash; precomputed & memoized asynchronously. */ private Future hash; @@ -67,15 +70,6 @@ public int getSize() { return this.bytecode.size(); } - /** - * Expose the wrapped bytecode as {@link Bytes}. - * - * @return the bytecode - */ - public Bytes getBytes() { - return this.bytecode; - } - /** * Returns whether the bytecode is empty or not. * diff --git a/linea-constraints b/linea-constraints index 1bebc8a68..60e2dcaec 160000 --- a/linea-constraints +++ b/linea-constraints @@ -1 +1 @@ -Subproject commit 1bebc8a68e7c8cc46171dd8ecce339f2a2559513 +Subproject commit 60e2dcaecb79be6c3a1b0cf0482dd14f3beabbfa