Skip to content

Celo integration rebase 15 experiment#347

Closed
philippecamacho wants to merge 2654 commits intodevelopfrom
celo-integration-rebase-15-experiment
Closed

Celo integration rebase 15 experiment#347
philippecamacho wants to merge 2654 commits intodevelopfrom
celo-integration-rebase-15-experiment

Conversation

@philippecamacho
Copy link
Copy Markdown
Collaborator

Closes #<ISSUE_NUMBER>

This PR:

This PR does not:

Key places to review:

karlb and others added 30 commits January 23, 2026 15:50
contracts: Update snapshots

Update semver-lock
* contracts: scripts for L2 token deployment/verification

See celo-org/celo-blockchain-planning#982

* contracts: Automatically read decimals for L2 tokens

contracts: Convert `gen_l2_token_cmds` to std sh (#392)

Changed shebang from #!/usr/bin/env fish to #!/bin/sh
Replaced $argv with "$@" for command line arguments
Replaced [ -z "$argv" ] with [ -z "$1" ] to check for arguments
Replaced status filename with basename "$0" to get script name
Changed return to exit 1 for script termination
Used standard variable assignment and export syntax
Used "$@" in the for loop to properly handle arguments with spaces
Used $(...) for command substitution (POSIX compliant)
gomod: Fix build after op-geth update

Remove fee currency context from call of NewEVMBlockContext
These clash with the check in
celo-org/op-geth@2a740e5
and are safe to ignore, since the regolith fork is always enabled on
Cel2 chains, so that we'll never migrate to it.
op-e2e: Enable Cel2 in e2e tests
)

* Add optional Celo fields for strict deploy-config parsing

* Update op-chain-ops/genesis/config.go

---------

Co-authored-by: Paul Lange <palango@users.noreply.github.com>
EigenDA current limit for Holesky (their documentation is currently outdated but the limit seems to be set to 16 MB based on the updated tests from [this PR](Layr-Labs/eigenda-proxy#100)).
…ode startup (#367)

* Set L1 safe and finalized head at startup of op-node

* Wrap initialization of L1 safe & finalized head in SyncStatus with if block

* Fix comment

* Fix commen

* Fix comment

* Fix codes based on feedback

* Fix comment

* Swap the order of fetching finalized and safe L1 block references

* Move L1 safe and finalized head fetching to the beginning of OpNode::Start

* Remove unnecessary empty line

* Add log in finalized
* feat(batcher): multi-frame altda channels

* docs(batcher): add documentation for DaType and txData.daType

* docs: fix NextTxData comment

---------

Co-authored-by: Samuel Laferriere <samlaf92@gmail.com>
* test(altda): add test for altda->ethda failover

* feat(batcher): altda->ethda failover when altda is down

* chore: fix typos

* fix(fakeDAServer): handlePut was still handling put when in failover mode

* Fix logs

---------

Co-authored-by: Samuel Laferriere <samlaf92@gmail.com>
* Add Prometheus metrics for AltDA failover in Batcher

* Fix calls of RecordBatchDaType

* Revert deleted comment

* Add metrics for total stored batch size

* Fix condition for RecordBatchDaType and RecordBatchDataSizeBytes

* Add missing namespace to prometheus definition

* Fix the amount of batch sizes recorded for DA

* Unify recordings of size of batch to be stored

* Improve Prometheus help text
* test(altda): add a test to make sure altda node keeps finalizing even after failover to ethda

Currently it does not, as shown by the test TestAltDA_FinalizationAfterEthDAFailover failing

* fix(damgr): ethda failover finalization stall bug

Weiwei from Polymer found this bug. He proposed a solution. This is an alternative solution which seems simpler, but not 100% of its soundness.

* fix: damgr_test doesn't compile

* chore: add more logs to damgr and altda_data_source

* docs(altda_test): fix typo

---------

Co-authored-by: Samuel Laferriere <samlaf92@gmail.com>
… holocene order (#379)

* fix(batcher): altda parallel submitted blobs respect strict holocene order (#21)

test(e2e): new altda e2e test for concurrent blob submissions to maintain new holocene strict ordering rules

test(batcher): add altda unit tests for unhappy failure cases (except channel timeout)

test(batcher): fix flaky driver tests + speed them up

test(batcher): robustify batcher driver altda tests

fix(batcher): altda concurrent blob responses are reordered to respect holocene strict ordering rules

docs: fix typos and add documentation comments for some batcher public methods

test(op-alt-da): fix MockDAClient.DeleteData decrement semantic

chore(batcher): move channel failover behavior from TxFailed to AltDASubmissionFailed

The failover logic in the failover feature commits was aded on TxFailed, as the separate function AltDASubmissionFailed didn't exist yet. This change makes it much cleaner as a tx having failed cannot lead to a failover given... since that would come from an ethereum issue.

fix(batcher): bug in sendTransaction

chore(test-logger): fix test logger.Crit which wasn't getting flushed

test(batcher): fix altDASetup w new channel config

DaType was added, so needed to change config to use DaTypeAltDA

style: wrap errors

style(damock): dont explicitly initialize to 0

We make use default values instead

docs(batcher-test): document why channel timeout test is left unimplemented

docs(batcher): fix todos in batcher readme

chore: make lint-go-fix

docs(batcher): fix readme typo

* Change test to write a log instead of stdout

---------

Co-authored-by: Samuel Laferriere <samlaf92@gmail.com>
Add default to switch for lint

Allow to override with flags the celo forks

22nd Jan 2026: Noted that we didn't need to set the PectraBlobScheduleTime
flag, but now we do need to keep it as removing it would be a hardfork.
* isthmus: Update L1Block contract bytecode

---------

Co-authored-by: Gastón Ponti <gaston.ponti@clabs.co>
Co-authored-by: Gaston Ponti <pontigaston@gmail.com>
It is also prepared for using the bridged WETH as fee currency, but we
are currently lacking a simple way to send fee currency txs, so I left
the final tx out.
This uses the default fee-currency-directory address from op-geth.
It will fix the issue that the EVM calls into the directoy will fail
when executed on the local devnet.

e2e: use `--broadcast` with `forge create` (#281)

Forge started to require the `--broadcast` flag for actually deploying a
contract. Otherwise it will only do a dry-run.

We should really pin our foundry version. But let's wait until we rebase
to the latest upstream, since there have been changes to the overall
setup.

Closes celo-org#278
These tests perform a check at the end to ensure that the total funds
after a test match the total funds before the test.

We had modified the state transition function to direct baseFee payments
to the fee handler instead of optimism's OperatorFeeVault when in a cel2
context.

This caused the tests to fail because the tests were not including the
balance of the fee handler.

This change ensures that we do consider the fee handler balance when
calculating the total.
The test was configured with MaxFrameSize: 150 which was too small
for the compressed block data (~291 bytes), causing 2 frames per
block instead of 1. This doubled the AltDA Store count from the
expected 5 to 10.

Fixed by increasing MaxFrameSize to 400 to ensure each block fits
in a single frame as the test intended.
Co-authored-by: Cursor <cursoragent@cursor.com>
Implement getting AWS Nitro attestations and commitmen signing in the batcher
shenkeyao and others added 24 commits February 2, 2026 14:36
* Add code sync procedure

* Update links

* Fix format

* Rename files
* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests
* Simplify the test as we cannot in practice reduce the window size.

---------

Co-authored-by: Philippe Camacho <philippe@espressosys.com>
* remove warning on every failed tx

* reorder the checks
* Fallback mechanism test

* Update op-e2e/system/e2esys/setup.go

Co-authored-by: Phil <philippe@espressosys.com>

---------

Co-authored-by: Philippe Camacho <philippe@espressosys.com>
* Address flakiness.

* Simplify the code

* Fix CI

---------

Co-authored-by: Keyao Shen <shenkeyao@gmail.com>
* update single run-enclave.sh

* remove BATCHER_PRIVATE_KEY

* update run-enclave.sh
* Fallback recovery

* Add caff node

* Suggestions
* Make Attestation Verifier Service optional

When the Attestation Verifier Service was added to the integration it
fundamentally modified the testing experience, requiring external
environment variables to be populated in order to run the tests.
Additionally, these environment variable requirements were not
documented in the README_ESPRESSO.md file for reference.

This change modifies the Attestation Verifier Service setup for the
E2E testing environment to make it opt-in instead of being forced
to be enabled.  Additionally, the Verifier URL is no longer required
to run the Batcher.  This is a double-edged sword, however, as it
means that we could potentially deploy the service without the
configuration, and we would potentially be lacking the registered
attestation.

This may be resolvable with a slight modification to the service
configuration, that we would ultimately disable for the E2E
testing environment.

* Fix misspelling

Fix linting error that has caught a misspelling of the work 'Network'.

* Modify configuration address to be required from CLI

With the change of making the Espresso Attestation Service optional
we removed the CLI configuration check that occurs on launch, so
that the E2E tests can still be run.

This has an unfortunate side-effect of allowing the Batcher to be
launched in a state where it is unable to operate as intended due
to user error.  The only indication being a `WARN` log entry to
inform him/her of his/her mistake.

This sort of approach is generally discouraged, yet we still need
to be able to bypass this check for testing purposes.  As a result
the `EspressoAttestationService` value has been modified from being
a simple `string` to being an interface whose value is inspectable
and not allowed to be empty by default.  This allows for the
test configurations to overwrite this behavior, and allow an
optional value in the cases where it is needed.

This should preserve the prior behavior of erroring on launch when
the parameter is not configured or specified, and should also
preserve the new behavior where it is explicitly disabled in
tests.

* Fix some nil references

The EspressoAttestationService configuration value being
an interface makes it a `nil`lable value by default. Care
needs to be taken when accessing this value an referencing
it.

This change adds some additional care in referencing the
value stored within.

* Fix nil access error

The `l1Client` being created assumes that the `sys` returned from the
call is non-nil before checking the error.  This is not guaranteed, and
is most likley not ever the case.  As a result there is a potential for
an error do to attempting an access on a `nil` value.  By moving the
`l1Client` declaration after the error check, we avoid the potential for
this issue.

* Apply linting and formatting changes

* Fix e2e tests - populate default EspressoAttestationService

With the modification of the EspressoAttestationService to an interface
instead of an individual value, we need to ensure that the default
way of launching the Espresso E2E DevNet results in the value being
populated with an empty allowed value.

This still allows for extension and override, without requiring the
value to be specified, which is our intention.  This was missed when
adding the capability originally.

* Cleanup code practices

We have duplicated code that makes the maintenance burden more difficult
than it needs to be.  In many of these scenarios the code that is
duplicated differs by only a single line.  Instead of making the system
more flexible, we ended up duplicating code paths.

This increases the maintenance burden by needing to ensure that these
code paths match in every case where they do not differ, yet they are
independent of each other.  This is not a great approach.

Additionally, we end up with multiple starting points for something that
should not need them.  We also end up storing a configuration that is
unnecessary to store.  This incurs conditional checks where some are not
needed, and ends up making the approach be more confusing than it needs
to be.

This change aims to replace these approaches with one that adheres to
the functional option approach and preserves the existing behavior.

* Revert EspressoAttestionService to a `string`

As it so happens we rely on the `CLIConfig` for `Espresso`, and the
`Batcher` to be serializable.  By utilizing an `interface`, we run into
trouble doing this.  Due this constraint, the `interface` constraint is
not feasible.

This change reverts the value back to a `string`, which should result in
a smaller overall change.  It also opts for a private configuration
value that is inspectable by the `Verify` check, but not directly
configurable.  We expose a method to allow for it to be configured, so
it can only occur within code within the code base itself.  We should
only invoke this via Testing where we need the value to be optional.

This achieves the same result but in a different way.

| NOTE: There may be a better approach to this as well, isntead of
having this be a separate field, we could do something akin to
sql.NullString, where we encode this value as a Marshable `struct`.  The
acess pattern becomes different, but we could directly encode the empty
allowance into the struct itself.

* Add Espresso Attestation Verifier Service to Enclave Test

The Enclave tests are currently failing in CI.  It is dying due to an
error stemming from the lack of the EspressoAttestationService being
configured.  It is likely that this is required for the Enclave tests
specifically.  As a result, we need to add and enable it for the enclave
tests.

* Modify LaunchBatcherInEnclave option

The LaunchBatcherInEnclave essentially launches the batcher externally
within an enclave.  This option actually relies on the Espresso
Attestation Verifier Service to be running.  This is due to the Espresso
Attestation Service only being optional inside of a test environment.
When launched externally, the Batcher is no longer considered to be in a
"test environment", or configurable for testing.  As a result, its
configuration **MUST** be something that can actually be resolvable from
a CLI launch.

Since the Espresso Attestation Verifier Service check is only disabled
within the testing environment, this means it **MUST** be enabled in the
enclave.

For convenience, this option has been added automatically as a part of
the LaunchBatcherInEnclave option, since it depends on it.  This will
minimize accidentl misconfigurations.
* add eigenda_proxy_url to op-batcher-tee

* fix the url to post to eigenDA

* not hardcoding EIGENDA_PROXY_PORT

* fix the block height config
* Add test to check end of channel fallback

Asana task: https://app.asana.com/1/1208976916964769/project/1209976130071762/task/1211892212379885?focus=true

We need a test to check the fallback Batcher behavior in the event
that the Espresso Batcher is able to submit a partial Channel that is
im progress.

The specific scenario we want to test for is one concerning a
multi-frame channel that has had at least part of the full channel
submitted to the L1 by the Espresso Batcher, then no more.  After
which we swap to the Fallback Batcher, and we should be able to pick
up the missed / incomplete channel, and complete the transactions.

* Rename helper function to match naming pattern

* Fix lint issue with not checking error result of wait.For

* Commit work in progress multi frame channel efforts

* Adjust settings to successfully trigger multi-frame channels

After a mob programming session @quentinl was able to help identify a
a specific combiniation of parameters to successfully and consistently
trigger multi-frames within the Batcher.  This condition is a necessary
precusor to the test being attempted.

This commit updates the test with the information necessary to trigger
this condition and sets the necessary test criteria that we are aiming
to achieve.

* Perform some code cleanup

This change does a few things:

- Address linting issue causing CI failure
- Adjusts some golang forloop usage to be more modern
- Adjust function call signatures to remove unused variables

* Fix bug tracking unsuccessful frames in test

In the `TxManagerIntercept` there is a bug that appends the successful
frames to the unsuccessful ones.  While this bug isn't great in the
information that it taints, it doesn't actually have the large of an
impact on the test as a whole, as the resulting failure condition
would be triggered regardless.

This bug does affect the accurate tracking of failed frames which
could be valuable information for inspection.

* Update espresso/environment/e2e_helpers.go

Co-authored-by: Phil <philippe@espressosys.com>

* Replace Disable Batcher setting references

There are a number of places in our testing setup where we are
explicitly preventing the Batcher from starting on launch.  Instead of
rewriting this same option every time we want to use it, we should
reference a built in option that we can reference continually.  This
allows for non-repeated code and improved documentation as to the point
and purpose of this option.

* Refactor custom wait in test

There's a condition being waited on in the switch to fallback batcher
test.  This wait is useful, and can be reused between tests.  But the
wait itself is somewhat hiding it's intention by being inline defined
within the test itself.  We should pull this wait out so it can be
easily used, and its intention / purpose can be more easily documented.

* Cleanup code reuse in frame decoding

When decoding frame information for one of the Batcher fallback tests,
there are similar code paths taken that result in most of the code being
reused.  We should clean up this code reuse so that we don't repeat
ourselves in order to avoid diverging logic.  Additionally, it allows us
to reduce the amount of code needing to be maintained, and more clearly
document the intention of the code, and the consistency with how we
perform this frame decoding process.

* Relocate deferred stop calls

The Stop calls should occur as close to the launch of the environment as
possible.  As a result, any deferred calls to Stop for the system or the
Espresso Dev Node should occur as close to their occurence as possible.

* Modify Initial L2Verif wait to be longer

With the specific Frame and Channel settings being specified in the
`TestFallbackMechanismIntegrationTestChannelNotClosed` test, the initial
startup check for the L2 Verifier is failing.  This is due to our
settings requiring the Verifier process to take a bit longer than
normal.  In general, we want to give it more time, but the time frame
for the failure is hard-coded in the `wait` function being utilized.
While we **could** add a simple `time.Sleep`, and this would work, this
is generally a bad appraoch as it just adds an unchecked delay.
Instead, we opt to utilize a simple `retry` for up to `n` times.  In
this case, we only need to wait up to `3x` the normal time, so ensure
that we perform at least `3` times.

* Fix failure in Batcher Fallback test

The TestFallbackMechanismIntegrationTestChannelNotClosed test fails
locally without stopping, in spite of the overall time limit being
specified on the test.  After some troubleshooting and debugging, We
were able to chase down the cause to be due to the
`RunSimpleMultiTransactions`.  It's unclear as to why this was causing
the process to hang for as long as it was.  It seemed to not be handling
timeout errors well for some reason.

Either way, we fority this helper by setting an explicit time limit on
it, and referncing the context whenever we're performing channel
operations.  This should allow the channel operations themselves not to
block and hang the test.

After this modification we were able to determine that this process was
failing due to insufficient gas being provided.  For some reason when
running the transactions through this mechanism, we require even more
gas than we're normally need.  This seems a bit odd, perhaps it has to
do with the differences in the transaction construction.  In any case,
we up the gas being provided so that this becomes a non-issue.

* Fix linting issues

* Update espresso/environment/tx_helpers.go

Co-authored-by: Phil <philippe@espressosys.com>

* Correct failure vs success in Send

The triggered conditions for failures and successes are backwards in the
`Send` method of `TxMangerIntercept`.  Their specific frame markers
should be switched.

* Update espresso/environment/14_batcher_fallback_test.go

Co-authored-by: Phil <philippe@espressosys.com>

---------

Co-authored-by: Phil <philippe@espressosys.com>
* Check if the batcher is active before publishing to L1/DA

* fix readme lint

* more lint fixes

* check batcher contract

* Fix endless warning

* add batch authenticator address to rollup config

* handle contract undeployed error

* attempt test in CI

* add test to CI

* Revert "add test to CI"

This reverts commit 2a9678a7298d130616a7fa5cea5e250978ccfbd3.

* add test to CI

* remove jg/ from branches

* attempt to clean up and make the test more reliable

* fix ci error WaitUntilSafe undefined

* revert 07a82bf

* Fix `anvil_setBalance` not found error

* Simplify isActive check

* add batcher-active-publish-only to devnet tests justfile

* - simplify test, one less batcher switch
- increase timeouts for devnet test

* Cleaned up the code, raise tx waiting time to 60s

* Brought back original timeouts

* started fallback batcher up + lint fix docker compose file

* Ensure that in Espresso mode the batch authenticator address is set.

* Removing all changes to driver.go and the tests are still passing.

---------

Co-authored-by: Philippe Camacho <philippe@espressosys.com>
* Remove pre authenticated batcher

* fix test
* Support namespace range endpoint

(cherry picked from commit a73f7b6)

* fix buils

(cherry picked from commit e46909b)

* update docker image

(cherry picked from commit 0774898)

* fix streamer tests

(cherry picked from commit f752aa2)

* fix streamer tests

(cherry picked from commit 168426e)

* fix tests

(cherry picked from commit b942c28)

* fix tests

(cherry picked from commit b96622c)

* use docker instead of cargo to generate allocs.json

(cherry picked from commit efee3ac)

* fix readme

* address comments

* remove fetch api
…pdate (#337)

* Enable upgradability

* Fix fmt

* Fix file name

* Fix tests

* Clean up tests

* Force clean build

* Add temp artifact verification

* More verification for artifact verification

* Fix build command

* Fix artifact

* Fix artifact

* Fix script

* Fix and simplify the script

* Fix proxyAdmin as well

* Add back verification workflow

* Fix more workflows

* Restore version

* Use EspressoTEEVerifierMock

* Fix TeeType conversion

* Fix fmt

* Fix enum conflict

* Fix version in test

* Fix byte requirement

* Add error

* Enable batcher address update

* Fix typo and remove redundant tests

* Fix owner

* Fix test build

* transfer owner

* Fix more tests

* Fix devnet test

* Fix unused param

* Fix ec2 test

* Fix enclave test

* Fix fmt

* Fix circleCI

* Fix fmt again

* Cleanup

* Move events and errors to interface

* Fix build

* Update proxy admin permission
* add description for TestBatcherSwitching

* Update espresso/environment/14_batcher_fallback_test.go

Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Update espresso/environment/14_batcher_fallback_test.go

Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Update espresso/environment/14_batcher_fallback_test.go

Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Update espresso/environment/14_batcher_fallback_test.go

Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Update espresso/environment/14_batcher_fallback_test.go

Co-authored-by: Phil <philippe@espressosys.com>

* Update espresso/environment/14_batcher_fallback_test.go

Co-authored-by: Phil <philippe@espressosys.com>

---------

Co-authored-by: Keyao Shen <shenkeyao@gmail.com>
Co-authored-by: Phil <philippe@espressosys.com>
* cmd to shutdown all services

* Small change to trigger CI

---------

Co-authored-by: Keyao Shen <shenkeyao@gmail.com>
Co-authored-by: OpenCode <noreply@opencode.ai>
Co-authored-by: Philippe Camacho <philippe@espressosys.com>
@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello @philippecamacho, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly refactors and modernizes the project's CI/CD pipeline and MIPS VM infrastructure. It transitions the MIPS VM to a 64-bit architecture with an improved memory management system, expands syscall functionality, and introduces a more robust testing framework. These changes aim to enhance performance, maintainability, and code quality across the codebase.

Highlights

  • CircleCI Configuration Overhaul: The .circleci/config.yml file has undergone significant changes, including updates to default Docker images, introduction of new parameters for acceptance tests and GitHub event handling, and integration of new orbs like circleci-utils, docker, and github-cli. This streamlines CI workflows and adds new capabilities such as Discord notifications for build failures.
  • MIPS VM Architecture Modernization: The MIPS VM implementation has been modernized to exclusively support 64-bit MIPS (MIPS64r1), removing previous 32-bit MIPS support. This involves the removal of arch32.go and extensive modifications to arch64.go, mips_instructions.go, and related test files to align with the 64-bit architecture.
  • Enhanced Memory Management for MIPS VM: A new binary tree-based memory indexing system (binary_tree.go, hasher.go) has been introduced for the MIPS VM, improving how memory is merkleized and managed. This refactors core memory operations and caching mechanisms within the cannon/mipsevm/memory package.
  • Expanded Syscall Support and Testing Framework: New syscalls like SysGetRandom and SysEventFd2 have been added to the MIPS VM, expanding its capabilities. Concurrently, a robust DiffTester framework has been implemented for comprehensive testing, allowing for more flexible and automated validation of VM behavior across different configurations and scenarios.
  • Code Quality and Dependency Updates: New Semgrep rules have been added for Solidity style and safety, alongside a .golangci.yaml for Go linting, enforcing stricter code quality standards. Several Git submodules have been updated or added, including safe-contracts (v1.4.1), espresso-tee-contracts, op-rbuilder, rollup-boost, and kona, reflecting updated dependencies and new integrations.
  • Improved Contribution Guidelines: The CONTRIBUTING.md file has been updated with new sections discouraging trivial changes and providing clearer guidance on contributions related to spelling and grammar, aiming to focus reviewer efforts on more impactful pull requests.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • .circleci/config.yml
    • Updated default Docker image to cimg/base:2024.01 and cimg/base:2025.02 for various jobs.
    • Removed ci_builder_image and ci_builder_rust_image parameters, replacing them with default_docker_image.
    • Added new parameters: acceptance_tests_dispatch, github-event-type, github-event-action, github-event-base64, devnet-metrics-collect.
    • Updated slack orb to 5.1.1 and added new orbs: utils, docker, github-cli.
    • Modified gcloud auth login command to include || true and a TODO comment.
    • Enhanced install-contracts-dependencies command with solc_versions parameter, caching, and svm installation logic.
    • Added discord-notification-failures-on-develop command for Discord alerts.
    • Modified run-contracts-check to include git clean -df and git status --porcelain checks.
    • Updated various job configurations (cannon-go-lint-and-test, diff-asterisc-bytecode, contracts-bedrock-build, docker-build, check-cross-platform, contracts-bedrock-tests, contracts-bedrock-tests-upgrade, contracts-bedrock-checks, todo-issues, fuzz-golang, go-lint, go-tests, go-tests-with-fault-proof-deps, op-acceptance-tests, sanitize-op-program, cannon-prestate-quick, cannon-prestate, publish-cannon-prestates, preimage-reproducibility, cannon-stf-verify, semgrep-scan, go-release) to use new Docker images, resource classes, and utils/checkout-with-mise step.
    • Removed cannon-build-test-vectors and check-kontrol-build jobs.
    • Added contracts-bedrock-frozen-code and contracts-bedrock-coverage jobs with detailed steps for frozen code checks and coverage generation.
    • Updated contracts-bedrock-tests-upgrade parameters for forking chains and RPCs, and modified cache key.
    • Removed gas-snapshot-check from contracts-bedrock-checks and added reinitializer-check-no-build and opcm-upgrade-checks-no-build.
    • Modified todo-issues command to include --strict flag.
    • Added download espresso-network go sdk step to fuzz-golang and go-tests-with-fault-proof-deps jobs.
    • Removed fpp-verify job.
    • Removed publish-contract-artifacts job.
    • Added diff-fetcher-forge-artifacts job for comparing forge artifacts.
    • Updated stale-check job to use utils/github-stale orb and modified parameters.
    • Added close-issue job using github-cli and utils/github-event-handler-setup.
    • Added devnet-metrics-collect-authorship job for collecting devnet metrics.
    • Added generate-flaky-report job for acceptance tests.
    • Restructured workflow triggers for main, develop-publish-contract-artifacts, develop-fault-proofs, develop-kontrol-tests, scheduled-docker-publish, scheduled-preimage-reproducibility, scheduled-stale-check, acceptance-tests, acceptance-tests-pr, and close-issue-workflow.
  • .circleci/github-event-handler.yml
    • Added new file to define GitHub event handlers for pull request labeled events, mapping pull_request.number and label.name to parameters.
  • .cursor/rules/solidity-styles.mdc
    • Added new file defining a comprehensive Solidity style guide for AI code review tools, covering comments, errors, naming conventions, upgradeability, versioning, dependencies, state changes, and testing practices.
  • .dockerignore
    • Added gha-creds-*.json to ignore generated credentials from GitHub Actions.
  • .editorconfig
    • Added new section for shell scripts (*.sh) to enforce specific formatting rules like indent_style = space, indent_size = 2, binary_next_line = true, switch_case_indent = true, and space_redirects = true.
  • .envrc.example
    • Removed the .envrc.example file.
  • .github/CODEOWNERS
    • Added @ethereum-optimism/op-stack and @ethereum-optimism/go-reviewers as code owners for /op-devstack.
    • Added @ethereum-optimism/platforms-team as code owners for /op-deployer and /op-validator.
    • Added @ethereum-optimism/contract-reviewers as code owner for /.cursor/rules/solidity-styles.mdc.
    • Modified /packages/contracts-bedrock entry to require a minimum of 2 reviewers for all changes, with an exception for markdown files.
    • Added @ethereum-optimism/evm-safety as code owner for /docs.
  • .github/actions/docker-build-prep/action.yml
    • Added new GitHub Action to prepare the environment for Docker builds, including getting the current date, reading KONA_VERSION from kona/version.json, and computing GIT_VERSION for all images.
  • .github/cliff.toml
    • Added new file to configure git-cliff for changelog generation, specifying GitHub remote, changelog body template, and Git commit parsing rules.
  • .github/dependabot.yml
    • Changed open-pull-requests-limit for gomod updates from 10 to 0.
  • .gitignore
    • Added logs.txt, **/lcov-upgrade.info, **/lcov-all.info to ignore generated log and coverage files.
    • Removed packages/contracts-bedrock/deployments/devnetL1 from ignore list.
    • Added !op-deployer/pkg/deployer/artifacts to explicitly not ignore this path.
    • Added .envrc, .direnv/, .tool-versions, gha-creds-*.json, .vscode/, config/jwt.txt, *.pem to ignore various local configuration and generated files.
  • .gitmodules
    • Updated packages/contracts-bedrock/lib/safe-contracts submodule branch from v1.4.0 to v1.4.1.
    • Removed packages/contracts-bedrock/lib/automate submodule.
    • Added new submodules: packages/contracts-bedrock/lib/espresso-tee-contracts, op-rbuilder, rollup-boost, kona.
  • .golangci.yaml
    • Added new file to configure golangci-lint with specific linters enabled (goimports, sqlclosecheck, bodyclose, asciicheck, misspell, errorlint, exhaustruct, err113).
    • Configured exhaustruct to include op-deployer OPCM input/output structs.
    • Configured err113 to apply only to op-program/client.
  • .semgrep/rules/sol-rules.yaml
    • Updated sol-safety-deployutils-args rule to include createDeterministic function.
    • Added sol-safety-deployutils-named-args-parameter rule to enforce named arguments and _args parameter in DeployUtils calls.
    • Updated sol-safety-expectrevert-before-ll-call rule to exclude packages/contracts-bedrock/test/universal/WETH98.t.sol.
    • Added sol-safety-trycatch-eip150 rule to enforce EIP-150 safety comments for try/catch blocks.
    • Added sol-style-error-format rule to enforce ContractName_ErrorName format for custom errors.
    • Removed cannon related paths from sol-style-input-arg-fmt and sol-style-malformed-revert exclusions.
    • Updated sol-style-input-arg-fmt exclusion to SuperchainETHBridge.sol.
    • Updated sol-style-malformed-revert pattern to handle string.concat correctly.
    • Updated sol-style-enforce-require-msg exclusion to packages/contracts-bedrock/test/invariants/FeeSplit.t.sol.
    • Updated sol-safety-proper-initializer message to include reinitializer and public visibility.
    • Added sol-safety-proper-upgrade-function rule to enforce external reinitializer modifier for upgrade functions.
    • Added sol-safety-no-immutable-variables rule to disallow immutable variables with specific exclusions.
    • Added sol-style-use-process-run rule to enforce Process.run over vm.ffi or vm.tryFfi.
    • Added sol-style-vm-env-only-in-config-sol rule to restrict vm.env* usage to Config.sol.
    • Added sol-style-event-param-fmt rule to enforce camelCase naming and no underscore prefix for event parameters.
    • Added sol-safety-opcmv2-use-internal-version rule to enforce _version() over version() in OPContractsManagerV2.
    • Added sol-style-ban-forge-std-test-import rule to enforce specific Test.sol import paths.
  • .semgrep/tests/sol-rules.sol-safety-no-immutable-variables.t.sol
    • Added new Semgrep test file to validate the sol-safety-no-immutable-variables rule.
  • .semgrep/tests/sol-rules.sol-safety-opcmv2-use-internal-version.t.sol
    • Added new Semgrep test file to validate the sol-safety-opcmv2-use-internal-version rule.
  • .semgrep/tests/sol-rules.sol-safety-proper-initializer.t.sol
    • Modified existing Semgrep test file to include tests for public and reinitializer modifiers in initialize functions.
  • .semgrep/tests/sol-rules.sol-safety-proper-upgrade-function.t.sol
    • Added new Semgrep test file to validate the sol-safety-proper-upgrade-function rule.
  • .semgrep/tests/sol-rules.sol-style-ban-forge-std-test-import.t.sol
    • Added new Semgrep test file to validate the sol-style-ban-forge-std-test-import rule.
  • .semgrep/tests/sol-rules.sol-style-error-format.t.sol
    • Added new Semgrep test file to validate the sol-style-error-format rule.
  • .semgrep/tests/sol-rules.t.sol
    • Updated existing Semgrep test file to include tests for DeployUtils.createDeterministic and sol-safety-deployutils-named-args-parameter rule.
    • Added tests for sol-safety-trycatch-eip150 rule.
    • Added tests for sol-style-event-param-fmt rule.
  • .vscode/settings.json
    • Added VSCode settings for GitHub integration (openInGitHub.defaultBranch, openInGitHub.alwaysUseDefaultBranch, openInGitHub.excludeCurrentRevision) and disabled makefile.configureOnOpen.
  • CONTRIBUTING.md
    • Updated link for Optimism Docs.
    • Added new sections: 'Contributions Related to Spelling and Grammar' and 'Trivial Changes Discouraged', explaining policies on minor contributions and their impact on maintainer overhead.
  • LICENSE
    • Updated copyright year from 2020-2024 to 2020-2025.
  • Makefile
    • Updated include path for just flags from ./just/flags.mk to ./justfiles/flags.mk.
    • Modified help target to sort output.
    • Updated build-go target to include op-challenger, op-dispute-mon, op-program, cannon.
    • Updated lint-go and lint-go-fix commands to increase timeout to 10m and add err113 linter for op-program/client.
    • Removed ci-builder target.
    • Added KONA_VERSION to golang-docker build arguments.
    • Added compute-git-versions target.
    • Added op-supernode and op-interop-filter targets.
    • Simplified cannon-prestates target to use go run ./op-program/builder/main.go build-all-prestates.
    • Updated test-unit description.
    • Added new go-tests, go-tests-short, _go-tests-ci-internal, go-tests-short-ci, go-tests-ci, go-tests-fraud-proofs-ci targets for more granular Go testing in CI.
    • Updated test alias to go-tests.
  • README.md
    • Updated Optimism logo path to ./logo.svg.
    • Added a note for README_ESPRESSO.md.
    • Updated the table of contents generation comment.
    • Expanded the 'Directory Structure' section to include new components like cannon, devnet-sdk, kurtosis-devnet, op-acceptance-tests, op-alt-da, op-conductor, op-deployer, op-devstack, op-dripper, op-faucet, op-fetcher, op-interop-mon, op-supervisor, op-sync-tester, op-test-sequencer, op-up, op-validator.
    • Removed ci-builder and semgrep from the list of components with releases.
  • README_ESPRESSO.md
    • Added new file providing comprehensive documentation for Optimism Espresso integration, covering development environment setup, Docker configuration, testing procedures, AWS Nitro Enclaves guide, local devnet operations, log monitoring, Blockscout usage, CI environment details, Celo deployment, and OP Succinct Lite dependencies.
  • cannon/.gitignore
    • Updated ignore rules to include testdata/**/bin/ for generated binaries.
  • cannon/Dockerfile.diff
    • Updated base Go image from golang:1.22.7-alpine3.20 to golang:1.24.10-alpine3.21.
    • Updated cannon image version from v1.1.0-alpha.4 to v1.6.0 for cannon-multithreaded64-5 stage.
    • Modified cannon verification steps to check diff-multithreaded64-5-cannon.
  • cannon/Makefile
    • Updated UNSUPPORTED_OPCODES list for MIPS64 r2 opcodes.
    • Removed cannon32-impl target.
    • Modified cannon64-impl target to remove tags=cannon64.
    • Updated cannon-embeds target to only build cannon64-impl and copy to multicannon/embeds/cannon-8.
    • Updated elf target to make -C ./testdata elf.
    • Added elf-go-current target.
    • Modified sanitize-program target to dump objdump output to a file and use cat for grep.
    • Updated diff-%-cannon target to use elf-go-current and verify 64-bit VM types.
  • cannon/README.md
    • Updated MIPS VM description to MIPS64.sol and 64-bit MIPS instruction set.
    • Updated memory tree depth from 27 to 59 levels, reflecting 64-bit address space.
    • Updated memory proof format from 28 to 60 bytes32.
    • Updated memory access details to 8-byte aligned reads/writes.
    • Updated reference to MIPS64.sol in usage section.
    • Updated example section to testdata and linked to testdata/Makefile.
    • Removed note about code being unaudited.
  • cannon/mipsevm/README.md
    • Updated supported instructions table to reflect MIPS64 instructions, including dadd, daddi, daddiu, daddu, dclo, dclz, ddiv, ddivu, dmult, dmultu, dsll, dsll32, dsllv, dsra, dsra32, dsrav, dsrl, dsrl32, dsrlv, dsub, dsubu, ld, ldl, ldr, lwu, sd, sdl, sdr.
  • cannon/mipsevm/arch/arch.go
    • Added new file with common architecture constants like IsMips32, WordSizeBytes, PageAddrSize, PageKeySize, MemProofLeafCount, MemProofSize.
  • cannon/mipsevm/arch/arch32.go
    • Removed the arch32.go file, eliminating 32-bit MIPS architecture support.
  • cannon/mipsevm/arch/arch64.go
    • Removed IsMips32, MemProofLeafCount, MemProofSize constants.
    • Added Limit and ProgramHeapStart constants.
    • Added SysGetRandom, SysMprotect, SysEventFd2 to MIPS64 syscall table.
    • Removed SysGetRandom from noop syscalls.
  • cannon/mipsevm/debug.go
    • Added InstructionCacheMissCount and HighestICacheMissPC fields to DebugInfo struct.
    • Removed FailedWakeupCount from DebugInfo struct.
  • cannon/mipsevm/debug_test.go
    • Updated TestDebugInfo_Serialization to include new InstructionCacheMissCount and HighestICacheMissPC fields and remove FailedWakeupCount.
  • cannon/mipsevm/exec/mips_instructions.go
    • Added U32Mask constant for 32-bit unsigned integer mask.
    • Modified shift operations (sll, srl, sra, sllv, srlv, srav) to correctly handle 32-bit results and sign extension using U32Mask.
    • Modified mul and clz/clo handling to use fun == 0x2 and fun == 0x20 || fun == 0x21 respectively.
    • Added dclz/dclo handling for 64-bit MIPS.
    • Updated lwl, lwr, swl, swr, lwu instructions to correctly handle 64-bit values and U32Mask.
    • Fixed SignExtend logic to correctly check the sign bit.
  • cannon/mipsevm/exec/mips_instructions32_test.go
    • Added TestSignExtend_32bit function to test 32-bit sign extension logic.
  • cannon/mipsevm/exec/mips_instructions64_test.go
    • Removed build tags for cannon64.
    • Added TestSignExtend_64bit function to test 64-bit sign extension logic.
  • cannon/mipsevm/exec/mips_syscalls.go
    • Added FdEventFd constant.
    • Removed FutexTimeoutSteps, FutexNoTimeout, FutexEmptyAddr constants.
    • Updated HandleSysMmap error return values.
    • Added FdEventFd handling to HandleSysRead and HandleSysWrite to always return MipsEAGAIN.
    • Updated HandleSysFcntl error return values.
    • Added EFD_NONBLOCK constant for eventfd flags.
  • cannon/mipsevm/iface.go
    • Updated CreateVM interface method to accept FeatureToggles parameter.
    • Added FeatureToggles struct to define optional VM features.
  • cannon/mipsevm/memory/binary_tree.go
    • Added new file implementing a binary merkle tree for memory indexing, including NewBinaryTreeMemory, Invalidate, MerkleizeSubtree, MerkleProof, MerkleRoot, and AddPage methods.
  • cannon/mipsevm/memory/hasher.go
    • Added new file providing memory hashing utilities, including byte32Pool, hashPool, GetByte32, ReleaseByte32, GetHasher, PutHasher, HashPairNodes, HashData, HashPair, and zeroHashes.
  • cannon/mipsevm/memory/memory.go
    • Removed HashPair and zeroHashes functions.
    • Introduced PageIndex interface for memory indexing strategies.
    • Updated NewMemory and NewMemoryWithLargeRegions to use NewBinaryTreeMemory.
    • Modified SetWord to use m.merkleIndex.Invalidate(addr) for cache invalidation.
    • Modified GetWord to check m.MappedRegions first for memory access.
    • Updated AllocPage to use m.merkleIndex.AddPage(pageIndex).
    • Modified MarshalJSON and UnmarshalJSON to handle Page as *[PageSize]byte for JSON serialization.
    • Updated Copy method to use PageIndex.New.
  • cannon/mipsevm/memory/memory64_benchmark_test.go
    • Added new file containing benchmarks for 64-bit memory operations, including random/sequential read/write, sparse/dense memory usage, frequent updates, Merkle proof generation, and Merkle root calculation.
  • cannon/mipsevm/memory/memory64_binary_tree_test.go
    • Added new file with tests for the 64-bit binary tree memory implementation, covering Merkle proofs, Merkle roots, read/write operations, JSON serialization, and copying.
  • cannon/mipsevm/memory/memory64_test.go
    • Removed the memory64_test.go file.
  • cannon/mipsevm/memory/memory_test.go
    • Removed the memory_test.go file.
  • cannon/mipsevm/memory/page.go
    • Updated Page type from [PageSize]byte to []byte.
    • Modified MarshalJSON and UnmarshalJSON methods to correctly handle Page as a byte slice.
    • Added a compile-time assertion for PageSize to be 4096.
    • Updated CachedPage to use OkLow and OkHigh bitmasks for tracking intermediate node validity, replacing the Ok boolean array.
    • Modified MerkleRoot to use HashData and HashPairNodes for hashing operations.
  • cannon/mipsevm/memory/page_test.go
    • Updated TestCachedPage to initialize p.Data using make(Page, PageSize).
  • cannon/mipsevm/multithreaded/instrumented.go
    • Added InstructionDetails struct to cache decoded instruction details.
    • Modified NewInstrumentedState to eagerly decode all mapped code and store it in cached_decode.
    • Updated NewInstrumentedState signature to accept mipsevm.FeatureToggles.
    • Added UpdateInstructionCache method to update the instruction cache for a given PC.
  • cannon/mipsevm/multithreaded/instrumented_test.go
    • Added TestInstrumentedState_Hello, TestInstrumentedState_Claim, TestInstrumentedState_Keccak, TestInstrumentedState_Random, TestInstrumentedState_SyscallEventFdProgram tests for multithreaded VM.
    • Updated TestInstrumentedState_UtilsCheck and TestInstrumentedState_MultithreadedProgram to use runTestsAcrossVms helper function.
    • Added VMFactory, VMTestCase, TestNamer, runTestAcrossVms, getVmFactory, latestVm, allFeaturesEnabled helper functions.
    • Added TestSplitmix64 to unit test the pseudorandom number generator.
  • cannon/mipsevm/multithreaded/mips.go
    • Updated handleSyscall to use 4 syscall arguments instead of 5.
    • Removed FutexAddr, FutexVal, FutexTimeoutStep from ThreadState initialization in handleSyscall.
    • Simplified FutexWaitPrivate and FutexWakePrivate handling in handleSyscall.
    • Removed onWaitComplete function.
    • Added syscallGetRandom, splitmix64, handleUnrecognizedSyscall, syscallYield helper functions.
    • Removed Wakeup field from state handling.
    • Modified doMipsStep to use cached instruction decode (m.cached_decode) and track instruction cache misses.
  • cannon/mipsevm/multithreaded/state.go
    • Removed WAKEUP_WITNESS_OFFSET constant.
    • Removed Wakeup field from State struct.
    • Added UseLargeICache field to State struct.
    • Updated CreateEmptyState to remove Wakeup initialization.
    • Updated CreateVM signature to accept mipsevm.FeatureToggles.
    • Updated EncodeWitness to remove Wakeup field from witness encoding.
    • Updated Deserialize to conditionally use memory.NewMemoryWithLargeRegions() based on UseLargeICache.
    • Updated Serialize and Deserialize to remove Wakeup field from binary serialization.
  • cannon/mipsevm/multithreaded/state_test.go
    • Updated TestState_EncodeWitness to remove Wakeup field from expected witness.
    • Updated TestState_JSONCodec and TestState_Binary to initialize newState with CreateEmptyState() and set UseLargeICache.
    • Updated TestState_JSONCodec and TestState_Binary assertions to remove Wakeup field comparison.
    • Updated TestSerializeStateRoundTrip to remove Wakeup, FutexAddr, FutexVal, FutexTimeoutStep fields from ThreadState initialization and assertions.
    • Updated TestStateWitnessSize and TestThreadStateWitnessSize to reflect new witness sizes.
  • cannon/mipsevm/multithreaded/stats.go
    • Removed isWakeupTraversal, trackWakeupTraversalStart, trackWakeup, trackWakeupFail methods and failedWakeupCount field.
    • Added icacheMissCount, highestICacheMissPC fields to statsTrackerImpl.
    • Added trackInstructionCacheMiss method to StatsTracker and statsTrackerImpl.
  • cannon/mipsevm/multithreaded/stats_test.go
    • Removed wakeup traversal related test cases.
  • cannon/mipsevm/multithreaded/testutil/expectations.go
    • Renamed ExpectedMTState to ExpectedState.
    • Updated NewExpectedMTState to NewExpectedState and changed its signature to accept mipsevm.FPVMState.
    • Removed FutexAddr, FutexVal, FutexTimeoutStep from ExpectedThreadState struct.
    • Added ExpectedMemoryWrites, ExpectMemoryReservationCleared, ExpectMemoryWrite, ExpectPreemption, ExpectNewThread, ExpectPoppedThread, ExpectTraverseRight, ExpectNoContextSwitch, ExpectContextSwitch, ActiveThread, ActiveThreadId, ExpectActiveThreadId, ExpectNextThreadId, PrestateActiveThread, Thread methods.
    • Introduced threadExpectations struct to encapsulate thread-related expectations and logic.
    • Updated Validate method to use threadExpectations for thread-related assertions.
  • cannon/mipsevm/multithreaded/testutil/expectations_test.go
    • Updated tests to use ExpectedState and its new methods.
    • Added TestExpectNewThread_DoesNotInheritChangedExpectations to verify new thread expectations.
    • Added findInactiveThread and randomStateWithMultipleThreads helper functions.
  • cannon/mipsevm/multithreaded/testutil/mutators.go
    • Removed the mutators.go file.
  • cannon/mipsevm/multithreaded/testutil/state.go
    • Added AddHintLengthPrefix and AddPreimageLengthPrefix functions.
    • Introduced StateMutator struct with methods for randomizing and setting various state fields.
    • Added StateOption type and associated functions (WithPC, WithNextPC, WithPCAndNextPC, WithHI, WithLO, WithHeap, WithLastHint, WithPreimageKey, WithPreimageOffset, WithStep, WithRandomization) for configuring state mutators.
    • Updated GetMtState and RandomState to use the new StateMutator.
  • cannon/mipsevm/multithreaded/testutil/thread.go
    • Updated InitializeSingleThread to use StateOption and StateMutator.
    • Added ActiveThreadCount function.
  • cannon/mipsevm/multithreaded/thread.go
    • Removed THREAD_FUTEX_ADDR_WITNESS_OFFSET, THREAD_FUTEX_VAL_WITNESS_OFFSET, THREAD_FUTEX_TIMEOUT_STEP_WITNESS_OFFSET constants.
    • Updated SERIALIZED_THREAD_SIZE to reflect new size.
    • Removed FutexAddr, FutexVal, FutexTimeoutStep fields from ThreadState struct.
    • Updated CreateEmptyThread to remove Futex field initializations.
    • Updated serializeThread and Deserialize to remove Futex related fields.
  • cannon/mipsevm/program/patch.go
    • Removed PatchGoGC function.
  • cannon/mipsevm/program/testutil/mocks.go
    • Updated CreateVM mock signature to accept mipsevm.FeatureToggles.
  • cannon/mipsevm/register/calling_convention.go
    • Removed RegSyscallParam4 constant.
  • cannon/mipsevm/singlethreaded/instrumented.go
    • Removed the instrumented.go file.
  • cannon/mipsevm/singlethreaded/instrumented_test.go
    • Removed the instrumented_test.go file.
  • cannon/mipsevm/singlethreaded/mips.go
    • Removed the mips.go file.
  • cannon/mipsevm/singlethreaded/state.go
    • Removed the state.go file.
  • cannon/mipsevm/singlethreaded/state_test.go
    • Removed the state_test.go file.
  • cannon/mipsevm/singlethreaded/testutil/state.go
    • Removed the state.go file.
  • cannon/mipsevm/tests/difftester.go
    • Added new file implementing a DiffTester framework for robust VM testing, including SimpleDiffTester, TestNamer, InitializeStateFn, SetExpectationsFn, PostStepCheckFn, TestDependencies, TestConfig, TestOption, ExpectedExecResult interfaces and structs.
  • cannon/mipsevm/tests/difftester_test.go
    • Added new file containing tests for the DiffTester framework, covering simple test cases, step execution, memory modifications, panic handling, and VM selection.
  • cannon/mipsevm/tests/evm_common64_test.go
    • Removed build tags for cannon64.
    • Updated TestEVM_SingleStep_Operators64 and TestEVM_SingleStep_Shift64 to use the new DiffTester framework.
    • Added TestEVM_SingleStep_Bitwise64 for 64-bit bitwise operations.
    • Added TestEVM_SingleStep_DCloDClz64 for 64-bit count leading ones/zeros operations.
  • cannon/mipsevm/tests/evm_common_test.go
    • Removed TestEVM_OpenMIPS, TestEVM_SingleStep_Bitwise32, TestEVM_SingleStep_LoadStore32, TestEVM_SingleStep_Branch32 tests.
    • Updated TestEVM_SingleStep_Jump, TestEVM_SingleStep_Operators, TestEVM_SingleStep_Lui, TestEVM_SingleStep_CloClz, TestEVM_SingleStep_MovzMovn, TestEVM_SingleStep_MfhiMflo, TestEVM_SingleStep_MulDiv, TestEVM_SingleStep_MthiMtlo, TestEVM_SingleStep_BeqBne, TestEVM_SingleStep_SlSr, TestEVM_MMap, TestEVM_SysWriteHint to use the new DiffTester framework.
    • Added TestEVM_SysGetRandom, TestEVM_SyscallEventFdProgram, TestEVM_RandomProgram, TestEVM_SingleStep_Sync tests.
  • cannon/mipsevm/tests/evm_multithreaded64_test.go
    • Removed build tags for cannon64.
    • Updated TestEVM_MT64_LL, TestEVM_MT64_SC, TestEVM_MT64_LLD, TestEVM_MT64_SCD, TestEVM_MT_SysRead_Preimage64 to use the new DiffTester framework.
    • Added TestEVM_MT_SysReadWrite_WithEventFd test.
    • Updated TestEVM_NoopSyscall64, TestEVM_UnsupportedSyscall64, TestEVM_UndefinedSyscall to use the new DiffTester framework.
  • cannon/mipsevm/tests/evm_multithreaded_test.go
    • Updated TestEVM_MT_LL, TestEVM_MT_SC, TestEVM_SysClone_FlagHandling, TestEVM_SysClone_Successful, TestEVM_SysGetTID, TestEVM_SysExit, TestEVM_PopExitedThread, TestEVM_SysFutex_WaitPrivate, TestEVM_SysFutex_WakePrivate, TestEVM_SysFutex_UnsupportedOp, TestEVM_SysYield, TestEVM_SysNanosleep, TestEVM_SysOpen, TestEVM_SysGetPID, TestEVM_SysClockGettimeMonotonic, TestEVM_SysClockGettimeRealtime, TestEVM_SysClockGettimeNonMonotonic, TestEVM_NoopSyscall32, TestEVM_UnsupportedSyscall32, TestEVM_EmptyThreadStacks, TestEVM_NormalTraversalStep_HandleWaitingThread, TestEVM_NormalTraversal_Full, TestEVM_WakeupTraversalStep, TestEVM_WakeupTraversal_WithExitedThreads, TestEVM_SchedQuantumThreshold to use the new DiffTester framework.
  • cannon/mipsevm/tests/fuzz_evm_common64_test.go
    • Removed build tags for cannon64.
    • Updated FuzzStateConsistencyMulOp, FuzzStateConsistencyMultOp, FuzzStateConsistencyMultuOp to FuzzMulOp, FuzzMultOp, FuzzMultuOp respectively, and refactored them to use the new DiffTester framework.
  • cannon/mipsevm/tests/fuzz_evm_common_test.go
    • Updated FuzzStateSyscallBrk, FuzzStateSyscallMmap, FuzzStateSyscallExitGroup, FuzzStateSyscallFcntl, FuzzStateHintRead, FuzzStatePreimageRead, FuzzStateHintWrite, FuzzStatePreimageWrite to use the new DiffTester framework.
  • cannon/mipsevm/tests/fuzz_evm_multithreaded_test.go
    • Updated FuzzStateSyscallCloneMT to use the new DiffTester framework.
  • cannon/mipsevm/tests/fuzz_evm_singlethreaded_test.go
    • Removed the fuzz_evm_singlethreaded_test.go file.
  • cannon/mipsevm/tests/helpers.go
    • Removed singleThreadedVmFactory and singleThreadElfVmFactory.
    • Updated multiThreadedVmFactory and multiThreadElfVmFactory to accept mipsevm.FeatureToggles.
    • Removed singleThreadedProofGenerator.
    • Updated GetMultiThreadedTestCase to accept version and goTarget parameters, and set Contracts with version.
    • Updated GetMipsVersionTestCases to iterate through versions.StateVersionTypes and create MultiThreadedTestCase for 64-bit MIPS.
  • cannon/mipsevm/versions/versions.go
    • Added new file defining VM state versions (StateVersion, StateVersionTypes, FeaturesForVersion, IsSupportedMultiThreaded64, GetStateVersionStrings).
  • cannon/testdata/example/alloc/main.go
    • Renamed to cannon/testdata/go-1-24/alloc/main.go.
  • cannon/testdata/example/claim/main.go
    • Renamed to cannon/testdata/go-1-24/claim/main.go.
  • cannon/testdata/example/entry/main.go
    • Renamed to cannon/testdata/go-1-24/entry/main.go.
  • cannon/testdata/example/hello/main.go
    • Renamed to cannon/testdata/go-1-24/hello/main.go.
Ignored Files
  • Ignored by pattern: .github/workflows/** (14)
    • .github/workflows/branches.yaml
    • .github/workflows/contracts-celo.yaml
    • .github/workflows/contracts-l1-tests.yaml
    • .github/workflows/contracts-op-stack.yaml
    • .github/workflows/docker-build-scan.yaml
    • .github/workflows/docker-images.yml
    • .github/workflows/docker-op-ufm-build-push.yaml
    • .github/workflows/docker-publish-release.yaml
    • .github/workflows/espresso-devnet-tests.yaml
    • .github/workflows/espresso-enclave.yaml
    • .github/workflows/espresso-integration.yaml
    • .github/workflows/pages.yml
    • .github/workflows/tags.yaml
    • .github/workflows/update-geth.yaml
Activity
  • The pull request description is a template and does not contain specific human activity details.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a massive refactoring of the CI/CD pipeline, moving from machine executors to Docker, simplifying job definitions by using Makefiles, and adding new workflows for acceptance tests, issue management, and metrics collection. It also includes significant updates to the MIPS VM implementation, particularly around memory management and multi-threading, and removes 32-bit support in many places. My review focuses on the CI configuration and some of the core VM changes. I've identified a potential bug in the Discord notification script within the CircleCI configuration and an issue in the memory copying logic. Overall, the changes seem to align with modernizing the CI and evolving the VM architecture.

Comment on lines +305 to 322
func (m *Memory) Copy() *Memory {
pages := make(map[Word]*CachedPage)
table := m.merkleIndex.New(pages)
out := &Memory{
merkleIndex: table,
pageTable: pages,
lastPageKeys: [2]Word{^Word(0), ^Word(0)}, // default to invalid keys, to not match any pages
lastPage: [2]*CachedPage{nil, nil},
}

p, ok := m.pageLookup(pageIndex)
if !ok {
p = m.AllocPage(pageIndex)
}
p.InvalidateFull()
copy(p.Data[pageAddr:], chunk[:n])
addr += Word(n)
for k, page := range m.pageTable {
data := make(Page, PageSize)
// *data = *page.Data
copy(data, page.Data)
out.AllocPage(k).Data = data
}
return out
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The Copy() function does not copy the MappedRegions field from the source Memory object to the new one. The GetWord method depends on MappedRegions to read from memory-mapped regions. Without copying this slice, the new Memory object will have a nil MappedRegions slice and might behave incorrectly if it's expected to be a full copy with the same memory layout.

Suggested change
func (m *Memory) Copy() *Memory {
pages := make(map[Word]*CachedPage)
table := m.merkleIndex.New(pages)
out := &Memory{
merkleIndex: table,
pageTable: pages,
lastPageKeys: [2]Word{^Word(0), ^Word(0)}, // default to invalid keys, to not match any pages
lastPage: [2]*CachedPage{nil, nil},
}
p, ok := m.pageLookup(pageIndex)
if !ok {
p = m.AllocPage(pageIndex)
}
p.InvalidateFull()
copy(p.Data[pageAddr:], chunk[:n])
addr += Word(n)
for k, page := range m.pageTable {
data := make(Page, PageSize)
// *data = *page.Data
copy(data, page.Data)
out.AllocPage(k).Data = data
}
return out
}
func (m *Memory) Copy() *Memory {
pages := make(map[Word]*CachedPage)
table := m.merkleIndex.New(pages)
out := &Memory{
merkleIndex: table,
pageTable: pages,
lastPageKeys: [2]Word{^Word(0), ^Word(0)}, // default to invalid keys, to not match any pages
lastPage: [2]*CachedPage{nil, nil},
MappedRegions: m.MappedRegions,
}
for k, page := range m.pageTable {
data := make(Page, PageSize)
// *data = *page.Data
copy(data, page.Data)
out.AllocPage(k).Data = data
}
return out
}

Comment thread .circleci/config.yml
Comment on lines +203 to +224
command: |
if [ "${CIRCLE_BRANCH}" == "develop" ]; then
# Format message for Discord with better structure and formatting
DISCORD_MESSAGE="🚨 **CI Failure Detected** 🚨\n"
DISCORD_MESSAGE="${DISCORD_MESSAGE}> **Repository:** \`${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}\`\n"
DISCORD_MESSAGE="${DISCORD_MESSAGE}> **Branch:** \`${CIRCLE_BRANCH}\`\n"
DISCORD_MESSAGE="${DISCORD_MESSAGE}> **Job:** \`${CIRCLE_JOB}\`\n"
DISCORD_MESSAGE="${DISCORD_MESSAGE}> **Build Link:** ${CIRCLE_BUILD_URL}"

# Add failure reason if provided
if [ ! -z "<< parameters.message >>" ]; then
DISCORD_MESSAGE="${DISCORD_MESSAGE}\n\n**Failure message:** << parameters.message >>"
fi

# Add mentions if provided
if [ ! -z "<< parameters.mentions >>" ]; then
DISCORD_MESSAGE="${DISCORD_MESSAGE}\n\n**Attention:** << parameters.mentions >>"
fi

# Post to Discord webhook
curl -X POST -H "Content-Type: application/json" \
-d "{\"content\": \"${DISCORD_MESSAGE}\"}" "${notify_ci}"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The way the DISCORD_MESSAGE is constructed and then used in the curl command will likely result in an invalid JSON payload. The \n sequences for newlines will be interpreted by the shell, but for the JSON payload sent with curl -d, they need to be escaped as \\n to be treated as literal newlines by Discord.

I suggest escaping the backslashes in your message strings to ensure the JSON payload is correctly formatted.

          command: |
            if [ "${CIRCLE_BRANCH}" == "develop" ]; then
              # Format message for Discord with better structure and formatting
              DISCORD_MESSAGE="🚨 **CI Failure Detected** 🚨\\n"
              DISCORD_MESSAGE="${DISCORD_MESSAGE}> **Repository:** `${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}`\\n"
              DISCORD_MESSAGE="${DISCORD_MESSAGE}> **Branch:** `${CIRCLE_BRANCH}`\\n"
              DISCORD_MESSAGE="${DISCORD_MESSAGE}> **Job:** `${CIRCLE_JOB}`\\n"
              DISCORD_MESSAGE="${DISCORD_MESSAGE}> **Build Link:** ${CIRCLE_BUILD_URL}"

              # Add failure reason if provided
              if [ ! -z "<< parameters.message >>" ]; then
                DISCORD_MESSAGE="${DISCORD_MESSAGE}\\n\\n**Failure message:** << parameters.message >>"
              fi

              # Add mentions if provided
              if [ ! -z "<< parameters.mentions >>" ]; then
                DISCORD_MESSAGE="${DISCORD_MESSAGE}\\n\\n**Attention:** << parameters.mentions >>"
              fi

              # Post to Discord webhook
              curl -X POST -H "Content-Type: application/json" \
                -d "{\"content\": \"${DISCORD_MESSAGE}\"}" "${notify_ci}"
            fi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.