diff --git a/.changeset/brown-parrots-type.md b/.changeset/brown-parrots-type.md new file mode 100644 index 0000000000000..1e0c63f176c7d --- /dev/null +++ b/.changeset/brown-parrots-type.md @@ -0,0 +1,5 @@ +--- +'@eth-optimism/teleportr': patch +--- + +Fix panic diff --git a/.changeset/eighty-countries-develop.md b/.changeset/eighty-countries-develop.md new file mode 100644 index 0000000000000..01774818b2f87 --- /dev/null +++ b/.changeset/eighty-countries-develop.md @@ -0,0 +1,5 @@ +--- +'@eth-optimism/common-ts': patch +--- + +Log server messages to logger instead of stdout diff --git a/.changeset/weak-needles-jam.md b/.changeset/weak-needles-jam.md new file mode 100644 index 0000000000000..b1360ad45b342 --- /dev/null +++ b/.changeset/weak-needles-jam.md @@ -0,0 +1,5 @@ +--- +'@eth-optimism/common-ts': patch +--- + +Include default options in metadata metric diff --git a/.circleci/config.yml b/.circleci/config.yml index 604b8c42071b3..b64e6c0af5274 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -508,18 +508,19 @@ jobs: SEMGREP_BASELINE_REF: << parameters.diff_branch >> SEMGREP_REPO_URL: << pipeline.project.git_url >> SEMGREP_BRANCH: << pipeline.git.branch >> + SEMGREP_COMMIT: << pipeline.git.revision >> # Change job timeout (default is 1800 seconds; set to 0 to disable) SEMGREP_TIMEOUT: 3000 docker: - image: returntocorp/semgrep + resource_class: xlarge steps: - checkout - run: name: "Set environment variables" # for PR comments and in-app hyperlinks to findings command: | - echo 'export SEMGREP_COMMIT=$CIRCLE_SHA1' >> $BASH_ENV echo 'export SEMGREP_PR_ID=${CIRCLE_PULL_REQUEST##*/}' >> $BASH_ENV echo 'export SEMGREP_JOB_URL=$CIRCLE_BUILD_URL' >> $BASH_ENV echo 'export SEMGREP_REPO_NAME=$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME' >> $BASH_ENV diff --git a/.semgrepignore b/.semgrepignore index a273ce80be93a..ad3a29a9c2885 100644 --- a/.semgrepignore +++ b/.semgrepignore @@ -20,4 +20,4 @@ tests/ l2geth/ packages/*/node_modules -packages/*/test \ No newline at end of file +packages/*/test diff --git a/Makefile b/Makefile index 7ebb55896a3a7..8e01cb388a197 100644 --- a/Makefile +++ b/Makefile @@ -77,6 +77,12 @@ test-integration: ./packages/contracts-bedrock/deployments/devnetL1 .PHONY: test-integration +# Remove the baseline-commit to generate a base reading & show all issues +semgrep: + $(eval DEV_REF := $(shell git rev-parse develop)) + SEMGREP_REPO_NAME=ethereum-optimism/optimism semgrep ci --baseline-commit=$(DEV_REF) +.PHONY: semgrep + devnet-genesis: bash ./ops-bedrock/devnet-genesis.sh .PHONY: devnet-genesis diff --git a/op-e2e/system_test.go b/op-e2e/system_test.go index 6562dfa59af06..17736d8850d55 100644 --- a/op-e2e/system_test.go +++ b/op-e2e/system_test.go @@ -170,6 +170,8 @@ func TestL2OutputSubmitter(t *testing.T) { // Wait for batch submitter to update L2 output oracle. timeoutCh := time.After(15 * time.Second) + ticker := time.NewTicker(1 * time.Second) + defer ticker.Stop() for { l2ooTimestamp, err := l2OutputOracle.LatestBlockTimestamp(&bind.CallOpts{}) require.Nil(t, err) @@ -205,7 +207,7 @@ func TestL2OutputSubmitter(t *testing.T) { select { case <-timeoutCh: t.Fatalf("State root oracle not updated") - case <-time.After(time.Second): + case <-ticker.C: } } diff --git a/packages/common-ts/src/base-service/base-service-v2.ts b/packages/common-ts/src/base-service/base-service-v2.ts index 896b62320c5c6..eae9d83b651a1 100644 --- a/packages/common-ts/src/base-service/base-service-v2.ts +++ b/packages/common-ts/src/base-service/base-service-v2.ts @@ -155,11 +155,7 @@ export abstract class BaseServiceV2< this.loop = params.loop !== undefined ? params.loop : true this.state = {} as TServiceState - // Add default options to options spec. - ;(params.optionsSpec as any) = { - ...(params.optionsSpec || {}), - - // Users cannot set these options. + const stdOptionsSpec: OptionsSpec = { loopIntervalMs: { validator: validators.num, desc: 'Loop interval in milliseconds', @@ -177,6 +173,12 @@ export abstract class BaseServiceV2< }, } + // Add default options to options spec. + ;(params.optionsSpec as any) = { + ...(params.optionsSpec || {}), + ...stdOptionsSpec, + } + // List of options that can safely be logged. const publicOptionNames = Object.entries(params.optionsSpec) .filter(([, spec]) => { @@ -348,7 +350,11 @@ export abstract class BaseServiceV2< name: params.name, version: params.version, ...publicOptionNames.reduce((acc, key) => { - acc[key] = config.str(key) + if (key in stdOptionsSpec) { + acc[key] = this.options[key].toString() + } else { + acc[key] = config.str(key) + } return acc }, {}), }, @@ -375,7 +381,17 @@ export abstract class BaseServiceV2< app.use(bodyParser.urlencoded({ extended: true })) // Logging. - app.use(morgan('short')) + app.use( + morgan('short', { + stream: { + write: (str: string) => { + this.logger.info(`server log`, { + log: str, + }) + }, + }, + }) + ) // Metrics. // Will expose a /metrics endpoint by default. diff --git a/teleportr/drivers/disburser/driver.go b/teleportr/drivers/disburser/driver.go index b2fe2262e3692..ddc47c768758c 100644 --- a/teleportr/drivers/disburser/driver.go +++ b/teleportr/drivers/disburser/driver.go @@ -352,6 +352,9 @@ func (d *Driver) SendTransaction( subCtx, cancel := context.WithTimeout(ctx, 10*time.Second) defer cancel() err := d.cfg.L2Client.SendTransaction(subCtx, tx) + if err == nil { + return err + } if !IsRetryableError(err) { d.metrics.FailedTXSubmissions.WithLabelValues("permanent").Inc() return backoff.Permanent(err)