Skip to content

Conversation

krofax
Copy link
Collaborator

@krofax krofax commented Jul 30, 2025

Description

This PR adds a complete, modernized tutorial for deploying an OP Stack testnet chain using the latest op-deployer workflow. The tutorial replaces outdated manual deployment approaches with current best practices and provides a step-by-step guide for setting up a full testnet chain.

Tests

Additional context

Metadata

krofax added 2 commits July 30, 2025 16:45
…and structure. Revise descriptions, add prerequisites, and streamline steps for deploying components like op-geth, op-node, and op-batcher. Include detailed instructions for configuration and testing, ensuring a comprehensive guide for users.
Copy link

netlify bot commented Jul 30, 2025

Deploy Preview for docs-optimism ready!

Name Link
🔨 Latest commit 40dad7c
🔍 Latest deploy log https://app.netlify.com/projects/docs-optimism/deploys/68cdbc0cad50650008dfe052
😎 Deploy Preview https://deploy-preview-1705--docs-optimism.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

krofax added 9 commits August 1, 2025 08:51
…outdated callout, streamline installation steps for op-deployer and op-geth, and enhance navigation instructions for various components. Update references to deployment artifacts for consistency.
…ack components. Revise descriptions, improve installation steps, and ensure consistent references to deployment artifacts. Add verification steps for each component and clarify prerequisites for a seamless deployment experience.
…or building from source and using Docker. Streamline installation steps, clarify configuration setup, and improve overall structure for better user experience. Remove outdated L2 rollup tutorial as it is no longer relevant.
…d adding new content on connecting wallets and depositing ETH.
…rent deployment practices. This cleanup aligns with recent updates to the OP Stack documentation.
…o longer needed, streamlining the CI/CD workflow.
@krofax krofax marked this pull request as ready for review August 12, 2025 14:06
@krofax krofax requested a review from a team as a code owner August 12, 2025 14:06
Copy link
Contributor

coderabbitai bot commented Aug 12, 2025

📝 Walkthrough

Walkthrough

This PR removes the breadcrumbs CircleCI job and its invocation from the lint script in package.json; updates CI/workflow to drop the breadcrumbs job. It converts the sequencer deployment guide to a tabbed layout (Build from source / Docker) and adds multiple new tutorial pages and navigation metadata for create-l2-rollup (op-deployer, op-geth/sequencer, op-batcher, op-proposer, op-challenger and _meta.json). It updates internal op-deployer link, bumps several component version pins (op-geth/op-node/op-batcher/op-proposer), removes the --compress flag from op-batcher invocations, updates start scripts/env examples, and removes "direnv" from words.txt.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant OpDeployer as op-deployer
  participant L1 as L1 Chain
  participant Sequencer as op-geth/op-node
  participant Batcher as op-batcher
  participant Proposer as op-proposer
  participant Challenger as op-challenger

  User->>OpDeployer: init / apply / inspect
  OpDeployer-->>User: state.json, genesis, rollup config
  OpDeployer->>L1: Deploy contracts
  User->>Sequencer: Initialize & start (build or docker)
  Sequencer-->>L1: Read rollup params / serve RPC
  User->>Batcher: Configure & start
  Batcher->>L1: Submit L2 tx batches
  User->>Proposer: Configure & start
  Proposer->>L1: Post state roots
  User->>Challenger: Configure & start
  Challenger->>L1: Monitor / contest games
Loading
sequenceDiagram
  autonumber
  actor Operator
  participant Repo as Source Repos
  participant Disk as Workspace
  participant Geth as op-geth
  participant Node as op-node
  participant Docker as Docker-compose
  participant L1 as L1 RPC/Beacon

  Operator->>Repo: Clone & checkout pinned versions
  Operator->>Repo: Build binaries (or pull images)
  Operator->>Disk: Prepare env, jwt, directories
  alt Build-from-source
    Operator->>Geth: geth init (genesis)
    Operator->>Geth: Start op-geth
    Operator->>Node: Start op-node
  else Docker path
    Operator->>Docker: docker-compose up (op-geth/op-node)
  end
  Node->>L1: Connect L1 RPC/Beacon
  Operator-->>Geth: Verify RPC
  Operator-->>Node: Verify rollup status
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested labels

tutorial

Suggested reviewers

  • sbvegan
  • bradleycamacho
  • ZakAyesh

Tip

🔌 Remote MCP (Model Context Protocol) integration is now available!

Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats.

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch update-l2-testnet-tut

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 9

🧹 Nitpick comments (22)
pages/operators/chain-operators/deploy/sequencer-node.mdx (8)

90-96: Tighten language and align with style guide (avoid “we,” grammar).

  • Avoid “we” per guidelines; prefer imperative voice.
  • Improve phrasing.

Apply this diff:

-For spinning up a sequencer, we recommend building from source as it provides better control, and helps with debugging.
-In this guide Docker alternative is also provided.
+To spin up a sequencer, build from source to maintain control and simplify debugging.
+This guide also provides a Docker-based alternative.

93-96: Use title case for tab labels and consistent product capitalization.

Capitalize “Docker” in tab names.

-  <Tabs items={['Build from source', 'Using docker']}>
+  <Tabs items={['Build from source', 'Using Docker']}>
-    <Tabs.Tab>
-      If you prefer containerized deployment, you can use the official Docker images, and do the following:
+    <Tabs.Tab>
+      If containerized deployment is preferred, use the official Docker images:

Also applies to: 420-423


104-111: Minor grammar: “Check out,” not “Checkout.”

-# Checkout the latest release tag
+# Check out the latest release tag

121-128: Minor grammar: “Check out the release tag.”

-# Checkout to this release tag
+# Check out this release tag

203-206: Path consistency for op-deployer outputs.

You copy from ~/.deployer, but earlier steps create .deployer in the current working directory. This may confuse readers if they ran op-deployer elsewhere. Add a note or parameterize the path.

-# Copy configuration files from op-deployer
-cp ~/.deployer/genesis.json .
-cp ~/.deployer/rollup.json .
+# Copy configuration files from op-deployer
+# Note: adjust the path if your .deployer directory is located elsewhere
+cp ./../.deployer/genesis.json .
+cp ./../.deployer/rollup.json .

Alternatively, add a sentence after the code block: “If your .deployer directory is not adjacent to ~/sequencer-node, update the paths accordingly (e.g., ~/.deployer or /op-network/.deployer).”


301-326: Restrictive exposure of RPC endpoints.

Exposing HTTP/WS/Auth RPC on 0.0.0.0 with permissive CORS/VHOSTs is acceptable for local testing, but should be cautioned against for any public-facing setup. Add a note.

 --rollup.sequencerhttp=http://localhost:$OP_NODE_RPC_PORT

+

  • The configuration above binds RPC endpoints to 0.0.0.0 and permits all origins/hosts. For non-local setups, restrict interfaces, limit CORS/VHOSTs, and place services behind a firewall or reverse proxy.
    +

---

`333-360`: **Add the same RPC exposure caution to op-node.**

Mirror the safety note for op-node bindings and P2P exposure.

```diff
 --log.format=json

+

  • Ensure UDP/TCP port 9222 is reachable only as required. For public deployments, harden P2P exposure and RPC access with firewall rules and network policies.
    +

---

`557-562`: **Prefer modern Docker Compose invocation.**

The hyphenated `docker-compose` is deprecated in favor of `docker compose`.

```diff
-# Start both services
-docker-compose up -d
-
-# View logs
-docker-compose logs -f
+# Start both services
+docker compose up -d
+
+# View logs
+docker compose logs -f
pages/operators/chain-operators/tutorials/create-l2-rollup/op-deployer-setup.mdx (8)

36-38: Minor grammar: add article.

-After installing all of that, run following:
+After installing all of that, run the following:

52-57: Tighten phrasing and remove unnecessary comma.

-Another way to install `op-deployer`, is to download the latest release from the monorepo's [release page](https://github.com/ethereum-optimism/optimism/releases).
+Alternatively, download the latest release from the monorepo’s [release page](https://github.com/ethereum-optimism/optimism/releases).

74-75: Avoid “we,” fix spacing, and improve clarity.

-Deploying an OP Stack chain involves deploying multiple contracts, which can consume a substantial amount of gas. On testnets like Sepolia, costs may fluctuate significantly depending on network congestion. We recommend ensuring your deployer wallet has a buffer of **at least 1.5 to  3.5 ETH** , depending on gas prices and configuration. Always check current gas estimates before deploying.
+Deploying an OP Stack chain involves deploying multiple contracts, which can consume a substantial amount of gas. On testnets like Sepolia, costs may fluctuate significantly depending on network congestion. Ensure the deployer wallet has a buffer of at least 1.5 to 3.5 ETH, depending on gas prices and configuration. Always check current gas estimates before deploying.

112-116: Fix TOML inline-comment spacing to avoid copy-paste confusion.

Add a space before comment markers for readability and correctness in some TOML parsers.

-l1ChainID = 11155111# The chain ID of Sepolia (L1) you'll be deploying to.
-fundDevAccounts = true# Whether or not to fund dev accounts using the test... junk mnemonic on L2.
-l1ContractsLocator = "tag://op-contracts/v1.8.0-rc.4"# L1 smart contracts versions
-l2ContractsLocator = "tag://op-contracts/v1.7.0-beta.1+l2-contracts"# L2 smart contracts versions# Delete this table if you are using the shared Superchain contracts on the L1# If you are deploying your own SuperchainConfig and ProtocolVersions contracts, fill in these details
+l1ChainID = 11155111 # The chain ID of Sepolia (L1) you'll be deploying to.
+fundDevAccounts = true # Whether to fund dev accounts using the test... junk mnemonic on L2.
+l1ContractsLocator = "tag://op-contracts/v1.8.0-rc.4" # L1 smart contracts version
+l2ContractsLocator = "tag://op-contracts/v1.7.0-beta.1+l2-contracts" # L2 smart contracts version
+# Delete this table if you are using the shared Superchain contracts on the L1
+# If you are deploying your own SuperchainConfig and ProtocolVersions contracts, fill in these details

145-147: Minor style: prefer “okay” and avoid “ok.”

-For dev environments, it is ok to use all EOAs/hot-wallets.
+For development environments, it is okay to use EOAs or hot wallets.

260-270: Clarify example URL and avoid angle brackets inside TOML strings.

Angle brackets inside strings may be mistaken as literal characters. Use a clear placeholder or comment.

-l2ContractsLocator = "<https://example.com/op-contracts/v1.7.0-beta.1+l2-contracts.tar.gz>"
+l2ContractsLocator = "https://example.com/op-contracts/v1.7.0-beta.1+l2-contracts.tar.gz" # Replace with your actual URL

275-277: Fix spacing and typo in comment.

-[globalDeployOverrides]
-  l2BlockTime = 1# 1s L2blockTime is also standard, op-deployer defaults to 2s
+[globalDeployOverrides]
+  l2BlockTime = 1 # 1s L2 block time is also standard; op-deployer defaults to 2s

357-367: Add missing spaces before inline comments for clarity.

-op-deployer inspect l1 --workdir .deployer <l2-chain-id># outputs all L1 contract addresses for an L2 chain
-op-deployer inspect deploy-config --workdir .deployer <l2-chain-id># outputs the deploy config for an L2 chain
-op-deployer inspect l2-semvers --workdir .deployer <l2-chain-id># outputs the semvers for all L2 chains
+op-deployer inspect l1 --workdir .deployer <l2-chain-id> # outputs all L1 contract addresses for an L2 chain
+op-deployer inspect deploy-config --workdir .deployer <l2-chain-id> # outputs the deploy config for an L2 chain
+op-deployer inspect l2-semvers --workdir .deployer <l2-chain-id> # outputs the semvers for all L2 chains
pages/operators/chain-operators/tutorials/create-l2-rollup/op-batcher-setup.mdx (2)

363-364: Clarify data availability type configuration.

The --data-availability-type=blobs parameter should include documentation about when to use blobs vs calldata, especially for testnets where blob availability might be limited.

Consider adding a callout explaining the data availability options:

+<Callout type="info">
+  **Data Availability**: `--data-availability-type=blobs` uses EIP-4844 blobs for cheaper data posting. For testnets or networks where blob availability is uncertain, consider using `--data-availability-type=calldata` instead.
+</Callout>

448-449: Add reference to fee calculation tools.

The fee calculation tools reference uses a relative path that may not resolve correctly depending on the site structure.

Verify this link resolves correctly in the site navigation. If not, update to use the full path or site-relative path.

pages/operators/chain-operators/tutorials/create-l2-rollup/op-geth-setup.mdx (2)

99-99: Inconsistent tab naming.

The tab is named "Using docker" but should be "Using Docker" to maintain consistent title case capitalization.

Apply this diff:

-<Tabs items={['Build from source', 'Using docker']}>
+<Tabs items={['Build from source', 'Using Docker']}>

383-385: Add safety note about data directory.

The initialization command creates a data directory that will store blockchain data. Users should be aware of disk space requirements and backup considerations.

Consider adding a callout about disk space requirements:

+<Callout type="info">
+  The `op-geth-data` directory will store the entire blockchain state. Ensure you have sufficient disk space (several GB) and consider backup strategies for production environments.
+</Callout>
pages/operators/chain-operators/tutorials/create-l2-rollup/op-proposer-setup.mdx (1)

142-144: Document game type configuration.

The GAME_TYPE=0 is mentioned but the significance of different game types should be explained more clearly for operators who may need to configure custom networks.

Consider expanding the explanation:

      # Proposer configuration
      PROPOSAL_INTERVAL=3600s
-      GAME_TYPE=0
+      GAME_TYPE=0  # 0 = Fault Proof Game (standard), 1 = Validity Proof Game
      POLL_INTERVAL=20s
pages/operators/chain-operators/tutorials/create-l2-rollup/op-challenger-setup.mdx (1)

217-217: Grammar correction needed.

The word "onchain" should be "on-chain" for proper spelling.

Apply this diff:

-This is an optional step to use `op-challenger` subcommands, which allow chain operators to interact with the Fault Proof System onchain for testing and debugging purposes.
+This is an optional step to use `op-challenger` subcommands, which allow chain operators to interact with the Fault Proof System on-chain for testing and debugging purposes.
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a5814a3 and f684c64.

📒 Files selected for processing (12)
  • .circleci/config.yml (0 hunks)
  • package.json (1 hunks)
  • pages/operators/chain-operators/deploy/sequencer-node.mdx (2 hunks)
  • pages/operators/chain-operators/tools/op-deployer.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/_meta.json (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-batcher-setup.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-challenger-setup.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-deployer-setup.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-geth-setup.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-proposer-setup.mdx (1 hunks)
  • words.txt (0 hunks)
💤 Files with no reviewable changes (2)
  • words.txt
  • .circleci/config.yml
🧰 Additional context used
📓 Path-based instructions (1)
**/*.mdx

⚙️ CodeRabbit Configuration File

**/*.mdx: "ALWAYS review Markdown content THOROUGHLY with the following criteria:

  • First, check the frontmatter section at the top of the file:
    1. For regular pages, ensure ALL these fields are present and not empty:
    ---
    title: [non-empty]
    lang: [non-empty]
    description: [non-empty]
    topic: [non-empty]
    personas: [non-empty array]
    categories: [non-empty array]
    content_type: [valid type]
    ---
    1. For landing pages (index.mdx or files with ), only these fields are required:
    ---
    title: [non-empty]
    lang: [non-empty]
    description: [non-empty]
    topic: [non-empty]
    ---
    1. If any required fields are missing or empty, comment:
      'This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:
    pnpm validate-metadata
    ```'
  • Use proper nouns in place of personal pronouns like 'We' and 'Our' to maintain consistency in communal documentation.
  • Avoid gender-specific language and use the imperative form.
  • Monitor capitalization for emphasis. Avoid using all caps, italics, or bold for emphasis.
  • Ensure proper nouns are capitalized in sentences.
  • Apply the Oxford comma.
  • Use proper title case for buttons, tab names, page names, and links. Sentence case should be used for body content and short phrases, even in links.
  • Use correct spelling and grammar at all times (IMPORTANT).
  • For H1, H2, and H3 headers:
    1. Use sentence case, capitalizing only the first word.
    2. Preserve the capitalization of proper nouns, technical terms, and acronyms as defined in the 'nouns.txt' file located in the root directory of the project.
    3. Do not automatically lowercase words that appear in the 'nouns.txt' file, regardless of their position in the header.
  • Flag any headers that seem to inconsistently apply these rules for manual review.
  • When rev...

Files:

  • pages/operators/chain-operators/tools/op-deployer.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-batcher-setup.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-deployer-setup.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-geth-setup.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-proposer-setup.mdx
  • pages/operators/chain-operators/deploy/sequencer-node.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-challenger-setup.mdx
🪛 LanguageTool
pages/operators/chain-operators/tutorials/create-l2-rollup/op-challenger-setup.mdx

[style] ~101-~101: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...ess. #### --rollup-rpc * This needs to be an op-node archive node because ch...

(REP_NEED_TO_VB)


[grammar] ~217-~217: Ensure spelling is correct
Context: ... to interact with the Fault Proof System onchain for testing and debugging purposes. For...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🔇 Additional comments (9)
pages/operators/chain-operators/tools/op-deployer.mdx (1)

366-366: Anchor verified for “Using upgrade”

The file pages/stack/smart-contracts/op-deployer-upgrade.mdx contains a ## Using \upgrade`heading (line 33), which generates theusing-upgradeslug. The site-relative link /stack/smart-contracts/op-deployer-upgrade#using-upgrade`
will resolve correctly.

package.json (1)

7-7: Breadcrumbs check removal verified—CI parity maintained and local script available

  • CircleCI (.circleci/config.yml:85) runs pnpm lint without invoking check-breadcrumbs.
  • check-breadcrumbs script is still defined in package.json (line 13), so contributors can run it ad-hoc.
  • No references to check-breadcrumbs found in documentation; if CONTRIBUTING.md or other docs mention linting steps, update them to reflect this change.
pages/operators/chain-operators/deploy/sequencer-node.mdx (1)

20-20: Tabs import addition is appropriate.

pages/operators/chain-operators/tutorials/create-l2-rollup/_meta.json (1)

1-8: Navigation labels look consistent and descriptive.

Labels are concise and aligned with the new modular tutorial flow.

pages/operators/chain-operators/tutorials/create-l2-rollup/op-deployer-setup.mdx (1)

1-14: Frontmatter includes all required fields.

All required metadata fields are present and non-empty.

pages/operators/chain-operators/tutorials/create-l2-rollup.mdx (4)

10-17: Updated categories align with modular tutorial structure.

The category changes appropriately reflect the new modular approach, moving from operational categories to component-specific ones (sequencer, batcher, proposer, challenger, integration).


21-21: Import statement correctly updated.

The addition of Card import aligns with the new CTA-driven navigation pattern used throughout the tutorial.


32-50: Excellent modular structure with clear progression.

The new step-by-step structure with explicit component setup provides much better organization than the previous monolithic approach. Each step builds logically on the previous one.


84-86: Effective navigation pattern.

The Card component provides clear next-step guidance and consistent navigation throughout the tutorial series.

Copy link
Contributor

coderabbitai bot commented Aug 12, 2025

📝 Walkthrough

Walkthrough

  • Removed breadcrumbs CI job from .circleci/config.yml and its reference in pr-workflow.
  • Updated package.json lint script to drop the breadcrumbs check.
  • Reworked sequencer-node deployment doc into Tabs with “Build from source” and “Using docker,” adding env vars and startup scripts guidance.
  • Added/updated create-l2-rollup tutorial set: overview, _meta.json, and new step pages for op-deployer, op-geth (sequencer), op-batcher, op-proposer, and op-challenger.
  • Updated an op-deployer link to a relative path.
  • Removed “direnv” from words.txt.

Sequence Diagram(s)

sequenceDiagram
  participant Operator
  participant op-deployer
  participant Artifacts
  participant op-geth
  participant op-node
  participant op-batcher
  participant op-proposer
  participant op-challenger

  Operator->>op-deployer: init/apply/verify with intent.toml
  op-deployer-->>Operator: state.json, genesis.json, rollup.json
  Operator->>op-geth: init with genesis.json, start (JWT)
  Operator->>op-node: start with rollup.json (JWT)
  op-geth-->>op-node: Execution payloads/RPC
  Operator->>op-batcher: start (uses L2/L1 RPC, BatchInbox)
  op-batcher->>Artifacts: Submit L2 tx batches to L1
  Operator->>op-proposer: start (uses GameFactory/L1/L2/Rollup RPC)
  op-proposer->>Artifacts: Propose state roots to L1
  Operator->>op-challenger: start (uses prestates, rollup RPC)
  op-challenger->>Artifacts: Monitor/participate in disputes on L1
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested labels

tutorial

Suggested reviewers

  • bradleycamacho
  • ZakAyesh
  • sbvegan
✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch update-l2-testnet-tut

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🧹 Nitpick comments (15)
package.json (1)

7-7: Breadcrumbs check removed from lint script; consider removing unused scripts.

You removed check-breadcrumbs from the lint pipeline, but the scripts "breadcrumbs" and "check-breadcrumbs" still exist. If breadcrumbs are no longer part of CI or DX flows, remove those scripts to avoid confusion.

   "scripts": {
-    "lint": "eslint . --ext mdx --max-warnings 0 && pnpm spellcheck:lint && pnpm check-redirects && pnpm validate-metadata && pnpm link-checker",
+    "lint": "eslint . --ext mdx --max-warnings 0 && pnpm spellcheck:lint && pnpm check-redirects && pnpm validate-metadata && pnpm link-checker",
     "fix": "eslint . --ext mdx --fix && pnpm spellcheck:fix && pnpm fix-redirects && pnpm fix-links",
     "spellcheck:lint": "cspell lint \"**/*.mdx\"",
     "prepare": "husky",
     "spellcheck:fix": "cspell --words-only --unique \"**/*.mdx\" | sort --ignore-case | uniq > words.txt",
-    "breadcrumbs": "NODE_NO_WARNINGS=1 node --loader ts-node/esm utils/create-breadcrumbs.ts",
-    "check-breadcrumbs": "NODE_NO_WARNINGS=1 node --loader ts-node/esm utils/breadcrumbs.ts",
+    // Breadcrumbs flow removed from CI; delete if unused everywhere:
+    // "breadcrumbs": "NODE_NO_WARNINGS=1 node --loader ts-node/esm utils/create-breadcrumbs.ts",
+    // "check-breadcrumbs": "NODE_NO_WARNINGS=1 node --loader ts-node/esm utils/breadcrumbs.ts",
     "check-redirects": "NODE_NO_WARNINGS=1 node --loader ts-node/esm utils/redirects.ts",
pages/operators/chain-operators/deploy/sequencer-node.mdx (4)

90-96: Avoid first-person voice; fix grammar.

Follow style: use imperative voice and avoid “we,” “our.” Also correct grammar.

-For spinning up a sequencer, we recommend building from source as it provides better control, and helps with debugging.
-In this guide Docker alternative is also provided.
+Build from source for better control and easier debugging.
+This guide also provides a Docker alternative.
 
-  <Tabs items={['Build from source', 'Using docker']}>
+  <Tabs items={['Build from source', 'Using Docker']}>
     <Tabs.Tab>
-      Building from source gives you full control over the binaries and is the preferred approach for this guide.
+      Build from source to retain full control over the binaries. This is the preferred approach for this guide.

203-207: Path to .deployer likely incorrect/inconsistent.

Earlier steps generate .deployer in the working directory, but these commands copy from ~/.deployer. Align with the same location or add an explicit note or variable for the path.

-# Copy configuration files from op-deployer
-cp ~/.deployer/genesis.json .
-cp ~/.deployer/rollup.json .
+# Copy configuration files from op-deployer
+# Note: Adjust the path if your .deployer directory is located elsewhere.
+# Example if .deployer is in the parent directory of your workspace:
+cp ../.deployer/genesis.json .
+cp ../.deployer/rollup.json .

220-291: Security hygiene for secrets and network exposure.

  • Do not commit .env to version control; add guidance to .gitignore and secret handling.
  • The configuration exposes RPC ports on 0.0.0.0 with permissive CORS and vhosts. For production, bind to localhost or restrict via firewalls/reverse proxies.
 **Important**: Replace ALL placeholder values (`YOUR_ACTUAL_*`) with your real configuration values.
+
+<Callout type="warning">
+  Do not commit `.env` or `jwt.txt` to version control. Add them to `.gitignore` and manage secrets using your organization's secret management solution.
+  For production, bind RPC endpoints to `127.0.0.1` or place them behind a firewall or reverse proxy. Avoid permissive `--http.vhosts="*"` and `--http.corsdomain="*"` configurations on public interfaces.
+</Callout>

300-326: Consider safer defaults for public interfaces.

These flags open op-geth widely. Recommend localhost bindings as defaults, with notes on when to expose.

-        --http.addr=0.0.0.0 \
+        --http.addr=127.0.0.1 \
-        --ws.addr=0.0.0.0 \
+        --ws.addr=127.0.0.1 \
-        --authrpc.addr=0.0.0.0 \
+        --authrpc.addr=127.0.0.1 \
-        --http.vhosts="*" \
-        --http.corsdomain="*" \
+        --http.vhosts="localhost" \
+        --http.corsdomain="http://localhost" \

Add a note informing operators they may relax these in controlled environments.

pages/operators/chain-operators/tutorials/create-l2-rollup/_meta.json (1)

1-8: Nav entries look good. Consider capitalization consistency for product names.

If the docs standardize on “Docker,” “OP Stack,” “OP Deployer,” etc., consider aligning the labels (e.g., “Spin Up OP Deployer,” “Spin Up Sequencer”). Not blocking.

pages/operators/chain-operators/tutorials/create-l2-rollup/op-batcher-setup.mdx (4)

70-75: Avoid first-person voice.

Use imperative form per style guide.

-For setting up the batcher, we recommend building from source as it provides better control and helps with debugging. Docker alternative is also provided.
+Build from source for better control and easier debugging. A Docker alternative is also provided.

124-153: Environment references depend on external network/service names; add guidance.

You set L2_RPC_URL and ROLLUP_RPC_URL to http://sequencer-node:8545/8547. Document that the sequencer service must be reachable by that hostname on the same Docker network, or change to host.docker.internal for local host connectivity.

-# L2 Configuration - Should match your sequencer setup
-L2_RPC_URL=http://sequencer-node:8545
-ROLLUP_RPC_URL=http://sequencer-node:8547
+# L2 Configuration - Should match your sequencer setup
+# If sequencer runs in Docker on the same "op-stack" network, use its service name:
+L2_RPC_URL=http://sequencer-node:8545
+ROLLUP_RPC_URL=http://sequencer-node:8547
+# If sequencer runs on the host, use host.docker.internal:
+# L2_RPC_URL=http://host.docker.internal:8545
+# ROLLUP_RPC_URL=http://host.docker.internal:8547

215-231: RPC method used for verification may start the service.

admin_startBatcher starts the batcher. For a non-invasive health check, prefer an informational method (e.g., admin_isRunning or a status method) if available, or note that this will toggle state.

-# Check batcher RPC is responding
-curl -X POST -H "Content-Type: application/json" \
-  --data '{"jsonrpc":"2.0","method":"admin_startBatcher","params":[],"id":1}' \
-  http://localhost:8548
+# Check batcher RPC is responding (non-invasive)
+# If supported by your version:
+# curl -X POST -H "Content-Type: application/json" \
+#   --data '{"jsonrpc":"2.0","method":"admin_isRunning","params":[],"id":1}' \
+#   http://localhost:8548
+# Otherwise, document that admin_startBatcher will start the process.

246-273: Directory layout shows proposer-node before it is introduced.

Minor clarity tweak: remove proposer-node from this early structure or annotate it as created in the next step to avoid confusion.

-  ├── proposer-node/          # Your proposer setup
+  # The proposer will be set up in the next step:
+  # ├── proposer-node/        # Your proposer setup
pages/operators/chain-operators/tutorials/create-l2-rollup/op-deployer-setup.mdx (2)

74-74: Consider clarifying the gas estimate range.

The gas estimate mentions "at least 1.5 to 3.5 ETH" which is a very wide range. Consider providing more specific guidance based on typical deployment scenarios or current gas conditions.


240-240: Fix grammatical error in artifact usage guidance.

There's a missing comma in the sentence structure.

-If you encounter the error `Application failed: failed to parse artifacts URL: unsupported tag`, you'll need to use the local files method described above, else If you use an invalid tag, the command will display all valid options.
+If you encounter the error `Application failed: failed to parse artifacts URL: unsupported tag`, you'll need to use the local files method described above. Otherwise, if you use an invalid tag, the command will display all valid options.
pages/operators/chain-operators/tutorials/create-l2-rollup/op-challenger-setup.mdx (2)

101-101: Address repetitive phrasing flagged by static analysis.

The static analysis tool flagged repetitive use of "This needs to be" in nearby sentences. Consider varying the language for better readability.

-*   This needs to be an `op-node` archive node because challenger needs access to output roots from back when the games start.
+*   Use an `op-node` archive node since the challenger requires access to output roots from when games begin.

217-217: Fix spelling of "onchain" if needed.

The static analysis tool flagged "onchain" as potentially incorrect spelling. Consider using "on-chain" if following standard conventions.

-This is an optional step to use `op-challenger` subcommands, which allow chain operators to interact with the Fault Proof System onchain for testing and debugging purposes.
+This is an optional step to use `op-challenger` subcommands, which allow chain operators to interact with the Fault Proof System on-chain for testing and debugging purposes.
pages/operators/chain-operators/tutorials/create-l2-rollup/op-geth-setup.mdx (1)

99-99: Fix inconsistent tab structure.

The Tabs component should use consistent naming with the other tutorial pages.

-<Tabs items={['Build from source', 'Using docker']}>
+<Tabs items={['Build from source', 'Using Docker']}>
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a5814a3 and f684c64.

📒 Files selected for processing (12)
  • .circleci/config.yml (0 hunks)
  • package.json (1 hunks)
  • pages/operators/chain-operators/deploy/sequencer-node.mdx (2 hunks)
  • pages/operators/chain-operators/tools/op-deployer.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/_meta.json (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-batcher-setup.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-challenger-setup.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-deployer-setup.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-geth-setup.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-proposer-setup.mdx (1 hunks)
  • words.txt (0 hunks)
💤 Files with no reviewable changes (2)
  • words.txt
  • .circleci/config.yml
🧰 Additional context used
📓 Path-based instructions (1)
**/*.mdx

⚙️ CodeRabbit Configuration File

**/*.mdx: "ALWAYS review Markdown content THOROUGHLY with the following criteria:

  • First, check the frontmatter section at the top of the file:
    1. For regular pages, ensure ALL these fields are present and not empty:
    ---
    title: [non-empty]
    lang: [non-empty]
    description: [non-empty]
    topic: [non-empty]
    personas: [non-empty array]
    categories: [non-empty array]
    content_type: [valid type]
    ---
    1. For landing pages (index.mdx or files with ), only these fields are required:
    ---
    title: [non-empty]
    lang: [non-empty]
    description: [non-empty]
    topic: [non-empty]
    ---
    1. If any required fields are missing or empty, comment:
      'This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:
    pnpm validate-metadata
    ```'
  • Use proper nouns in place of personal pronouns like 'We' and 'Our' to maintain consistency in communal documentation.
  • Avoid gender-specific language and use the imperative form.
  • Monitor capitalization for emphasis. Avoid using all caps, italics, or bold for emphasis.
  • Ensure proper nouns are capitalized in sentences.
  • Apply the Oxford comma.
  • Use proper title case for buttons, tab names, page names, and links. Sentence case should be used for body content and short phrases, even in links.
  • Use correct spelling and grammar at all times (IMPORTANT).
  • For H1, H2, and H3 headers:
    1. Use sentence case, capitalizing only the first word.
    2. Preserve the capitalization of proper nouns, technical terms, and acronyms as defined in the 'nouns.txt' file located in the root directory of the project.
    3. Do not automatically lowercase words that appear in the 'nouns.txt' file, regardless of their position in the header.
  • Flag any headers that seem to inconsistently apply these rules for manual review.
  • When rev...

Files:

  • pages/operators/chain-operators/tools/op-deployer.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-geth-setup.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-deployer-setup.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-challenger-setup.mdx
  • pages/operators/chain-operators/deploy/sequencer-node.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-proposer-setup.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-batcher-setup.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup.mdx
🪛 LanguageTool
pages/operators/chain-operators/tutorials/create-l2-rollup/op-challenger-setup.mdx

[style] ~101-~101: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...ess. #### --rollup-rpc * This needs to be an op-node archive node because ch...

(REP_NEED_TO_VB)


[grammar] ~217-~217: Ensure spelling is correct
Context: ... to interact with the Fault Proof System onchain for testing and debugging purposes. For...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🔇 Additional comments (24)
pages/operators/chain-operators/tools/op-deployer.mdx (1)

366-366: Verified: target page and anchor exist

The file pages/stack/smart-contracts/op-deployer-upgrade.mdx contains an H2 heading:

  • Line 33: ## Using upgrade → slugifies to using-upgrade

The link /stack/smart-contracts/op-deployer-upgrade#using-upgrade is valid.

pages/operators/chain-operators/deploy/sequencer-node.mdx (2)

1-18: Frontmatter: required metadata present.

All required frontmatter fields appear populated (title, lang, description, content_type, topic, personas, categories). No action needed.


403-413: admin_sequencerActive is a valid op-node JSON-RPC method
Documentation in pages/operators/node-operators/json-rpc.mdx (lines 982–986) confirms that admin_sequencerActive returns the sequencer’s active status and is supported up through v1.13.3. No change is required here.

pages/operators/chain-operators/tutorials/create-l2-rollup/op-batcher-setup.mdx (3)

1-17: Frontmatter: required metadata present.

All required frontmatter fields appear populated (title, lang, description, content_type, topic, personas, categories). No action needed.


447-468: Links and capitalization look good.

“Need Help” section is consistent. No action needed.


338-366: Verify need for the --batch-inbox-address flag

I wasn’t able to find any references to --batch-inbox-address in the op-batcher code or docs. Please confirm for v1.13.1:

  • If op-batcher requires an explicit BatchInbox address, uncomment and set the flag.
  • If it’s auto-discovered, remove any prior inbox-extraction steps to avoid confusion.

• File: pages/operators/chain-operators/tutorials/create-l2-rollup/op-batcher-setup.mdx
Lines: 338–366

Suggested snippet (adjust as needed):

   --l1-eth-rpc=$L1_RPC_URL \
   --private-key=$BATCHER_PRIVATE_KEY \
+  # Uncomment if your version requires the inbox address explicitly:
+  # --batch-inbox-address=$BATCH_INBOX_ADDRESS \
   --batch-type=1 \
pages/operators/chain-operators/tutorials/create-l2-rollup/op-deployer-setup.mdx (3)

1-14: Missing required metadata fields for regular pages.

This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:

pnpm validate-metadata

According to the coding guidelines, regular pages require ALL these fields:

  • title ✅ (present)
  • lang ✅ (present)
  • description ✅ (present)
  • topic ✅ (present)
  • personas ✅ (present)
  • categories ✅ (present)
  • content_type ✅ (present)

All required fields appear to be present and properly formatted.


105-107: Warning about production deployment is well-placed.

The warning about not using default addresses in production is appropriately prominent and clearly explains the security risk.


373-375: Excellent navigation structure and clear next steps.

The "What's Next?" section with the Card component provides clear guidance for proceeding to the next step in the tutorial sequence.

pages/operators/chain-operators/tutorials/create-l2-rollup/op-challenger-setup.mdx (3)

1-16: Missing required metadata fields for regular pages.

This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:

pnpm validate-metadata

All required metadata fields appear to be present and properly formatted according to the coding guidelines.


238-247: Well-structured completion section with clear status indicators.

The congratulations section effectively summarizes all completed components with clear checkmarks, providing a satisfying conclusion to the tutorial series.


281-286: Comprehensive help resources provided.

The "Need Help?" section includes appropriate community, technical, and developer resources for ongoing support.

pages/operators/chain-operators/tutorials/create-l2-rollup/op-geth-setup.mdx (3)

1-15: Missing required metadata fields for regular pages.

This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:

pnpm validate-metadata

All required metadata fields appear to be present and properly formatted according to the coding guidelines.


87-92: Excellent version compatibility guidance.

The callout clearly explains the tested compatible versions and directs users to check release notes for compatibility, which is crucial for preventing version mismatch issues.


592-598: Clear navigation to next step with appropriate context.

The "What's Next?" section properly links to the batcher setup and explains the logical progression in the tutorial sequence.

pages/operators/chain-operators/tutorials/create-l2-rollup/op-proposer-setup.mdx (4)

1-17: Missing required metadata fields for regular pages.

This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:

pnpm validate-metadata

All required metadata fields appear to be present and properly formatted according to the coding guidelines.


64-67: Excellent version compatibility information.

The callout clearly specifies the version being used and emphasizes checking release notes for compatibility, which helps prevent integration issues.


313-315: Important warning about funding the proposer account.

The warning about ETH balance is well-placed and emphasizes the ongoing operational cost, which is crucial for maintaining proposer functionality.


431-437: Clear progression to final step.

The "What's Next?" section appropriately guides users to the challenger setup as the final component in the tutorial series.

pages/operators/chain-operators/tutorials/create-l2-rollup.mdx (5)

7-17: Improved personas and categories for broader audience.

The expanded personas list (sequencer, batcher, proposer, challenger, integration) and updated categories better reflect the comprehensive nature of this tutorial.


25-51: Excellent restructured tutorial overview.

The new step-by-step structure with clear links to each component provides much better navigation and understanding of the tutorial flow compared to the previous heavy setup blocks.


64-66: Appropriate warning for testnet-only usage.

The warning clearly emphasizes this is for testnet deployment only, which is crucial for preventing production misuse.


84-86: Effective call-to-action with Card component.

The Card component provides a clear and visually appealing way to direct users to the first step of the tutorial.


21-21: Card import confirmed. The Card component is already exported by nextra/components and is imported in dozens of MDX pages (e.g. pages/operators/node-operators.mdx, pages/stack/transactions.mdx, etc.), so the import in create-l2-rollup.mdx is valid and requires no changes.

krofax added 3 commits August 12, 2025 16:46
…es for op-geth. Remove outdated prerequisites and enhance clarity in deployment steps, including updates to Docker image versions and configuration instructions.
… of the docker-compose.yml file for improved readability.
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

♻️ Duplicate comments (1)
pages/operators/chain-operators/tutorials/create-l2-rollup/op-geth-setup.mdx (1)

1-15: Validate personas and categories against keywords.config.yaml

Frontmatter fields are present and non-empty. Ensure personas and categories use allowed values as defined in keywords.config.yaml, and run pnpm validate-metadata to confirm.

This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:

pnpm validate-metadata
🧹 Nitpick comments (9)
pages/operators/chain-operators/tutorials/create-l2-rollup/op-geth-setup.mdx (9)

72-75: Capitalize “Docker” in tab label

Use title case for tab names.

-<Tabs items={['Build from source', 'Using docker']}>
+<Tabs items={['Build from source', 'Using Docker']}>

27-33: Normalize headers to sentence case and hyphenation

Follow the style guide for headers (sentence case; hyphen for compound modifiers).

-## What You'll Set Up
+## What you'll set up
@@
-## Sequencer specific configuration
+## Sequencer-specific configuration
@@
-## What's Next?
+## What's next?
@@
-## Need Help?
+## Need help?

Also applies to: 279-281, 574-576, 584-586


69-71: Use neutral, imperative phrasing; fix grammar

Avoid “we”/“we’re,” and fix grammar.

-For spinning up a sequencer, we recommend building from source as it provides better control, and helps with debugging.
-In this guide Docker alternative is also provided.
+For spinning up a sequencer, build from source for better control and easier debugging.
+This guide also provides a Docker alternative.

179-181: Avoid first-person phrasing

Prefer neutral phrasing per style guide.

-In this guide, we're going to be using the binaries from their original build locations, we only need to create directories for configuration files and scripts.
+This guide uses binaries from their original build locations; only create directories for configuration files and scripts.

291-311: Call out security posture of permissive RPC settings

Ports are bound to 0.0.0.0 with wildcard CORS/VHosts. Fine for local/test, but risky if publicly exposed. Add a cautionary note to restrict exposure in production.

       --rollup.sequencerhttp=http://localhost:$OP_NODE_RPC_PORT
     ```
+
+    <Callout type="warning">
+      The configuration above binds RPC endpoints to 0.0.0.0 and enables wildcard CORS/VHosts for convenience. For production or any internet-exposed hosts, restrict access (bind to localhost or a private interface, configure an authenticated reverse proxy, and lock down CORS/VHosts).
+    </Callout>

Repeat a similar caution in the Docker section where CORS/VHosts are set to “*”.


228-233: Fix comma splice; be explicit about the next step

Minor readability improvement.

-# Find your public IP address, once you get it, update the P2P_ADVERTISE_IP in your .env
+# Find your public IP address. Then update P2P_ADVERTISE_IP in your .env.

53-59: Improve link text for clarity and consistency

Use descriptive link text; prefer title case for link labels per guidelines.

-**[release page](https://github.com/ethereum-optimism/optimism/releases)**
+**[Optimism releases](https://github.com/ethereum-optimism/optimism/releases)**
@@
-*   **op-node**: Look for the latest `op-node/v*` release
-*   **op-geth**: Look for the latest `op-geth/v*` [release](https://github.com/ethereum-optimism/op-geth/releases)
+*   **op-node**: Look for the latest `op-node/v*` release
+*   **op-geth**: Look for the latest `op-geth/v*` [releases](https://github.com/ethereum-optimism/op-geth/releases)

549-554: Prefer Compose V2 syntax; drop legacy version field

Modern Docker uses “docker compose” (without a hyphen) and the Compose spec doesn’t require the version field.

-      version: '3.8'
+      # Compose spec; no version field required
-# Start both services
-docker-compose up -d
-
-# View logs
-docker-compose logs -f
+# Start both services
+docker compose up -d
+
+# View logs
+docker compose logs -f

Also applies to: 457-458


387-397: Consider templating ports in verification commands

If users customize ports via .env, the hardcoded ports in the examples may mislead. Consider echoing the ports or reminding readers to adjust the port numbers.

-# Check op-geth is responding, do this in another terminal
+# Check op-geth is responding (adjust the port if you customized OP_GETH_HTTP_PORT)
@@
-# Check sequencer status
+# Check sequencer status (adjust the port if you customized OP_NODE_RPC_PORT)
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f684c64 and c090eeb.

📒 Files selected for processing (2)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-deployer-setup.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-geth-setup.mdx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-deployer-setup.mdx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.mdx

⚙️ CodeRabbit Configuration File

**/*.mdx: "ALWAYS review Markdown content THOROUGHLY with the following criteria:

  • First, check the frontmatter section at the top of the file:
    1. For regular pages, ensure ALL these fields are present and not empty:
    ---
    title: [non-empty]
    lang: [non-empty]
    description: [non-empty]
    topic: [non-empty]
    personas: [non-empty array]
    categories: [non-empty array]
    content_type: [valid type]
    ---
    1. For landing pages (index.mdx or files with ), only these fields are required:
    ---
    title: [non-empty]
    lang: [non-empty]
    description: [non-empty]
    topic: [non-empty]
    ---
    1. If any required fields are missing or empty, comment:
      'This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:
    pnpm validate-metadata
    ```'
  • Use proper nouns in place of personal pronouns like 'We' and 'Our' to maintain consistency in communal documentation.
  • Avoid gender-specific language and use the imperative form.
  • Monitor capitalization for emphasis. Avoid using all caps, italics, or bold for emphasis.
  • Ensure proper nouns are capitalized in sentences.
  • Apply the Oxford comma.
  • Use proper title case for buttons, tab names, page names, and links. Sentence case should be used for body content and short phrases, even in links.
  • Use correct spelling and grammar at all times (IMPORTANT).
  • For H1, H2, and H3 headers:
    1. Use sentence case, capitalizing only the first word.
    2. Preserve the capitalization of proper nouns, technical terms, and acronyms as defined in the 'nouns.txt' file located in the root directory of the project.
    3. Do not automatically lowercase words that appear in the 'nouns.txt' file, regardless of their position in the header.
  • Flag any headers that seem to inconsistently apply these rules for manual review.
  • When rev...

Files:

  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-geth-setup.mdx
🧠 Learnings (1)
📚 Learning: 2025-02-20T08:02:49.192Z
Learnt from: sbvegan
PR: ethereum-optimism/docs#1376
File: pages/stack/interop/tutorials/deploy-superchain-erc20.mdx:125-131
Timestamp: 2025-02-20T08:02:49.192Z
Learning: Use descriptive placeholders (e.g., 'YOUR_KEY_HERE') instead of example values when documenting sensitive information like private keys in documentation files to prevent users from accidentally using insecure values.

Applied to files:

  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-geth-setup.mdx

… op-batcher to reflect version changes from v1.101511.0 to v1.101511.1 and v1.13.1 to v1.13.2, ensuring accurate instructions for users.
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🔭 Outside diff range comments (7)
pages/operators/chain-operators/deploy/spin-batcher.mdx (6)

25-25: Replace the placeholder link with a real URL.

The sequencer guide link is a TODO placeholder. Link to the existing sequencer page to avoid broken navigation.

-If you haven't set up your sequencer yet, please refer to the \[sequencer guide]\(add this later) first.
+If you haven't set up your sequencer yet, refer to the [sequencer guide](/operators/chain-operators/deploy/sequencer-node) first.

163-193: Align Docker image version and attach service to the op-stack network.

  • The image tag still uses v1.13.1; bump to v1.13.2 to match the guide.
  • The compose references a shared network in the narrative but does not attach the service to it or define it. Add the network to avoid cross-container DNS issues.
 services:
   op-batcher:
-    image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-batcher:v1.13.1
+    image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-batcher:v1.13.2
     volumes:
       - .:/workspace
     working_dir: /workspace
     ports:
       - "8548:8548"
     env_file:
       - .env
     command:
       - "op-batcher"
       - "--l2-eth-rpc=${L2_RPC_URL}"
       - "--rollup-rpc=${ROLLUP_RPC_URL}"
       - "--poll-interval=${POLL_INTERVAL}"
       - "--sub-safety-margin=${SUB_SAFETY_MARGIN}"
       - "--num-confirmations=${NUM_CONFIRMATIONS}"
       - "--safe-abort-nonce-too-low-count=${SAFE_ABORT_NONCE_TOO_LOW_COUNT}"
       - "--resubmission-timeout=${RESUBMISSION_TIMEOUT}"
       - "--rpc.addr=0.0.0.0"
       - "--rpc.port=${BATCHER_RPC_PORT}"
       - "--rpc.enable-admin"
       - "--max-channel-duration=${MAX_CHANNEL_DURATION}"
       - "--l1-eth-rpc=${L1_RPC_URL}"
       - "--private-key=${BATCHER_PRIVATE_KEY}"
       - "--batch-type=1"
       - "--data-availability-type=blobs"
       - "--compress"
       - "--log.level=info"
     restart: unless-stopped
+    networks:
+      - op-stack
+
+networks:
+  op-stack:
+    external: true

42-52: List required CLI tools (jq, just).

This page uses jq to parse JSON and just to build op-batcher, but prerequisites do not mention them. Add them to prevent setup failures.

 **Network information:**
 
 *   Your L2 chain ID and network configuration
 *   L1 network details (chain ID, RPC endpoints)
-*   `BatchInbox` contract address from your deployment
+*   `BatchInbox` contract address from your deployment
+
+**CLI tools:**
+
+*   jq (JSON CLI parser)
+*   just (command runner used by op-batcher)

123-149: Add a secrets handling warning after the .env example (Docker path).

Avoid accidental leakage of sensitive values and align with repository hygiene guidance.

   PROPOSER_RPC_PORT=8548
   EOF
  • Do not commit .env to version control. Restrict permissions (e.g., chmod 600 .env), and prefer environment injection or a secret manager in production environments.

---

`291-316`: **Add a secrets handling warning after the .env example (build-from-source path).**

Same rationale as above for the local path.


```diff
 BATCHER_RPC_PORT=8548

Important: Replace ALL placeholder values (YOUR_ACTUAL_*) with your real configuration values!
+
+

  • Do not commit .env to version control. Restrict permissions (e.g., chmod 600 .env), and prefer environment injection or a secret manager in production environments.
    +

---

`115-118`: **Remove incorrect BatchInbox extraction from spin-batcher.mdx**

The snippet at lines 115–118 (and similarly at 279–281) pulls `.systemConfigProxyAddress` into `BATCH_INBOX_ADDRESS`, but:

- That field is not the BatchInbox contract address.  
- `BATCH_INBOX_ADDRESS` is never used by Docker Compose or the startup scripts, which only read from the rollup config and L1.  

Action items:
- In `pages/operators/chain-operators/deploy/spin-batcher.mdx`, delete lines 115–118 (and 279–281).
- If you truly need to display the BatchInbox address, extract the correct JSON path (e.g. `.opChainDeployments[0].batchInboxAddress`) and wire it into your scripts or compose file.

Diff:
```diff
-  # Extract the BatchInbox address
-  BATCH_INBOX_ADDRESS=$(cat state.json | jq -r '.opChainDeployments[0].systemConfigProxyAddress')
-  echo "BatchInbox Address: $BATCH_INBOX_ADDRESS"
pages/operators/chain-operators/deploy/sequencer-node.mdx (1)

64-69: List 'just' in software requirements.

Build steps use just, but it’s not listed. Add it to prevent build failures.

 *   Git (for cloning repositories)
 *   Go 1.21+ (if building from source)
+*   just (command runner used by op-node)
 *   Docker and Docker Compose (optional but recommended)
 *   OpenSSL for JWT secret generation
♻️ Duplicate comments (3)
pages/operators/chain-operators/tutorials/create-l2-rollup/op-proposer-setup.mdx (2)

42-56: Add required tools to prerequisites (jq, just).

This tutorial uses jq (to parse state.json) and just (to build op-proposer) but does not list them, leading to setup failures.

 ## Prerequisites
 
 Before setting up your proposer, ensure you have:
 
 **Running infrastructure:**
 
 *   An operational sequencer node
 *   Access to a L1 RPC endpoint
 
 **Network information:**
 
 *   Your L2 chain ID and network configuration
 *   L1 network details (chain ID, RPC endpoints)
+
+**CLI tools:**
+
+*   jq (JSON CLI parser)
+*   just (command runner used by op-proposer)

407-416: Fix RPC endpoint for proposer verification.

The first verification block targets the rollup RPC (8547). To verify the proposer service specifically, target the proposer RPC (8560).

   # Monitor proposal activity
   curl -X POST -H "Content-Type: application/json" \
     --data '{"jsonrpc":"2.0","method":"optimism_outputAtBlock","params":["latest"],"id":1}' \
-    http://localhost:8547
+    http://localhost:8560
pages/operators/chain-operators/deploy/sequencer-node.mdx (1)

265-290: Add a secrets handling warning after the .env example.

Protect sensitive values and align with secret management best practices.

   JWT_SECRET=./jwt.txt

Important: Replace ALL placeholder values (YOUR_ACTUAL_*) with your real configuration values.
+

  • Do not commit .env or jwt.txt to version control. Restrict permissions (e.g., chmod 600 .env jwt.txt), and prefer environment injection or a secret manager in production environments.

</blockquote></details>

</blockquote></details>

<details>
<summary>🧹 Nitpick comments (5)</summary><blockquote>

<details>
<summary>pages/operators/chain-operators/tutorials/create-l2-rollup/op-proposer-setup.mdx (3)</summary><blockquote>

`21-24`: **Avoid first-person plural; use imperative tone.**

Replace “so we can prove withdrawal validity” with neutral language.


```diff
-After you have spun up your sequencer and batcher, you need to attach a proposer to post your L2 state roots data back onto L1 so we can prove withdrawal validity. The proposer is a critical component that enables trustless L2-to-L1 messaging and creates the authoritative view of L2 state from L1's perspective.
+After you have spun up your sequencer and batcher, attach a proposer to post L2 state roots back onto L1 so that users can prove withdrawal validity. The proposer is a critical component that enables trustless L2-to-L1 messaging and creates the authoritative view of L2 state from L1's perspective.

71-73: Use title case for tab names.

Follow docs style for UI labels.

-<Tabs items={['Build from source', 'Using Docker']}>
+<Tabs items={['Build From Source', 'Using Docker']}>

431-446: Use sentence case for headers.

Adjust H2 headers to sentence case per style guide.

-## What's Next?
+## What's next?
@@
-## Need Help?
+## Need help?
pages/operators/chain-operators/deploy/sequencer-node.mdx (2)

90-92: Minor grammar fix.

Improve readability.

-For spinning up a sequencer, we recommend building from source as it provides better control, and helps with debugging.
-In this guide Docker alternative is also provided.
+For spinning up a sequencer, build from source for better control and easier debugging.
+In this guide, a Docker alternative is also provided.

93-95: Use title case for tab names.

Capitalize “Docker” and each word in UI labels.

-  <Tabs items={['Build from source', 'Using docker']}>
+  <Tabs items={['Build From Source', 'Using Docker']}>
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c090eeb and b35849b.

📒 Files selected for processing (5)
  • pages/operators/chain-operators/deploy/proposer-setup-guide.mdx (1 hunks)
  • pages/operators/chain-operators/deploy/sequencer-node.mdx (2 hunks)
  • pages/operators/chain-operators/deploy/spin-batcher.mdx (2 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-batcher-setup.mdx (1 hunks)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-proposer-setup.mdx (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • pages/operators/chain-operators/deploy/proposer-setup-guide.mdx
🚧 Files skipped from review as they are similar to previous changes (1)
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-batcher-setup.mdx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.mdx

⚙️ CodeRabbit Configuration File

**/*.mdx: "ALWAYS review Markdown content THOROUGHLY with the following criteria:

  • First, check the frontmatter section at the top of the file:
    1. For regular pages, ensure ALL these fields are present and not empty:
    ---
    title: [non-empty]
    lang: [non-empty]
    description: [non-empty]
    topic: [non-empty]
    personas: [non-empty array]
    categories: [non-empty array]
    content_type: [valid type]
    ---
    1. For landing pages (index.mdx or files with ), only these fields are required:
    ---
    title: [non-empty]
    lang: [non-empty]
    description: [non-empty]
    topic: [non-empty]
    ---
    1. If any required fields are missing or empty, comment:
      'This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:
    pnpm validate-metadata
    ```'
  • Use proper nouns in place of personal pronouns like 'We' and 'Our' to maintain consistency in communal documentation.
  • Avoid gender-specific language and use the imperative form.
  • Monitor capitalization for emphasis. Avoid using all caps, italics, or bold for emphasis.
  • Ensure proper nouns are capitalized in sentences.
  • Apply the Oxford comma.
  • Use proper title case for buttons, tab names, page names, and links. Sentence case should be used for body content and short phrases, even in links.
  • Use correct spelling and grammar at all times (IMPORTANT).
  • For H1, H2, and H3 headers:
    1. Use sentence case, capitalizing only the first word.
    2. Preserve the capitalization of proper nouns, technical terms, and acronyms as defined in the 'nouns.txt' file located in the root directory of the project.
    3. Do not automatically lowercase words that appear in the 'nouns.txt' file, regardless of their position in the header.
  • Flag any headers that seem to inconsistently apply these rules for manual review.
  • When rev...

Files:

  • pages/operators/chain-operators/deploy/spin-batcher.mdx
  • pages/operators/chain-operators/tutorials/create-l2-rollup/op-proposer-setup.mdx
  • pages/operators/chain-operators/deploy/sequencer-node.mdx
🧠 Learnings (1)
📚 Learning: 2025-02-20T08:02:49.192Z
Learnt from: sbvegan
PR: ethereum-optimism/docs#1376
File: pages/stack/interop/tutorials/deploy-superchain-erc20.mdx:125-131
Timestamp: 2025-02-20T08:02:49.192Z
Learning: Use descriptive placeholders (e.g., 'YOUR_KEY_HERE') instead of example values when documenting sensitive information like private keys in documentation files to prevent users from accidentally using insecure values.

Applied to files:

  • pages/operators/chain-operators/deploy/sequencer-node.mdx
🔇 Additional comments (1)
pages/operators/chain-operators/tutorials/create-l2-rollup/op-proposer-setup.mdx (1)

1-17: Frontmatter looks complete.

All required metadata fields are present and non-empty for a regular page.

krofax added 5 commits August 12, 2025 18:04
…ons, update op-batcher image version to v1.13.2, and enhance clarity in docker-compose.yml file creation.
…date links, and remove outdated content. Enhance clarity in deployment instructions and ensure accurate references to the op-challenger setup.
…ation steps, add prerequisites, and improve instructions for building and deploying the challenger. Correct DisputeGameFactory address extraction command in proposer setup guide for accuracy.
…n, clarify L1StandardBridge address retrieval, and enhance deposit instructions for improved user experience.
krofax and others added 27 commits September 9, 2025 15:57
… removing home directory references, update configuration file paths to reflect local directory structure, and enhance clarity in workspace organization across batcher, sequencer, and proposer setup guides.
…n setup instructions, enhance clarity on workspace organization, and update environment variable setup for improved user experience. Include additional details on batcher parameters and verification steps to ensure operational readiness.
…ding file movement and enhance clarity on installation steps for improved user understanding.
… into clear, sequential actions, improve clarity on file movement and permissions, and provide verification step to ensure successful installation.
…ntation to streamline instructions and improve clarity for users.
… DisputeGameFactory address extraction to ensure accuracy in setup instructions.
…erience level and familiarity with Ethereum development concepts to better prepare users for the tutorial.
…or better organization, clarify setup instructions for op-deployer and sequencer, and ensure consistency in file paths across the documentation.
…re for batcher, proposer, and challenger setups, ensuring all directories are created within the rollup directory. Update configuration file paths for clarity and consistency across tutorials.
…n file paths by replacing hardcoded chain ID with a placeholder, and enhance directory structure explanation for improved user understanding.
…pecifying the importance of prestate files in the Docker Compose setup and streamline the service configuration section for better user comprehension.
… 'prestate-proof-mt64' for enhanced vocabulary support.
…e '0x' prefix from private key placeholders in multiple files for consistency. Update tutorial content to enhance clarity and improve directory structure explanations.
…paths by removing '0x' prefix from GAME_FACTORY_ADDRESS placeholders, clarify directory structure in tutorials, and update instructions for copying prestate files to enhance user understanding.
@bradleycamacho bradleycamacho merged commit 17e07b9 into main Sep 19, 2025
12 checks passed
@bradleycamacho bradleycamacho deleted the update-l2-testnet-tut branch September 19, 2025 20:29
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