1. 10 Dec, 2024 2 commits
    • Matthew Slipper's avatar
      op-service: Fix failing SSZ fuzz test (#13324) · 70e71c23
      Matthew Slipper authored
      The SSZ fuzz tests were not erroring when the `edOffset` was 508 and the `txOffset` was 514. This is because the transaction unmarshaler was reading the number of transactions in the payload as zero, but not checking to see if there was additional data left over. This should never be the case for a valid payload.
      
      To verify, I ran the fuzz suite for 5 minutes:
      
      ```
      fuzz: elapsed: 5m1s, execs: 12910962 (42267/sec), new interesting: 9 (total: 41)
      ```
      70e71c23
    • Matthew Slipper's avatar
      feat/upgrade forge (#13305) · c8d8d7b6
      Matthew Slipper authored
      * Revert "maint: bump forge version (#13301)"
      
      This reverts commit a2e7d852.
      
      * Reapply "maint: bump forge version (#13301)"
      
      This reverts commit 048f0742eaa338e54105ab23a919af8a22f13e0a.
      
      * Rebuild all on mise.toml
      
      * fix: verify mise dependencies if necessary
      
      ---------
      Co-authored-by: default avatarKelvin Fichter <kelvinfichter@gmail.com>
      c8d8d7b6
  2. 09 Dec, 2024 4 commits
    • zhiqiangxu's avatar
      cannon: add `RegSP` constant (#13316) · a47441c8
      zhiqiangxu authored
      * add RegSP constant
      
      * address comments
      
      * fix natspec
      
      * update semver-lock
      a47441c8
    • Axel Kingsley's avatar
      supervisor: L1 Processor (#13206) · b6131611
      Axel Kingsley authored
      * supervisor: L1 Processor
      
      * comments ; test fixes
      
      * Make L1 source separate from RPC Addr
      
      * fix test
      
      * Add atomic bool for singleton processor routine
      b6131611
    • George Knee's avatar
      op-batcher: syncActions is aware of safe=unsafe edge case (#13292) · 53034d28
      George Knee authored
      * add additional test case for computeSyncActions
      
      * fixup test
      
      * check for unsafe = safe edge case & replace oldestUnsafeBlock with nextSafeBlock
      
      * add test case for no progress and safe=unsafe
      
      * refine log
      
      * rename variable
      
      * harmonize log ordering and labels
      
      * tighten up test behaviour for expectedLogs
      
      * add test case: no progress + unsafe=safe + blocks in state
      
      and fix behaviour so we don't try to fetch unsafe blocks if there aren't any, even when there are blocks in state
      
      * typo
      53034d28
    • Francis Li's avatar
      [conductor] Fix test race condition (#13314) · 2824b3b2
      Francis Li authored
      * Fix conductor test race condition
      
      * update
      
      * Address shell ci check
      
      * rerun CI for non-related issue
      2824b3b2
  3. 07 Dec, 2024 15 commits
  4. 06 Dec, 2024 19 commits
    • smartcontracts's avatar
      fix: have semver-lock build contracts by default (#13223) · f21f95e2
      smartcontracts authored
      semver-lock justfile task didn't build by default which was
      confusing. Now it does.
      f21f95e2
    • Sebastian Stammler's avatar
      txmgr: Disable default batcher tx send timeout (#13284) · 354337cf
      Sebastian Stammler authored
      With Holocene, batcher transaction ordering has to be strictly preserved, so
      trying to send a transaction candidate should just never timeout.
      Note that the txmgr will still bump fees to get a transaction for the
      same nonce submitted.
      354337cf
    • zhiqiangxu's avatar
      add `CheckAndDial` to avoid duplicate code (#13146) · d949564d
      zhiqiangxu authored
      * Don't repeat yourself
      
      * add a log for loadBlocksIntoState
      
      * op-batcher: fix log in batcher/driver.go
      
      * modify log
      
      ---------
      Co-authored-by: default avatarprotolambda <proto@protolambda.com>
      Co-authored-by: default avatarMatthew Slipper <me@matthewslipper.com>
      d949564d
    • Dmitry's avatar
      docs: Fix formatting issue in "Production Releases" Update README.md (#13281) · bb6f5001
      Dmitry authored
      Fix formatting issue in "Production Releases" section
      bb6f5001
    • Matthew Slipper's avatar
      ci: revert cannon-stf-verify (#13289) · 1ac5a35f
      Matthew Slipper authored
      1ac5a35f
    • George Knee's avatar
      0c9b1d52
    • Matthew Slipper's avatar
      ci: Remove go-mod-download (#13277) · 7c8d28dd
      Matthew Slipper authored
      7c8d28dd
    • Matthew Slipper's avatar
      cde5fd7a
    • zhiqiangxu's avatar
      fix loadBlocksIntoState (#13282) · e5498be3
      zhiqiangxu authored
      e5498be3
    • George Knee's avatar
      op-batcher: extract state pruning, block fetching and progress checking into a... · f9eaf1fc
      George Knee authored
      op-batcher: extract state pruning, block fetching and progress checking into a single pure function (#13060)
      
      * remove lastStoredBlock and lastL1Tip from BatchSubmitter state
      
      We can use the channelManager's state to infer lastStoredBlock. And lastL1Tip is actually unused.
      
      * change log line wording
      
      * fix typo
      
      * remove unecessary method
      
      * WIP first pass at computeSyncActions
      
      * computeSyncAction takes a ChannelStatuser interface
      
      also report fully inclusive range of blocks to load
      
      * add happy path test case
      
      * clearState is a pointer
      
      we can use nil value to signal no state clearing should be performed
      
      * add more test cases
      
      * add another test case
      
      * computeSyncActions only takes prevCurrentL1, not prevSyncStatus
      
      * add batcher restart case
      
      * safe chain reorg case
      
      * failed to make progress case
      
      * simplify log messages, print entire struct
      
      * add godoc
      
      * wire up computeSyncActions
      
      * cache prevCurrentL1 on BatchSubmitter
      
      * document stages
      
      * fix loadBlocksIntoState range interpretation
      
      * pass syncStatus, not pointer to syncStatus and add test case for no progress
      
      * check unsafe status before trying to get more blocks
      
      * do not panic on invalid block ranges
      
      return an error instead. This error is ultimated swallowed, matching existing behaviour.
      
      * test: add assetions and mock data about blockID passed to clearState
      
      * add readme section on max channel duration
      
      * add back unit tests for pruning methods
      
      * fix pruneBlocks behaviour when blockCursor pointed at block which is now pruned
      
      * rename waitForNodeSync to sequencerOutOfSync
      
      * Introduce SeqOutOfSyncError
      
      * move SyncActions code to a separate file
      
      * ChannelStatuser -> channelStatuser
      
      * SeqOutOfSyncError -> ErrSeqOutOfSync
      
      * move ctx to first position in fn signature
      
      * do not update cached prevCurrentL1 value if there is an ErrSeqOutOfSync
      
      * Always warn log when computeSyncActions returns an error
      
      * move sync actions test to separate file
      
      * computeSyncActions returns a bool, not an error
      
      There is only ever one kind of error returned
      
      * SyncActions -> syncActions
      
      * define local variables to aid readability
      
      * organise computeSyncActions and introduce startAfresh syncAction
      
      Add comments explaining logical flow: the checks get increasingly deep and we return early where possible.
      
      * undo changes to submodule
      
      * move test utils to sync_actions_test.go file
      
      * ensure pruneChannels clears currentChannel when appropriate
      
      * fix submodule"
      
      * don't try to get number of block if none exists
      
      * improve log
      
      * Update op-batcher/batcher/driver.go
      Co-authored-by: default avatarSebastian Stammler <seb@oplabs.co>
      
      * use struct for block range, not array
      
      * use startAfresh in one more place
      
      * add test case for multiple channels
      
      also set HeadL1 to more realistic values (generally ahead of currentL1 due to nonzero confirmation depth)
      
      * print value of *struct  in Stringer
      
      * add test case when there are no blocks in state
      
      * Update op-batcher/batcher/sync_actions.go
      Co-authored-by: default avatarSebastian Stammler <seb@oplabs.co>
      
      * tighten up log messages and test descriptions
      
      ---------
      Co-authored-by: default avatarSebastian Stammler <seb@oplabs.co>
      f9eaf1fc
    • Matthew Slipper's avatar
      ctb: Fix concurrent map writes error (#13278) · ad868c53
      Matthew Slipper authored
      `ProcessFilesGlob` calls the callback concurrently, so this test needs to lock the `processedFiles` map to prevent panics. See [here](https://app.circleci.com/pipelines/github/ethereum-optimism/optimism/73932/workflows/951eb7de-0611-4bea-b4de-5d3a56c9bf37/jobs/3021176) for an example of this happening.
      ad868c53
    • clabby's avatar
      feat(op-deployer): `Proxy` bootstrap command (#13213) · f17da354
      clabby authored
      * feat(op-deployer): `Proxy` bootstrap command
      
      * code review updates
      
      * linter
      
      ---------
      Co-authored-by: default avatarMatthew Slipper <me@matthewslipper.com>
      f17da354
    • Roberto Bayardo's avatar
    • Dmitry's avatar
      Typo fix Update flags.mk (#13226) · 9dda7290
      Dmitry authored
      9dda7290
    • clabby's avatar
    • Matthew Slipper's avatar
      ce723807
    • smartcontracts's avatar
      maint: remove unnecessary snapshots check script (#13248) · a8c8851e
      smartcontracts authored
      We can do this with a justfile recipe.
      Co-authored-by: default avatarMatthew Slipper <me@matthewslipper.com>
      a8c8851e
    • Adrian Sutton's avatar
    • Matthew Slipper's avatar
      op-conductor: Fix hang in testing (#13266) · 9548d53a
      Matthew Slipper authored
      I've found a [deadlock](https://app.circleci.com/pipelines/github/ethereum-optimism/optimism/73846/workflows/19369ca9-9eaa-4021-9eb8-589a06e7bd34/jobs/3018041) in the op-conductor tests. The inner conductor loop is stuck waiting on a queue signal that never arrives, which in turn causes the test to hang since the coordinating waitgroup is never decremented. I believe this happens because the conductor's `queueAction` method is non-blocking, so nothing ever triggers conductor's inner loop when conductor start up. I've updated the code to use a blocking channel write when conductor starts to avoid this issue.
      
      The traces of the deadlock look like this, for reference:
      
      ```
      goroutine 227 [semacquire, 9 minutes]:
      
      sync.runtime_Semacquire(0xc0004df577?)
      
      	/usr/local/go/src/runtime/sema.go:62 +0x25
      
      sync.(*WaitGroup).Wait(0x0?)
      
      	/usr/local/go/src/sync/waitgroup.go:116 +0x48
      
      github.com/ethereum-optimism/optimism/op-conductor/conductor.(*OpConductorTestSuite).execute(0xc0003e4008, 0x0)
      
      	/var/opt/circleci/data/workdir/op-conductor/conductor/service_test.go:177 +0x65
      
      github.com/ethereum-optimism/optimism/op-conductor/conductor.(*OpConductorTestSuite).executeAction(...)
      
      	/var/opt/circleci/data/workdir/op-conductor/conductor/service_test.go:197
      
      github.com/ethereum-optimism/optimism/op-conductor/conductor.(*OpConductorTestSuite).enableSynchronization(0xc0003e4008)
      
      	/var/opt/circleci/data/workdir/op-conductor/conductor/service_test.go:163 +0x93
      
      github.com/ethereum-optimism/optimism/op-conductor/conductor.(*OpConductorTestSuite).TestScenario4(0xc0003e4008)
      
      	/var/opt/circleci/data/workdir/op-conductor/conductor/service_test.go:420 +0x27
      
      reflect.Value.call({0xc000131900?, 0xc0001b3740?, 0x1fed5b8?}, {0x191d63c, 0x4}, {0xc0004dff28, 0x1, 0x16f12e0?})
      
      	/usr/local/go/src/reflect/value.go:596 +0xca6
      
      reflect.Value.Call({0xc000131900?, 0xc0001b3740?, 0x28307b8?}, {0xc0004dff28?, 0xf?, 0x0?})
      
      	/usr/local/go/src/reflect/value.go:380 +0xb9
      
      github.com/stretchr/testify/suite.Run.func1(0xc0001f9ba0)
      
      	/home/circleci/go/pkg/mod/github.com/stretchr/testify@v1.10.0/suite/suite.go:202 +0x4a5
      
      testing.tRunner(0xc0001f9ba0, 0xc0001f4e10)
      
      	/usr/local/go/src/testing/testing.go:1689 +0xfb
      
      created by testing.(*T).Run in goroutine 166
      
      	/usr/local/go/src/testing/testing.go:1742 +0x390
      
      goroutine 229 [select, 9 minutes]:
      
      github.com/ethereum-optimism/optimism/op-conductor/conductor.(*OpConductor).loopAction(0xc00056ab40)
      
      	/var/opt/circleci/data/workdir/op-conductor/conductor/service.go:577 +0x14f
      
      github.com/ethereum-optimism/optimism/op-conductor/conductor.(*OpConductorTestSuite).enableSynchronization.func1()
      
      	/var/opt/circleci/data/workdir/op-conductor/conductor/service_test.go:159 +0x33
      
      github.com/ethereum-optimism/optimism/op-conductor/conductor.(*OpConductor).loop(0xc00056ab40)
      
      	/var/opt/circleci/data/workdir/op-conductor/conductor/service.go:570 +0x99
      
      created by github.com/ethereum-optimism/optimism/op-conductor/conductor.(*OpConductor).Start in goroutine 227
      
      	/var/opt/circleci/data/workdir/op-conductor/conductor/service.go:376 +0x1f6
      
      FAIL	github.com/ethereum-optimism/optimism/op-conductor/conductor	600.103s
      ```
      9548d53a