Skip to content

op-batcher: add TestBatchSubmitter_sendTx_FloorDataGas and patch driver.sendTx#14517

Merged
geoknee merged 4 commits intodevelopfrom
gk/txmgr-floor
Feb 25, 2025
Merged

op-batcher: add TestBatchSubmitter_sendTx_FloorDataGas and patch driver.sendTx#14517
geoknee merged 4 commits intodevelopfrom
gk/txmgr-floor

Conversation

@geoknee
Copy link
Copy Markdown
Contributor

@geoknee geoknee commented Feb 25, 2025

Closes #14513

@codecov
Copy link
Copy Markdown

codecov bot commented Feb 25, 2025

Codecov Report

Attention: Patch coverage is 73.91304% with 6 lines in your changes missing coverage. Please review.

Project coverage is 41.57%. Comparing base (28f2f36) to head (9c05eca).
Report is 91 commits behind head on develop.

Files with missing lines Patch % Lines
op-batcher/batcher/driver.go 73.91% 3 Missing and 3 partials ⚠️

❗ There is a different number of reports uploaded between BASE (28f2f36) and HEAD (9c05eca). Click for more details.

HEAD has 11 uploads less than BASE
Flag BASE (28f2f36) HEAD (9c05eca)
cannon-go-tests-64 5 0
cannon-go-tests-32 5 0
contracts-bedrock-tests 1 0
Additional details and impacted files
@@             Coverage Diff              @@
##           develop   #14517       +/-   ##
============================================
- Coverage    82.06%   41.57%   -40.49%     
============================================
  Files          167      842      +675     
  Lines         9539    77061    +67522     
============================================
+ Hits          7828    32037    +24209     
- Misses        1532    42200    +40668     
- Partials       179     2824     +2645     
Flag Coverage Δ
cannon-go-tests-32 ?
cannon-go-tests-64 ?
contracts-bedrock-tests ?

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
op-batcher/batcher/driver.go 6.60% <73.91%> (ø)

... and 1008 files with indirect coverage changes

@geoknee geoknee marked this pull request as ready for review February 25, 2025 11:16
@geoknee geoknee requested review from a team as code owners February 25, 2025 11:16
geoknee and others added 2 commits February 25, 2025 11:26
Co-authored-by: Sebastian Stammler <seb@oplabs.co>
@sebastianst
Copy link
Copy Markdown
Member

sebastianst commented Feb 25, 2025

There are several other places where we compute the gas limit and still only use the intrinsic gas. I will fix it everywhere in #14500.

@geoknee geoknee enabled auto-merge February 25, 2025 11:32
@geoknee geoknee added this pull request to the merge queue Feb 25, 2025
Merged via the queue into develop with commit 7c4917b Feb 25, 2025
46 checks passed
@geoknee geoknee deleted the gk/txmgr-floor branch February 25, 2025 11:40
Copy link
Copy Markdown
Member

@sebastianst sebastianst left a comment

Choose a reason for hiding this comment

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

I just realize that we can probably just replace the usage of IntrinsicGas with that of FloorDataGas everywhere where we estimate the gas limit for calldata-only batcher txs.

@geoknee geoknee added the A-op-batcher Area: op-batcher label Feb 25, 2025
palango pushed a commit to celo-org/optimism that referenced this pull request Feb 28, 2025
…river.sendTx` (ethereum-optimism#14517)

* op-batcher: add TestBatchSubmitter_sendTx_FloorDataGas

* op-batcher: use floorDataGas for transactions if greater than intrinsicGas

* Update op-batcher/batcher/driver.go

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* log error instead of ignoring

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>
palango pushed a commit to celo-org/optimism that referenced this pull request Feb 28, 2025
…river.sendTx` (ethereum-optimism#14517)

* op-batcher: add TestBatchSubmitter_sendTx_FloorDataGas

* op-batcher: use floorDataGas for transactions if greater than intrinsicGas

* Update op-batcher/batcher/driver.go

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* log error instead of ignoring

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>
palango pushed a commit to celo-org/optimism that referenced this pull request Feb 28, 2025
…river.sendTx` (ethereum-optimism#14517)

* op-batcher: add TestBatchSubmitter_sendTx_FloorDataGas

* op-batcher: use floorDataGas for transactions if greater than intrinsicGas

* Update op-batcher/batcher/driver.go

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* log error instead of ignoring

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>
karlb pushed a commit to celo-org/optimism that referenced this pull request Mar 4, 2025
…river.sendTx` (ethereum-optimism#14517)

* op-batcher: add TestBatchSubmitter_sendTx_FloorDataGas

* op-batcher: use floorDataGas for transactions if greater than intrinsicGas

* Update op-batcher/batcher/driver.go

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* log error instead of ignoring

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>
karlb pushed a commit to celo-org/optimism that referenced this pull request Mar 5, 2025
…river.sendTx` (ethereum-optimism#14517)

* op-batcher: add TestBatchSubmitter_sendTx_FloorDataGas

* op-batcher: use floorDataGas for transactions if greater than intrinsicGas

* Update op-batcher/batcher/driver.go

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* log error instead of ignoring

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>
palango pushed a commit to celo-org/optimism that referenced this pull request Mar 6, 2025
* op-batcher: prevent `SpanChannelOut` RLP bytes overflowing `MaxRLPBytesPerChannel` (ethereum-optimism#14310)

* fix op-batcher pack over MaxRLPBytesChannel

* add test cases from different CompressionAlgo

* add fresh compression logic and corresponding comments

* refactor: enhance MaxRLPBytesPerChannel test

* refactor: rename variable and add required messages

* op-batcher: use local-safe to reduce lag during interop sync (ethereum-optimism#14265)

* op-batcher: remove `ThrottleInterval` and split block loading and batch publishing into separate goroutines (ethereum-optimism#14244)

* op-batcher: overhaul throttling, reading and writing loops

* no longer evaluate throttling conditions on a ticker
* break main loop into "reading" and "writing"
* reading loop signals to throttling and writing when ALL blocks are loaded (this could be done in a more fine grained way, even when each block is loaded)
* these run concurrently

* improvements

* readloop unblocks writing loop once, and then writing loop goes forever (pausing when it runs out of data)

tests pass but timeout due to bad shutdown

* rename to prevent shadowing

* allow for receipt handling when receipt and err are both nil

* split shutdownCtx into producers and consumers

* throttling loop ranges over a channel, does not take a context

* processReceiptsLoop ranges over a channel, does not take a context

* unify wait groups

* unify contexts

* writeLoop uses a ticker instead of a sleep

* WIP: add throughput test for batcher

* make txQueue local, not global state

* reduce diff

* reduce diff further

* make pendingBytesUpdated a local, not global

* read and write loop communicate with a channel

no more ticker required

* rename

* rename

* abstract promptLoop

* rename

* update readme

* add diagram to readme

* remove test

I'm not sure it is adding any value. May return to it in future

* sendToThrottlingLoop uses mutex

* harmonize "*Loop returning" logs

* tidy

* remove TODO

* rip out ThrottleInterval config var

* add activeSequencerChanged channel and wire it up to onActiveSequencerChanged hook in active rollup provider

* set callback at runtime, not in constructor

* reinstate startup order

* tidy

* remove dead code

* remove unintentional change

* rename readLoop to blockLoadingLoop and writeLoop to publishingLoop

* improve diagram

* replace ThrottleInterval with ThrottleThreshold as enabling var

* remove onActiveProviderChanged arg from constructors

* protect callback invocation with nullity check

* lint

* Apply suggestions from code review

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* remove ThrottelInterval from flags

* docs: mention active sequencer signal

* only attach callback if throttling is enabled

* increase buffer of activeSequencerChanged

means that we buffer a single event if the throttlingLoop is busy, even when using a try-send

* add buffer to pendingBytesUpdated

see previous commit

* reduce indentation

* remove dangling ref

* pass killCtx to publishingLoop and avoid accessing this context globally

* remove continue and always signal publishing loop

* remove unecessary mutex wrangle

* replace signalPublishingLoop method with trySignal fn

* extend TestRollupProvider_FailoverOnInactiveSequencer to cover callback fn

* use retryTimer in throttlingLoop

if RPC calls fail, they will be retried after retryInterval (or before, if another event triggers updateParams)

* op-batcher: improve active-seq-changed signalling setup

* remove unused state var

* rename blocksLoaded channel to publishSignal channel

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* op-batcher: add `TestBatchSubmitter_sendTx_FloorDataGas` and patch `driver.sendTx` (ethereum-optimism#14517)

* op-batcher: add TestBatchSubmitter_sendTx_FloorDataGas

* op-batcher: use floorDataGas for transactions if greater than intrinsicGas

* Update op-batcher/batcher/driver.go

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* log error instead of ignoring

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* op-batcher: always `updateCursorAndMetrics` when returning from `processBlocks()` (ethereum-optimism#14520)

* op-batcher: always updateCursorAndMetrics when returning from processBlocks()

* Update op-batcher/batcher/channel_manager.go

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* op-batcher: remove `ChannelManager.CheckExpectedProgress()` and add channel timeout log (ethereum-optimism#14553)

* op-batcher: remove ChannelManager.CheckExpectedProgress

* op-batcher: add warning log when a channel times out on chain

* op-batcher: correctly track block metrics in `handleChannelInvalidated()` (ethereum-optimism#14561)

* op-batcher: correctly track block metrics in handleChannelInvalidated

Includes test which fails without the fix.

* op-batcher: log out channels which are dropped during handleChannelInvalidated()

* change to warn log for dropped channels

* op-batcher: improve `computeSyncActions()` logging (ethereum-optimism#14563)

* improve computeSyncActions logging

* fixup test and make sure all cases run (!)

* use more friendly format for structured logger

* op-batcher: introduce `PREFER_LOCAL_SAFE_L2` config var (ethereum-optimism#14587)

* op-batcher: introduce PREFER_LOCAL_SAFE_L2 config var

* lint

* Apply suggestions from code review

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* lint

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* batcher: Wait for DA write before shutdown

---------

Co-authored-by: olga yang <ya1994ng@gmail.com>
Co-authored-by: protolambda <proto@protolambda.com>
Co-authored-by: George Knee <georgeknee@googlemail.com>
Co-authored-by: Sebastian Stammler <seb@oplabs.co>
QuentinI pushed a commit to EspressoSystems/optimism-espresso-integration that referenced this pull request Mar 7, 2025
* op-batcher: prevent `SpanChannelOut` RLP bytes overflowing `MaxRLPBytesPerChannel` (ethereum-optimism#14310)

* fix op-batcher pack over MaxRLPBytesChannel

* add test cases from different CompressionAlgo

* add fresh compression logic and corresponding comments

* refactor: enhance MaxRLPBytesPerChannel test

* refactor: rename variable and add required messages

* op-batcher: use local-safe to reduce lag during interop sync (ethereum-optimism#14265)

* op-batcher: remove `ThrottleInterval` and split block loading and batch publishing into separate goroutines (ethereum-optimism#14244)

* op-batcher: overhaul throttling, reading and writing loops

* no longer evaluate throttling conditions on a ticker
* break main loop into "reading" and "writing"
* reading loop signals to throttling and writing when ALL blocks are loaded (this could be done in a more fine grained way, even when each block is loaded)
* these run concurrently

* improvements

* readloop unblocks writing loop once, and then writing loop goes forever (pausing when it runs out of data)

tests pass but timeout due to bad shutdown

* rename to prevent shadowing

* allow for receipt handling when receipt and err are both nil

* split shutdownCtx into producers and consumers

* throttling loop ranges over a channel, does not take a context

* processReceiptsLoop ranges over a channel, does not take a context

* unify wait groups

* unify contexts

* writeLoop uses a ticker instead of a sleep

* WIP: add throughput test for batcher

* make txQueue local, not global state

* reduce diff

* reduce diff further

* make pendingBytesUpdated a local, not global

* read and write loop communicate with a channel

no more ticker required

* rename

* rename

* abstract promptLoop

* rename

* update readme

* add diagram to readme

* remove test

I'm not sure it is adding any value. May return to it in future

* sendToThrottlingLoop uses mutex

* harmonize "*Loop returning" logs

* tidy

* remove TODO

* rip out ThrottleInterval config var

* add activeSequencerChanged channel and wire it up to onActiveSequencerChanged hook in active rollup provider

* set callback at runtime, not in constructor

* reinstate startup order

* tidy

* remove dead code

* remove unintentional change

* rename readLoop to blockLoadingLoop and writeLoop to publishingLoop

* improve diagram

* replace ThrottleInterval with ThrottleThreshold as enabling var

* remove onActiveProviderChanged arg from constructors

* protect callback invocation with nullity check

* lint

* Apply suggestions from code review

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* remove ThrottelInterval from flags

* docs: mention active sequencer signal

* only attach callback if throttling is enabled

* increase buffer of activeSequencerChanged

means that we buffer a single event if the throttlingLoop is busy, even when using a try-send

* add buffer to pendingBytesUpdated

see previous commit

* reduce indentation

* remove dangling ref

* pass killCtx to publishingLoop and avoid accessing this context globally

* remove continue and always signal publishing loop

* remove unecessary mutex wrangle

* replace signalPublishingLoop method with trySignal fn

* extend TestRollupProvider_FailoverOnInactiveSequencer to cover callback fn

* use retryTimer in throttlingLoop

if RPC calls fail, they will be retried after retryInterval (or before, if another event triggers updateParams)

* op-batcher: improve active-seq-changed signalling setup

* remove unused state var

* rename blocksLoaded channel to publishSignal channel

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* op-batcher: add `TestBatchSubmitter_sendTx_FloorDataGas` and patch `driver.sendTx` (ethereum-optimism#14517)

* op-batcher: add TestBatchSubmitter_sendTx_FloorDataGas

* op-batcher: use floorDataGas for transactions if greater than intrinsicGas

* Update op-batcher/batcher/driver.go

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* log error instead of ignoring

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* op-batcher: always `updateCursorAndMetrics` when returning from `processBlocks()` (ethereum-optimism#14520)

* op-batcher: always updateCursorAndMetrics when returning from processBlocks()

* Update op-batcher/batcher/channel_manager.go

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* op-batcher: remove `ChannelManager.CheckExpectedProgress()` and add channel timeout log (ethereum-optimism#14553)

* op-batcher: remove ChannelManager.CheckExpectedProgress

* op-batcher: add warning log when a channel times out on chain

* op-batcher: correctly track block metrics in `handleChannelInvalidated()` (ethereum-optimism#14561)

* op-batcher: correctly track block metrics in handleChannelInvalidated

Includes test which fails without the fix.

* op-batcher: log out channels which are dropped during handleChannelInvalidated()

* change to warn log for dropped channels

* op-batcher: improve `computeSyncActions()` logging (ethereum-optimism#14563)

* improve computeSyncActions logging

* fixup test and make sure all cases run (!)

* use more friendly format for structured logger

* op-batcher: introduce `PREFER_LOCAL_SAFE_L2` config var (ethereum-optimism#14587)

* op-batcher: introduce PREFER_LOCAL_SAFE_L2 config var

* lint

* Apply suggestions from code review

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* lint

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* batcher: Wait for DA write before shutdown

---------

Co-authored-by: olga yang <ya1994ng@gmail.com>
Co-authored-by: protolambda <proto@protolambda.com>
Co-authored-by: George Knee <georgeknee@googlemail.com>
Co-authored-by: Sebastian Stammler <seb@oplabs.co>
piersy pushed a commit to celo-org/optimism that referenced this pull request May 7, 2025
* op-batcher: prevent `SpanChannelOut` RLP bytes overflowing `MaxRLPBytesPerChannel` (ethereum-optimism#14310)

* fix op-batcher pack over MaxRLPBytesChannel

* add test cases from different CompressionAlgo

* add fresh compression logic and corresponding comments

* refactor: enhance MaxRLPBytesPerChannel test

* refactor: rename variable and add required messages

* op-batcher: use local-safe to reduce lag during interop sync (ethereum-optimism#14265)

* op-batcher: remove `ThrottleInterval` and split block loading and batch publishing into separate goroutines (ethereum-optimism#14244)

* op-batcher: overhaul throttling, reading and writing loops

* no longer evaluate throttling conditions on a ticker
* break main loop into "reading" and "writing"
* reading loop signals to throttling and writing when ALL blocks are loaded (this could be done in a more fine grained way, even when each block is loaded)
* these run concurrently

* improvements

* readloop unblocks writing loop once, and then writing loop goes forever (pausing when it runs out of data)

tests pass but timeout due to bad shutdown

* rename to prevent shadowing

* allow for receipt handling when receipt and err are both nil

* split shutdownCtx into producers and consumers

* throttling loop ranges over a channel, does not take a context

* processReceiptsLoop ranges over a channel, does not take a context

* unify wait groups

* unify contexts

* writeLoop uses a ticker instead of a sleep

* WIP: add throughput test for batcher

* make txQueue local, not global state

* reduce diff

* reduce diff further

* make pendingBytesUpdated a local, not global

* read and write loop communicate with a channel

no more ticker required

* rename

* rename

* abstract promptLoop

* rename

* update readme

* add diagram to readme

* remove test

I'm not sure it is adding any value. May return to it in future

* sendToThrottlingLoop uses mutex

* harmonize "*Loop returning" logs

* tidy

* remove TODO

* rip out ThrottleInterval config var

* add activeSequencerChanged channel and wire it up to onActiveSequencerChanged hook in active rollup provider

* set callback at runtime, not in constructor

* reinstate startup order

* tidy

* remove dead code

* remove unintentional change

* rename readLoop to blockLoadingLoop and writeLoop to publishingLoop

* improve diagram

* replace ThrottleInterval with ThrottleThreshold as enabling var

* remove onActiveProviderChanged arg from constructors

* protect callback invocation with nullity check

* lint

* Apply suggestions from code review

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* remove ThrottelInterval from flags

* docs: mention active sequencer signal

* only attach callback if throttling is enabled

* increase buffer of activeSequencerChanged

means that we buffer a single event if the throttlingLoop is busy, even when using a try-send

* add buffer to pendingBytesUpdated

see previous commit

* reduce indentation

* remove dangling ref

* pass killCtx to publishingLoop and avoid accessing this context globally

* remove continue and always signal publishing loop

* remove unecessary mutex wrangle

* replace signalPublishingLoop method with trySignal fn

* extend TestRollupProvider_FailoverOnInactiveSequencer to cover callback fn

* use retryTimer in throttlingLoop

if RPC calls fail, they will be retried after retryInterval (or before, if another event triggers updateParams)

* op-batcher: improve active-seq-changed signalling setup

* remove unused state var

* rename blocksLoaded channel to publishSignal channel

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* op-batcher: add `TestBatchSubmitter_sendTx_FloorDataGas` and patch `driver.sendTx` (ethereum-optimism#14517)

* op-batcher: add TestBatchSubmitter_sendTx_FloorDataGas

* op-batcher: use floorDataGas for transactions if greater than intrinsicGas

* Update op-batcher/batcher/driver.go

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* log error instead of ignoring

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* op-batcher: always `updateCursorAndMetrics` when returning from `processBlocks()` (ethereum-optimism#14520)

* op-batcher: always updateCursorAndMetrics when returning from processBlocks()

* Update op-batcher/batcher/channel_manager.go

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* op-batcher: remove `ChannelManager.CheckExpectedProgress()` and add channel timeout log (ethereum-optimism#14553)

* op-batcher: remove ChannelManager.CheckExpectedProgress

* op-batcher: add warning log when a channel times out on chain

* op-batcher: correctly track block metrics in `handleChannelInvalidated()` (ethereum-optimism#14561)

* op-batcher: correctly track block metrics in handleChannelInvalidated

Includes test which fails without the fix.

* op-batcher: log out channels which are dropped during handleChannelInvalidated()

* change to warn log for dropped channels

* op-batcher: improve `computeSyncActions()` logging (ethereum-optimism#14563)

* improve computeSyncActions logging

* fixup test and make sure all cases run (!)

* use more friendly format for structured logger

* op-batcher: introduce `PREFER_LOCAL_SAFE_L2` config var (ethereum-optimism#14587)

* op-batcher: introduce PREFER_LOCAL_SAFE_L2 config var

* lint

* Apply suggestions from code review

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* lint

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* batcher: Wait for DA write before shutdown

---------

Co-authored-by: olga yang <ya1994ng@gmail.com>
Co-authored-by: protolambda <proto@protolambda.com>
Co-authored-by: George Knee <georgeknee@googlemail.com>
Co-authored-by: Sebastian Stammler <seb@oplabs.co>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-op-batcher Area: op-batcher

Projects

None yet

Development

Successfully merging this pull request may close these issues.

op-batcher doesn't take into account pectra gas floor when posting calldata

2 participants