Skip to content

Update batchAuthenticator according to audit report#309

Merged
dailinsubjam merged 2 commits intocelo-integration-rebase-14.1from
sishan/contract-audit-fix
Dec 18, 2025
Merged

Update batchAuthenticator according to audit report#309
dailinsubjam merged 2 commits intocelo-integration-rebase-14.1from
sishan/contract-audit-fix

Conversation

@dailinsubjam
Copy link
Copy Markdown

@dailinsubjam dailinsubjam commented Dec 18, 2025

Closes #<ISSUE_NUMBER>

This PR:

Updated batchAuthenticator according to audit report

  • Require signature.length == 65
  • event emission on authenticateBatchInfo and registerSigner

This PR does not:

Key places to review:


Copy link
Copy Markdown
Collaborator

@philippecamacho philippecamacho left a comment

Choose a reason for hiding this comment

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

LGTM

@dailinsubjam dailinsubjam merged commit c0b4efc into celo-integration-rebase-14.1 Dec 18, 2025
34 checks passed
@dailinsubjam dailinsubjam deleted the sishan/contract-audit-fix branch December 18, 2025 19:40
shenkeyao pushed a commit that referenced this pull request Jan 15, 2026
* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests
shenkeyao pushed a commit that referenced this pull request Feb 2, 2026
* Add script to update `celo-org/op-geth` dependencies

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* Add github action for update-geth script

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* Use inline geth base-ref

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* Discard automatic fields

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* token perms

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* Use read-only GCP SA

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* Better parameter  handling in update-geth action

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* Remove `update-celo-geth` cmd from justfile

---------

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>
Co-authored-by: alvarof2 <fernandez.f.alvaro@gmail.com>

github: improve update-geth.sh

* mark it as executable
* allow running on both MacOS and linux (GNU vs BSD tool differences)
* terminate on errors
* less strict go.mod matching to allow applying it directly to upstream

github: Fix update-geth.sh (#304)

The script was not substituting the go.mod file and the Dockerfile since the
regexes were not matching.

The regex for the Dockerfile contained '@sha256:' which perl was
interpreting as a global symbol, in order to interpret it literally we
needed to escape the '@'.

The regex for the go.mod file contained an extra space before the arrow
'go-ethereum .* => ', in a tidied go.mod file there is one space between
the package name and the arrow '=>'.

Also adds failure output so that it's easier to debug where this is
going wrong.

---------

Co-authored-by: Karl Bartel <karl@karl.berlin>
Co-authored-by: Paul Lange <palango@users.noreply.github.com>

github: The substitution was failing in the docker file since (#309)

The substitution \1 and the beginning of the image hash together created
\150 which perl interprets as the octal character code for h.

To prevent this we need to use the \${1} notation to reference captured
groups.

github: Change base-branch for update-geth workflow

github: Add `celo-org/op-geth` dependencies update script and gh-action (#263)

* Add script to update `celo-org/op-geth` dependencies

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* Add github action for update-geth script

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* Use inline geth base-ref

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* Discard automatic fields

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* token perms

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* Use read-only GCP SA

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* Better parameter  handling in update-geth action

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>

* Remove `update-celo-geth` cmd from justfile

---------

Signed-off-by: Maximilian Langenfeld <15726643+ezdac@users.noreply.github.com>
Co-authored-by: alvarof2 <fernandez.f.alvaro@gmail.com>

github: Update update geth approach (#319)

Removed the old script because it referenced ops-bedrock which has been
removed.

Added a copy of the op-geth provided update script, decided on a copy to
avoid conflicts.

Updated the update-geth workflow to reference the new script

github: Change update-geth base-branch to 'celo-rebase-13' (#382)

github: Change update-geth base-branch to 'celo-rebase-14'
shenkeyao pushed a commit that referenced this pull request Feb 2, 2026
* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests
shenkeyao pushed a commit that referenced this pull request Feb 10, 2026
* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests
shenkeyao pushed a commit that referenced this pull request Feb 12, 2026
* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests
QuentinI pushed a commit that referenced this pull request Feb 20, 2026
* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests
shenkeyao added a commit that referenced this pull request Mar 18, 2026
* Fix caff-node stalling (#213)

* Revert timing changes for beacon

* just command to run the devnet tests.

* Comment out running the devnet tests in CI.

---------

Co-authored-by: Philippe Camacho <philippe@espressosys.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Support timestamp env var (#218)

* IL3 Remove redundant "Walking back L1Block" and "will retry" logs (#221)

* Remove logs

* Restore driver log

* Remove retry log

* Restore a log

* Skip BatchFuture (#217)

* Fix length check (#216)

* IA1.6.1 Add batcher service running in TEE  (#205)

* a working script without args

* a working script without args

* everything works in the scripts despite the args

* fix socat proxy script

* working op-batcher inside docker-compose

* rename the script to build batcher enclave image

* cleanup and profile the op-batcher-non-tee

* use port number from env and shorten nc listener timeout as it will not be used in most cases

* fix dasel format

* remove uneeded ESPRESSO_RUN_ENCLAVE_TESTS

* fix scripts

* Add op-batcher-tee image in CI (#210)

* push op-batcher-tee image init

* fix tag and push

* test image creation without enclaver

* try to use env

* fix enclaver download

* use env in docker images yml

* restore other task

* remove unneeded steps

* special case to common case

* use default for op-batcher and tee for op-batcher-tee

* fix double ports mapping

* fix batcher restart test

* add a script to use enclave tool

* works to some extend

* also works for passing in arguments from cmd

* try to upload the image

* add my branch patter

* fix dockerfile

* a simplified version

* adding packages/contracts-bedrock/forge-artifacts to op-batcher-enclave-target

* PCR0 registered in op-batcher-tee docker compose and add monitor for enclave logs

* copy deployment/ to op-batcher-enclave-target

* fix docker-images

* Remove unneeded script

* remove unneeded script and cleanup readme

* fix overlapping ports and move long cmd of op-batcher-tee to script

* update readme

* Fix batcher restart test (#222)

* Fix batcher restart test

* Tune parameters to be more realistic (in particular, increasing
  parallelism to reduce bottleneck on slow L1)
* Improve logging

* Fix go lint

* Download binaries for appropriate architecture in Docker images (#223)

* Add key rotation tests (#224)

* Remove a Caff node comment (#225)

* Remove a comment

* Restore devnet test in CI

* Disable the CI again

* Bump github.com/ulikunitz/xz from 0.5.12 to 0.5.14 (#220)

Bumps [github.com/ulikunitz/xz](https://github.com/ulikunitz/xz) from 0.5.12 to 0.5.14.
- [Commits](ulikunitz/xz@v0.5.12...v0.5.14)

---
updated-dependencies:
- dependency-name: github.com/ulikunitz/xz
  dependency-version: 0.5.14
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Test a challenge game in the docker devnet (#228)

* Add test for devnet challenge game

* Fixes

* Make sure batcher key used by default in the devnet tests is the
  same one registered in the inbox contract
* Remove check in batcher that prevents it from sending transactions
  to Espresso immediately

* Ensures that the deployment files are deleted before building a new devnet. Update README_ESPRESSO.md to remind running docker as a non root user.

* Run devnet tests on CI again.

* Ensure deployment files are not written by the root user.

* Ignore rotate batcher key and change batch inbox owmer tests.

* Clean way of setting UID and GID.

* Ignore devnet tests for now so that we can merge.

* Add fallback values for UID and GID.

* Pinpoint forge version in CI as the linter is complaining.

* Add comment regarding the number of claims.

* Add comment to function TaggedWriter.Write.

---------

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

* Run smoke devnet test in CI (#231)

* Add smoke test for devnet.
* Run Game Challenge and smoke test in CI.
* Run all the devnet tests locally.

* push (#232)

* forget this commit (#233)

* Add a Buffered Streamer around Espresso Streamer for batcher (#230)

* Add a Buffered Streamer around Espresso Streamer for batcher

Because the `EspressoStreamer` is getting `Reset` during the Batcher process when
building a batch to submit to the `L1`, it hinders progress of the chain in a reasonable
amount of time, which ultimately causes it to stop creating non-empty blocks.

There are a number of factors that are contributing to this issue, but ultimately the
`Reset` is causing the `EspressoStreamer` to restart from `0` and it takes too long
before it catches back up to the next expected batch.

To remedy this, a Buffer can be used to mitigate this `Reset` and revert to a point
that is much closer to the desired next batch.

In testing it has been observed that the `SafeL2` can sometimes move backwards.  To
safe guard against this, it is better to `Reset` to the `FinalizedL2` position instead of
the `SafeL2` as this behavior has not been observed there.

* Rename EspressoStreamer and EspressoStreamerIFace

Based on feedback provided by @QuentinI in PR review:
#230 (comment)

The name `EspressoStreamerIFace` is quite a long name, and the `IFace` suffix isn't
necessary since one could tell it's an `interface` by inspection, or using an `LSP`. The
feedback provided by @QuentinI suggested to rename `EspressoStreamerIFace` to
just `EspressoStreamer` so that it falls in line with our other code approaches.

This change renames `EspressoStreamer` to `BatchStreamer`

This change renames `EspressoStreamerIFace` to `EspressoStreamer`.

* Remove `RemainingBatchesLen` method

Based on feedback received from @QuentinI: #230 (comment)

The only reason `RemainingBatchesLen` exists is to serve as a check, and issue a
warning when things are running.  Even though this matches the existing behavior this
log seems to overlap with the logs corresponding to Undecided Batches which already
log warnings or errors.  As a result this method, and the log that utilizes it, seem to
be unnecessary and should be removed to eliminate noise.

This change removes `RemainingBatchesLen` and the uses of it

* Add `RefreshSafeL1Origin` to `EspressoStreamer` interface

Based on feedback provided by @QuentinI: #230 (comment)

Since the `RefreshSafeL1Origin` method can potentially be utilized in some places that
do not require a full `Refresh`, and for convenience, it makes sense to allow it to be a
separately exposed method distinct from `Refresh`.

This change adds `RefreshSafeL1Origin` as a required method in the
`EspressoStreamer` interface.

* Fix missed renamed references

* Rename enclave smoke test

* Fix refreshSafeL1Origin logic for Buffered Streamer

The buffered streamer is resetting its read position far more than it needs to, ultimately
reproducing the same issue that was already occurring with the unbuffered version.

In inspecting the behavior with a debugger, it seems we're resetting the reset position
unnecessarily when we receive the same safeL1Origin again.  Additionally, the logic
for determining the read position when the safeL1Origin advances also seems flawed,
in that it is very likely to reset too far in the past.  We really want to keep our relative
read position unless we're explicitly told to Reset.

This change addresses these issues in order to try and smooth out the batches being
returned, and avoid unnecessary reprocessing of previous batches.

* Add Unit Tests for BufferedEspressoStreamer

Fix BufferedEspressoStreamer behavior

While adding unit tests for the BufferedEspressoStreamer it was noticed that the
position of the L2 and the L1 for the Buffer were being mixed together at times.  This
would ultimately lead to very difficult to detect bugs based on observed behavior
alone.

With the addition of the unit tests identifying the issue, the buffer adjustment
behavior has been adjusted to apply to the L2 position in isolation away from the
L1 positions.  The L1 positions will cause a larger Reset in the underlying logic.

* Rename tests (#236)

* Remove unneeded service http proxy for docker compose (#238)

* Fix `TestSmoke` failing on CI/CD (#237)

The sigp/lighthouse docker image was upgraded from version `v7.1.0` to
`v8.0.0-rc.0` on `2025-09-29`.  Since the image isn't anchored to a version, this
update gets pulled in, and it seems to have breaking changes with our previous
setup.

This change sets the version of the docker image used specifically to `v7.1.0` so
that the previous behavior we're used to is seen.

Additionally, when `TestSmoke` is running, it initially **MUST** download the images
for the docker containers that wer not built in the `Build Devnet` job.  This delays
the launch and running of the DevNet by quite a bit.

Fix this delay by adding a `docker compose pull` setp to `Build Devnet`

* Fix CI after rebasing celo-14 (#243)

* fix fast tests

* fix go version in dockerfile and ce in streamer_test.go

* update prepare-allocs.sh

* fix prepare-allocs.sh

* try to fix l1-geth docker

* fix op-stack dockerfile

* fix op-stack dockerfile

* try to fix l1-geth dockerfile

* fix config read

* try to fix l1-geth dockerfile

* try to fix challenger gamer

* TN5 withdrawal devnet test (#226)

* Add smoke test for devnet.
* Add test to ensure L2 funds can be withdrawn to L1.

---------

Co-authored-by: Theodore Schnepper <tschnepper@espressosys.com>

* Rename DevNet to E2eDevnet (#239)

* Rename DevNet to E2eDevnet

* Remove duplicate name

* Fix low gasLimit in L1 genesis (#241)

* update (#244)

* Streaming streamer (#235)

* Fix pcr0 extraction in docker compose script and correctly shutdown op-proposer-tee (#246)

* fix pcr0 extraction

* stopping op-proposer-tee in script

* revert to old pcr0 extraction as the new pattern breaks the old pattern

* try to fix pcr0 extraction

* upload op-proposer-tee

* Update metrics (#242)

* Update log level (#247)

* Decouple Espresso L1 & OP L1 (#248)

* Add back forgotten config when rebase celo-sync-14

* Fix prepare-allocs after rebasing celo-sync-14 (#250)

* remove doulbe init()

* try to fix prepare-allocs.sh

* enable more workflow

* Skip TestChallengerGame and TestWithdrawal (#251)

* Trigger docker-images workflow

* uncomment dasel put

* skip TestChallengeGame

* skip TestWithdrawal

* mise: Define fake install sources for disabled tools (ethereum-optimism#18109) (#254)

Co-authored-by: Adrian Sutton <adrian@oplabs.co>
(cherry picked from commit de37992)

* Change the logging level for the safe L2 number (#252)

* Update log level

* Reduce logging level

(cherry picked from commit dd97e4c)

* Respect espresso.fetch-api flag (#253)

(cherry picked from commit 6d00dcb)

* Readd devnet tests to CI. (#257)

* Readd devnet tests to CI.
*Fix for batcher restart test in CI.

(cherry picked from commit f37ea91)

* Add a log debouncer to op-service.log package (#259)

(cherry picked from commit 788d28f)

* Add netcat-openbsd to Dockerfile (#262)

* Update log level

* Add duplicate command from Terraform

(cherry picked from commit b775430)

* Add a devnet cleanup script (#261)

* Update log level

* Add cleanup script

* Remove unnecessary commands

(cherry picked from commit dc40b6c)

* Enable circleCI after rebase14 (#265)

* Fix .circleci/config.yaml and lint and most of circleCI tests after rebasing celo-sync-14
* Skip tests (in TEST_PKGS) that need auth or celo-specific rpc specified

---------

Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>

* Add origin height to Espresso streamer (#255)

* Clean up more loggings (#266)

* Reduce logs

* Remove one more log

* Skip attestation verification (#263)

* Update espresso-tee-contracts submodule to sishan/skip-attestation-verification

* Skip attestation verification to reduce gas costs

* Reduce L1 gas limit from 45M to 16M

* Update snapshots for registerSignerWithoutAttestationVerification

* Ignore lib/automate submodule directory

* fix CI

* Update espresso-tee-contracts submodule

Remove onlyOwner modifier from registerSignerWithoutAttestationVerification

* keep large gasLimit

* circleci: Enable workflow on all branches via API trigger

Allow CircleCI main workflow to run on any branch when triggered via API,
not just webhook triggers. This enables go-lint and go-tests to run on
feature branches.

* Regenerate semver-lock.json after rebase

The initCodeHash for BatchAuthenticator needed to be regenerated
after rebasing onto celo-integration-rebase-14.1.

---------

Co-authored-by: EC2 Default User <ec2-user@ip-172-31-47-181.us-east-2.compute.internal>

* Fix test TestChangeBatchInboxOwner (#264)

* Fix the test TestChangeBatchInboxOwner.
* Ensure the owner of the Batch Authenticator contract is initialized.

* Update README and relevant scripts (#269)

* Remove unused metrics (#273)

* Rename (#275)

* Improve image versioning and repo consistency (#276)

* Add githooks and env

* update path

* test hooks

* change wording

* include docker compose

* Create enclave ami for enclave test (#277)

* create enclave ami

* use new ami and restore the ci workflow and update enclave prepare ami script

* new AMI

* update readme

* Add devnet smoke test with TEE (#268)

* Add devnet smoke test with TEE

* Remove unnecessary extra timeout

* Add consts, remove incorrect setting

* Use consts

* Add missed file

* Blockscout running inside the local devnet (#281)

* Extend the local devnet with blockscout.

* Pinpoint versions of blockscout images.

* Blockscout fetching blocks from caff node.

* Build deployer image in CI

* Upate CI utils

* Saner 'confirmed' logging

* Don't error out on light client issues

* fix the name of deployer factory address

* Add a workaround for query service lag in real-world networks

* Generate more metadata

* More faithful compiler output in verifier

* Don't fall below hotshot origin height

* Remove cache buster to speed up docker image builds

* Adjust channel duration in devnet

* Jump ahead when origin is too low

* Add log line to matching Espresso txn to L2 block

* Fix semver lock

* Fix snapshot lock

* Support environment variables for channel parameters

* Enable EigenDaProxy & MEMSTORE (#274)

* Enable EigenDaProxy & MEMSTORE

* longer eigenda-proxy start period

* enable eigenda at the op-node level

* Don't copy artifacts to batcher image (#290)

* Refactor: replace MultiNode majority rule with SingleNode client and skip deprecated test.

* refactor: remove majority rule and switch to single Espresso client

* Skip deprecated TestEnforceMajorityRule (deprecated under SingleNode)

* Fallback Inbox contract changes (#278)

* Implement changes in the Batch Inbox / Batch Authenticator contracts to support a TEE and non TEE batcher.
* Add some unit tests for the Batch Authenticator and Batch Inbox contracts.
* Remove the failing Circle CI tests

* OP succint support (#287)

Deploy OP Succint contracts on L1.
Spins up op-succinct-challenger and op-succint-proposer services.
Adjust the devnet test `TestChallengeGame`.
Deletes the Demo we made to Celo Labs as we can now spin up a devnet with Blockscout.

* Update error handling (#289)

* Update error handling

* Fix typo

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

---------

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

* Document configuration of all services (#291)

* Add readme for config
* Insert image, add more description

* Support Sepolia Devnet with TEE (#288)

* update enclave-entrypoint.bash to correctly deal with external url

* preserve host name for external url

* Skip IsURLAvailable TCP check when using HTTP proxy

* skip VerifyCertTransaction for now

* reuse socat so that it can work for internal url

* comment and skip TestE2eDevnetWithInvalidAttestation

* OP Succinct: Making changes to the derivation pipeline (#293)

* Document how to make changes to the kona repository and propagate them.
* Reference new docker images for the op-succinct proposer and challenger.

* Fix op-succinct dependencies diagram. (#297)

* Simplify checks in the derivation pipeline (#296)

* Remove the superfluous check about the batcher address as now the Batch Inbox contract verifies the sender is legitimate.

* Removed nonexist logs (#298)

* Add support for ZK attestation service (#294)

* Add support for ZK attestation service

* check attestation service url is not nil

* upgrade espresso tee verifier contracts

* fix contracts

* fix merge

* fix tests

* bring back deploy aws nitro

* add support for mock contract

* add support for attestation verifier service

* fix tee tests

* use higher version of github runner

* fix tee args

* fix tee args

* add healthcheck to attestation verifier zk

* increase timeout

* Invalid attestation test passing

* small fixes

* fix TestE2eDevnetWithUnattestedBatcherKey

* fix health check

* fix devnet test

* use 127.0.0.1

* fix regex

* debug

* fix proof generation

* debug

* fix url

* fix url

* remove debug logs

* resolve based on comments

* address comments

* update github runner enclave

* fix based on suggestions

* cleanup logs

* Enable AltDA Espresso E2E using EigenDA Docker proxy (#295)

* Integrate EigenDA via Docker proxy for AltDA Espresso E2E tests

* Scope EigenDA lifecycle to the test and ensure clean startup/teardown

* Extract EigenDA Docker port and image into constants

* Downgrade Dasel (#303)

* Make attestation service url optional

* fix dasel

* fix dasel

* update dockerfiles

* make attestation service required again

* Make the withdraw devnet test pass again (#301)

* Withdraw test passing again on devnet.

* Faster CI

* Deposit into L1 before requesting the withdrawal on L2.

* Add migration related things to readme (#302)


---------

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

* Reducing logging when outputting the batch  (#304)

* update logging for the batch

* clean up

* Document code sync procedure (#308)

* Add code sync procedure

* Update links

* Fix format

* Rename files

* Update batchAuthenticator according to audit report (#309)

* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests

* Port ForcedTxs test into devnet test suite (#306)

* Simplify the test as we cannot in practice reduce the window size.

---------

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

* Reorder checks of isValidBatchTx in derivation pipeline (#310)

* remove warning on every failed tx

* reorder the checks

* Add fallback mechanism test (#305)

* 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>

* Philippe/fix withdraw flakiness (#312)

* Address flakiness.

* Simplify the code

* Fix CI

---------

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

* Use unified run-enclave.sh script for op-batcher-tee (#299)

* update single run-enclave.sh

* remove BATCHER_PRIVATE_KEY

* update run-enclave.sh

* Test fallback mechanism on devnet (#313)

* Recovery from fallback batcher (#315)

* Fallback recovery

* Add caff node

* Suggestions

* Make ZK Verifier Optional for E2E Testing (#321)

* 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.

* Tee support for EigenDA (#319)

* 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 Batcher Fallback: Channel Not Closed Test (#314)

* 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>

* Move diagram files (#326)

* Update Succinct image versions, update diagram (#329)

* Inactive Batcher Shouldn't Post (#316)

* 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>

* Removes PreRegisteredBatcher code (#327)

* Remove pre authenticated batcher

* fix test

* Update Succinct images

* Streamer namespace range 14.2 (#334)

* 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

* Enable and test Transparent proxy upgradability and batcher address update (#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

* Description for TestBatcherSwitching (#335)

* 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>

* Add cmd to shutdown all docker containers with TEE (#332)

* cmd to shutdown all services

* Small change to trigger CI

---------

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

* Guardians rebased (#345)

Co-authored-by: OpenCode <noreply@opencode.ai>

* Audit Document (#339)


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

* Security Analysis (#342)


---------

Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Fix and improve steps in the code sync doc (#344)

* Update doc

* Update kona default branch and fix links

* Fix typo

* Typos

---------

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

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Update moved crate

* Fix the build after rebase (#352)

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Remove duplicate import

* Fix go module flakiness

* Fix refactored types and functions

* Set light client

* Add timeouts for devnet tests

* Investigate test failure

* Fix integration tests 0

* Fix fallback batcher test

* Fix duplicate devnet running issue

* Specify artifact names

* Fix fmt

* Fix challenge game test

* Try fix batcher restart test

* Fix fallback test

* Fix test build

* Remove duplicate builds

* Fix parsing

* Fix duplicate l1-geth-image

* Increase timeout

* Fix fallback

* Fix batcher restart test

* Fix devnet tests 3 and 4

* Fix contracts

* Fix fmt

* More devnet tests

* More contract tests

* Update version for contract tests

* Fix fmt

* Fix foundry

* Fix CI for devnet tests

* Ignore warning

* Fix remaining contract tests

* Fix script

* Fix EOA path

* Fix devnet test command

* more yaml fix

* Fix docker compose spinup

* Remove blockscout

* Move blockscount to monitoring profile

* Free space

* More docker fix

* Fix more

* Fix more

* Add investigation log

* Fix beacon

* Fix timeout

* Fix docker compose dir

* Fix path

* More sequencer fixes

* Fix sequencer

* More CI fix

* Revert devnet test fixes

* Restore more devnet files

* Add back image fix

* Restore streamer

* Restore a devnet fix

* Restore ec2 test fix

* Restore l1 geth fix

* Fix throttle

* Restrict throttle fix scope

* Remove isActiveBatcher

* Remove unnecessary changes

* Restore fallback path fix

* Restore fmt fixes

* Ignore cache error

* Revert foundry version and fmt fixes

* remove fmt check

* fix: mise install (#366)

* Add back necessary contract files

* Fix contract workflow

* Address comments for espresso/docker

* Update espresso/scripts/run-tests-github-actions.sh

Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>

* Remove use of output file

* Remove path from contract names

* Restore more files

* Restore more files

* Revert IproxyAdmin changes

* Remove unneeded IProxyAdmin uses

* Remove more files

* Add back toml

* Add lock

* Replace build

* Fix build timeout

* Fix duplicate build

* Fix more

* Match Celo's changes

* Restore contract files

* Update batcher fallback test

* Improvement the comment

* Remove dead code

* More conflict fixes

* Fix test 11

* Address gemini comments

* Fix test 8

* Restore gotestsum

* Undo unnecessary changes

* Remove helper functions

* Add a missing file

* Improve sha256 installation

* Fix Dockerfile build

* Restore artifactsfs

* Fix Go version

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>
Co-authored-by: Philippe Camacho <philippe@espressosys.com>
Co-authored-by: Sishan Long <dlsubjam@gmail.com>
Co-authored-by: Jeb Bearer <jeb.bearer@gmail.com>
Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Theodore Schnepper <tschnepper@espressosys.com>
Co-authored-by: Adrian Sutton <adrian@oplabs.co>
Co-authored-by: EC2 Default User <ec2-user@ip-172-31-47-181.us-east-2.compute.internal>
Co-authored-by: Sneh Koul <snehkoul1999@gmail.com>
Co-authored-by: Jean Gal <45081726+jjeangal@users.noreply.github.com>
Co-authored-by: miguelCyclone <miguelhongo90@gmail.com>
Co-authored-by: Sneh Koul <35871990+Sneh1999@users.noreply.github.com>
Co-authored-by: OpenCode <noreply@opencode.ai>
Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
shenkeyao added a commit that referenced this pull request Mar 19, 2026
* Build deployer image in CI

* Upate CI utils

* Saner 'confirmed' logging

* Don't error out on light client issues

* fix the name of deployer factory address

* Add a workaround for query service lag in real-world networks

* Generate more metadata

* More faithful compiler output in verifier

* Don't fall below hotshot origin height

* Remove cache buster to speed up docker image builds

* Adjust channel duration in devnet

* Jump ahead when origin is too low

* Add log line to matching Espresso txn to L2 block

* Fix semver lock

* Fix snapshot lock

* Support environment variables for channel parameters

* Enable EigenDaProxy & MEMSTORE (#274)

* Enable EigenDaProxy & MEMSTORE

* longer eigenda-proxy start period

* enable eigenda at the op-node level

* Don't copy artifacts to batcher image (#290)

* Refactor: replace MultiNode majority rule with SingleNode client and skip deprecated test.

* refactor: remove majority rule and switch to single Espresso client

* Skip deprecated TestEnforceMajorityRule (deprecated under SingleNode)

* Fallback Inbox contract changes (#278)

* Implement changes in the Batch Inbox / Batch Authenticator contracts to support a TEE and non TEE batcher.
* Add some unit tests for the Batch Authenticator and Batch Inbox contracts.
* Remove the failing Circle CI tests

* OP succint support (#287)

Deploy OP Succint contracts on L1.
Spins up op-succinct-challenger and op-succint-proposer services.
Adjust the devnet test `TestChallengeGame`.
Deletes the Demo we made to Celo Labs as we can now spin up a devnet with Blockscout.

* Update error handling (#289)

* Update error handling

* Fix typo

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

---------

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

* Document configuration of all services (#291)

* Add readme for config
* Insert image, add more description

* Support Sepolia Devnet with TEE (#288)

* update enclave-entrypoint.bash to correctly deal with external url

* preserve host name for external url

* Skip IsURLAvailable TCP check when using HTTP proxy

* skip VerifyCertTransaction for now

* reuse socat so that it can work for internal url

* comment and skip TestE2eDevnetWithInvalidAttestation

* OP Succinct: Making changes to the derivation pipeline (#293)

* Document how to make changes to the kona repository and propagate them.
* Reference new docker images for the op-succinct proposer and challenger.

* Fix op-succinct dependencies diagram. (#297)

* Simplify checks in the derivation pipeline (#296)

* Remove the superfluous check about the batcher address as now the Batch Inbox contract verifies the sender is legitimate.

* Removed nonexist logs (#298)

* Add support for ZK attestation service (#294)

* Add support for ZK attestation service

* check attestation service url is not nil

* upgrade espresso tee verifier contracts

* fix contracts

* fix merge

* fix tests

* bring back deploy aws nitro

* add support for mock contract

* add support for attestation verifier service

* fix tee tests

* use higher version of github runner

* fix tee args

* fix tee args

* add healthcheck to attestation verifier zk

* increase timeout

* Invalid attestation test passing

* small fixes

* fix TestE2eDevnetWithUnattestedBatcherKey

* fix health check

* fix devnet test

* use 127.0.0.1

* fix regex

* debug

* fix proof generation

* debug

* fix url

* fix url

* remove debug logs

* resolve based on comments

* address comments

* update github runner enclave

* fix based on suggestions

* cleanup logs

* Enable AltDA Espresso E2E using EigenDA Docker proxy (#295)

* Integrate EigenDA via Docker proxy for AltDA Espresso E2E tests

* Scope EigenDA lifecycle to the test and ensure clean startup/teardown

* Extract EigenDA Docker port and image into constants

* Downgrade Dasel (#303)

* Make attestation service url optional

* fix dasel

* fix dasel

* update dockerfiles

* make attestation service required again

* Make the withdraw devnet test pass again (#301)

* Withdraw test passing again on devnet.

* Faster CI

* Deposit into L1 before requesting the withdrawal on L2.

* Add migration related things to readme (#302)


---------

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

* Reducing logging when outputting the batch  (#304)

* update logging for the batch

* clean up

* Document code sync procedure (#308)

* Add code sync procedure

* Update links

* Fix format

* Rename files

* Update batchAuthenticator according to audit report (#309)

* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests

* Port ForcedTxs test into devnet test suite (#306)

* Simplify the test as we cannot in practice reduce the window size.

---------

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

* Reorder checks of isValidBatchTx in derivation pipeline (#310)

* remove warning on every failed tx

* reorder the checks

* Add fallback mechanism test (#305)

* 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>

* Philippe/fix withdraw flakiness (#312)

* Address flakiness.

* Simplify the code

* Fix CI

---------

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

* Use unified run-enclave.sh script for op-batcher-tee (#299)

* update single run-enclave.sh

* remove BATCHER_PRIVATE_KEY

* update run-enclave.sh

* Test fallback mechanism on devnet (#313)

* Recovery from fallback batcher (#315)

* Fallback recovery

* Add caff node

* Suggestions

* Make ZK Verifier Optional for E2E Testing (#321)

* 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.

* Tee support for EigenDA (#319)

* 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 Batcher Fallback: Channel Not Closed Test (#314)

* 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>

* Move diagram files (#326)

* Update Succinct image versions, update diagram (#329)

* Inactive Batcher Shouldn't Post (#316)

* 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>

* Removes PreRegisteredBatcher code (#327)

* Remove pre authenticated batcher

* fix test

* Update Succinct images

* Streamer namespace range 14.2 (#334)

* 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

* Enable and test Transparent proxy upgradability and batcher address update (#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

* Description for TestBatcherSwitching (#335)

* 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>

* Add cmd to shutdown all docker containers with TEE (#332)

* cmd to shutdown all services

* Small change to trigger CI

---------

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

* Guardians rebased (#345)

Co-authored-by: OpenCode <noreply@opencode.ai>

* Audit Document (#339)


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

* Security Analysis (#342)


---------

Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Fix and improve steps in the code sync doc (#344)

* Update doc

* Update kona default branch and fix links

* Fix typo

* Typos

---------

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

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Update moved crate

* Fix the build after rebase (#352)

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Remove duplicate import

* Fix go module flakiness

* Fix refactored types and functions

* Set light client

* Add timeouts for devnet tests

* Investigate test failure

* Fix integration tests 0

* Fix fallback batcher test

* Fix duplicate devnet running issue

* Specify artifact names

* Fix fmt

* Fix challenge game test

* Try fix batcher restart test

* Fix fallback test

* Fix test build

* Remove duplicate builds

* Fix parsing

* Fix duplicate l1-geth-image

* Increase timeout

* Fix fallback

* Fix batcher restart test

* Fix devnet tests 3 and 4

* Fix contracts

* Fix fmt

* More devnet tests

* More contract tests

* Update version for contract tests

* Fix fmt

* Fix foundry

* Fix CI for devnet tests

* Ignore warning

* Fix remaining contract tests

* Fix script

* Fix EOA path

* Fix devnet test command

* more yaml fix

* Fix docker compose spinup

* Remove blockscout

* Move blockscount to monitoring profile

* Free space

* More docker fix

* Fix more

* Fix more

* Add investigation log

* Fix beacon

* Fix timeout

* Fix docker compose dir

* Fix path

* More sequencer fixes

* Fix sequencer

* More CI fix

* Revert devnet test fixes

* Restore more devnet files

* Add back image fix

* Restore streamer

* Restore a devnet fix

* Restore ec2 test fix

* Restore l1 geth fix

* Fix throttle

* Restrict throttle fix scope

* Remove isActiveBatcher

* Remove unnecessary changes

* Restore fallback path fix

* Restore fmt fixes

* Ignore cache error

* Revert foundry version and fmt fixes

* remove fmt check

* fix: mise install (#366)

* Add back necessary contract files

* Fix contract workflow

* Address comments for espresso/docker

* Update espresso/scripts/run-tests-github-actions.sh

Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>

* Remove use of output file

* Remove path from contract names

* Restore more files

* Restore more files

* Revert IproxyAdmin changes

* Remove unneeded IProxyAdmin uses

* Remove more files

* Add back toml

* Add lock

* Replace build

* Fix build timeout

* Fix duplicate build

* Fix more

* Match Celo's changes

* Restore contract files

* Update batcher fallback test

* Improvement the comment

* Remove dead code

* More conflict fixes

* Fix test 11

* Address gemini comments

* Fix test 8

* Replace with rebase-16 contractd

* Merge in 14.2 changes

* Fix comma

* Temp remove fmt check

* Restore dropped 14.2 changes

* Fix build

* Temp allow unused parameter

* FIx duplicate artifact

* Remove duplicated opcm imports, undo profile change

* Temp: simplify with unchecked_cheatcode_artifacts

* Remove unchecked_cheatcode_artifacts

* Temp: update Setup and add unchecked_cheatcode_artifacts

* Update CI

* Restore CI and update Setup

* Add ligher build

* Update CI

* Move test build

* Fix CI again

* Use lite build

* Fix command in CI

* Add CI phases

* Remove espresso foundry setting, simplify fixes

* Restore fixes that worked

* Restore fixes that worked 2

* More tests

* Save CI changes

* Restore gotestsum

* Save fixes

* Undo unnecessary changes

* Remove helper functions

* Add a missing file

* Update forge version and other fixes

* Restore CI change

* Clean up foundry

* Clean up justifle and check-semver-diff

* Restore ignored errors

* Reduce timeout

* Restore unnecessary comment change

* Restore Proxy and solady

* Revert Proxy change

* Restore setup files

* Update a comment

* Restore batch inbox file

* Typo

* Clean up Espresso files

* Restore a fix

* Restore fixes to ec2 and integration tests

* Improve sha256 installation

* Fix Dockerfile build

* Restore artifactsfs

* Fix Go version

* Pin foundry version in nix flake

* Restore fmt check

* Remove newline

* Improve error handling

---------

Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>
Co-authored-by: Sneh Koul <snehkoul1999@gmail.com>
Co-authored-by: Jean Gal <45081726+jjeangal@users.noreply.github.com>
Co-authored-by: miguelCyclone <miguelhongo90@gmail.com>
Co-authored-by: Phil <philippe@espressosys.com>
Co-authored-by: Sishan Long <dlsubjam@gmail.com>
Co-authored-by: Sneh Koul <35871990+Sneh1999@users.noreply.github.com>
Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>
Co-authored-by: OpenCode <noreply@opencode.ai>
Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
shenkeyao added a commit that referenced this pull request Mar 19, 2026
* Remove cache buster to speed up docker image builds

* Adjust channel duration in devnet

* Jump ahead when origin is too low

* Add log line to matching Espresso txn to L2 block

* Fix semver lock

* Fix snapshot lock

* Support environment variables for channel parameters

* Enable EigenDaProxy & MEMSTORE (#274)

* Enable EigenDaProxy & MEMSTORE

* longer eigenda-proxy start period

* enable eigenda at the op-node level

* Don't copy artifacts to batcher image (#290)

* Refactor: replace MultiNode majority rule with SingleNode client and skip deprecated test.

* refactor: remove majority rule and switch to single Espresso client

* Skip deprecated TestEnforceMajorityRule (deprecated under SingleNode)

* Fallback Inbox contract changes (#278)

* Implement changes in the Batch Inbox / Batch Authenticator contracts to support a TEE and non TEE batcher.
* Add some unit tests for the Batch Authenticator and Batch Inbox contracts.
* Remove the failing Circle CI tests

* OP succint support (#287)

Deploy OP Succint contracts on L1.
Spins up op-succinct-challenger and op-succint-proposer services.
Adjust the devnet test `TestChallengeGame`.
Deletes the Demo we made to Celo Labs as we can now spin up a devnet with Blockscout.

* Update error handling (#289)

* Update error handling

* Fix typo

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

---------

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

* Document configuration of all services (#291)

* Add readme for config
* Insert image, add more description

* Support Sepolia Devnet with TEE (#288)

* update enclave-entrypoint.bash to correctly deal with external url

* preserve host name for external url

* Skip IsURLAvailable TCP check when using HTTP proxy

* skip VerifyCertTransaction for now

* reuse socat so that it can work for internal url

* comment and skip TestE2eDevnetWithInvalidAttestation

* OP Succinct: Making changes to the derivation pipeline (#293)

* Document how to make changes to the kona repository and propagate them.
* Reference new docker images for the op-succinct proposer and challenger.

* Fix op-succinct dependencies diagram. (#297)

* Simplify checks in the derivation pipeline (#296)

* Remove the superfluous check about the batcher address as now the Batch Inbox contract verifies the sender is legitimate.

* Removed nonexist logs (#298)

* Add support for ZK attestation service (#294)

* Add support for ZK attestation service

* check attestation service url is not nil

* upgrade espresso tee verifier contracts

* fix contracts

* fix merge

* fix tests

* bring back deploy aws nitro

* add support for mock contract

* add support for attestation verifier service

* fix tee tests

* use higher version of github runner

* fix tee args

* fix tee args

* add healthcheck to attestation verifier zk

* increase timeout

* Invalid attestation test passing

* small fixes

* fix TestE2eDevnetWithUnattestedBatcherKey

* fix health check

* fix devnet test

* use 127.0.0.1

* fix regex

* debug

* fix proof generation

* debug

* fix url

* fix url

* remove debug logs

* resolve based on comments

* address comments

* update github runner enclave

* fix based on suggestions

* cleanup logs

* Enable AltDA Espresso E2E using EigenDA Docker proxy (#295)

* Integrate EigenDA via Docker proxy for AltDA Espresso E2E tests

* Scope EigenDA lifecycle to the test and ensure clean startup/teardown

* Extract EigenDA Docker port and image into constants

* Downgrade Dasel (#303)

* Make attestation service url optional

* fix dasel

* fix dasel

* update dockerfiles

* make attestation service required again

* Make the withdraw devnet test pass again (#301)

* Withdraw test passing again on devnet.

* Faster CI

* Deposit into L1 before requesting the withdrawal on L2.

* Add migration related things to readme (#302)


---------

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

* Reducing logging when outputting the batch  (#304)

* update logging for the batch

* clean up

* Document code sync procedure (#308)

* Add code sync procedure

* Update links

* Fix format

* Rename files

* Update batchAuthenticator according to audit report (#309)

* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests

* Port ForcedTxs test into devnet test suite (#306)

* Simplify the test as we cannot in practice reduce the window size.

---------

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

* Reorder checks of isValidBatchTx in derivation pipeline (#310)

* remove warning on every failed tx

* reorder the checks

* Add fallback mechanism test (#305)

* 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>

* Philippe/fix withdraw flakiness (#312)

* Address flakiness.

* Simplify the code

* Fix CI

---------

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

* Use unified run-enclave.sh script for op-batcher-tee (#299)

* update single run-enclave.sh

* remove BATCHER_PRIVATE_KEY

* update run-enclave.sh

* Test fallback mechanism on devnet (#313)

* Recovery from fallback batcher (#315)

* Fallback recovery

* Add caff node

* Suggestions

* Make ZK Verifier Optional for E2E Testing (#321)

* 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.

* Tee support for EigenDA (#319)

* 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 Batcher Fallback: Channel Not Closed Test (#314)

* 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>

* Move diagram files (#326)

* Update Succinct image versions, update diagram (#329)

* Inactive Batcher Shouldn't Post (#316)

* 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>

* Removes PreRegisteredBatcher code (#327)

* Remove pre authenticated batcher

* fix test

* Update Succinct images

* Streamer namespace range 14.2 (#334)

* 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

* Enable and test Transparent proxy upgradability and batcher address update (#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

* Description for TestBatcherSwitching (#335)

* 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>

* Add cmd to shutdown all docker containers with TEE (#332)

* cmd to shutdown all services

* Small change to trigger CI

---------

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

* Guardians rebased (#345)

Co-authored-by: OpenCode <noreply@opencode.ai>

* Audit Document (#339)


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

* Security Analysis (#342)


---------

Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Fix and improve steps in the code sync doc (#344)

* Update doc

* Update kona default branch and fix links

* Fix typo

* Typos

---------

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

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Update moved crate

* Fix the build after rebase (#352)

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Remove duplicate import

* Fix go module flakiness

* Fix refactored types and functions

* Set light client

* Add timeouts for devnet tests

* Investigate test failure

* Fix integration tests 0

* Fix fallback batcher test

* Fix duplicate devnet running issue

* Specify artifact names

* Fix fmt

* Fix challenge game test

* Try fix batcher restart test

* Fix fallback test

* Fix test build

* Remove duplicate builds

* Fix parsing

* Fix duplicate l1-geth-image

* Increase timeout

* Fix fallback

* Fix batcher restart test

* Fix devnet tests 3 and 4

* Fix contracts

* Fix fmt

* More devnet tests

* More contract tests

* Update version for contract tests

* Fix fmt

* Fix foundry

* Fix CI for devnet tests

* Ignore warning

* Fix remaining contract tests

* Fix script

* Fix EOA path

* Fix devnet test command

* more yaml fix

* Fix docker compose spinup

* Remove blockscout

* Move blockscount to monitoring profile

* Free space

* More docker fix

* Fix more

* Fix more

* Add investigation log

* Fix beacon

* Fix timeout

* Fix docker compose dir

* Fix path

* More sequencer fixes

* Fix sequencer

* More CI fix

* Revert devnet test fixes

* Restore more devnet files

* Add back image fix

* Restore streamer

* Restore a devnet fix

* Restore ec2 test fix

* Restore l1 geth fix

* Fix throttle

* Restrict throttle fix scope

* Remove isActiveBatcher

* Remove unnecessary changes

* Restore fallback path fix

* Restore fmt fixes

* Ignore cache error

* Revert foundry version and fmt fixes

* remove fmt check

* fix: mise install (#366)

* Add back necessary contract files

* Fix contract workflow

* Address comments for espresso/docker

* Update espresso/scripts/run-tests-github-actions.sh

Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>

* Remove use of output file

* Remove path from contract names

* Restore more files

* Restore more files

* Revert IproxyAdmin changes

* Remove unneeded IProxyAdmin uses

* Remove more files

* Add back toml

* Add lock

* Replace build

* Fix build timeout

* Fix duplicate build

* Fix more

* Match Celo's changes

* Restore contract files

* Update batcher fallback test

* Improvement the comment

* Remove dead code

* More conflict fixes

* Fix test 11

* Address gemini comments

* Fix test 8

* Replace with rebase-16 contractd

* Merge in 14.2 changes

* Fix comma

* Temp remove fmt check

* Restore dropped 14.2 changes

* Fix build

* Temp allow unused parameter

* FIx duplicate artifact

* Remove duplicated opcm imports, undo profile change

* Temp: simplify with unchecked_cheatcode_artifacts

* Remove unchecked_cheatcode_artifacts

* Temp: update Setup and add unchecked_cheatcode_artifacts

* Update CI

* Restore CI and update Setup

* Add ligher build

* Update CI

* Move test build

* Fix CI again

* Use lite build

* Fix command in CI

* Add CI phases

* Remove espresso foundry setting, simplify fixes

* Restore fixes that worked

* Restore fixes that worked 2

* More tests

* Save CI changes

* Restore gotestsum

* Save fixes

* Undo unnecessary changes

* Remove helper functions

* Add a missing file

* Update forge version and other fixes

* Update devnet CI

* Revert 4 files to match Celo celo-rebase-16 exactly

DeployFeesDepositor, DeployPeriphery, SemverComp, Setup were modified to
work around vm.getCode strictness on Foundry 1.5.1, but CI is pinned to
1.2.3 (lenient) so the changes aren't needed there. Revert to minimize
diff vs Celo upstream.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Revert unneeded changes

* Try devnet fix

* Fix path

* Save devnet tests

* Fix devnet build

* Restore CI change

* Clean up foundry

* Clean up justifle and check-semver-diff

* Restore ignored errors

* Reduce timeout

* Restore unnecessary comment change

* Restore Proxy and solady

* Revert Proxy change

* Restore setup files

* Update a comment

* Restore batch inbox file

* Typo

* Clean up Espresso files

* Restore a fix

* Restore fixes to ec2 and integration tests

* Improve sha256 installation

* Fix Dockerfile build

* Restore artifactsfs

* Fix Go version

* Restore changes that are unnecessary

* Combine duplicate logic

* Move the fix to the compilation step

---------

Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>
Co-authored-by: Jean Gal <45081726+jjeangal@users.noreply.github.com>
Co-authored-by: miguelCyclone <miguelhongo90@gmail.com>
Co-authored-by: Phil <philippe@espressosys.com>
Co-authored-by: Sishan Long <dlsubjam@gmail.com>
Co-authored-by: Sneh Koul <35871990+Sneh1999@users.noreply.github.com>
Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>
Co-authored-by: OpenCode <noreply@opencode.ai>
Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
shenkeyao pushed a commit that referenced this pull request Mar 20, 2026
* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests
shenkeyao added a commit that referenced this pull request Mar 20, 2026
* Fix caff-node stalling (#213)

* Revert timing changes for beacon

* just command to run the devnet tests.

* Comment out running the devnet tests in CI.

---------

Co-authored-by: Philippe Camacho <philippe@espressosys.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Support timestamp env var (#218)

* IL3 Remove redundant "Walking back L1Block" and "will retry" logs (#221)

* Remove logs

* Restore driver log

* Remove retry log

* Restore a log

* Skip BatchFuture (#217)

* Fix length check (#216)

* IA1.6.1 Add batcher service running in TEE  (#205)

* a working script without args

* a working script without args

* everything works in the scripts despite the args

* fix socat proxy script

* working op-batcher inside docker-compose

* rename the script to build batcher enclave image

* cleanup and profile the op-batcher-non-tee

* use port number from env and shorten nc listener timeout as it will not be used in most cases

* fix dasel format

* remove uneeded ESPRESSO_RUN_ENCLAVE_TESTS

* fix scripts

* Add op-batcher-tee image in CI (#210)

* push op-batcher-tee image init

* fix tag and push

* test image creation without enclaver

* try to use env

* fix enclaver download

* use env in docker images yml

* restore other task

* remove unneeded steps

* special case to common case

* use default for op-batcher and tee for op-batcher-tee

* fix double ports mapping

* fix batcher restart test

* add a script to use enclave tool

* works to some extend

* also works for passing in arguments from cmd

* try to upload the image

* add my branch patter

* fix dockerfile

* a simplified version

* adding packages/contracts-bedrock/forge-artifacts to op-batcher-enclave-target

* PCR0 registered in op-batcher-tee docker compose and add monitor for enclave logs

* copy deployment/ to op-batcher-enclave-target

* fix docker-images

* Remove unneeded script

* remove unneeded script and cleanup readme

* fix overlapping ports and move long cmd of op-batcher-tee to script

* update readme

* Fix batcher restart test (#222)

* Fix batcher restart test

* Tune parameters to be more realistic (in particular, increasing
  parallelism to reduce bottleneck on slow L1)
* Improve logging

* Fix go lint

* Download binaries for appropriate architecture in Docker images (#223)

* Add key rotation tests (#224)

* Remove a Caff node comment (#225)

* Remove a comment

* Restore devnet test in CI

* Disable the CI again

* Bump github.com/ulikunitz/xz from 0.5.12 to 0.5.14 (#220)

Bumps [github.com/ulikunitz/xz](https://github.com/ulikunitz/xz) from 0.5.12 to 0.5.14.
- [Commits](ulikunitz/xz@v0.5.12...v0.5.14)

---
updated-dependencies:
- dependency-name: github.com/ulikunitz/xz
  dependency-version: 0.5.14
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Test a challenge game in the docker devnet (#228)

* Add test for devnet challenge game

* Fixes

* Make sure batcher key used by default in the devnet tests is the
  same one registered in the inbox contract
* Remove check in batcher that prevents it from sending transactions
  to Espresso immediately

* Ensures that the deployment files are deleted before building a new devnet. Update README_ESPRESSO.md to remind running docker as a non root user.

* Run devnet tests on CI again.

* Ensure deployment files are not written by the root user.

* Ignore rotate batcher key and change batch inbox owmer tests.

* Clean way of setting UID and GID.

* Ignore devnet tests for now so that we can merge.

* Add fallback values for UID and GID.

* Pinpoint forge version in CI as the linter is complaining.

* Add comment regarding the number of claims.

* Add comment to function TaggedWriter.Write.

---------

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

* Run smoke devnet test in CI (#231)

* Add smoke test for devnet.
* Run Game Challenge and smoke test in CI.
* Run all the devnet tests locally.

* push (#232)

* forget this commit (#233)

* Add a Buffered Streamer around Espresso Streamer for batcher (#230)

* Add a Buffered Streamer around Espresso Streamer for batcher

Because the `EspressoStreamer` is getting `Reset` during the Batcher process when
building a batch to submit to the `L1`, it hinders progress of the chain in a reasonable
amount of time, which ultimately causes it to stop creating non-empty blocks.

There are a number of factors that are contributing to this issue, but ultimately the
`Reset` is causing the `EspressoStreamer` to restart from `0` and it takes too long
before it catches back up to the next expected batch.

To remedy this, a Buffer can be used to mitigate this `Reset` and revert to a point
that is much closer to the desired next batch.

In testing it has been observed that the `SafeL2` can sometimes move backwards.  To
safe guard against this, it is better to `Reset` to the `FinalizedL2` position instead of
the `SafeL2` as this behavior has not been observed there.

* Rename EspressoStreamer and EspressoStreamerIFace

Based on feedback provided by @QuentinI in PR review:
#230 (comment)

The name `EspressoStreamerIFace` is quite a long name, and the `IFace` suffix isn't
necessary since one could tell it's an `interface` by inspection, or using an `LSP`. The
feedback provided by @QuentinI suggested to rename `EspressoStreamerIFace` to
just `EspressoStreamer` so that it falls in line with our other code approaches.

This change renames `EspressoStreamer` to `BatchStreamer`

This change renames `EspressoStreamerIFace` to `EspressoStreamer`.

* Remove `RemainingBatchesLen` method

Based on feedback received from @QuentinI: #230 (comment)

The only reason `RemainingBatchesLen` exists is to serve as a check, and issue a
warning when things are running.  Even though this matches the existing behavior this
log seems to overlap with the logs corresponding to Undecided Batches which already
log warnings or errors.  As a result this method, and the log that utilizes it, seem to
be unnecessary and should be removed to eliminate noise.

This change removes `RemainingBatchesLen` and the uses of it

* Add `RefreshSafeL1Origin` to `EspressoStreamer` interface

Based on feedback provided by @QuentinI: #230 (comment)

Since the `RefreshSafeL1Origin` method can potentially be utilized in some places that
do not require a full `Refresh`, and for convenience, it makes sense to allow it to be a
separately exposed method distinct from `Refresh`.

This change adds `RefreshSafeL1Origin` as a required method in the
`EspressoStreamer` interface.

* Fix missed renamed references

* Rename enclave smoke test

* Fix refreshSafeL1Origin logic for Buffered Streamer

The buffered streamer is resetting its read position far more than it needs to, ultimately
reproducing the same issue that was already occurring with the unbuffered version.

In inspecting the behavior with a debugger, it seems we're resetting the reset position
unnecessarily when we receive the same safeL1Origin again.  Additionally, the logic
for determining the read position when the safeL1Origin advances also seems flawed,
in that it is very likely to reset too far in the past.  We really want to keep our relative
read position unless we're explicitly told to Reset.

This change addresses these issues in order to try and smooth out the batches being
returned, and avoid unnecessary reprocessing of previous batches.

* Add Unit Tests for BufferedEspressoStreamer

Fix BufferedEspressoStreamer behavior

While adding unit tests for the BufferedEspressoStreamer it was noticed that the
position of the L2 and the L1 for the Buffer were being mixed together at times.  This
would ultimately lead to very difficult to detect bugs based on observed behavior
alone.

With the addition of the unit tests identifying the issue, the buffer adjustment
behavior has been adjusted to apply to the L2 position in isolation away from the
L1 positions.  The L1 positions will cause a larger Reset in the underlying logic.

* Rename tests (#236)

* Remove unneeded service http proxy for docker compose (#238)

* Fix `TestSmoke` failing on CI/CD (#237)

The sigp/lighthouse docker image was upgraded from version `v7.1.0` to
`v8.0.0-rc.0` on `2025-09-29`.  Since the image isn't anchored to a version, this
update gets pulled in, and it seems to have breaking changes with our previous
setup.

This change sets the version of the docker image used specifically to `v7.1.0` so
that the previous behavior we're used to is seen.

Additionally, when `TestSmoke` is running, it initially **MUST** download the images
for the docker containers that wer not built in the `Build Devnet` job.  This delays
the launch and running of the DevNet by quite a bit.

Fix this delay by adding a `docker compose pull` setp to `Build Devnet`

* Fix CI after rebasing celo-14 (#243)

* fix fast tests

* fix go version in dockerfile and ce in streamer_test.go

* update prepare-allocs.sh

* fix prepare-allocs.sh

* try to fix l1-geth docker

* fix op-stack dockerfile

* fix op-stack dockerfile

* try to fix l1-geth dockerfile

* fix config read

* try to fix l1-geth dockerfile

* try to fix challenger gamer

* TN5 withdrawal devnet test (#226)

* Add smoke test for devnet.
* Add test to ensure L2 funds can be withdrawn to L1.

---------

Co-authored-by: Theodore Schnepper <tschnepper@espressosys.com>

* Rename DevNet to E2eDevnet (#239)

* Rename DevNet to E2eDevnet

* Remove duplicate name

* Fix low gasLimit in L1 genesis (#241)

* update (#244)

* Streaming streamer (#235)

* Fix pcr0 extraction in docker compose script and correctly shutdown op-proposer-tee (#246)

* fix pcr0 extraction

* stopping op-proposer-tee in script

* revert to old pcr0 extraction as the new pattern breaks the old pattern

* try to fix pcr0 extraction

* upload op-proposer-tee

* Update metrics (#242)

* Update log level (#247)

* Decouple Espresso L1 & OP L1 (#248)

* Add back forgotten config when rebase celo-sync-14

* Fix prepare-allocs after rebasing celo-sync-14 (#250)

* remove doulbe init()

* try to fix prepare-allocs.sh

* enable more workflow

* Skip TestChallengerGame and TestWithdrawal (#251)

* Trigger docker-images workflow

* uncomment dasel put

* skip TestChallengeGame

* skip TestWithdrawal

* mise: Define fake install sources for disabled tools (ethereum-optimism#18109) (#254)

Co-authored-by: Adrian Sutton <adrian@oplabs.co>
(cherry picked from commit de37992)

* Change the logging level for the safe L2 number (#252)

* Update log level

* Reduce logging level

(cherry picked from commit dd97e4c)

* Respect espresso.fetch-api flag (#253)

(cherry picked from commit 6d00dcb)

* Readd devnet tests to CI. (#257)

* Readd devnet tests to CI.
*Fix for batcher restart test in CI.

(cherry picked from commit f37ea91)

* Add a log debouncer to op-service.log package (#259)

(cherry picked from commit 788d28f)

* Add netcat-openbsd to Dockerfile (#262)

* Update log level

* Add duplicate command from Terraform

(cherry picked from commit b775430)

* Add a devnet cleanup script (#261)

* Update log level

* Add cleanup script

* Remove unnecessary commands

(cherry picked from commit dc40b6c)

* Enable circleCI after rebase14 (#265)

* Fix .circleci/config.yaml and lint and most of circleCI tests after rebasing celo-sync-14
* Skip tests (in TEST_PKGS) that need auth or celo-specific rpc specified

---------

Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>

* Add origin height to Espresso streamer (#255)

* Clean up more loggings (#266)

* Reduce logs

* Remove one more log

* Skip attestation verification (#263)

* Update espresso-tee-contracts submodule to sishan/skip-attestation-verification

* Skip attestation verification to reduce gas costs

* Reduce L1 gas limit from 45M to 16M

* Update snapshots for registerSignerWithoutAttestationVerification

* Ignore lib/automate submodule directory

* fix CI

* Update espresso-tee-contracts submodule

Remove onlyOwner modifier from registerSignerWithoutAttestationVerification

* keep large gasLimit

* circleci: Enable workflow on all branches via API trigger

Allow CircleCI main workflow to run on any branch when triggered via API,
not just webhook triggers. This enables go-lint and go-tests to run on
feature branches.

* Regenerate semver-lock.json after rebase

The initCodeHash for BatchAuthenticator needed to be regenerated
after rebasing onto celo-integration-rebase-14.1.

---------

Co-authored-by: EC2 Default User <ec2-user@ip-172-31-47-181.us-east-2.compute.internal>

* Fix test TestChangeBatchInboxOwner (#264)

* Fix the test TestChangeBatchInboxOwner.
* Ensure the owner of the Batch Authenticator contract is initialized.

* Update README and relevant scripts (#269)

* Remove unused metrics (#273)

* Rename (#275)

* Improve image versioning and repo consistency (#276)

* Add githooks and env

* update path

* test hooks

* change wording

* include docker compose

* Create enclave ami for enclave test (#277)

* create enclave ami

* use new ami and restore the ci workflow and update enclave prepare ami script

* new AMI

* update readme

* Add devnet smoke test with TEE (#268)

* Add devnet smoke test with TEE

* Remove unnecessary extra timeout

* Add consts, remove incorrect setting

* Use consts

* Add missed file

* Blockscout running inside the local devnet (#281)

* Extend the local devnet with blockscout.

* Pinpoint versions of blockscout images.

* Blockscout fetching blocks from caff node.

* Build deployer image in CI

* Upate CI utils

* Saner 'confirmed' logging

* Don't error out on light client issues

* fix the name of deployer factory address

* Add a workaround for query service lag in real-world networks

* Generate more metadata

* More faithful compiler output in verifier

* Don't fall below hotshot origin height

* Remove cache buster to speed up docker image builds

* Adjust channel duration in devnet

* Jump ahead when origin is too low

* Add log line to matching Espresso txn to L2 block

* Fix semver lock

* Fix snapshot lock

* Support environment variables for channel parameters

* Enable EigenDaProxy & MEMSTORE (#274)

* Enable EigenDaProxy & MEMSTORE

* longer eigenda-proxy start period

* enable eigenda at the op-node level

* Don't copy artifacts to batcher image (#290)

* Refactor: replace MultiNode majority rule with SingleNode client and skip deprecated test.

* refactor: remove majority rule and switch to single Espresso client

* Skip deprecated TestEnforceMajorityRule (deprecated under SingleNode)

* Fallback Inbox contract changes (#278)

* Implement changes in the Batch Inbox / Batch Authenticator contracts to support a TEE and non TEE batcher.
* Add some unit tests for the Batch Authenticator and Batch Inbox contracts.
* Remove the failing Circle CI tests

* OP succint support (#287)

Deploy OP Succint contracts on L1.
Spins up op-succinct-challenger and op-succint-proposer services.
Adjust the devnet test `TestChallengeGame`.
Deletes the Demo we made to Celo Labs as we can now spin up a devnet with Blockscout.

* Update error handling (#289)

* Update error handling

* Fix typo

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

---------

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

* Document configuration of all services (#291)

* Add readme for config
* Insert image, add more description

* Support Sepolia Devnet with TEE (#288)

* update enclave-entrypoint.bash to correctly deal with external url

* preserve host name for external url

* Skip IsURLAvailable TCP check when using HTTP proxy

* skip VerifyCertTransaction for now

* reuse socat so that it can work for internal url

* comment and skip TestE2eDevnetWithInvalidAttestation

* OP Succinct: Making changes to the derivation pipeline (#293)

* Document how to make changes to the kona repository and propagate them.
* Reference new docker images for the op-succinct proposer and challenger.

* Fix op-succinct dependencies diagram. (#297)

* Simplify checks in the derivation pipeline (#296)

* Remove the superfluous check about the batcher address as now the Batch Inbox contract verifies the sender is legitimate.

* Removed nonexist logs (#298)

* Add support for ZK attestation service (#294)

* Add support for ZK attestation service

* check attestation service url is not nil

* upgrade espresso tee verifier contracts

* fix contracts

* fix merge

* fix tests

* bring back deploy aws nitro

* add support for mock contract

* add support for attestation verifier service

* fix tee tests

* use higher version of github runner

* fix tee args

* fix tee args

* add healthcheck to attestation verifier zk

* increase timeout

* Invalid attestation test passing

* small fixes

* fix TestE2eDevnetWithUnattestedBatcherKey

* fix health check

* fix devnet test

* use 127.0.0.1

* fix regex

* debug

* fix proof generation

* debug

* fix url

* fix url

* remove debug logs

* resolve based on comments

* address comments

* update github runner enclave

* fix based on suggestions

* cleanup logs

* Enable AltDA Espresso E2E using EigenDA Docker proxy (#295)

* Integrate EigenDA via Docker proxy for AltDA Espresso E2E tests

* Scope EigenDA lifecycle to the test and ensure clean startup/teardown

* Extract EigenDA Docker port and image into constants

* Downgrade Dasel (#303)

* Make attestation service url optional

* fix dasel

* fix dasel

* update dockerfiles

* make attestation service required again

* Make the withdraw devnet test pass again (#301)

* Withdraw test passing again on devnet.

* Faster CI

* Deposit into L1 before requesting the withdrawal on L2.

* Add migration related things to readme (#302)


---------

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

* Reducing logging when outputting the batch  (#304)

* update logging for the batch

* clean up

* Document code sync procedure (#308)

* Add code sync procedure

* Update links

* Fix format

* Rename files

* Update batchAuthenticator according to audit report (#309)

* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests

* Port ForcedTxs test into devnet test suite (#306)

* Simplify the test as we cannot in practice reduce the window size.

---------

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

* Reorder checks of isValidBatchTx in derivation pipeline (#310)

* remove warning on every failed tx

* reorder the checks

* Add fallback mechanism test (#305)

* 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>

* Philippe/fix withdraw flakiness (#312)

* Address flakiness.

* Simplify the code

* Fix CI

---------

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

* Use unified run-enclave.sh script for op-batcher-tee (#299)

* update single run-enclave.sh

* remove BATCHER_PRIVATE_KEY

* update run-enclave.sh

* Test fallback mechanism on devnet (#313)

* Recovery from fallback batcher (#315)

* Fallback recovery

* Add caff node

* Suggestions

* Make ZK Verifier Optional for E2E Testing (#321)

* 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.

* Tee support for EigenDA (#319)

* 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 Batcher Fallback: Channel Not Closed Test (#314)

* 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>

* Move diagram files (#326)

* Update Succinct image versions, update diagram (#329)

* Inactive Batcher Shouldn't Post (#316)

* 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>

* Removes PreRegisteredBatcher code (#327)

* Remove pre authenticated batcher

* fix test

* Update Succinct images

* Streamer namespace range 14.2 (#334)

* 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

* Enable and test Transparent proxy upgradability and batcher address update (#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

* Description for TestBatcherSwitching (#335)

* 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>

* Add cmd to shutdown all docker containers with TEE (#332)

* cmd to shutdown all services

* Small change to trigger CI

---------

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

* Guardians rebased (#345)

Co-authored-by: OpenCode <noreply@opencode.ai>

* Audit Document (#339)


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

* Security Analysis (#342)


---------

Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Fix and improve steps in the code sync doc (#344)

* Update doc

* Update kona default branch and fix links

* Fix typo

* Typos

---------

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

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Update moved crate

* Fix the build after rebase (#352)

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Remove duplicate import

* Fix go module flakiness

* Fix refactored types and functions

* Set light client

* Add timeouts for devnet tests

* Investigate test failure

* Fix integration tests 0

* Fix fallback batcher test

* Fix duplicate devnet running issue

* Specify artifact names

* Fix fmt

* Fix challenge game test

* Try fix batcher restart test

* Fix fallback test

* Fix test build

* Remove duplicate builds

* Fix parsing

* Fix duplicate l1-geth-image

* Increase timeout

* Fix fallback

* Fix batcher restart test

* Fix devnet tests 3 and 4

* Fix contracts

* Fix fmt

* More devnet tests

* More contract tests

* Update version for contract tests

* Fix fmt

* Fix foundry

* Fix CI for devnet tests

* Ignore warning

* Fix remaining contract tests

* Fix script

* Fix EOA path

* Fix devnet test command

* more yaml fix

* Fix docker compose spinup

* Remove blockscout

* Move blockscount to monitoring profile

* Free space

* More docker fix

* Fix more

* Fix more

* Add investigation log

* Fix beacon

* Fix timeout

* Fix docker compose dir

* Fix path

* More sequencer fixes

* Fix sequencer

* More CI fix

* Revert devnet test fixes

* Restore more devnet files

* Add back image fix

* Restore streamer

* Restore a devnet fix

* Restore ec2 test fix

* Restore l1 geth fix

* Fix throttle

* Restrict throttle fix scope

* Remove isActiveBatcher

* Remove unnecessary changes

* Restore fallback path fix

* Restore fmt fixes

* Ignore cache error

* Revert foundry version and fmt fixes

* remove fmt check

* fix: mise install (#366)

* Add back necessary contract files

* Fix contract workflow

* Address comments for espresso/docker

* Update espresso/scripts/run-tests-github-actions.sh

Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>

* Remove use of output file

* Remove path from contract names

* Restore more files

* Restore more files

* Revert IproxyAdmin changes

* Remove unneeded IProxyAdmin uses

* Remove more files

* Add back toml

* Add lock

* Replace build

* Fix build timeout

* Fix duplicate build

* Fix more

* Match Celo's changes

* Restore contract files

* Update batcher fallback test

* Improvement the comment

* Remove dead code

* More conflict fixes

* Fix test 11

* Address gemini comments

* Fix test 8

* Restore gotestsum

* Undo unnecessary changes

* Remove helper functions

* Add a missing file

* Improve sha256 installation

* Fix Dockerfile build

* Restore artifactsfs

* Fix Go version

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>
Co-authored-by: Philippe Camacho <philippe@espressosys.com>
Co-authored-by: Sishan Long <dlsubjam@gmail.com>
Co-authored-by: Jeb Bearer <jeb.bearer@gmail.com>
Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Theodore Schnepper <tschnepper@espressosys.com>
Co-authored-by: Adrian Sutton <adrian@oplabs.co>
Co-authored-by: EC2 Default User <ec2-user@ip-172-31-47-181.us-east-2.compute.internal>
Co-authored-by: Sneh Koul <snehkoul1999@gmail.com>
Co-authored-by: Jean Gal <45081726+jjeangal@users.noreply.github.com>
Co-authored-by: miguelCyclone <miguelhongo90@gmail.com>
Co-authored-by: Sneh Koul <35871990+Sneh1999@users.noreply.github.com>
Co-authored-by: OpenCode <noreply@opencode.ai>
Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
shenkeyao added a commit that referenced this pull request Mar 20, 2026
* Build deployer image in CI

* Upate CI utils

* Saner 'confirmed' logging

* Don't error out on light client issues

* fix the name of deployer factory address

* Add a workaround for query service lag in real-world networks

* Generate more metadata

* More faithful compiler output in verifier

* Don't fall below hotshot origin height

* Remove cache buster to speed up docker image builds

* Adjust channel duration in devnet

* Jump ahead when origin is too low

* Add log line to matching Espresso txn to L2 block

* Fix semver lock

* Fix snapshot lock

* Support environment variables for channel parameters

* Enable EigenDaProxy & MEMSTORE (#274)

* Enable EigenDaProxy & MEMSTORE

* longer eigenda-proxy start period

* enable eigenda at the op-node level

* Don't copy artifacts to batcher image (#290)

* Refactor: replace MultiNode majority rule with SingleNode client and skip deprecated test.

* refactor: remove majority rule and switch to single Espresso client

* Skip deprecated TestEnforceMajorityRule (deprecated under SingleNode)

* Fallback Inbox contract changes (#278)

* Implement changes in the Batch Inbox / Batch Authenticator contracts to support a TEE and non TEE batcher.
* Add some unit tests for the Batch Authenticator and Batch Inbox contracts.
* Remove the failing Circle CI tests

* OP succint support (#287)

Deploy OP Succint contracts on L1.
Spins up op-succinct-challenger and op-succint-proposer services.
Adjust the devnet test `TestChallengeGame`.
Deletes the Demo we made to Celo Labs as we can now spin up a devnet with Blockscout.

* Update error handling (#289)

* Update error handling

* Fix typo

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

---------

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

* Document configuration of all services (#291)

* Add readme for config
* Insert image, add more description

* Support Sepolia Devnet with TEE (#288)

* update enclave-entrypoint.bash to correctly deal with external url

* preserve host name for external url

* Skip IsURLAvailable TCP check when using HTTP proxy

* skip VerifyCertTransaction for now

* reuse socat so that it can work for internal url

* comment and skip TestE2eDevnetWithInvalidAttestation

* OP Succinct: Making changes to the derivation pipeline (#293)

* Document how to make changes to the kona repository and propagate them.
* Reference new docker images for the op-succinct proposer and challenger.

* Fix op-succinct dependencies diagram. (#297)

* Simplify checks in the derivation pipeline (#296)

* Remove the superfluous check about the batcher address as now the Batch Inbox contract verifies the sender is legitimate.

* Removed nonexist logs (#298)

* Add support for ZK attestation service (#294)

* Add support for ZK attestation service

* check attestation service url is not nil

* upgrade espresso tee verifier contracts

* fix contracts

* fix merge

* fix tests

* bring back deploy aws nitro

* add support for mock contract

* add support for attestation verifier service

* fix tee tests

* use higher version of github runner

* fix tee args

* fix tee args

* add healthcheck to attestation verifier zk

* increase timeout

* Invalid attestation test passing

* small fixes

* fix TestE2eDevnetWithUnattestedBatcherKey

* fix health check

* fix devnet test

* use 127.0.0.1

* fix regex

* debug

* fix proof generation

* debug

* fix url

* fix url

* remove debug logs

* resolve based on comments

* address comments

* update github runner enclave

* fix based on suggestions

* cleanup logs

* Enable AltDA Espresso E2E using EigenDA Docker proxy (#295)

* Integrate EigenDA via Docker proxy for AltDA Espresso E2E tests

* Scope EigenDA lifecycle to the test and ensure clean startup/teardown

* Extract EigenDA Docker port and image into constants

* Downgrade Dasel (#303)

* Make attestation service url optional

* fix dasel

* fix dasel

* update dockerfiles

* make attestation service required again

* Make the withdraw devnet test pass again (#301)

* Withdraw test passing again on devnet.

* Faster CI

* Deposit into L1 before requesting the withdrawal on L2.

* Add migration related things to readme (#302)


---------

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

* Reducing logging when outputting the batch  (#304)

* update logging for the batch

* clean up

* Document code sync procedure (#308)

* Add code sync procedure

* Update links

* Fix format

* Rename files

* Update batchAuthenticator according to audit report (#309)

* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests

* Port ForcedTxs test into devnet test suite (#306)

* Simplify the test as we cannot in practice reduce the window size.

---------

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

* Reorder checks of isValidBatchTx in derivation pipeline (#310)

* remove warning on every failed tx

* reorder the checks

* Add fallback mechanism test (#305)

* 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>

* Philippe/fix withdraw flakiness (#312)

* Address flakiness.

* Simplify the code

* Fix CI

---------

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

* Use unified run-enclave.sh script for op-batcher-tee (#299)

* update single run-enclave.sh

* remove BATCHER_PRIVATE_KEY

* update run-enclave.sh

* Test fallback mechanism on devnet (#313)

* Recovery from fallback batcher (#315)

* Fallback recovery

* Add caff node

* Suggestions

* Make ZK Verifier Optional for E2E Testing (#321)

* 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.

* Tee support for EigenDA (#319)

* 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 Batcher Fallback: Channel Not Closed Test (#314)

* 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>

* Move diagram files (#326)

* Update Succinct image versions, update diagram (#329)

* Inactive Batcher Shouldn't Post (#316)

* 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>

* Removes PreRegisteredBatcher code (#327)

* Remove pre authenticated batcher

* fix test

* Update Succinct images

* Streamer namespace range 14.2 (#334)

* 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

* Enable and test Transparent proxy upgradability and batcher address update (#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

* Description for TestBatcherSwitching (#335)

* 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>

* Add cmd to shutdown all docker containers with TEE (#332)

* cmd to shutdown all services

* Small change to trigger CI

---------

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

* Guardians rebased (#345)

Co-authored-by: OpenCode <noreply@opencode.ai>

* Audit Document (#339)


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

* Security Analysis (#342)


---------

Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Fix and improve steps in the code sync doc (#344)

* Update doc

* Update kona default branch and fix links

* Fix typo

* Typos

---------

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

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Update moved crate

* Fix the build after rebase (#352)

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Remove duplicate import

* Fix go module flakiness

* Fix refactored types and functions

* Set light client

* Add timeouts for devnet tests

* Investigate test failure

* Fix integration tests 0

* Fix fallback batcher test

* Fix duplicate devnet running issue

* Specify artifact names

* Fix fmt

* Fix challenge game test

* Try fix batcher restart test

* Fix fallback test

* Fix test build

* Remove duplicate builds

* Fix parsing

* Fix duplicate l1-geth-image

* Increase timeout

* Fix fallback

* Fix batcher restart test

* Fix devnet tests 3 and 4

* Fix contracts

* Fix fmt

* More devnet tests

* More contract tests

* Update version for contract tests

* Fix fmt

* Fix foundry

* Fix CI for devnet tests

* Ignore warning

* Fix remaining contract tests

* Fix script

* Fix EOA path

* Fix devnet test command

* more yaml fix

* Fix docker compose spinup

* Remove blockscout

* Move blockscount to monitoring profile

* Free space

* More docker fix

* Fix more

* Fix more

* Add investigation log

* Fix beacon

* Fix timeout

* Fix docker compose dir

* Fix path

* More sequencer fixes

* Fix sequencer

* More CI fix

* Revert devnet test fixes

* Restore more devnet files

* Add back image fix

* Restore streamer

* Restore a devnet fix

* Restore ec2 test fix

* Restore l1 geth fix

* Fix throttle

* Restrict throttle fix scope

* Remove isActiveBatcher

* Remove unnecessary changes

* Restore fallback path fix

* Restore fmt fixes

* Ignore cache error

* Revert foundry version and fmt fixes

* remove fmt check

* fix: mise install (#366)

* Add back necessary contract files

* Fix contract workflow

* Address comments for espresso/docker

* Update espresso/scripts/run-tests-github-actions.sh

Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>

* Remove use of output file

* Remove path from contract names

* Restore more files

* Restore more files

* Revert IproxyAdmin changes

* Remove unneeded IProxyAdmin uses

* Remove more files

* Add back toml

* Add lock

* Replace build

* Fix build timeout

* Fix duplicate build

* Fix more

* Match Celo's changes

* Restore contract files

* Update batcher fallback test

* Improvement the comment

* Remove dead code

* More conflict fixes

* Fix test 11

* Address gemini comments

* Fix test 8

* Replace with rebase-16 contractd

* Merge in 14.2 changes

* Fix comma

* Temp remove fmt check

* Restore dropped 14.2 changes

* Fix build

* Temp allow unused parameter

* FIx duplicate artifact

* Remove duplicated opcm imports, undo profile change

* Temp: simplify with unchecked_cheatcode_artifacts

* Remove unchecked_cheatcode_artifacts

* Temp: update Setup and add unchecked_cheatcode_artifacts

* Update CI

* Restore CI and update Setup

* Add ligher build

* Update CI

* Move test build

* Fix CI again

* Use lite build

* Fix command in CI

* Add CI phases

* Remove espresso foundry setting, simplify fixes

* Restore fixes that worked

* Restore fixes that worked 2

* More tests

* Save CI changes

* Restore gotestsum

* Save fixes

* Undo unnecessary changes

* Remove helper functions

* Add a missing file

* Update forge version and other fixes

* Restore CI change

* Clean up foundry

* Clean up justifle and check-semver-diff

* Restore ignored errors

* Reduce timeout

* Restore unnecessary comment change

* Restore Proxy and solady

* Revert Proxy change

* Restore setup files

* Update a comment

* Restore batch inbox file

* Typo

* Clean up Espresso files

* Restore a fix

* Restore fixes to ec2 and integration tests

* Improve sha256 installation

* Fix Dockerfile build

* Restore artifactsfs

* Fix Go version

* Pin foundry version in nix flake

* Restore fmt check

* Remove newline

* Improve error handling

---------

Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>
Co-authored-by: Sneh Koul <snehkoul1999@gmail.com>
Co-authored-by: Jean Gal <45081726+jjeangal@users.noreply.github.com>
Co-authored-by: miguelCyclone <miguelhongo90@gmail.com>
Co-authored-by: Phil <philippe@espressosys.com>
Co-authored-by: Sishan Long <dlsubjam@gmail.com>
Co-authored-by: Sneh Koul <35871990+Sneh1999@users.noreply.github.com>
Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>
Co-authored-by: OpenCode <noreply@opencode.ai>
Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
shenkeyao added a commit that referenced this pull request Mar 20, 2026
* Remove cache buster to speed up docker image builds

* Adjust channel duration in devnet

* Jump ahead when origin is too low

* Add log line to matching Espresso txn to L2 block

* Fix semver lock

* Fix snapshot lock

* Support environment variables for channel parameters

* Enable EigenDaProxy & MEMSTORE (#274)

* Enable EigenDaProxy & MEMSTORE

* longer eigenda-proxy start period

* enable eigenda at the op-node level

* Don't copy artifacts to batcher image (#290)

* Refactor: replace MultiNode majority rule with SingleNode client and skip deprecated test.

* refactor: remove majority rule and switch to single Espresso client

* Skip deprecated TestEnforceMajorityRule (deprecated under SingleNode)

* Fallback Inbox contract changes (#278)

* Implement changes in the Batch Inbox / Batch Authenticator contracts to support a TEE and non TEE batcher.
* Add some unit tests for the Batch Authenticator and Batch Inbox contracts.
* Remove the failing Circle CI tests

* OP succint support (#287)

Deploy OP Succint contracts on L1.
Spins up op-succinct-challenger and op-succint-proposer services.
Adjust the devnet test `TestChallengeGame`.
Deletes the Demo we made to Celo Labs as we can now spin up a devnet with Blockscout.

* Update error handling (#289)

* Update error handling

* Fix typo

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

---------

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

* Document configuration of all services (#291)

* Add readme for config
* Insert image, add more description

* Support Sepolia Devnet with TEE (#288)

* update enclave-entrypoint.bash to correctly deal with external url

* preserve host name for external url

* Skip IsURLAvailable TCP check when using HTTP proxy

* skip VerifyCertTransaction for now

* reuse socat so that it can work for internal url

* comment and skip TestE2eDevnetWithInvalidAttestation

* OP Succinct: Making changes to the derivation pipeline (#293)

* Document how to make changes to the kona repository and propagate them.
* Reference new docker images for the op-succinct proposer and challenger.

* Fix op-succinct dependencies diagram. (#297)

* Simplify checks in the derivation pipeline (#296)

* Remove the superfluous check about the batcher address as now the Batch Inbox contract verifies the sender is legitimate.

* Removed nonexist logs (#298)

* Add support for ZK attestation service (#294)

* Add support for ZK attestation service

* check attestation service url is not nil

* upgrade espresso tee verifier contracts

* fix contracts

* fix merge

* fix tests

* bring back deploy aws nitro

* add support for mock contract

* add support for attestation verifier service

* fix tee tests

* use higher version of github runner

* fix tee args

* fix tee args

* add healthcheck to attestation verifier zk

* increase timeout

* Invalid attestation test passing

* small fixes

* fix TestE2eDevnetWithUnattestedBatcherKey

* fix health check

* fix devnet test

* use 127.0.0.1

* fix regex

* debug

* fix proof generation

* debug

* fix url

* fix url

* remove debug logs

* resolve based on comments

* address comments

* update github runner enclave

* fix based on suggestions

* cleanup logs

* Enable AltDA Espresso E2E using EigenDA Docker proxy (#295)

* Integrate EigenDA via Docker proxy for AltDA Espresso E2E tests

* Scope EigenDA lifecycle to the test and ensure clean startup/teardown

* Extract EigenDA Docker port and image into constants

* Downgrade Dasel (#303)

* Make attestation service url optional

* fix dasel

* fix dasel

* update dockerfiles

* make attestation service required again

* Make the withdraw devnet test pass again (#301)

* Withdraw test passing again on devnet.

* Faster CI

* Deposit into L1 before requesting the withdrawal on L2.

* Add migration related things to readme (#302)


---------

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

* Reducing logging when outputting the batch  (#304)

* update logging for the batch

* clean up

* Document code sync procedure (#308)

* Add code sync procedure

* Update links

* Fix format

* Rename files

* Update batchAuthenticator according to audit report (#309)

* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests

* Port ForcedTxs test into devnet test suite (#306)

* Simplify the test as we cannot in practice reduce the window size.

---------

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

* Reorder checks of isValidBatchTx in derivation pipeline (#310)

* remove warning on every failed tx

* reorder the checks

* Add fallback mechanism test (#305)

* 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>

* Philippe/fix withdraw flakiness (#312)

* Address flakiness.

* Simplify the code

* Fix CI

---------

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

* Use unified run-enclave.sh script for op-batcher-tee (#299)

* update single run-enclave.sh

* remove BATCHER_PRIVATE_KEY

* update run-enclave.sh

* Test fallback mechanism on devnet (#313)

* Recovery from fallback batcher (#315)

* Fallback recovery

* Add caff node

* Suggestions

* Make ZK Verifier Optional for E2E Testing (#321)

* 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.

* Tee support for EigenDA (#319)

* 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 Batcher Fallback: Channel Not Closed Test (#314)

* 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>

* Move diagram files (#326)

* Update Succinct image versions, update diagram (#329)

* Inactive Batcher Shouldn't Post (#316)

* 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>

* Removes PreRegisteredBatcher code (#327)

* Remove pre authenticated batcher

* fix test

* Update Succinct images

* Streamer namespace range 14.2 (#334)

* 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

* Enable and test Transparent proxy upgradability and batcher address update (#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

* Description for TestBatcherSwitching (#335)

* 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>

* Add cmd to shutdown all docker containers with TEE (#332)

* cmd to shutdown all services

* Small change to trigger CI

---------

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

* Guardians rebased (#345)

Co-authored-by: OpenCode <noreply@opencode.ai>

* Audit Document (#339)


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

* Security Analysis (#342)


---------

Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Fix and improve steps in the code sync doc (#344)

* Update doc

* Update kona default branch and fix links

* Fix typo

* Typos

---------

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

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Update moved crate

* Fix the build after rebase (#352)

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Remove duplicate import

* Fix go module flakiness

* Fix refactored types and functions

* Set light client

* Add timeouts for devnet tests

* Investigate test failure

* Fix integration tests 0

* Fix fallback batcher test

* Fix duplicate devnet running issue

* Specify artifact names

* Fix fmt

* Fix challenge game test

* Try fix batcher restart test

* Fix fallback test

* Fix test build

* Remove duplicate builds

* Fix parsing

* Fix duplicate l1-geth-image

* Increase timeout

* Fix fallback

* Fix batcher restart test

* Fix devnet tests 3 and 4

* Fix contracts

* Fix fmt

* More devnet tests

* More contract tests

* Update version for contract tests

* Fix fmt

* Fix foundry

* Fix CI for devnet tests

* Ignore warning

* Fix remaining contract tests

* Fix script

* Fix EOA path

* Fix devnet test command

* more yaml fix

* Fix docker compose spinup

* Remove blockscout

* Move blockscount to monitoring profile

* Free space

* More docker fix

* Fix more

* Fix more

* Add investigation log

* Fix beacon

* Fix timeout

* Fix docker compose dir

* Fix path

* More sequencer fixes

* Fix sequencer

* More CI fix

* Revert devnet test fixes

* Restore more devnet files

* Add back image fix

* Restore streamer

* Restore a devnet fix

* Restore ec2 test fix

* Restore l1 geth fix

* Fix throttle

* Restrict throttle fix scope

* Remove isActiveBatcher

* Remove unnecessary changes

* Restore fallback path fix

* Restore fmt fixes

* Ignore cache error

* Revert foundry version and fmt fixes

* remove fmt check

* fix: mise install (#366)

* Add back necessary contract files

* Fix contract workflow

* Address comments for espresso/docker

* Update espresso/scripts/run-tests-github-actions.sh

Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>

* Remove use of output file

* Remove path from contract names

* Restore more files

* Restore more files

* Revert IproxyAdmin changes

* Remove unneeded IProxyAdmin uses

* Remove more files

* Add back toml

* Add lock

* Replace build

* Fix build timeout

* Fix duplicate build

* Fix more

* Match Celo's changes

* Restore contract files

* Update batcher fallback test

* Improvement the comment

* Remove dead code

* More conflict fixes

* Fix test 11

* Address gemini comments

* Fix test 8

* Replace with rebase-16 contractd

* Merge in 14.2 changes

* Fix comma

* Temp remove fmt check

* Restore dropped 14.2 changes

* Fix build

* Temp allow unused parameter

* FIx duplicate artifact

* Remove duplicated opcm imports, undo profile change

* Temp: simplify with unchecked_cheatcode_artifacts

* Remove unchecked_cheatcode_artifacts

* Temp: update Setup and add unchecked_cheatcode_artifacts

* Update CI

* Restore CI and update Setup

* Add ligher build

* Update CI

* Move test build

* Fix CI again

* Use lite build

* Fix command in CI

* Add CI phases

* Remove espresso foundry setting, simplify fixes

* Restore fixes that worked

* Restore fixes that worked 2

* More tests

* Save CI changes

* Restore gotestsum

* Save fixes

* Undo unnecessary changes

* Remove helper functions

* Add a missing file

* Update forge version and other fixes

* Update devnet CI

* Revert 4 files to match Celo celo-rebase-16 exactly

DeployFeesDepositor, DeployPeriphery, SemverComp, Setup were modified to
work around vm.getCode strictness on Foundry 1.5.1, but CI is pinned to
1.2.3 (lenient) so the changes aren't needed there. Revert to minimize
diff vs Celo upstream.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Revert unneeded changes

* Try devnet fix

* Fix path

* Save devnet tests

* Fix devnet build

* Restore CI change

* Clean up foundry

* Clean up justifle and check-semver-diff

* Restore ignored errors

* Reduce timeout

* Restore unnecessary comment change

* Restore Proxy and solady

* Revert Proxy change

* Restore setup files

* Update a comment

* Restore batch inbox file

* Typo

* Clean up Espresso files

* Restore a fix

* Restore fixes to ec2 and integration tests

* Improve sha256 installation

* Fix Dockerfile build

* Restore artifactsfs

* Fix Go version

* Restore changes that are unnecessary

* Combine duplicate logic

* Move the fix to the compilation step

---------

Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>
Co-authored-by: Jean Gal <45081726+jjeangal@users.noreply.github.com>
Co-authored-by: miguelCyclone <miguelhongo90@gmail.com>
Co-authored-by: Phil <philippe@espressosys.com>
Co-authored-by: Sishan Long <dlsubjam@gmail.com>
Co-authored-by: Sneh Koul <35871990+Sneh1999@users.noreply.github.com>
Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>
Co-authored-by: OpenCode <noreply@opencode.ai>
Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
QuentinI pushed a commit that referenced this pull request Apr 9, 2026
* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests
QuentinI added a commit that referenced this pull request Apr 9, 2026
* Fix caff-node stalling (#213)

* Revert timing changes for beacon

* just command to run the devnet tests.

* Comment out running the devnet tests in CI.

---------

Co-authored-by: Philippe Camacho <philippe@espressosys.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Support timestamp env var (#218)

* IL3 Remove redundant "Walking back L1Block" and "will retry" logs (#221)

* Remove logs

* Restore driver log

* Remove retry log

* Restore a log

* Skip BatchFuture (#217)

* Fix length check (#216)

* IA1.6.1 Add batcher service running in TEE  (#205)

* a working script without args

* a working script without args

* everything works in the scripts despite the args

* fix socat proxy script

* working op-batcher inside docker-compose

* rename the script to build batcher enclave image

* cleanup and profile the op-batcher-non-tee

* use port number from env and shorten nc listener timeout as it will not be used in most cases

* fix dasel format

* remove uneeded ESPRESSO_RUN_ENCLAVE_TESTS

* fix scripts

* Add op-batcher-tee image in CI (#210)

* push op-batcher-tee image init

* fix tag and push

* test image creation without enclaver

* try to use env

* fix enclaver download

* use env in docker images yml

* restore other task

* remove unneeded steps

* special case to common case

* use default for op-batcher and tee for op-batcher-tee

* fix double ports mapping

* fix batcher restart test

* add a script to use enclave tool

* works to some extend

* also works for passing in arguments from cmd

* try to upload the image

* add my branch patter

* fix dockerfile

* a simplified version

* adding packages/contracts-bedrock/forge-artifacts to op-batcher-enclave-target

* PCR0 registered in op-batcher-tee docker compose and add monitor for enclave logs

* copy deployment/ to op-batcher-enclave-target

* fix docker-images

* Remove unneeded script

* remove unneeded script and cleanup readme

* fix overlapping ports and move long cmd of op-batcher-tee to script

* update readme

* Fix batcher restart test (#222)

* Fix batcher restart test

* Tune parameters to be more realistic (in particular, increasing
  parallelism to reduce bottleneck on slow L1)
* Improve logging

* Fix go lint

* Download binaries for appropriate architecture in Docker images (#223)

* Add key rotation tests (#224)

* Remove a Caff node comment (#225)

* Remove a comment

* Restore devnet test in CI

* Disable the CI again

* Bump github.com/ulikunitz/xz from 0.5.12 to 0.5.14 (#220)

Bumps [github.com/ulikunitz/xz](https://github.com/ulikunitz/xz) from 0.5.12 to 0.5.14.
- [Commits](ulikunitz/xz@v0.5.12...v0.5.14)

---
updated-dependencies:
- dependency-name: github.com/ulikunitz/xz
  dependency-version: 0.5.14
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Test a challenge game in the docker devnet (#228)

* Add test for devnet challenge game

* Fixes

* Make sure batcher key used by default in the devnet tests is the
  same one registered in the inbox contract
* Remove check in batcher that prevents it from sending transactions
  to Espresso immediately

* Ensures that the deployment files are deleted before building a new devnet. Update README_ESPRESSO.md to remind running docker as a non root user.

* Run devnet tests on CI again.

* Ensure deployment files are not written by the root user.

* Ignore rotate batcher key and change batch inbox owmer tests.

* Clean way of setting UID and GID.

* Ignore devnet tests for now so that we can merge.

* Add fallback values for UID and GID.

* Pinpoint forge version in CI as the linter is complaining.

* Add comment regarding the number of claims.

* Add comment to function TaggedWriter.Write.

---------

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

* Run smoke devnet test in CI (#231)

* Add smoke test for devnet.
* Run Game Challenge and smoke test in CI.
* Run all the devnet tests locally.

* push (#232)

* forget this commit (#233)

* Add a Buffered Streamer around Espresso Streamer for batcher (#230)

* Add a Buffered Streamer around Espresso Streamer for batcher

Because the `EspressoStreamer` is getting `Reset` during the Batcher process when
building a batch to submit to the `L1`, it hinders progress of the chain in a reasonable
amount of time, which ultimately causes it to stop creating non-empty blocks.

There are a number of factors that are contributing to this issue, but ultimately the
`Reset` is causing the `EspressoStreamer` to restart from `0` and it takes too long
before it catches back up to the next expected batch.

To remedy this, a Buffer can be used to mitigate this `Reset` and revert to a point
that is much closer to the desired next batch.

In testing it has been observed that the `SafeL2` can sometimes move backwards.  To
safe guard against this, it is better to `Reset` to the `FinalizedL2` position instead of
the `SafeL2` as this behavior has not been observed there.

* Rename EspressoStreamer and EspressoStreamerIFace

Based on feedback provided by @QuentinI in PR review:
#230 (comment)

The name `EspressoStreamerIFace` is quite a long name, and the `IFace` suffix isn't
necessary since one could tell it's an `interface` by inspection, or using an `LSP`. The
feedback provided by @QuentinI suggested to rename `EspressoStreamerIFace` to
just `EspressoStreamer` so that it falls in line with our other code approaches.

This change renames `EspressoStreamer` to `BatchStreamer`

This change renames `EspressoStreamerIFace` to `EspressoStreamer`.

* Remove `RemainingBatchesLen` method

Based on feedback received from @QuentinI: #230 (comment)

The only reason `RemainingBatchesLen` exists is to serve as a check, and issue a
warning when things are running.  Even though this matches the existing behavior this
log seems to overlap with the logs corresponding to Undecided Batches which already
log warnings or errors.  As a result this method, and the log that utilizes it, seem to
be unnecessary and should be removed to eliminate noise.

This change removes `RemainingBatchesLen` and the uses of it

* Add `RefreshSafeL1Origin` to `EspressoStreamer` interface

Based on feedback provided by @QuentinI: #230 (comment)

Since the `RefreshSafeL1Origin` method can potentially be utilized in some places that
do not require a full `Refresh`, and for convenience, it makes sense to allow it to be a
separately exposed method distinct from `Refresh`.

This change adds `RefreshSafeL1Origin` as a required method in the
`EspressoStreamer` interface.

* Fix missed renamed references

* Rename enclave smoke test

* Fix refreshSafeL1Origin logic for Buffered Streamer

The buffered streamer is resetting its read position far more than it needs to, ultimately
reproducing the same issue that was already occurring with the unbuffered version.

In inspecting the behavior with a debugger, it seems we're resetting the reset position
unnecessarily when we receive the same safeL1Origin again.  Additionally, the logic
for determining the read position when the safeL1Origin advances also seems flawed,
in that it is very likely to reset too far in the past.  We really want to keep our relative
read position unless we're explicitly told to Reset.

This change addresses these issues in order to try and smooth out the batches being
returned, and avoid unnecessary reprocessing of previous batches.

* Add Unit Tests for BufferedEspressoStreamer

Fix BufferedEspressoStreamer behavior

While adding unit tests for the BufferedEspressoStreamer it was noticed that the
position of the L2 and the L1 for the Buffer were being mixed together at times.  This
would ultimately lead to very difficult to detect bugs based on observed behavior
alone.

With the addition of the unit tests identifying the issue, the buffer adjustment
behavior has been adjusted to apply to the L2 position in isolation away from the
L1 positions.  The L1 positions will cause a larger Reset in the underlying logic.

* Rename tests (#236)

* Remove unneeded service http proxy for docker compose (#238)

* Fix `TestSmoke` failing on CI/CD (#237)

The sigp/lighthouse docker image was upgraded from version `v7.1.0` to
`v8.0.0-rc.0` on `2025-09-29`.  Since the image isn't anchored to a version, this
update gets pulled in, and it seems to have breaking changes with our previous
setup.

This change sets the version of the docker image used specifically to `v7.1.0` so
that the previous behavior we're used to is seen.

Additionally, when `TestSmoke` is running, it initially **MUST** download the images
for the docker containers that wer not built in the `Build Devnet` job.  This delays
the launch and running of the DevNet by quite a bit.

Fix this delay by adding a `docker compose pull` setp to `Build Devnet`

* Fix CI after rebasing celo-14 (#243)

* fix fast tests

* fix go version in dockerfile and ce in streamer_test.go

* update prepare-allocs.sh

* fix prepare-allocs.sh

* try to fix l1-geth docker

* fix op-stack dockerfile

* fix op-stack dockerfile

* try to fix l1-geth dockerfile

* fix config read

* try to fix l1-geth dockerfile

* try to fix challenger gamer

* TN5 withdrawal devnet test (#226)

* Add smoke test for devnet.
* Add test to ensure L2 funds can be withdrawn to L1.

---------

Co-authored-by: Theodore Schnepper <tschnepper@espressosys.com>

* Rename DevNet to E2eDevnet (#239)

* Rename DevNet to E2eDevnet

* Remove duplicate name

* Fix low gasLimit in L1 genesis (#241)

* update (#244)

* Streaming streamer (#235)

* Fix pcr0 extraction in docker compose script and correctly shutdown op-proposer-tee (#246)

* fix pcr0 extraction

* stopping op-proposer-tee in script

* revert to old pcr0 extraction as the new pattern breaks the old pattern

* try to fix pcr0 extraction

* upload op-proposer-tee

* Update metrics (#242)

* Update log level (#247)

* Decouple Espresso L1 & OP L1 (#248)

* Add back forgotten config when rebase celo-sync-14

* Fix prepare-allocs after rebasing celo-sync-14 (#250)

* remove doulbe init()

* try to fix prepare-allocs.sh

* enable more workflow

* Skip TestChallengerGame and TestWithdrawal (#251)

* Trigger docker-images workflow

* uncomment dasel put

* skip TestChallengeGame

* skip TestWithdrawal

* mise: Define fake install sources for disabled tools (ethereum-optimism#18109) (#254)

Co-authored-by: Adrian Sutton <adrian@oplabs.co>
(cherry picked from commit de37992)

* Change the logging level for the safe L2 number (#252)

* Update log level

* Reduce logging level

(cherry picked from commit dd97e4c)

* Respect espresso.fetch-api flag (#253)

(cherry picked from commit 6d00dcb)

* Readd devnet tests to CI. (#257)

* Readd devnet tests to CI.
*Fix for batcher restart test in CI.

(cherry picked from commit f37ea91)

* Add a log debouncer to op-service.log package (#259)

(cherry picked from commit 788d28f)

* Add netcat-openbsd to Dockerfile (#262)

* Update log level

* Add duplicate command from Terraform

(cherry picked from commit b775430)

* Add a devnet cleanup script (#261)

* Update log level

* Add cleanup script

* Remove unnecessary commands

(cherry picked from commit dc40b6c)

* Enable circleCI after rebase14 (#265)

* Fix .circleci/config.yaml and lint and most of circleCI tests after rebasing celo-sync-14
* Skip tests (in TEST_PKGS) that need auth or celo-specific rpc specified

---------

Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>

* Add origin height to Espresso streamer (#255)

* Clean up more loggings (#266)

* Reduce logs

* Remove one more log

* Skip attestation verification (#263)

* Update espresso-tee-contracts submodule to sishan/skip-attestation-verification

* Skip attestation verification to reduce gas costs

* Reduce L1 gas limit from 45M to 16M

* Update snapshots for registerSignerWithoutAttestationVerification

* Ignore lib/automate submodule directory

* fix CI

* Update espresso-tee-contracts submodule

Remove onlyOwner modifier from registerSignerWithoutAttestationVerification

* keep large gasLimit

* circleci: Enable workflow on all branches via API trigger

Allow CircleCI main workflow to run on any branch when triggered via API,
not just webhook triggers. This enables go-lint and go-tests to run on
feature branches.

* Regenerate semver-lock.json after rebase

The initCodeHash for BatchAuthenticator needed to be regenerated
after rebasing onto celo-integration-rebase-14.1.

---------

Co-authored-by: EC2 Default User <ec2-user@ip-172-31-47-181.us-east-2.compute.internal>

* Fix test TestChangeBatchInboxOwner (#264)

* Fix the test TestChangeBatchInboxOwner.
* Ensure the owner of the Batch Authenticator contract is initialized.

* Update README and relevant scripts (#269)

* Remove unused metrics (#273)

* Rename (#275)

* Improve image versioning and repo consistency (#276)

* Add githooks and env

* update path

* test hooks

* change wording

* include docker compose

* Create enclave ami for enclave test (#277)

* create enclave ami

* use new ami and restore the ci workflow and update enclave prepare ami script

* new AMI

* update readme

* Add devnet smoke test with TEE (#268)

* Add devnet smoke test with TEE

* Remove unnecessary extra timeout

* Add consts, remove incorrect setting

* Use consts

* Add missed file

* Blockscout running inside the local devnet (#281)

* Extend the local devnet with blockscout.

* Pinpoint versions of blockscout images.

* Blockscout fetching blocks from caff node.

* Build deployer image in CI

* Upate CI utils

* Saner 'confirmed' logging

* Don't error out on light client issues

* fix the name of deployer factory address

* Add a workaround for query service lag in real-world networks

* Generate more metadata

* More faithful compiler output in verifier

* Don't fall below hotshot origin height

* Remove cache buster to speed up docker image builds

* Adjust channel duration in devnet

* Jump ahead when origin is too low

* Add log line to matching Espresso txn to L2 block

* Fix semver lock

* Fix snapshot lock

* Support environment variables for channel parameters

* Enable EigenDaProxy & MEMSTORE (#274)

* Enable EigenDaProxy & MEMSTORE

* longer eigenda-proxy start period

* enable eigenda at the op-node level

* Don't copy artifacts to batcher image (#290)

* Refactor: replace MultiNode majority rule with SingleNode client and skip deprecated test.

* refactor: remove majority rule and switch to single Espresso client

* Skip deprecated TestEnforceMajorityRule (deprecated under SingleNode)

* Fallback Inbox contract changes (#278)

* Implement changes in the Batch Inbox / Batch Authenticator contracts to support a TEE and non TEE batcher.
* Add some unit tests for the Batch Authenticator and Batch Inbox contracts.
* Remove the failing Circle CI tests

* OP succint support (#287)

Deploy OP Succint contracts on L1.
Spins up op-succinct-challenger and op-succint-proposer services.
Adjust the devnet test `TestChallengeGame`.
Deletes the Demo we made to Celo Labs as we can now spin up a devnet with Blockscout.

* Update error handling (#289)

* Update error handling

* Fix typo

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

---------

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

* Document configuration of all services (#291)

* Add readme for config
* Insert image, add more description

* Support Sepolia Devnet with TEE (#288)

* update enclave-entrypoint.bash to correctly deal with external url

* preserve host name for external url

* Skip IsURLAvailable TCP check when using HTTP proxy

* skip VerifyCertTransaction for now

* reuse socat so that it can work for internal url

* comment and skip TestE2eDevnetWithInvalidAttestation

* OP Succinct: Making changes to the derivation pipeline (#293)

* Document how to make changes to the kona repository and propagate them.
* Reference new docker images for the op-succinct proposer and challenger.

* Fix op-succinct dependencies diagram. (#297)

* Simplify checks in the derivation pipeline (#296)

* Remove the superfluous check about the batcher address as now the Batch Inbox contract verifies the sender is legitimate.

* Removed nonexist logs (#298)

* Add support for ZK attestation service (#294)

* Add support for ZK attestation service

* check attestation service url is not nil

* upgrade espresso tee verifier contracts

* fix contracts

* fix merge

* fix tests

* bring back deploy aws nitro

* add support for mock contract

* add support for attestation verifier service

* fix tee tests

* use higher version of github runner

* fix tee args

* fix tee args

* add healthcheck to attestation verifier zk

* increase timeout

* Invalid attestation test passing

* small fixes

* fix TestE2eDevnetWithUnattestedBatcherKey

* fix health check

* fix devnet test

* use 127.0.0.1

* fix regex

* debug

* fix proof generation

* debug

* fix url

* fix url

* remove debug logs

* resolve based on comments

* address comments

* update github runner enclave

* fix based on suggestions

* cleanup logs

* Enable AltDA Espresso E2E using EigenDA Docker proxy (#295)

* Integrate EigenDA via Docker proxy for AltDA Espresso E2E tests

* Scope EigenDA lifecycle to the test and ensure clean startup/teardown

* Extract EigenDA Docker port and image into constants

* Downgrade Dasel (#303)

* Make attestation service url optional

* fix dasel

* fix dasel

* update dockerfiles

* make attestation service required again

* Make the withdraw devnet test pass again (#301)

* Withdraw test passing again on devnet.

* Faster CI

* Deposit into L1 before requesting the withdrawal on L2.

* Add migration related things to readme (#302)


---------

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

* Reducing logging when outputting the batch  (#304)

* update logging for the batch

* clean up

* Document code sync procedure (#308)

* Add code sync procedure

* Update links

* Fix format

* Rename files

* Update batchAuthenticator according to audit report (#309)

* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests

* Port ForcedTxs test into devnet test suite (#306)

* Simplify the test as we cannot in practice reduce the window size.

---------

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

* Reorder checks of isValidBatchTx in derivation pipeline (#310)

* remove warning on every failed tx

* reorder the checks

* Add fallback mechanism test (#305)

* 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>

* Philippe/fix withdraw flakiness (#312)

* Address flakiness.

* Simplify the code

* Fix CI

---------

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

* Use unified run-enclave.sh script for op-batcher-tee (#299)

* update single run-enclave.sh

* remove BATCHER_PRIVATE_KEY

* update run-enclave.sh

* Test fallback mechanism on devnet (#313)

* Recovery from fallback batcher (#315)

* Fallback recovery

* Add caff node

* Suggestions

* Make ZK Verifier Optional for E2E Testing (#321)

* 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.

* Tee support for EigenDA (#319)

* 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 Batcher Fallback: Channel Not Closed Test (#314)

* 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>

* Move diagram files (#326)

* Update Succinct image versions, update diagram (#329)

* Inactive Batcher Shouldn't Post (#316)

* 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>

* Removes PreRegisteredBatcher code (#327)

* Remove pre authenticated batcher

* fix test

* Update Succinct images

* Streamer namespace range 14.2 (#334)

* 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

* Enable and test Transparent proxy upgradability and batcher address update (#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

* Description for TestBatcherSwitching (#335)

* 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>

* Add cmd to shutdown all docker containers with TEE (#332)

* cmd to shutdown all services

* Small change to trigger CI

---------

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

* Guardians rebased (#345)

Co-authored-by: OpenCode <noreply@opencode.ai>

* Audit Document (#339)


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

* Security Analysis (#342)


---------

Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Fix and improve steps in the code sync doc (#344)

* Update doc

* Update kona default branch and fix links

* Fix typo

* Typos

---------

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

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Update moved crate

* Fix the build after rebase (#352)

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Remove duplicate import

* Fix go module flakiness

* Fix refactored types and functions

* Set light client

* Add timeouts for devnet tests

* Investigate test failure

* Fix integration tests 0

* Fix fallback batcher test

* Fix duplicate devnet running issue

* Specify artifact names

* Fix fmt

* Fix challenge game test

* Try fix batcher restart test

* Fix fallback test

* Fix test build

* Remove duplicate builds

* Fix parsing

* Fix duplicate l1-geth-image

* Increase timeout

* Fix fallback

* Fix batcher restart test

* Fix devnet tests 3 and 4

* Fix contracts

* Fix fmt

* More devnet tests

* More contract tests

* Update version for contract tests

* Fix fmt

* Fix foundry

* Fix CI for devnet tests

* Ignore warning

* Fix remaining contract tests

* Fix script

* Fix EOA path

* Fix devnet test command

* more yaml fix

* Fix docker compose spinup

* Remove blockscout

* Move blockscount to monitoring profile

* Free space

* More docker fix

* Fix more

* Fix more

* Add investigation log

* Fix beacon

* Fix timeout

* Fix docker compose dir

* Fix path

* More sequencer fixes

* Fix sequencer

* More CI fix

* Revert devnet test fixes

* Restore more devnet files

* Add back image fix

* Restore streamer

* Restore a devnet fix

* Restore ec2 test fix

* Restore l1 geth fix

* Fix throttle

* Restrict throttle fix scope

* Remove isActiveBatcher

* Remove unnecessary changes

* Restore fallback path fix

* Restore fmt fixes

* Ignore cache error

* Revert foundry version and fmt fixes

* remove fmt check

* fix: mise install (#366)

* Add back necessary contract files

* Fix contract workflow

* Address comments for espresso/docker

* Update espresso/scripts/run-tests-github-actions.sh

Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>

* Remove use of output file

* Remove path from contract names

* Restore more files

* Restore more files

* Revert IproxyAdmin changes

* Remove unneeded IProxyAdmin uses

* Remove more files

* Add back toml

* Add lock

* Replace build

* Fix build timeout

* Fix duplicate build

* Fix more

* Match Celo's changes

* Restore contract files

* Update batcher fallback test

* Improvement the comment

* Remove dead code

* More conflict fixes

* Fix test 11

* Address gemini comments

* Fix test 8

* Restore gotestsum

* Undo unnecessary changes

* Remove helper functions

* Add a missing file

* Improve sha256 installation

* Fix Dockerfile build

* Restore artifactsfs

* Fix Go version

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>
Co-authored-by: Philippe Camacho <philippe@espressosys.com>
Co-authored-by: Sishan Long <dlsubjam@gmail.com>
Co-authored-by: Jeb Bearer <jeb.bearer@gmail.com>
Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Theodore Schnepper <tschnepper@espressosys.com>
Co-authored-by: Adrian Sutton <adrian@oplabs.co>
Co-authored-by: EC2 Default User <ec2-user@ip-172-31-47-181.us-east-2.compute.internal>
Co-authored-by: Sneh Koul <snehkoul1999@gmail.com>
Co-authored-by: Jean Gal <45081726+jjeangal@users.noreply.github.com>
Co-authored-by: miguelCyclone <miguelhongo90@gmail.com>
Co-authored-by: Sneh Koul <35871990+Sneh1999@users.noreply.github.com>
Co-authored-by: OpenCode <noreply@opencode.ai>
Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
QuentinI added a commit that referenced this pull request Apr 9, 2026
* Build deployer image in CI

* Upate CI utils

* Saner 'confirmed' logging

* Don't error out on light client issues

* fix the name of deployer factory address

* Add a workaround for query service lag in real-world networks

* Generate more metadata

* More faithful compiler output in verifier

* Don't fall below hotshot origin height

* Remove cache buster to speed up docker image builds

* Adjust channel duration in devnet

* Jump ahead when origin is too low

* Add log line to matching Espresso txn to L2 block

* Fix semver lock

* Fix snapshot lock

* Support environment variables for channel parameters

* Enable EigenDaProxy & MEMSTORE (#274)

* Enable EigenDaProxy & MEMSTORE

* longer eigenda-proxy start period

* enable eigenda at the op-node level

* Don't copy artifacts to batcher image (#290)

* Refactor: replace MultiNode majority rule with SingleNode client and skip deprecated test.

* refactor: remove majority rule and switch to single Espresso client

* Skip deprecated TestEnforceMajorityRule (deprecated under SingleNode)

* Fallback Inbox contract changes (#278)

* Implement changes in the Batch Inbox / Batch Authenticator contracts to support a TEE and non TEE batcher.
* Add some unit tests for the Batch Authenticator and Batch Inbox contracts.
* Remove the failing Circle CI tests

* OP succint support (#287)

Deploy OP Succint contracts on L1.
Spins up op-succinct-challenger and op-succint-proposer services.
Adjust the devnet test `TestChallengeGame`.
Deletes the Demo we made to Celo Labs as we can now spin up a devnet with Blockscout.

* Update error handling (#289)

* Update error handling

* Fix typo

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

---------

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

* Document configuration of all services (#291)

* Add readme for config
* Insert image, add more description

* Support Sepolia Devnet with TEE (#288)

* update enclave-entrypoint.bash to correctly deal with external url

* preserve host name for external url

* Skip IsURLAvailable TCP check when using HTTP proxy

* skip VerifyCertTransaction for now

* reuse socat so that it can work for internal url

* comment and skip TestE2eDevnetWithInvalidAttestation

* OP Succinct: Making changes to the derivation pipeline (#293)

* Document how to make changes to the kona repository and propagate them.
* Reference new docker images for the op-succinct proposer and challenger.

* Fix op-succinct dependencies diagram. (#297)

* Simplify checks in the derivation pipeline (#296)

* Remove the superfluous check about the batcher address as now the Batch Inbox contract verifies the sender is legitimate.

* Removed nonexist logs (#298)

* Add support for ZK attestation service (#294)

* Add support for ZK attestation service

* check attestation service url is not nil

* upgrade espresso tee verifier contracts

* fix contracts

* fix merge

* fix tests

* bring back deploy aws nitro

* add support for mock contract

* add support for attestation verifier service

* fix tee tests

* use higher version of github runner

* fix tee args

* fix tee args

* add healthcheck to attestation verifier zk

* increase timeout

* Invalid attestation test passing

* small fixes

* fix TestE2eDevnetWithUnattestedBatcherKey

* fix health check

* fix devnet test

* use 127.0.0.1

* fix regex

* debug

* fix proof generation

* debug

* fix url

* fix url

* remove debug logs

* resolve based on comments

* address comments

* update github runner enclave

* fix based on suggestions

* cleanup logs

* Enable AltDA Espresso E2E using EigenDA Docker proxy (#295)

* Integrate EigenDA via Docker proxy for AltDA Espresso E2E tests

* Scope EigenDA lifecycle to the test and ensure clean startup/teardown

* Extract EigenDA Docker port and image into constants

* Downgrade Dasel (#303)

* Make attestation service url optional

* fix dasel

* fix dasel

* update dockerfiles

* make attestation service required again

* Make the withdraw devnet test pass again (#301)

* Withdraw test passing again on devnet.

* Faster CI

* Deposit into L1 before requesting the withdrawal on L2.

* Add migration related things to readme (#302)


---------

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

* Reducing logging when outputting the batch  (#304)

* update logging for the batch

* clean up

* Document code sync procedure (#308)

* Add code sync procedure

* Update links

* Fix format

* Rename files

* Update batchAuthenticator according to audit report (#309)

* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests

* Port ForcedTxs test into devnet test suite (#306)

* Simplify the test as we cannot in practice reduce the window size.

---------

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

* Reorder checks of isValidBatchTx in derivation pipeline (#310)

* remove warning on every failed tx

* reorder the checks

* Add fallback mechanism test (#305)

* 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>

* Philippe/fix withdraw flakiness (#312)

* Address flakiness.

* Simplify the code

* Fix CI

---------

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

* Use unified run-enclave.sh script for op-batcher-tee (#299)

* update single run-enclave.sh

* remove BATCHER_PRIVATE_KEY

* update run-enclave.sh

* Test fallback mechanism on devnet (#313)

* Recovery from fallback batcher (#315)

* Fallback recovery

* Add caff node

* Suggestions

* Make ZK Verifier Optional for E2E Testing (#321)

* 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.

* Tee support for EigenDA (#319)

* 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 Batcher Fallback: Channel Not Closed Test (#314)

* 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>

* Move diagram files (#326)

* Update Succinct image versions, update diagram (#329)

* Inactive Batcher Shouldn't Post (#316)

* 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>

* Removes PreRegisteredBatcher code (#327)

* Remove pre authenticated batcher

* fix test

* Update Succinct images

* Streamer namespace range 14.2 (#334)

* 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

* Enable and test Transparent proxy upgradability and batcher address update (#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

* Description for TestBatcherSwitching (#335)

* 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>

* Add cmd to shutdown all docker containers with TEE (#332)

* cmd to shutdown all services

* Small change to trigger CI

---------

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

* Guardians rebased (#345)

Co-authored-by: OpenCode <noreply@opencode.ai>

* Audit Document (#339)


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

* Security Analysis (#342)


---------

Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Fix and improve steps in the code sync doc (#344)

* Update doc

* Update kona default branch and fix links

* Fix typo

* Typos

---------

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

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Update moved crate

* Fix the build after rebase (#352)

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Remove duplicate import

* Fix go module flakiness

* Fix refactored types and functions

* Set light client

* Add timeouts for devnet tests

* Investigate test failure

* Fix integration tests 0

* Fix fallback batcher test

* Fix duplicate devnet running issue

* Specify artifact names

* Fix fmt

* Fix challenge game test

* Try fix batcher restart test

* Fix fallback test

* Fix test build

* Remove duplicate builds

* Fix parsing

* Fix duplicate l1-geth-image

* Increase timeout

* Fix fallback

* Fix batcher restart test

* Fix devnet tests 3 and 4

* Fix contracts

* Fix fmt

* More devnet tests

* More contract tests

* Update version for contract tests

* Fix fmt

* Fix foundry

* Fix CI for devnet tests

* Ignore warning

* Fix remaining contract tests

* Fix script

* Fix EOA path

* Fix devnet test command

* more yaml fix

* Fix docker compose spinup

* Remove blockscout

* Move blockscount to monitoring profile

* Free space

* More docker fix

* Fix more

* Fix more

* Add investigation log

* Fix beacon

* Fix timeout

* Fix docker compose dir

* Fix path

* More sequencer fixes

* Fix sequencer

* More CI fix

* Revert devnet test fixes

* Restore more devnet files

* Add back image fix

* Restore streamer

* Restore a devnet fix

* Restore ec2 test fix

* Restore l1 geth fix

* Fix throttle

* Restrict throttle fix scope

* Remove isActiveBatcher

* Remove unnecessary changes

* Restore fallback path fix

* Restore fmt fixes

* Ignore cache error

* Revert foundry version and fmt fixes

* remove fmt check

* fix: mise install (#366)

* Add back necessary contract files

* Fix contract workflow

* Address comments for espresso/docker

* Update espresso/scripts/run-tests-github-actions.sh

Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>

* Remove use of output file

* Remove path from contract names

* Restore more files

* Restore more files

* Revert IproxyAdmin changes

* Remove unneeded IProxyAdmin uses

* Remove more files

* Add back toml

* Add lock

* Replace build

* Fix build timeout

* Fix duplicate build

* Fix more

* Match Celo's changes

* Restore contract files

* Update batcher fallback test

* Improvement the comment

* Remove dead code

* More conflict fixes

* Fix test 11

* Address gemini comments

* Fix test 8

* Replace with rebase-16 contractd

* Merge in 14.2 changes

* Fix comma

* Temp remove fmt check

* Restore dropped 14.2 changes

* Fix build

* Temp allow unused parameter

* FIx duplicate artifact

* Remove duplicated opcm imports, undo profile change

* Temp: simplify with unchecked_cheatcode_artifacts

* Remove unchecked_cheatcode_artifacts

* Temp: update Setup and add unchecked_cheatcode_artifacts

* Update CI

* Restore CI and update Setup

* Add ligher build

* Update CI

* Move test build

* Fix CI again

* Use lite build

* Fix command in CI

* Add CI phases

* Remove espresso foundry setting, simplify fixes

* Restore fixes that worked

* Restore fixes that worked 2

* More tests

* Save CI changes

* Restore gotestsum

* Save fixes

* Undo unnecessary changes

* Remove helper functions

* Add a missing file

* Update forge version and other fixes

* Restore CI change

* Clean up foundry

* Clean up justifle and check-semver-diff

* Restore ignored errors

* Reduce timeout

* Restore unnecessary comment change

* Restore Proxy and solady

* Revert Proxy change

* Restore setup files

* Update a comment

* Restore batch inbox file

* Typo

* Clean up Espresso files

* Restore a fix

* Restore fixes to ec2 and integration tests

* Improve sha256 installation

* Fix Dockerfile build

* Restore artifactsfs

* Fix Go version

* Pin foundry version in nix flake

* Restore fmt check

* Remove newline

* Improve error handling

---------

Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>
Co-authored-by: Sneh Koul <snehkoul1999@gmail.com>
Co-authored-by: Jean Gal <45081726+jjeangal@users.noreply.github.com>
Co-authored-by: miguelCyclone <miguelhongo90@gmail.com>
Co-authored-by: Phil <philippe@espressosys.com>
Co-authored-by: Sishan Long <dlsubjam@gmail.com>
Co-authored-by: Sneh Koul <35871990+Sneh1999@users.noreply.github.com>
Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>
Co-authored-by: OpenCode <noreply@opencode.ai>
Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
QuentinI added a commit that referenced this pull request Apr 9, 2026
* Remove cache buster to speed up docker image builds

* Adjust channel duration in devnet

* Jump ahead when origin is too low

* Add log line to matching Espresso txn to L2 block

* Fix semver lock

* Fix snapshot lock

* Support environment variables for channel parameters

* Enable EigenDaProxy & MEMSTORE (#274)

* Enable EigenDaProxy & MEMSTORE

* longer eigenda-proxy start period

* enable eigenda at the op-node level

* Don't copy artifacts to batcher image (#290)

* Refactor: replace MultiNode majority rule with SingleNode client and skip deprecated test.

* refactor: remove majority rule and switch to single Espresso client

* Skip deprecated TestEnforceMajorityRule (deprecated under SingleNode)

* Fallback Inbox contract changes (#278)

* Implement changes in the Batch Inbox / Batch Authenticator contracts to support a TEE and non TEE batcher.
* Add some unit tests for the Batch Authenticator and Batch Inbox contracts.
* Remove the failing Circle CI tests

* OP succint support (#287)

Deploy OP Succint contracts on L1.
Spins up op-succinct-challenger and op-succint-proposer services.
Adjust the devnet test `TestChallengeGame`.
Deletes the Demo we made to Celo Labs as we can now spin up a devnet with Blockscout.

* Update error handling (#289)

* Update error handling

* Fix typo

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

---------

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

* Document configuration of all services (#291)

* Add readme for config
* Insert image, add more description

* Support Sepolia Devnet with TEE (#288)

* update enclave-entrypoint.bash to correctly deal with external url

* preserve host name for external url

* Skip IsURLAvailable TCP check when using HTTP proxy

* skip VerifyCertTransaction for now

* reuse socat so that it can work for internal url

* comment and skip TestE2eDevnetWithInvalidAttestation

* OP Succinct: Making changes to the derivation pipeline (#293)

* Document how to make changes to the kona repository and propagate them.
* Reference new docker images for the op-succinct proposer and challenger.

* Fix op-succinct dependencies diagram. (#297)

* Simplify checks in the derivation pipeline (#296)

* Remove the superfluous check about the batcher address as now the Batch Inbox contract verifies the sender is legitimate.

* Removed nonexist logs (#298)

* Add support for ZK attestation service (#294)

* Add support for ZK attestation service

* check attestation service url is not nil

* upgrade espresso tee verifier contracts

* fix contracts

* fix merge

* fix tests

* bring back deploy aws nitro

* add support for mock contract

* add support for attestation verifier service

* fix tee tests

* use higher version of github runner

* fix tee args

* fix tee args

* add healthcheck to attestation verifier zk

* increase timeout

* Invalid attestation test passing

* small fixes

* fix TestE2eDevnetWithUnattestedBatcherKey

* fix health check

* fix devnet test

* use 127.0.0.1

* fix regex

* debug

* fix proof generation

* debug

* fix url

* fix url

* remove debug logs

* resolve based on comments

* address comments

* update github runner enclave

* fix based on suggestions

* cleanup logs

* Enable AltDA Espresso E2E using EigenDA Docker proxy (#295)

* Integrate EigenDA via Docker proxy for AltDA Espresso E2E tests

* Scope EigenDA lifecycle to the test and ensure clean startup/teardown

* Extract EigenDA Docker port and image into constants

* Downgrade Dasel (#303)

* Make attestation service url optional

* fix dasel

* fix dasel

* update dockerfiles

* make attestation service required again

* Make the withdraw devnet test pass again (#301)

* Withdraw test passing again on devnet.

* Faster CI

* Deposit into L1 before requesting the withdrawal on L2.

* Add migration related things to readme (#302)


---------

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

* Reducing logging when outputting the batch  (#304)

* update logging for the batch

* clean up

* Document code sync procedure (#308)

* Add code sync procedure

* Update links

* Fix format

* Rename files

* Update batchAuthenticator according to audit report (#309)

* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests

* Port ForcedTxs test into devnet test suite (#306)

* Simplify the test as we cannot in practice reduce the window size.

---------

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

* Reorder checks of isValidBatchTx in derivation pipeline (#310)

* remove warning on every failed tx

* reorder the checks

* Add fallback mechanism test (#305)

* 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>

* Philippe/fix withdraw flakiness (#312)

* Address flakiness.

* Simplify the code

* Fix CI

---------

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

* Use unified run-enclave.sh script for op-batcher-tee (#299)

* update single run-enclave.sh

* remove BATCHER_PRIVATE_KEY

* update run-enclave.sh

* Test fallback mechanism on devnet (#313)

* Recovery from fallback batcher (#315)

* Fallback recovery

* Add caff node

* Suggestions

* Make ZK Verifier Optional for E2E Testing (#321)

* 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.

* Tee support for EigenDA (#319)

* 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 Batcher Fallback: Channel Not Closed Test (#314)

* 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>

* Move diagram files (#326)

* Update Succinct image versions, update diagram (#329)

* Inactive Batcher Shouldn't Post (#316)

* 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>

* Removes PreRegisteredBatcher code (#327)

* Remove pre authenticated batcher

* fix test

* Update Succinct images

* Streamer namespace range 14.2 (#334)

* 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

* Enable and test Transparent proxy upgradability and batcher address update (#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

* Description for TestBatcherSwitching (#335)

* 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>

* Add cmd to shutdown all docker containers with TEE (#332)

* cmd to shutdown all services

* Small change to trigger CI

---------

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

* Guardians rebased (#345)

Co-authored-by: OpenCode <noreply@opencode.ai>

* Audit Document (#339)


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

* Security Analysis (#342)


---------

Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Fix and improve steps in the code sync doc (#344)

* Update doc

* Update kona default branch and fix links

* Fix typo

* Typos

---------

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

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Update moved crate

* Fix the build after rebase (#352)

* Fix op-deployer build

* Fix go mod and duplicate flag

* Fix go-ffi

* Fix prepare-allocs

* Fix duplicate attribute in pipeline

* Fix test slice

* Fix builder version

* Set timeout for docker-images CI

* Fix devnet tests

* Add missing file

* Fix go version

* Fix go version

* Add missing address

* Use generic way to generate slice

* Fix go version for build-op CIs

* Fix dockerfile

* Continue devnet version fix

* Fix dockerfile

* More dockerfile fix

* More dockerfile fix

* Simplify changes

* More dockerfile fix

* More dockerfile fix

* Add missing event type

* Fix op-node

* Fix op-batcher

* Fix batcher TEE and proposer

* Remove unnecessary changes

* Address Gemini comment

* Restore rootClaim fix

* Remove duplicate flag

* Fix devnet build

* Fix go version, add timeout

* Remove duplicate import

* Fix go module flakiness

* Fix refactored types and functions

* Set light client

* Add timeouts for devnet tests

* Investigate test failure

* Fix integration tests 0

* Fix fallback batcher test

* Fix duplicate devnet running issue

* Specify artifact names

* Fix fmt

* Fix challenge game test

* Try fix batcher restart test

* Fix fallback test

* Fix test build

* Remove duplicate builds

* Fix parsing

* Fix duplicate l1-geth-image

* Increase timeout

* Fix fallback

* Fix batcher restart test

* Fix devnet tests 3 and 4

* Fix contracts

* Fix fmt

* More devnet tests

* More contract tests

* Update version for contract tests

* Fix fmt

* Fix foundry

* Fix CI for devnet tests

* Ignore warning

* Fix remaining contract tests

* Fix script

* Fix EOA path

* Fix devnet test command

* more yaml fix

* Fix docker compose spinup

* Remove blockscout

* Move blockscount to monitoring profile

* Free space

* More docker fix

* Fix more

* Fix more

* Add investigation log

* Fix beacon

* Fix timeout

* Fix docker compose dir

* Fix path

* More sequencer fixes

* Fix sequencer

* More CI fix

* Revert devnet test fixes

* Restore more devnet files

* Add back image fix

* Restore streamer

* Restore a devnet fix

* Restore ec2 test fix

* Restore l1 geth fix

* Fix throttle

* Restrict throttle fix scope

* Remove isActiveBatcher

* Remove unnecessary changes

* Restore fallback path fix

* Restore fmt fixes

* Ignore cache error

* Revert foundry version and fmt fixes

* remove fmt check

* fix: mise install (#366)

* Add back necessary contract files

* Fix contract workflow

* Address comments for espresso/docker

* Update espresso/scripts/run-tests-github-actions.sh

Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>

* Remove use of output file

* Remove path from contract names

* Restore more files

* Restore more files

* Revert IproxyAdmin changes

* Remove unneeded IProxyAdmin uses

* Remove more files

* Add back toml

* Add lock

* Replace build

* Fix build timeout

* Fix duplicate build

* Fix more

* Match Celo's changes

* Restore contract files

* Update batcher fallback test

* Improvement the comment

* Remove dead code

* More conflict fixes

* Fix test 11

* Address gemini comments

* Fix test 8

* Replace with rebase-16 contractd

* Merge in 14.2 changes

* Fix comma

* Temp remove fmt check

* Restore dropped 14.2 changes

* Fix build

* Temp allow unused parameter

* FIx duplicate artifact

* Remove duplicated opcm imports, undo profile change

* Temp: simplify with unchecked_cheatcode_artifacts

* Remove unchecked_cheatcode_artifacts

* Temp: update Setup and add unchecked_cheatcode_artifacts

* Update CI

* Restore CI and update Setup

* Add ligher build

* Update CI

* Move test build

* Fix CI again

* Use lite build

* Fix command in CI

* Add CI phases

* Remove espresso foundry setting, simplify fixes

* Restore fixes that worked

* Restore fixes that worked 2

* More tests

* Save CI changes

* Restore gotestsum

* Save fixes

* Undo unnecessary changes

* Remove helper functions

* Add a missing file

* Update forge version and other fixes

* Update devnet CI

* Revert 4 files to match Celo celo-rebase-16 exactly

DeployFeesDepositor, DeployPeriphery, SemverComp, Setup were modified to
work around vm.getCode strictness on Foundry 1.5.1, but CI is pinned to
1.2.3 (lenient) so the changes aren't needed there. Revert to minimize
diff vs Celo upstream.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Revert unneeded changes

* Try devnet fix

* Fix path

* Save devnet tests

* Fix devnet build

* Restore CI change

* Clean up foundry

* Clean up justifle and check-semver-diff

* Restore ignored errors

* Reduce timeout

* Restore unnecessary comment change

* Restore Proxy and solady

* Revert Proxy change

* Restore setup files

* Update a comment

* Restore batch inbox file

* Typo

* Clean up Espresso files

* Restore a fix

* Restore fixes to ec2 and integration tests

* Improve sha256 installation

* Fix Dockerfile build

* Restore artifactsfs

* Fix Go version

* Restore changes that are unnecessary

* Combine duplicate logic

* Move the fix to the compilation step

---------

Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>
Co-authored-by: Jean Gal <45081726+jjeangal@users.noreply.github.com>
Co-authored-by: miguelCyclone <miguelhongo90@gmail.com>
Co-authored-by: Phil <philippe@espressosys.com>
Co-authored-by: Sishan Long <dlsubjam@gmail.com>
Co-authored-by: Sneh Koul <35871990+Sneh1999@users.noreply.github.com>
Co-authored-by: Theodore Schnepper <Ayiga@MSN.com>
Co-authored-by: OpenCode <noreply@opencode.ai>
Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
shenkeyao added a commit that referenced this pull request Apr 21, 2026
* Fix version and configuration mismatch

The rebase from celo-tip made the celo-integration branch
go back a version on`github.com/minio/minio-go/v7` from
`v7.0.85` to `v7.0.84`.  Additionally, the devnet configuration
files ended up dropping the `participants` configurations.

This commit updates the version to what it was, and re-adds
the participants configurations in the devnet files.

* Initial script for running tests

* Fix batcher builds in CI

Pre-download rust dependency of Espresso Go SDK in CI builds

* Add instructions to clone the repository.

* Running tests with nix and mise

* Remove address from Sign method on ChainSigner

* Add Espresso Streamer to op-node

* Decouple L1 and Espresso submissions

Removes reliance on AltDA for Espresso integration
* Allows for simultaneous usage of Espresso and an AltDA provider
* Allows for immediate posting of blocks to Espresso instead of waiting
  for new frames on a channel
* When not using an alternative DA layer, L1 now receives full batch
  data instead of just the commitments

* Tests infrastructure improvements

* Fix cleanup in `espressoBatchLoadingLoop`

* Caff Node only allow finalized L1 Origin

* Add utilities and helpers to quickly spin up a test environment with `espresso-dev-node`

* Fix caff node double config and error handling

* Fix Kurtosis devnet error

* Refactoring of the Espresso Streamer

* Same logic for the Espresso Streamer used in the batcher and derivation pipeline
* Separate the interaction between Espresso nodes and the handling of batches
* Several TODOs / improvements will be addressed in another PR.

* Remove code related to Light Client contract

* Document fix for tool version mismatch

* Make E2E Espresso DevNet docker container work with Linux

* Streamer refactoring

Reduces code duplication and move more code to a separate package
by making Batch a type parameter of the streamer

* Refactor Streamer for Caff Node

* Document how to run Kurtosis espresso-devnet

* Add test checking L2 block to Espresso transaction conversion.

* Allow Caff node to make progress

* Clean up the use of light client except for HS state

* Add Deterministic Derivation Caff Node test

* Initial implementation of BatchInbox contract

* Test 7: stateless batcher

Note this test is flaky.

* Update the batcher to ensure finalized state from L1 (#111)

* Add wait for finality logic

* Add non initialization handling

* Update the logic

* Improve comments and error handling

* Fix build after merge

* Moving the l1 finality checks inside the CheckBatch function.

This reverts commit 7049ebd1ddcf44b40cf648f84d0dcdc9597c1af9.

* Appease the go linter for CI

---------

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

* Update  tests to ensure container is stopped

* Integration tests for batcher contracts (#110)

* Integration tests for batcher contracts

* Suggestions

* Lints

* Workaround for allocs

* Add missed case for graceful shutdown (#113)

* Remaining list  implementation (#114)

* Make streamer an object of the batcher. Reduce finalization distance to make tests faster.

* Correct logic for updating finalized L1 block number.

* Update espresso/environment/7_stateless_batcher_test.go

Co-authored-by: Artemii Gerasimovich <mbee@protonmail.ch>

* Add L1FinalizedDistance param to StartDevNet function.

---------

Co-authored-by: Artemii Gerasimovich <mbee@protonmail.ch>

Merge pull request #118 from EspressoSystems/ag/predeploy

* Add caff node L1 finality check

* Test 2: Liveness

* Add fallback HotShot position to the streamer

* Faster integration test 7 (#122)

* New instance of the streamer when restarting the batcher.

* Pinpoint espresso dev node docker image to release-color-colorful-snake.

* Wait for the next safe L2 block to make the test more robust.

* Test 3.2.1: Deterministic State

* Add Unit Tests for Espresso Streamer

* Add test to check speed guarantees while degraded

* Test 8: L1 reorg handling

* Test 8.1.1: Batcher reorg handling for unfinalized block

* Test 8.2.1: Caff node reorg handling for unfinalized block

* Test 4 confirmation integrity with reorg (#127)


---------

Co-authored-by: Theodore Schnepper <tschnepper@espressosys.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Update L1FinalizedDistance setting

* Simplify Caff Node L1 Finalized Block Fetcher Logic

* Improve Streamer Update Performance / Implementation

* Add tests for soft confirmation integrity

* Test 12: Enforce majority rule (#136)

* Replace the Espresso simple client with the Espresso multi-client in the batcher and the streamer.
* Use httptest library to spin up a test server.

* Add integration tests for batcher-contract interaction

* Test 3.3: Checks the derivation is fast and caff node is fast

* Test 3.2.2: Invalid Transaction

* Merge pull request #142 from EspressoSystems/ts/fix/2-liveness-with-degraded-performance

Adjust confirations for Caff Node Liveness Test

* Fix allocs.json (#137)

* Check the receipt of the transfer transaction at the end of the test. (#143)

This change makes the test faster and more reliable as now each iteration takes roughly the same amount of time.

* Test 9 pipeline enhancement (#134)

* Test 11: ensure forced transactions are handled (#139)

* Add a simple test

* Add more cases

* Add test for withdrawal, not passed yet

* More settings

* Remove an incorrect setting

* Add an import

* Split test

* Fix number format

* tmp push that fail the test

* a smallest workable version

* correct a comment

* still check l2verif and four withdrawal tests pass

* Simplify settiungs, remove todos

* Update balance check

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

* Remove deposit test

* Remove unused code

* Remove unused import

* Replace hard-coded sequencer role

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

---------

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

* Fix script to run the Espresso tests  (#147)

* Check the receipt of the transfer transaction at the end of the test.

* increase timeout

* fix test2 for my local errors

* revert changes on test2

* prevent parallelism

---------

Co-authored-by: dailinsubjam <dlsubjam@gmail.com>

* Make Test 2 Pass (#150)

* Fix inconsistent transaction count received

We don't have a way of knowing when we're really "done" in terms of
processing batches from the Espresso Streamer.  This means that we
also don't know when it's safe to start checking our invariants.

In order to address this effectively, this change modifies where the
initial signed transactions are created, so we can match the last
transaction in the decoded block.  This way we'll know we're done,
and it can provide a sufficient signal to start the test invariants.

* Adjust the success threshold to 17 seconds

The success threshold had been previous bumped up to 11 seconds.
However, even with this additional second, we are still seeing failures.
We still see failures occurring occasionally all the way up to 15 seconds.
In a previously run benchmark test, we saw that the max time for getting
a response when getting from L2 Sequencer Receipt to Caff Derived was
just shy of 17 seconds.  As a result, we are adjusting the acceptance
criteria of this to 17 seconds, while we try to dig further into the issue to
discover where the delays are coming from.

* Remove Caff Node Unnecessary Batch Checks (#146)

* remove

* change level from warn to error if failing caff node batch checks

* Add test for fast confirmation stability (#141)

* Add test for fast confirmation stability

This commit adds a test to check the stability and speed provided by the
caff node and the l1 derived verifier, and checks to ensure that they don't
vary too greatly depending on the load.

* Cleanup Benchmarker code

The benchmarker defines quite a lot of things that are not all grouped very
well.  These concepts should be split up into sensible groups.

Add Comments

The comments on the Benchmarker functions and primitives are lacking,
and incomplete.  Comments should be added to annotate, and document
the specific implementation details, and their reason for being.

Modify test benchmark statistics and variation targets

The benchmark statistics being checked against in the test have caff
receipt durations, and l2 verifier receipt durations that are weighted by
the total number of transactions in their respective blocks.  Additionally
these statistics lack any ability to track a block that does not contain the
submitted transactions.  This has been addressed by changing the
statistical measure computation.

The variation targets for the StdDev check were just set to 10% of the
mean.  This is a somewhat difficult target to pin down.  For now they have
been specified to not exceed 2 seconds instead.

* Change strategy for Transaction Submission to Espresso (#138)

* Add worker queue transaction submission to Espresso

The Workflow for submitting transactions to Espresso currently will
spawn an unbounded number of goroutines to submit transactions to
Espresso.  This can be incredibly resource heavy, and may end up
actually harming performance due to schedule thrashing.

This change adds a basic worker based implementation for processing
individual job requests for transaction submission and receipt verification.
This should help limit the total number of requests that are being
submitted to Espresso at any given time.

There are improvements that are able to be made to this, but this serves
as a basic implementation that matches what was happening originally
with one delay missing.

* Add 100ms delay in repeat transaction verification

When a transaction fails to verify, it will be added into the job queue and
reattempted without any delay between these attempts.  This can end up
with a potential DOS vector for multiple requests being attempted back
to back as soon as they are able to be performed.  There should be a
delay between these attempts, ideally without impacting other requests
that don't need to wait from continuing.

Add a 100ms delay to submission verification re-attempts.  This is not as
optimal as it could be and will prevent other jobs from coming in at the
moment.

Modify Espresso Submitter to respect shutdown

The Espresso Submitter should stop processing things when it is told
to do so by the Batcher.  The shutdownCtx governs whether things should
run or not.

The stop worker path has been modified to just utilize the same
WaitGroup and context as the other processes.

* Update comments and code based on feedback

The feedback from @philippecamacho has pointed out some
implementation details, and comments that were lacking, unfinished, or
lacked sufficient clarity.  These issues have been addressed where
immediately obvious, and not requiring further clarification.

* Update foundry.toml so that we can compile the contracts again (#159)

* Fix bug in TestCaffNodeWaitForFinality by adding a getter function to BatchBuffer. (#156)

* Rename LaunchDecaffNode to LaunchCaffNode (#158)

* Review TODO comments (#157)

* Update TODOs

* Add a task link

* Add instructions of setting up enclave-enabled instance to README_ESPRESSO (#152)

* Add instructions to set up an nitro ec2 instance

---------

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

* 6.2 Batcher tests in enclave (#144)

* Fix lints (#149)

* Rename Espresso contracts functions (#160)

* Increase log level to Error if a batch is assigned the BatchFuture constant  (#162)

The reason is that it should not happen as the CheckBatch does not return BatchFuture.

* Split attestation verification (#148)

* Update README_ESPRESSO.md (#163)

* Remove mises documentation as we need nix now for the enclave dependencies and nix does not require any manual step.

* Fixes for section about setting up the enclave.

* Add unit test on duplicate batch for Espresso streamer (#153)

* add duplicate batch test

* rebase

* add duplicate batch test

* Update espresso/streamer_test.go

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

* comment

---------

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

* Evaluate error types for retries (#161)

* Add retry evaluation

* Fix typo, update a comment

* Check specific msg

* Add comments

* Fix format

* Pinpoint go version in nix to 1.22.7 (#165)

* Pinpoint go version in nix to 1.22.7.

* Remove now unneeded comment in README_ESPRESSO.md

* Extra documentation related to setup of the enclave.

* Add AltDA test (#164)

* Add Espresso CI (#168)

* Fix contract checks (#171)

* Provide docker for deployment  (#167)

* Add docker compose and update dockerfile

* Add env, remove ports

* Remove optional script

* Fix build

* Fix in progress

* Fix services

* Fix l1 connection

* Add hash check, remove auto generated file

* Move to espresso dir

* Add genesis file

* Fix chain ID

* Add op-geth, fix hashes, remove l1 genesis file.

* Fix op geth, update hashes

* Fix caff node errors

* Commit jwt file as well

* Remove jwt

* Add L1 genesis file

* Add back l2 genesis file but rename it

* Update gitignore, remove unnecessary commands

* Update readme

* Update readme

* Test Fraud Proof Game Compatibility with Espresso (#170)

* add init version on dispute game test

* more comment and DRY

* Update espresso/environment/13_dispute_game_test.go

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

* make sure caff node can make progress

* simplify caff node wait logic

* clean up

---------

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

* Fix AltDA batcher (#174)

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

* Github actions workflow for enclave test (#175)

* Github actions workflow for running the enclave test in an EC2 instance
* Update README_ESPRESSO.md

* Run full Espresso integration suite in CI (#172)

* Update Espresso Go SDK to 0.2.1 (#176)

* init update to Go SDK 0.2.1

* can pass tests

* add go sdk version param

* solve multiClientCreation error and circleCI

* fix espressoClient creation for caff node and add safeguard log when streamer is nil

* adapt to new client to have at least two urls

* update docker as well (#178)

* add comments on at least 2 urls

* fix another single url

* fix docker compose single url

* fix docker compose caff single url

* allow a bit larger variance in the receipt to L1 time of integration test 1

* tweak docker compose file

* also tweak caff hotshot urls

* fix appendArg of BatcherMod in LaunchBatcherInEnclave()

* add sha256sum check to dockerfile

* check espresso go crypto helper sha256sum in a more elegant way

* Refactor code for readability [redux] (#181)

Co-authored-by: Theodore Schnepper <tschnepper@espressosys.com>

* IA1.2.1 Fix OP node services (#184)

* Save parameter fixes

* Add fixes

* All services running again.

* Fix timestamp and increase dev period

* Install pnpm with nix.

* More cleanups

* Revert go.mod, fix install syntax, add const env, add more comments

* Add env file

* Rename env file, add doc for verison upgrade

* Revert a service renaming

---------

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

* Improve gitHub action enclave test (#183)

* Refactor running tests in EC2 instance.

* Pinpoint version of aws-nitro-enclaves-cli

* Fix bug #4736 of foundry. Faster execution of commands inside nix shell.

* Cachix configuration

* Use pre-installed AMI.

* Update AWS Account (#188)

* Reduce cumulative diff with Celo (#192)

* Enclave-tools (#187)

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

* Document on interesting log lines (#190)

* IA1.2.4 Generate dockers for the l1, dev node, OP Geth, and OP node services (#182)

* Fix services except the nonce

* Simpify manual work

* Save fixes WIP

* Revert dockerfile change

* Save parameter fixes

* Add fixes

* All services running again.

* Fix timestamp and increase dev period

* Install pnpm with nix.

* More cleanups

* Revert go.mod, fix install syntax, add const env, add more comments

* Add env file

* Fix after merge

* Add changes for l1 terraform

* Update for op-geth

* Fix op node related docker

* Add SHA check

* Add a TODO

* Add jwt back

* Create GH actions workflow

* Fix tag

* Fix path and tag

* Add init scripts

* Fix paths and settings after adding init scripts

* Fix path for CI workflow

* Move files

* Reorder commands

* Fix path

* More path update

---------

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

* Fix kurtosis devnet and Reduce CI flakiness (#197)

* Redo https://github.com/EspressoSystems/optimism-espresso-integration/pull/191 and https://github.com/EspressoSystems/optimism-espresso-integration/pull/195

* try to fix flaky enclave test

* IA1.2.8 Fix docker images (#198)

* Fix image path

* Force initialization, undo path changes

* Use address for test

* Update hash

* Predeployed OP contracts on testnet (#199)

* Working devnet

* Fix op-proposer

* Wait for genesis

---------

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

* IA1.2.5 Generate dockers for the Caff node, OP deployer, and OP batcher services (#203)

* Working devnet

* Update dockers for l1 services

* Fix op-proposer

* Fix node js script

* Remove npm from script

* Install foundry

* Add op-deployer path

* Install dasel

* Fix reshape-allocs script

* Continue fixing reshape-allocs script

* Continue fixing reshape-allocs script

* Convert branch name

* Undo branch name change

* Fix typo

* Fix dockerfile for l1-genesis

* Update dockerfile for op-geth

* More conflicts

* More conflicts

* Fix l2-genesis

* Fix context path

* Fix deployer for terraform

* Fix path

* More fixes and rebuild

* Add preparation scripts to l2 CI

* Fix l1 rpc path

* Move l2-rollup command to dockerfile

* Add config path in docker for op-node

* Add preparation steps to op-node CI

* Add l2-config to CI

* Force jwt

* Remove newline

* Add image for batcher

* Add CI for batcher

* Restore servcie order

---------

Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>

* Fix op-proposer configuration for docker-compose.yml (#207)

* Update GAME_FACTORY to use proxy dispute game factory address

* Fix incorrect path string in GAME_FACTORY settings

* Add Espresso contract configs to prepare-allocs

The prepare-allocs.sh script doesn't currently have the Espresso Smart Contracts
enabled.

This change enables the contract and sets the preApprovedBatcherKey to work in
a non-TEE environment.

* Modify game-type for op-proposer

The default game type when the `game-type` parameter is unspecified is `0`.  By
default there does not seem to be a `Dispute Game` deployed for `game-type` `0`,
however, other game types do exist, including `game-type` `1`.

This change sets the `game-type` of the `op-proposer` to `1` for the
`docker-compose.yml` file.

* Specify a `create2Salt` value for espresso deployment

When the `op-deployer` performs the `apply` operation, it utilizes the values in the
`state.json` file to inform how it should behave.  Namely among these is the
`create2Salt` value.  The `op-deployer` utilizes the `create2` method for
performing deployments according to specifications.  This salt value is utilized and
helps to assist in determining the resulting contract addresses.  For convenience, it
would be nice to have some deterministic values to test against for repeatability.

This change modifies the `state.json` file before running `op-deployer` `apply`
in order to ensure that we can see deterministic contract address generation.

* Co-authored-by: Cursor <cursoragent@cursor.com>

* TA1: Add devnet test for batcher restart (#204)

* Add devnet test for batcher restart

* Check error returns

* Separate op-geth instances for each L2 node

* Build devnet dockers in CI

* Build op-deployer in CI

* Try larger runner

* Increase test outage and recovery time

* Try to speed up transaction verification

* Do not drop batches before we have seen a finalized L1 block

* Remove unnecessary sleep

* Build containers in dependency order

* Don't copy config file into Docker image at build time

* Checkout submodules in CI

* Don't copy config file into Docker image at build time

* Run devnet test in separate workflow

* IA1.2.11 Write scripts and documentation for demo (#211)

* Add devnet test for batcher restart

* Check error returns

* Separate op-geth instances for each L2 node

* Build devnet dockers in CI

* Build op-deployer in CI

* Try larger runner

* Increase test outage and recovery time

* Try to speed up transaction verification

* Do not drop batches before we have seen a finalized L1 block

* Remove unnecessary sleep

* Add scripts for demo and documentation

* Build containers in dependency order

* Don't copy config file into Docker image at build time

* Fix syntax

* Checkout submodules in CI

* Don't copy config file into Docker image at build time

* Remove another COPY

* Run devnet test in separate workflow

* Add exposed ports for more nodes in docker-compose

The `verifier`, `caff-node`, and `sequencer` all do not have their ports forwarded to
the host machine.  Having these ports exposed can make testing / debugging easier
by utilizing the optimism RPC API.

This change exposes these ports.

* Fix CAFF environment variables

The CAFF environment variables utilized in the `docker-compose.yml` need to have
a prefix of `OP_NODE_`, otherwise they will not apply.  These not applying causes
the `caff-node` to never make progress.

This change corrects the misconfigured `caff-node` environment variables, and
cleans up an unnecessary one.

* Set `caff.node` to `true` for `caff-node`

The `caff-node` is meant to be running a derivation based on information retrieved
from Espresso's network.  However, it needs to be enabled to do so.  This change
enables the `caff-node`'s mode by explicitly setting `caff.node` to `true` in the
launch configuration.

* Support alias and input check

* Add scripts and instructions for running utility script

In order to showcase the speed and progress of the Espresso solution with the Caff
node, versus the existing sequencer, or the L1 derived verifier, a script has been
added that utilities `watch` and `tmux` to provide a nice visual comparison between
the three nodes.

* Update scripts after separating geth

* Update readme

* tmux in flake.nix

* Update shell being targeted in get_sync_status.sh

The `get_sync_status.sh` script attempts to target `zsh` residing within `/bin/zsh`,
but this isn't a universally available. It is better to target a more commonly available
like `/bin/bash`.

This change modifies the script to target `/bin/bash` instead of `/bin/zsh`.

---------

Co-authored-by: Jeb Bearer <jeb@espressosys.com>
Co-authored-by: Theodore Schnepper <tschnepper@espressosys.com>
Co-authored-by: Philippe Camacho <philippe@espressosys.com>

* Fix list iteration (#212)

* IA1.2.10 Update docker for OP proposer (#209)

* Working devnet

* Update dockers for l1 services

* Fix op-proposer

* Fix node js script

* Remove npm from script

* Install foundry

* Add op-deployer path

* Install dasel

* Fix reshape-allocs script

* Continue fixing reshape-allocs script

* Continue fixing reshape-allocs script

* Convert branch name

* Undo branch name change

* Fix typo

* Fix dockerfile for l1-genesis

* Update dockerfile for op-geth

* More conflicts

* More conflicts

* Fix l2-genesis

* Fix context path

* Fix deployer for terraform

* Fix path

* More fixes and rebuild

* Add preparation scripts to l2 CI

* Fix l1 rpc path

* Move l2-rollup command to dockerfile

* Add config path in docker for op-node

* Add preparation steps to op-node CI

* Add l2-config to CI

* Force jwt

* Remove newline

* Add image for batcher

* Add CI for batcher

* Restore servcie order

* Add image for proposer

* Copy deployer dir

* Add game address fix

* Combine duplicate image scripts

* Update to v4

* Restore login verison

* Fix deployment artifacts

* Add dependency

* Add file path

* Fix file copy

* UPdate init

* Update GAME_FACTORY to use proxy dispute game factory address

* Fix incorrect path string in GAME_FACTORY settings

* Add Espresso contract configs to prepare-allocs

The prepare-allocs.sh script doesn't currently have the Espresso Smart Contracts
enabled.

This change enables the contract and sets the preApprovedBatcherKey to work in
a non-TEE environment.

* Modify game-type for op-proposer

The default game type when the `game-type` parameter is unspecified is `0`.  By
default there does not seem to be a `Dispute Game` deployed for `game-type` `0`,
however, other game types do exist, including `game-type` `1`.

This change sets the `game-type` of the `op-proposer` to `1` for the
`docker-compose.yml` file.

* Specify a `create2Salt` value for espresso deployment

When the `op-deployer` performs the `apply` operation, it utilizes the values in the
`state.json` file to inform how it should behave.  Namely among these is the
`create2Salt` value.  The `op-deployer` utilizes the `create2` method for
performing deployments according to specifications.  This salt value is utilized and
helps to assist in determining the resulting contract addresses.  For convenience, it
would be nice to have some deterministic values to test against for repeatability.

This change modifies the `state.json` file before running `op-deployer` `apply`
in order to ensure that we can see deterministic contract address generation.

* Add dependency

* Copy deployment artifacts

* Add scripts for demo and documentation

* Fix syntax

* Remove another COPY

* Add exposed ports for more nodes in docker-compose

The `verifier`, `caff-node`, and `sequencer` all do not have their ports forwarded to
the host machine.  Having these ports exposed can make testing / debugging easier
by utilizing the optimism RPC API.

This change exposes these ports.

* Fix CAFF environment variables

The CAFF environment variables utilized in the `docker-compose.yml` need to have
a prefix of `OP_NODE_`, otherwise they will not apply.  These not applying causes
the `caff-node` to never make progress.

This change corrects the misconfigured `caff-node` environment variables, and
cleans up an unnecessary one.

* Set `caff.node` to `true` for `caff-node`

The `caff-node` is meant to be running a derivation based on information retrieved
from Espresso's network.  However, it needs to be enabled to do so.  This change
enables the `caff-node`'s mode by explicitly setting `caff.node` to `true` in the
launch configuration.

* Support alias and input check

* Undo changes to fix the build and make progress

* Fix CI

* Remove commented-out code

---------

Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>
Co-authored-by: Theodore Schnepper <tschnepper@espressosys.com>

* Fix caff-node stalling (#213)

* Revert timing changes for beacon

* just command to run the devnet tests.

* Comment out running the devnet tests in CI.

---------

Co-authored-by: Philippe Camacho <philippe@espressosys.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Support timestamp env var (#218)

* IL3 Remove redundant "Walking back L1Block" and "will retry" logs (#221)

* Remove logs

* Restore driver log

* Remove retry log

* Restore a log

* Skip BatchFuture (#217)

* Fix length check (#216)

* IA1.6.1 Add batcher service running in TEE  (#205)

* a working script without args

* a working script without args

* everything works in the scripts despite the args

* fix socat proxy script

* working op-batcher inside docker-compose

* rename the script to build batcher enclave image

* cleanup and profile the op-batcher-non-tee

* use port number from env and shorten nc listener timeout as it will not be used in most cases

* fix dasel format

* remove uneeded ESPRESSO_RUN_ENCLAVE_TESTS

* fix scripts

* Add op-batcher-tee image in CI (#210)

* push op-batcher-tee image init

* fix tag and push

* test image creation without enclaver

* try to use env

* fix enclaver download

* use env in docker images yml

* restore other task

* remove unneeded steps

* special case to common case

* use default for op-batcher and tee for op-batcher-tee

* fix double ports mapping

* fix batcher restart test

* add a script to use enclave tool

* works to some extend

* also works for passing in arguments from cmd

* try to upload the image

* add my branch patter

* fix dockerfile

* a simplified version

* adding packages/contracts-bedrock/forge-artifacts to op-batcher-enclave-target

* PCR0 registered in op-batcher-tee docker compose and add monitor for enclave logs

* copy deployment/ to op-batcher-enclave-target

* fix docker-images

* Remove unneeded script

* remove unneeded script and cleanup readme

* fix overlapping ports and move long cmd of op-batcher-tee to script

* update readme

* Fix batcher restart test (#222)

* Fix batcher restart test

* Tune parameters to be more realistic (in particular, increasing
  parallelism to reduce bottleneck on slow L1)
* Improve logging

* Fix go lint

* Download binaries for appropriate architecture in Docker images (#223)

* Add key rotation tests (#224)

* Remove a Caff node comment (#225)

* Remove a comment

* Restore devnet test in CI

* Disable the CI again

* Bump github.com/ulikunitz/xz from 0.5.12 to 0.5.14 (#220)

Bumps [github.com/ulikunitz/xz](https://github.com/ulikunitz/xz) from 0.5.12 to 0.5.14.
- [Commits](https://github.com/ulikunitz/xz/compare/v0.5.12...v0.5.14)

---
updated-dependencies:
- dependency-name: github.com/ulikunitz/xz
  dependency-version: 0.5.14
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Test a challenge game in the docker devnet (#228)

* Add test for devnet challenge game

* Fixes

* Make sure batcher key used by default in the devnet tests is the
  same one registered in the inbox contract
* Remove check in batcher that prevents it from sending transactions
  to Espresso immediately

* Ensures that the deployment files are deleted before building a new devnet. Update README_ESPRESSO.md to remind running docker as a non root user.

* Run devnet tests on CI again.

* Ensure deployment files are not written by the root user.

* Ignore rotate batcher key and change batch inbox owmer tests.

* Clean way of setting UID and GID.

* Ignore devnet tests for now so that we can merge.

* Add fallback values for UID and GID.

* Pinpoint forge version in CI as the linter is complaining.

* Add comment regarding the number of claims.

* Add comment to function TaggedWriter.Write.

---------

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

* Run smoke devnet test in CI (#231)

* Add smoke test for devnet.
* Run Game Challenge and smoke test in CI.
* Run all the devnet tests locally.

* push (#232)

* forget this commit (#233)

* Add a Buffered Streamer around Espresso Streamer for batcher (#230)

* Add a Buffered Streamer around Espresso Streamer for batcher

Because the `EspressoStreamer` is getting `Reset` during the Batcher process when
building a batch to submit to the `L1`, it hinders progress of the chain in a reasonable
amount of time, which ultimately causes it to stop creating non-empty blocks.

There are a number of factors that are contributing to this issue, but ultimately the
`Reset` is causing the `EspressoStreamer` to restart from `0` and it takes too long
before it catches back up to the next expected batch.

To remedy this, a Buffer can be used to mitigate this `Reset` and revert to a point
that is much closer to the desired next batch.

In testing it has been observed that the `SafeL2` can sometimes move backwards.  To
safe guard against this, it is better to `Reset` to the `FinalizedL2` position instead of
the `SafeL2` as this behavior has not been observed there.

* Rename EspressoStreamer and EspressoStreamerIFace

Based on feedback provided by @QuentinI in PR review:
https://github.com/EspressoSystems/optimism-espresso-integration/pull/230#discussion_r2345028112

The name `EspressoStreamerIFace` is quite a long name, and the `IFace` suffix isn't
necessary since one could tell it's an `interface` by inspection, or using an `LSP`. The
feedback provided by @QuentinI suggested to rename `EspressoStreamerIFace` to
just `EspressoStreamer` so that it falls in line with our other code approaches.

This change renames `EspressoStreamer` to `BatchStreamer`

This change renames `EspressoStreamerIFace` to `EspressoStreamer`.

* Remove `RemainingBatchesLen` method

Based on feedback received from @QuentinI: https://github.com/EspressoSystems/optimism-espresso-integration/pull/230#discussion_r2345037174

The only reason `RemainingBatchesLen` exists is to serve as a check, and issue a
warning when things are running.  Even though this matches the existing behavior this
log seems to overlap with the logs corresponding to Undecided Batches which already
log warnings or errors.  As a result this method, and the log that utilizes it, seem to
be unnecessary and should be removed to eliminate noise.

This change removes `RemainingBatchesLen` and the uses of it

* Add `RefreshSafeL1Origin` to `EspressoStreamer` interface

Based on feedback provided by @QuentinI: https://github.com/EspressoSystems/optimism-espresso-integration/pull/230#discussion_r2345442127

Since the `RefreshSafeL1Origin` method can potentially be utilized in some places that
do not require a full `Refresh`, and for convenience, it makes sense to allow it to be a
separately exposed method distinct from `Refresh`.

This change adds `RefreshSafeL1Origin` as a required method in the
`EspressoStreamer` interface.

* Fix missed renamed references

* Rename enclave smoke test

* Fix refreshSafeL1Origin logic for Buffered Streamer

The buffered streamer is resetting its read position far more than it needs to, ultimately
reproducing the same issue that was already occurring with the unbuffered version.

In inspecting the behavior with a debugger, it seems we're resetting the reset position
unnecessarily when we receive the same safeL1Origin again.  Additionally, the logic
for determining the read position when the safeL1Origin advances also seems flawed,
in that it is very likely to reset too far in the past.  We really want to keep our relative
read position unless we're explicitly told to Reset.

This change addresses these issues in order to try and smooth out the batches being
returned, and avoid unnecessary reprocessing of previous batches.

* Add Unit Tests for BufferedEspressoStreamer

Fix BufferedEspressoStreamer behavior

While adding unit tests for the BufferedEspressoStreamer it was noticed that the
position of the L2 and the L1 for the Buffer were being mixed together at times.  This
would ultimately lead to very difficult to detect bugs based on observed behavior
alone.

With the addition of the unit tests identifying the issue, the buffer adjustment
behavior has been adjusted to apply to the L2 position in isolation away from the
L1 positions.  The L1 positions will cause a larger Reset in the underlying logic.

* Rename tests (#236)

* Remove unneeded service http proxy for docker compose (#238)

* Fix `TestSmoke` failing on CI/CD (#237)

The sigp/lighthouse docker image was upgraded from version `v7.1.0` to
`v8.0.0-rc.0` on `2025-09-29`.  Since the image isn't anchored to a version, this
update gets pulled in, and it seems to have breaking changes with our previous
setup.

This change sets the version of the docker image used specifically to `v7.1.0` so
that the previous behavior we're used to is seen.

Additionally, when `TestSmoke` is running, it initially **MUST** download the images
for the docker containers that wer not built in the `Build Devnet` job.  This delays
the launch and running of the DevNet by quite a bit.

Fix this delay by adding a `docker compose pull` setp to `Build Devnet`

* Fix CI after rebasing celo-14 (#243)

* fix fast tests

* fix go version in dockerfile and ce in streamer_test.go

* update prepare-allocs.sh

* fix prepare-allocs.sh

* try to fix l1-geth docker

* fix op-stack dockerfile

* fix op-stack dockerfile

* try to fix l1-geth dockerfile

* fix config read

* try to fix l1-geth dockerfile

* try to fix challenger gamer

* TN5 withdrawal devnet test (#226)

* Add smoke test for devnet.
* Add test to ensure L2 funds can be withdrawn to L1.

---------

Co-authored-by: Theodore Schnepper <tschnepper@espressosys.com>

* Rename DevNet to E2eDevnet (#239)

* Rename DevNet to E2eDevnet

* Remove duplicate name

* Fix low gasLimit in L1 genesis (#241)

* update (#244)

* Streaming streamer (#235)

* Fix pcr0 extraction in docker compose script and correctly shutdown op-proposer-tee (#246)

* fix pcr0 extraction

* stopping op-proposer-tee in script

* revert to old pcr0 extraction as the new pattern breaks the old pattern

* try to fix pcr0 extraction

* upload op-proposer-tee

* Update metrics (#242)

* Update log level (#247)

* Decouple Espresso L1 & OP L1 (#248)

* Add back forgotten config when rebase celo-sync-14

* Fix prepare-allocs after rebasing celo-sync-14 (#250)

* remove doulbe init()

* try to fix prepare-allocs.sh

* enable more workflow

* Skip TestChallengerGame and TestWithdrawal (#251)

* Trigger docker-images workflow

* uncomment dasel put

* skip TestChallengeGame

* skip TestWithdrawal

* mise: Define fake install sources for disabled tools (#18109) (#254)

Co-authored-by: Adrian Sutton <adrian@oplabs.co>
(cherry picked from commit de379923fec7d82c5199c816dc2746d49f5ad84a)

* Change the logging level for the safe L2 number (#252)

* Update log level

* Reduce logging level

(cherry picked from commit dd97e4c2786d1c532bee84c06f21262cf468bc7d)

* Respect espresso.fetch-api flag (#253)

(cherry picked from commit 6d00dcb1e8a3d7f35362dff334230e575a1cf3f7)

* Readd devnet tests to CI. (#257)

* Readd devnet tests to CI.
*Fix for batcher restart test in CI.

(cherry picked from commit f37ea91bfa5ae13eb353effe73fd8a22bb35d466)

* Add a log debouncer to op-service.log package (#259)

(cherry picked from commit 788d28f485dc57691b72e4098b842da42451e549)

* Add netcat-openbsd to Dockerfile (#262)

* Update log level

* Add duplicate command from Terraform

(cherry picked from commit b775430bc8f2f83936194539f45495a693837cb4)

* Add a devnet cleanup script (#261)

* Update log level

* Add cleanup script

* Remove unnecessary commands

(cherry picked from commit dc40b6c5ae51d8e4a88c5dfacf28986f92ecf859)

* Enable circleCI after rebase14 (#265)

* Fix .circleci/config.yaml and lint and most of circleCI tests after rebasing celo-sync-14
* Skip tests (in TEST_PKGS) that need auth or celo-specific rpc specified

---------

Co-authored-by: Artemii Gerasimovich <artemii@espressosys.com>

* Add origin height to Espresso streamer (#255)

* Clean up more loggings (#266)

* Reduce logs

* Remove one more log

* Skip attestation verification (#263)

* Update espresso-tee-contracts submodule to sishan/skip-attestation-verification

* Skip attestation verification to reduce gas costs

* Reduce L1 gas limit from 45M to 16M

* Update snapshots for registerSignerWithoutAttestationVerification

* Ignore lib/automate submodule directory

* fix CI

* Update espresso-tee-contracts submodule

Remove onlyOwner modifier from registerSignerWithoutAttestationVerification

* keep large gasLimit

* circleci: Enable workflow on all branches via API trigger

Allow CircleCI main workflow to run on any branch when triggered via API,
not just webhook triggers. This enables go-lint and go-tests to run on
feature branches.

* Regenerate semver-lock.json after rebase

The initCodeHash for BatchAuthenticator needed to be regenerated
after rebasing onto celo-integration-rebase-14.1.

---------

Co-authored-by: EC2 Default User <ec2-user@ip-172-31-47-181.us-east-2.compute.internal>

* Fix test TestChangeBatchInboxOwner (#264)

* Fix the test TestChangeBatchInboxOwner.
* Ensure the owner of the Batch Authenticator contract is initialized.

* Update README and relevant scripts (#269)

* Remove unused metrics (#273)

* Rename (#275)

* Improve image versioning and repo consistency (#276)

* Add githooks and env

* update path

* test hooks

* change wording

* include docker compose

* Create enclave ami for enclave test (#277)

* create enclave ami

* use new ami and restore the ci workflow and update enclave prepare ami script

* new AMI

* update readme

* Add devnet smoke test with TEE (#268)

* Add devnet smoke test with TEE

* Remove unnecessary extra timeout

* Add consts, remove incorrect setting

* Use consts

* Add missed file

* Blockscout running inside the local devnet (#281)

* Extend the local devnet with blockscout.

* Pinpoint versions of blockscout images.

* Blockscout fetching blocks from caff node.

* Build deployer image in CI

* Upate CI utils

* Saner 'confirmed' logging

* Don't error out on light client issues

* fix the name of deployer factory address

* Add a workaround for query service lag in real-world networks

* Generate more metadata

* More faithful compiler output in verifier

* Don't fall below hotshot origin height

* Remove cache buster to speed up docker image builds

* Adjust channel duration in devnet

* Jump ahead when origin is too low

* Add log line to matching Espresso txn to L2 block

* Fix semver lock

* Fix snapshot lock

* Support environment variables for channel parameters

* Enable EigenDaProxy & MEMSTORE (#274)

* Enable EigenDaProxy & MEMSTORE

* longer eigenda-proxy start period

* enable eigenda at the op-node level

* Don't copy artifacts to batcher image (#290)

* Refactor: replace MultiNode majority rule with SingleNode client and skip deprecated test.

* refactor: remove majority rule and switch to single Espresso client

* Skip deprecated TestEnforceMajorityRule (deprecated under SingleNode)

* Fallback Inbox contract changes (#278)

* Implement changes in the Batch Inbox / Batch Authenticator contracts to support a TEE and non TEE batcher.
* Add some unit tests for the Batch Authenticator and Batch Inbox contracts.
* Remove the failing Circle CI tests

* OP succint support (#287)

Deploy OP Succint contracts on L1.
Spins up op-succinct-challenger and op-succint-proposer services.
Adjust the devnet test `TestChallengeGame`.
Deletes the Demo we made to Celo Labs as we can now spin up a devnet with Blockscout.

* Update error handling (#289)

* Update error handling

* Fix typo

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

---------

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

* Document configuration of all services (#291)

* Add readme for config
* Insert image, add more description

* Support Sepolia Devnet with TEE (#288)

* update enclave-entrypoint.bash to correctly deal with external url

* preserve host name for external url

* Skip IsURLAvailable TCP check when using HTTP proxy

* skip VerifyCertTransaction for now

* reuse socat so that it can work for internal url

* comment and skip TestE2eDevnetWithInvalidAttestation

* OP Succinct: Making changes to the derivation pipeline (#293)

* Document how to make changes to the kona repository and propagate them.
* Reference new docker images for the op-succinct proposer and challenger.

* Fix op-succinct dependencies diagram. (#297)

* Simplify checks in the derivation pipeline (#296)

* Remove the superfluous check about the batcher address as now the Batch Inbox contract verifies the sender is legitimate.

* Removed nonexist logs (#298)

* Add support for ZK attestation service (#294)

* Add support for ZK attestation service

* check attestation service url is not nil

* upgrade espresso tee verifier contracts

* fix contracts

* fix merge

* fix tests

* bring back deploy aws nitro

* add support for mock contract

* add support for attestation verifier service

* fix tee tests

* use higher version of github runner

* fix tee args

* fix tee args

* add healthcheck to attestation verifier zk

* increase timeout

* Invalid attestation test passing

* small fixes

* fix TestE2eDevnetWithUnattestedBatcherKey

* fix health check

* fix devnet test

* use 127.0.0.1

* fix regex

* debug

* fix proof generation

* debug

* fix url

* fix url

* remove debug logs

* resolve based on comments

* address comments

* update github runner enclave

* fix based on suggestions

* cleanup logs

* Enable AltDA Espresso E2E using EigenDA Docker proxy (#295)

* Integrate EigenDA via Docker proxy for AltDA Espresso E2E tests

* Scope EigenDA lifecycle to the test and ensure clean startup/teardown

* Extract EigenDA Docker port and image into constants

* Downgrade Dasel (#303)

* Make attestation service url optional

* fix dasel

* fix dasel

* update dockerfiles

* make attestation service required again

* Make the withdraw devnet test pass again (#301)

* Withdraw test passing again on devnet.

* Faster CI

* Deposit into L1 before requesting the withdrawal on L2.

* Add migration related things to readme (#302)


---------

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

* Reducing logging when outputting the batch  (#304)

* update logging for the batch

* clean up

* Document code sync procedure (#308)

* Add code sync procedure

* Update links

* Fix format

* Rename files

* Update batchAuthenticator according to audit report (#309)

* update batchAuthenticator according to audit report

* gen bindings and fix fast-tests

* Port ForcedTxs test into devnet test suite (#306)

* Simplify the test as we cannot in practice reduce the window size.

---------

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

* Reorder checks of isValidBatchTx in derivation pipeline (#310)

* remove warning on every failed tx

* reorder the checks

* Add fallback mechanism test (#305)

* 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>

* Philippe/fix withdraw flakiness (#312)

* Address flakiness.

* Simplify the code

* Fix CI

---------

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

* Use unified run-enclave.sh script for op-batcher-tee (#299)

* update single run-enclave.sh

* remove BATCHER_PRIVATE_KEY

* update run-enclave.sh

* Test fallback mechanism on devnet (#313)

* Recovery from fallback batcher (#315)

* Fallback recovery

* Add caff node

* Suggestions

* Make ZK Verifier Optional for E2E Testing (#321)

* 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.

* Tee support for EigenDA (#319)

* 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 Batcher Fallback: Channel Not Closed Test (#314)

* 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>

* Move diagram files (#326)

* Update Succinct image versions, update diagram (#329)

* Inactive Batcher Shouldn't Post (#316)

* 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>

* Removes PreRegisteredBatcher code (#327)

* Remove pre authenticated batcher

* fix test

* Update Succinct images

* Streamer namespace range 14.2 (#334)

* Support namespace range endpoint

(cherry picked from commit a73f7b603f837a02fef966adecdd36898252dc2f)

* fix buils

(cherry picked from commit e46909bf27875995803dfa514d0242b915734756)

* update docker image

(cherry picked from commit 07748980d5513ff43fa04bf011a55f264dae439c)

* fix streamer tests

(cherry picked from commit f752aa22838f21197cf780ab045c4630d90b827c)

* fix streamer tests

(cherry picked from commit 168426e78e8529df2c1616a7e6d6a6c1e9e628ab)

* fix tests

(cherry picked from commit b942c28465048fa67eceb0934397b9aa6ceb8c18)

* fix tests

(cherry picked from commit b96622ce939dbe9b313e7c4c5e2404c27121cb25)

* use docker instead of cargo to generate allocs.json

(cherry picked from commit efee3aca3aa242d729929cfcd3aa2ce1897dea7c)

* fix readme

* address comments

* remove fetch api

* Enable and test Transparent proxy upgradability and batcher address update (#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

* Description for TestBatcherSwitching (#335)

* 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>

* Add cmd to shutdown all docker containers with TEE (#332)

* cmd to shutdown all services

* Small change to trigger CI

---------

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

* Guardians rebased (#345)

Co-authored-by: OpenCode <noreply@opencode.ai>

* Audit Document (#339)


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

* Security Analysis (#342)


---------

Co-authored-by: Jean Gal <jgatbkk@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Keyao Shen <shenkeyao@gmail.com>

* Fix and improve steps in the code sync doc (#344)

* Update doc

* Update kona default branch and fix links

* Fix typo

* Typos

---------

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

* Limit batch buffer capacity (#348)

* Add cap to batch buffer

* Gemini's suggestions

* No recursion

* Fix typo

* Fmt

* Rewrite test

* Add tests

* Remove unused function

* Fix skipPos overwrite across multiple fetch ranges

skipPos was unconditionally assigned to start on each ErrAtCapacity,
causing later fetch ranges to overwrite the value set by earlier ones.
After a rewind, batches dropped in the earlier ranges were permanently
skipped. Use min(skipPos, start) to preserve the earliest position.

Co-authored-by: OpenCode <noreply@opencode.ai>

* Comments

* Log warning on duplicate batch insertion

Return ErrDuplicateBatch from BatchBuffer.Insert so the streamer can
log a warning when a duplicate hash is encountered. Update tests
accordingly.

Co-authored-by: OpenCode <noreply@opencode.ai>

---------

Co-authored-by: OpenCode <noreply@opencode.ai>

* Add initial AGENTS.md  (#354)

* Add AGENTS.md for AI coding assistants

Document repo context (fork-of-a-fork), branch naming conventions,
diff discipline, Espresso integration architecture overview, security
considerations, test commands, and configuration flags.

Co-authored-by: OpenCode <noreply@opencode.ai>

---------

Co-authored-by: OpenCode <noreply@opencode.ai>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.git…
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.

2 participants