From c93d0d030e5f1deb2594e06d9f7665c793a82c94 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Mon, 2 Jun 2025 15:59:41 +0100 Subject: [PATCH 01/34] update batcher configs --- .../chain-operators/configuration/batcher.mdx | 214 +++++++++++++++++- 1 file changed, 205 insertions(+), 9 deletions(-) diff --git a/pages/operators/chain-operators/configuration/batcher.mdx b/pages/operators/chain-operators/configuration/batcher.mdx index 7bc356c17..844adba07 100644 --- a/pages/operators/chain-operators/configuration/batcher.mdx +++ b/pages/operators/chain-operators/configuration/batcher.mdx @@ -19,9 +19,192 @@ import { Callout, Tabs } from 'nextra/components' # Batcher configuration -This page lists all configuration options for the op-batcher. The op-batcher posts -L2 sequencer data to the L1, to make it available for verifiers. The following -options are from the `--help` in [v1.10.0](https://github.com/ethereum-optimism/optimism/releases/tag/op-batcher%2Fv1.10.0). +This page provides the **definitive guide** for OP Stack batcher configuration, serving as the single source of truth for chain operators. +The op-batcher posts L2 sequencer data to the L1, to make it available for verifiers. + +## Overview + +The batcher serves as a critical component that: + +* Stores a contiguous set of blocks & turns them into channels +* Compresses and batches L2 transaction data +* Submits this data to L1 either as calldata or blobs +* Ensures data availability for L2 block verification and derivation + +Understanding transaction finality is crucial for batcher configuration: transactions on OP Stack chains become finalized when their data is included in a finalized Ethereum block, typically around 20–30 minutes after submission. This is different from the 7-day withdrawal period, which affects only withdrawals through the Standard Bridge. + +**Finality levels:** + +* **Unsafe blocks**: The Sequencer can reorganize these blocks (typically within \~5–10 minutes) +* **Safe blocks**: The Sequencer would need to trigger a reorg on Ethereum itself, which is complex and unlikely +* **Finalized blocks**: Once blocks are included in a finalized Ethereum block (typically after \~15–30 minutes), the Sequencer cannot reorganize them without compromising Ethereum's finality guarantees + +## Recommended configuration + + + The following configuration provides optimal settings for most OP Stack chains while maintaining cost efficiency. + + +### Essential production configuration + +```bash +# Basic Configuration - Wait for sync and check recent transactions +OP_BATCHER_WAIT_NODE_SYNC=true +OP_BATCHER_CHECK_RECENT_TXS_DEPTH=5 +OP_BATCHER_POLL_INTERVAL=5s + +# Batch Settings - Use Span Batches (Delta upgrade feature) +OP_BATCHER_BATCH_TYPE=1 # Span batches for efficiency + +# Compression - Higher compression for lower data costs +OP_BATCHER_COMPRESSION_ALGO=brotli-10 + +# Data availability - Auto-switch between calldata and blobs +OP_BATCHER_DATA_AVAILABILITY_TYPE=auto + +# Channel duration - Target 5 hours (1500 L1 blocks) for cost optimization +OP_BATCHER_MAX_CHANNEL_DURATION=1500 + +# Blob configuration - Multi-blob transactions for higher throughput +OP_BATCHER_TARGET_NUM_FRAMES=5 # 5 blobs per transaction + +# Safety margins - 1 hour safety margin to prevent sequencing window issues +OP_BATCHER_SUB_SAFETY_MARGIN=300 +OP_BATCHER_NUM_CONFIRMATIONS=4 + +# Transaction Management - Optimized fee parameters +OP_BATCHER_NETWORK_TIMEOUT=10s +OP_BATCHER_TXMGR_MIN_BASEFEE=2.0 # 2 gwei +OP_BATCHER_TXMGR_MIN_TIP_CAP=2.0 # 2 gwei +OP_BATCHER_TXMGR_FEE_LIMIT_MULTIPLIER=16 # Allow up to 4 doublings +OP_BATCHER_MAX_PENDING_TX=10 +OP_BATCHER_RESUBMISSION_TIMEOUT=180s # 3 minutes + +# Sequencer following - Enable active sequencer detection +OP_BATCHER_ACTIVE_SEQUENCER_CHECK_DURATION=5s + +# Throttling configuration (requires op-geth v1.101411.1+) +OP_BATCHER_THROTTLE_THRESHOLD=1000000 # 1MB backlog triggers throttling +OP_BATCHER_THROTTLE_TX_SIZE=300 # Individual tx size limit +OP_BATCHER_THROTTLE_BLOCK_SIZE=21000 # Block size limit when throttling +OP_BATCHER_THROTTLE_ALWAYS_BLOCK_SIZE=130000 # Always-active block limit + +# Network connections +OP_BATCHER_L1_ETH_RPC="" +OP_BATCHER_L2_ETH_RPC="http://localhost:8551" +OP_BATCHER_ROLLUP_RPC="http://localhost:9545" + +# Authentication (choose one method) +OP_BATCHER_PRIVATE_KEY="your_private_key_here" + +# Monitoring +OP_BATCHER_METRICS_ENABLED=true +OP_BATCHER_METRICS_PORT=7300 +OP_BATCHER_LOG_LEVEL="INFO" +OP_BATCHER_LOG_FORMAT="json" +``` + +## Key configuration insights + +### Channel duration (`OP_BATCHER_MAX_CHANNEL_DURATION`) + +**Recommended value:** `1500` (5 hours) + + + The default value inside `op-batcher`, if not specified, is still `0`, which means channel duration tracking is disabled. + For very low throughput chains, this would mean to fill channels until close to the sequencing window and post the channel to `L1 SUB_SAFETY_MARGIN` L1 blocks before the sequencing window expires. + + +To minimize costs, we recommend setting your `OP_BATCHER_MAX_CHANNEL_DURATION` to target 5 hours, with a value of 1500 L1 blocks. When non-zero, this parameter is the max time (in L1 blocks, which are 12 seconds each) between which batches will be submitted to the L1. + +**Important considerations:** + +* While setting an `OP_BATCHER_MAX_CHANNEL_DURATION` of 1500 results in the cheapest fees, it also means that your [safe head](https://github.com/ethereum-optimism/specs/blob/main/specs/glossary.md#safe-l2-head) can stall for up to 5 hours +* This will negatively impact apps on your chain that rely on the safe head for operation. While many apps can likely operate simply by following the unsafe head, often Centralized Exchanges or third party bridges wait until transactions are marked safe before processing deposits and withdrawal +* Never exceed your L2's sequencing window (commonly 12 hours) +* If your chain fills up full blobs of data before the `OP_BATCHER_MAX_CHANNEL_DURATION` elapses, a batch will be submitted anyway + +### Data availability type (`OP_BATCHER_DATA_AVAILABILITY_TYPE`) + +**Recommended value:** `auto` + + + Setting this flag to auto will allow the batcher to automatically switch between calldata and blobs based on the current L1 gas price. + + +Setting this flag to auto will allow the batcher to automatically switch between calldata and blobs based on the current L1 gas price. + +**Options:** + +* `calldata` - Generally simpler but can be more expensive on mainnet Ethereum, depending on gas prices +* `blobs` - Typically lower cost when your chain has enough transaction volume to fill large chunks of data +* `auto` - Automatically switches based on L1 gas conditions (recommended for most chains) + +### Multi-blob configuration + + + When there's blob congestion, running with high blob counts can backfire, because you will have a harder time getting blobs included and then fees will bump, which always means a doubling of the priority fees. + + +For medium to high-throughput chains, configure multi-blob transactions: + +```bash +OP_BATCHER_DATA_AVAILABILITY_TYPE=blobs +OP_BATCHER_TARGET_NUM_FRAMES=6 # 6 blobs per transaction +OP_BATCHER_TXMGR_MIN_BASEFEE=2.0 # Higher fees for blob inclusion +OP_BATCHER_TXMGR_MIN_TIP_CAP=2.0 +OP_BATCHER_RESUBMISSION_TIMEOUT=240s # Wait 4 min before fee bumps +``` + +Multi-blob transactions are particularly useful for medium to high-throughput chains, where enough transaction volume exists to fill up 6 blobs in a reasonable amount of time. + +### Span batches (`OP_BATCHER_BATCH_TYPE`) + +**Recommended value:** `1` + +Span batches reduce the overhead of OP Stack chains, introduced in the Delta network upgrade. This is beneficial for sparse and low-throughput OP Stack chains. The overhead is reduced by representing a span of consecutive L2 blocks in a more efficient manner, while preserving the same consistency checks as regular batch data. + +### Batcher sequencer throttling + +This feature is a batcher-driven sequencer-throttling control loop. This is to avoid sudden spikes in L1 DA-usage consuming too much available gas and causing a backlog in batcher transactions. + + + Note that this feature requires the batcher to correctly follow the sequencer at all times, or it would set throttling parameters on a non-sequencer EL client. That means, active sequencer follow mode has to be enabled correctly by listing all the possible sequencers in the L2 rollup and EL endpoint flags. + + +**Feature requirements:** + +* Requires op-geth version `v1.101411.1` or later +* Enable the `miner` API namespace: `GETH_HTTP_API: web3,debug,eth,txpool,net,miner` + +**Throttling configuration:** + +```bash +OP_BATCHER_THROTTLE_THRESHOLD=1000000 # 1MB backlog triggers throttling +OP_BATCHER_THROTTLE_TX_SIZE=300 # Individual tx size limit +OP_BATCHER_THROTTLE_BLOCK_SIZE=21000 # Block size limit when throttling +OP_BATCHER_THROTTLE_ALWAYS_BLOCK_SIZE=130000 # Always-active block limit +``` + +## Chain-specific recommendations + +### For low-throughput chains + +* Consider longer `MAX_CHANNEL_DURATION` values (up to 1500 blocks) +* Use span batches (`BATCH_TYPE=1`) for reduced overhead +* Start with `DATA_AVAILABILITY_TYPE=auto` to optimize costs + +### For high-throughput chains + +* Use multi-blob configuration with `TARGET_NUM_FRAMES=6` +* Shorter `MAX_CHANNEL_DURATION` may be appropriate +* Monitor blob inclusion rates and adjust fee parameters accordingly + +### Sequencing window considerations + +Your chain should never exceed your L2's sequencing window (commonly 12 hours). The sequencing window is the maximum time allowed for posting batch data to L1 before the chain experiences issues. + +**Safety margin:** The batcher tx submission safety margin (in #L1-blocks) to subtract from a channel's timeout and sequencing window, to guarantee safe inclusion of a channel on L1. The default value is 10. ## Batcher policy @@ -32,12 +215,12 @@ The batcher policy defines high-level constraints and responsibilities regarding | Data Availability Type | Specifies whether the batcher uses **blobs**, **calldata**, or **auto** to post transaction data to L1. | Batch submitter address | Ethereum (Blobs or Calldata) | - Alternative data availability (Alt-DA) is not yet supported in the standard configuration.
- The sequencer can switch at will between blob transactions and calldata, with no restrictions, because both are fully secured by L1. | | Batch Submission Frequency | Determines how frequently the batcher submits aggregated transaction data to L1 (via the batcher transaction). | Batch submitter address | Must target **1,800 L1 blocks** (6 hours on Ethereum, assuming 12s L1 block time) or lower | - Batches must be posted before the sequencing window closes (commonly 12 hours by default).
- Leave a buffer for L1 network congestion and data size to ensure that each batch is fully committed in a timely manner. | -* **Data Availability Types**: +* **Data availability types**: * **Calldata** is generally simpler but can be more expensive on mainnet Ethereum, depending on gas prices. * **Blobs** are typically lower cost when your chain has enough transaction volume to fill large chunks of data. * The `op-batcher` can toggle between these approaches by setting the `--data-availability-type=` flag or with the `OP_BATCHER_DATA_AVAILABILITY_TYPE` env variable. Setting this flag to `auto` will allow the batcher to automatically switch between `calldata` and `blobs` based on the current L1 gas price. -* **Batch Submission Frequency** (`OP_BATCHER_MAX_CHANNEL_DURATION` and related flags): +* **Batch submission frequency** (`OP_BATCHER_MAX_CHANNEL_DURATION` and related flags): * Standard OP Chains frequently target a maximum channel duration between 1–6 hours. * Your chain should never exceed your L2's sequencing window (commonly 12 hours). * If targeting a longer submission window (e.g., 5 or 6 hours), be aware that the [safe head](https://github.com/ethereum-optimism/specs/blob/main/specs/glossary.md#safe-l2-head) can stall up to that duration. @@ -71,7 +254,7 @@ To minimize costs, we recommend setting your `OP_BATCHER_MAX_CHANNEL_DURATION` When there's blob congestion, running with high blob counts can backfire, because you will have a harder time getting blobs included and then fees will bump, which always means a doubling of the priority fees. -The `op-batcher` has the capabilities to send multiple blobs per single blob transaction. This is accomplished by the use of multi-frame channels, see the [specs](https://specs.optimism.io/protocol/derivation.html#frame-format?utm_source=op-docs&utm_medium=docs) for more technical details on channels and frames. +The `op-batcher` has the capabilities to send multiple blobs per single blob transaction. This is accomplished by the use of multi-frame channels, see the [specs](https://specs.optimism.io/protocol/derivation.html#frame-format?utm_source=op-docs\&utm_medium=docs) for more technical details on channels and frames. A minimal batcher configuration (with env vars) to enable 6-blob batcher transactions is: @@ -166,7 +349,7 @@ however you can see some of the most important variables configured below: OP_BATCHER_ACTIVE_SEQUENCER_CHECK_DURATION: 5s ``` -Lower throughput chains, which aren't filling up channels before the `MAX_CHANNEL_DURATION` is hit, +Lower throughput chains, which aren't filling up channels before the `MAX_CHANNEL_DURATION` is hit, may save gas by increasing the `MAX_CHANNEL_DURATION`. See the [recommendations section](#set-your--op_batcher_max_channel_duration). ## All configuration variables @@ -538,7 +721,6 @@ flag must also be set. `OP_BATCHER_HD_PATH=` - #### signer.address Address the signer is signing transactions for. @@ -806,7 +988,6 @@ Enable the metrics server. The default value is `false`. `--version=false` - ### Miscellaneous #### active-sequencer-check-duration @@ -888,3 +1069,18 @@ Print the version. The default value is false. `--version=` `--version=false` + +## Conclusion + +This configuration reference provides a complete foundation for operating an OP Stack batcher efficiently and securely. +The recommended settings balance cost optimization with operational reliability while ensuring proper transaction finality progression. + +The batcher is critical infrastructure that ensures your L2 chain inherits Ethereum's security properties through reliable data availability. +Proper configuration based on these guidelines will ensure optimal operation while meeting your chain's specific requirements. + +### Next steps + +* Read the [transaction finality](/stack/transactions/transaction-finality) docs +* Check out [rollup protocol](/stack/rollup/overview) specs +* Read the [derivation process](https://specs.optimism.io/protocol/derivation.html) guide +* Read the [batch submission wire format](https://specs.optimism.io/protocol/derivation.html#batch-submission) spec From 6056903abf0985656005e4732cb0f50ab30431a1 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Wed, 4 Jun 2025 18:24:00 +0100 Subject: [PATCH 02/34] Added the proposer guide and next steps --- .../chain-operators/tutorials/_meta.json | 1 + .../tutorials/absolute-prestate.mdx | 5 +- .../tutorials/dispute-games.mdx | 7 + .../tutorials/migrating-permissionless.mdx | 3 + .../tutorials/proposer-setup-guide.mdx | 278 ++++++++++++++++++ 5 files changed, 292 insertions(+), 2 deletions(-) create mode 100644 pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx diff --git a/pages/operators/chain-operators/tutorials/_meta.json b/pages/operators/chain-operators/tutorials/_meta.json index 9168131fe..f12ed3639 100644 --- a/pages/operators/chain-operators/tutorials/_meta.json +++ b/pages/operators/chain-operators/tutorials/_meta.json @@ -1,5 +1,6 @@ { "create-l2-rollup": "Creating your own rollup testnet", + "proposer-setup-guide": "Spin up your proposer", "adding-derivation-attributes": "Adding attributes to the derivation function", "adding-precompiles": "Adding a precompile", "modifying-predeploys": "Modifying predeployed contracts", diff --git a/pages/operators/chain-operators/tutorials/absolute-prestate.mdx b/pages/operators/chain-operators/tutorials/absolute-prestate.mdx index 757e50041..b108d7ebf 100644 --- a/pages/operators/chain-operators/tutorials/absolute-prestate.mdx +++ b/pages/operators/chain-operators/tutorials/absolute-prestate.mdx @@ -277,6 +277,7 @@ After generating the absolute prestate and preimage files, you'll need to: ## Next Steps -* [Deploying new dispute games with OPCM](/operators/chain-operators/tutorials/dispute-games) -* [Migrating to permissionless fault proofs](/operators/chain-operators/tutorials/migrating-permissionless) +* For more detail on deploying new dispute games with OPCM, [see the docs](/operators/chain-operators/tutorials/dispute-games). +* Read about [deploying new dispute games with OPCM](/operators/chain-operators/tutorials/dispute-games) +* checkout the [migrating to permissionless fault proofs](/operators/chain-operators/tutorials/migrating-permissionless) guide * [Fault proofs explainer](/stack/fault-proofs/explainer) diff --git a/pages/operators/chain-operators/tutorials/dispute-games.mdx b/pages/operators/chain-operators/tutorials/dispute-games.mdx index bdd017701..6a58e9a28 100644 --- a/pages/operators/chain-operators/tutorials/dispute-games.mdx +++ b/pages/operators/chain-operators/tutorials/dispute-games.mdx @@ -148,3 +148,10 @@ cast send --rpc-url $RPC_URL --private-key $PRIVATE_KEY $OPCM_ADDRESS $CALLDATA 4. Setting the respected game type After deploying the permissionless dispute game, you'll need to update the respectedGameType in the OptimismPortal to start using it. For detailed instructions on setting the respected game type and migrating your chain from permissioned to permissionless fault proofs, refer to the [migrating to permissionless fault proofs guide](/operators/chain-operators/tutorials/migrating-permissionless). + +## Next Steps + +* For more detail on deploying new dispute games with OPCM, [see the docs](/operators/chain-operators/tutorials/dispute-games). +* Learn about [absolute prestate](/operators/chain-operators/tutorials/absolute-prestate) +* checkout the [migrating to permissionless fault proofs](/operators/chain-operators/tutorials/migrating-permissionless) guide +* [Fault proofs explainer](/stack/fault-proofs/explainer) diff --git a/pages/operators/chain-operators/tutorials/migrating-permissionless.mdx b/pages/operators/chain-operators/tutorials/migrating-permissionless.mdx index c05060a33..ee2889075 100644 --- a/pages/operators/chain-operators/tutorials/migrating-permissionless.mdx +++ b/pages/operators/chain-operators/tutorials/migrating-permissionless.mdx @@ -382,3 +382,6 @@ OP_PROPOSER_GAME_TYPE=0 ## Next steps * For more detail on deploying new dispute games with OPCM, [see the docs](/operators/chain-operators/tutorials/dispute-games). +* Read about [deploying new dispute games with OPCM](/operators/chain-operators/tutorials/dispute-games) +* Learn about [absolute prestate](/operators/chain-operators/tutorials/absolute-prestate) +* [Fault proofs explainer](/stack/fault-proofs/explainer) diff --git a/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx b/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx new file mode 100644 index 000000000..827da7b63 --- /dev/null +++ b/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx @@ -0,0 +1,278 @@ +--- +title: Spin up your proposer +lang: en-US +description: Learn how to set up and configure an OP Stack proposer to post L2 state roots to L1 for withdrawal verification. +content_type: tutorial +topic: proposer-setup +personas: + - chain-operator +categories: + - testnet + - mainnet + - op-proposer + - state-commitment + - l2-output-submission + - withdrawal-verification +is_imported_content: 'false' +--- + +import { Callout, Steps } from 'nextra/components' + +# Spin up your proposer + +After you have spun up your sequencer, 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. + + + This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed. If you haven't set up your sequencer yet, please refer to the [rollup creation tutorial](/operators/chain-operators/tutorials/create-l2-rollup) first. + + +## Understanding the proposer's role + +The proposer (`op-proposer`) serves as a crucial bridge between your L2 chain and L1 Ethereum. Its primary responsibilities include: + +* **State commitment**: Proposing L2 state roots to L1 at regular intervals +* **Withdrawal enablement**: Providing the necessary commitments for users to prove and finalize withdrawals +* **Data availability**: Ensuring L2 state transitions are verifiable from L1 +* **Consensus participation**: Contributing to the security model through state root proposals + +The proposer creates dispute games via the `DisputeGameFactory` contract, enabling permissionless challenging of proposed state roots and providing a robust fault proof system. + +## Prerequisites + +Before setting up your proposer, ensure you have: + + + ### Running infrastructure + + * A synced and operational sequencer node + * Access to a L1 RPC endpoint + * The rollup node (`op-node`) running and accessible + + ### Contract addresses + + * `DisputeGameFactory` address (for fault proof proposals) + * All relevant L1 contract addresses from your deployment + + ### Security setup + + * A dedicated proposer private key with sufficient L1 ETH for gas fees + + ### Network information + + * Your L2 chain ID and network configuration + * L1 network details (chain ID, RPC endpoints) + + +## Recommended configuration + +Here's a production-ready configuration template for your proposer: + +### Essential parameters + +| Parameter | Recommended Value | Description | +| ---------------------- | ----------------- | ------------------------------------------------------ | +| `poll-interval` | `12s` | How frequently to check for new L2 blocks | +| `proposal-interval` | `3600s` (1 hour) | Interval between output proposals | +| `num-confirmations` | `10` | L1 confirmations to wait before considering a tx final | +| `resubmission-timeout` | `48s` | Time before resubmitting a failed transaction | +| `fee-limit-multiplier` | `5` | Maximum fee bump multiplier for stuck transactions | + +### Network and connectivity + +| Parameter | Recommended Value | Description | +| --------------------------------- | ----------------- | --------------------------------------------- | +| `network-timeout` | `10s` | Timeout for network operations | +| `active-sequencer-check-duration` | `2m0s` | Frequency to check active sequencer | +| `allow-non-finalized` | `false` | Only propose from finalized L1 blocks (safer) | + +### Transaction management + +| Parameter | Recommended Value | Description | +| -------------------------------- | ----------------- | ---------------------------------------- | +| `txmgr.min-basefee` | `1` (gwei) | Minimum base fee to assume | +| `txmgr.min-tip-cap` | `1` (gwei) | Minimum tip cap for transactions | +| `txmgr.fee-limit-threshold` | `100` (gwei) | Fee threshold for capping bumps | +| `safe-abort-nonce-too-low-count` | `3` | Retries before giving up on nonce issues | + +## Step-by-step setup + +### Step 1: Prepare your environment + + + ### Set up environment variables + + Create a secure environment file with your configuration: + + ```bash + # Core network configuration + export L1_RPC_URL="https://your-l1-rpc-endpoint" + export L2_RPC_URL="http://localhost:8545" # Your sequencer RPC + export ROLLUP_RPC_URL="http://localhost:9545" # Your op-node RPC + + # Contract addresses (replace with your deployed contracts) + export GAME_FACTORY_ADDRESS="0xYourDisputeGameFactoryAddress" + + # Security + export PROPOSER_PRIVATE_KEY="0xYourProposerPrivateKey" + ``` + + ### Verify contract deployment + + Confirm your contracts are properly deployed and accessible: + + ```bash + # Check DisputeGameFactory + cast call $GAME_FACTORY_ADDRESS "gameCount()" --rpc-url $L1_RPC_URL + ``` + + ### Test connectivity + + Verify your proposer can connect to all required services: + + ```bash + # Test L1 connectivity + curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ + $L1_RPC_URL + + # Test L2 connectivity + curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ + $L2_RPC_URL + + # Test rollup node connectivity + curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"optimism_syncStatus","params":[],"id":1}' \ + $ROLLUP_RPC_URL + ``` + + +### Step 2: Start the proposer + +Configure and start your proposer with fault proof mode: + +```bash +./bin/op-proposer \ + --poll-interval=12s \ + --rpc.port=8560 \ + --rpc.enable-admin \ + --rollup-rpc=$ROLLUP_RPC_URL \ + --l1-eth-rpc=$L1_RPC_URL \ + --private-key=$PROPOSER_PRIVATE_KEY \ + --game-factory-address=$GAME_FACTORY_ADDRESS \ + --game-type=0 \ + --proposal-interval=3600s \ + --num-confirmations=10 \ + --resubmission-timeout=48s \ + --fee-limit-multiplier=5 \ + --metrics.enabled=true \ + --metrics.port=7300 \ + --log.level=INFO +``` + +### Step 3: Production deployment considerations + + + ### Service configuration + + Create a systemd service file for production deployment: + + ```ini + [Unit] + Description=OP Stack Proposer + After=network.target + + [Service] + Type=simple + User=optimism + WorkingDirectory=/opt/optimism + ExecStart=/opt/optimism/bin/op-proposer \ + --poll-interval=12s \ + --rpc.port=8560 \ + --rpc.enable-admin \ + --rollup-rpc=http://localhost:9545 \ + --l1-eth-rpc=$L1_RPC_URL \ + --private-key=$PROPOSER_PRIVATE_KEY \ + --game-factory-address=$GAME_FACTORY_ADDRESS \ + --game-type=0 \ + --proposal-interval=3600s \ + --num-confirmations=10 \ + --resubmission-timeout=48s \ + --fee-limit-multiplier=5 \ + --metrics.enabled=true \ + --metrics.port=7300 \ + --log.level=INFO + + Restart=always + RestartSec=10 + + [Install] + WantedBy=multi-user.target + ``` + + ### Monitoring setup + + Set up monitoring for your proposer: + + ```bash + # Check service status + sudo systemctl status op-proposer + + # Monitor logs + sudo journalctl -u op-proposer -f + + # Monitor metrics (if enabled) + curl http://localhost:7300/metrics + ``` + + +## Output frequency policy + +The proposer policy defines how frequently L2 output roots are posted to L1: + +| Network Type | Recommended Frequency | Notes | +| ------------------ | --------------------- | --------------------------------- | +| Mainnet Production | 1-6 hours | Balance cost vs. withdrawal speed | +| High-Value Testnet | 30-60 minutes | More frequent for testing | +| Development | 5-15 minutes | Fast iteration cycles | + + + **Important**: The output frequency cannot be set to 0 - there must be some cadence for outputs. This will eventually be replaced or significantly changed by the introduction of fault proofs. + + +## Verification and monitoring + +Verify your proposer is working correctly: + + + ### Check proposer status + + ```bash + # Verify proposer is responsive + curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"admin_startProposer","params":[],"id":1}' \ + http://localhost:8560 + + # Check latest dispute game + cast call $GAME_FACTORY_ADDRESS "gameCount()" --rpc-url $L1_RPC_URL + ``` + + ### Monitor proposal activity + + ```bash + # Watch for new proposals + cast logs --from-block latest \ + --address $GAME_FACTORY_ADDRESS \ + --rpc-url $L1_RPC_URL + + # Check proposer wallet balance + cast balance $PROPOSER_ADDRESS --rpc-url $L1_RPC_URL + ``` + + +## Next steps + +* For detailed parameter documentation, see the [proposer configuration reference](/operators/chain-operators/configuration/proposer). +* For more detail on deploying new dispute games with OPCM, [see the docs](/operators/chain-operators/tutorials/dispute-games). +* checkout the [migrating to permissionless fault proofs](/operators/chain-operators/tutorials/migrating-permissionless) guide +* For cost optimization resources, check out the [Fee calculation tools](/operators/chain-operators/tools/fee-calculator). From 1b7c798fc81cb57f1655e84b82c3359921c4d625 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Wed, 4 Jun 2025 18:32:29 +0100 Subject: [PATCH 03/34] fix breadcrumbs --- pages/operators/chain-operators/tutorials.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/operators/chain-operators/tutorials.mdx b/pages/operators/chain-operators/tutorials.mdx index e18dc82c9..a2950439a 100644 --- a/pages/operators/chain-operators/tutorials.mdx +++ b/pages/operators/chain-operators/tutorials.mdx @@ -38,6 +38,8 @@ This section provides information on adding attributes to the derivation functio + + From 15ffc8933c7924ce7c0ba1f442e50cd9b1c8e6de Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Wed, 4 Jun 2025 18:38:27 +0100 Subject: [PATCH 04/34] Update pages/operators/chain-operators/tutorials/absolute-prestate.mdx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../chain-operators/tutorials/absolute-prestate.mdx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pages/operators/chain-operators/tutorials/absolute-prestate.mdx b/pages/operators/chain-operators/tutorials/absolute-prestate.mdx index b108d7ebf..6e1d988f0 100644 --- a/pages/operators/chain-operators/tutorials/absolute-prestate.mdx +++ b/pages/operators/chain-operators/tutorials/absolute-prestate.mdx @@ -277,7 +277,6 @@ After generating the absolute prestate and preimage files, you'll need to: ## Next Steps -* For more detail on deploying new dispute games with OPCM, [see the docs](/operators/chain-operators/tutorials/dispute-games). -* Read about [deploying new dispute games with OPCM](/operators/chain-operators/tutorials/dispute-games) -* checkout the [migrating to permissionless fault proofs](/operators/chain-operators/tutorials/migrating-permissionless) guide +* Check out the [migrating to permissionless fault proofs guide](/operators/chain-operators/tutorials/migrating-permissionless). +* Read the [Fault proofs explainer](/stack/fault-proofs/explainer). * [Fault proofs explainer](/stack/fault-proofs/explainer) From def8774a666a050c7b23e617b898f964e0b86587 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Wed, 4 Jun 2025 18:38:53 +0100 Subject: [PATCH 05/34] Update pages/operators/chain-operators/tutorials/migrating-permissionless.mdx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../chain-operators/tutorials/migrating-permissionless.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/operators/chain-operators/tutorials/migrating-permissionless.mdx b/pages/operators/chain-operators/tutorials/migrating-permissionless.mdx index ee2889075..e22ebcf62 100644 --- a/pages/operators/chain-operators/tutorials/migrating-permissionless.mdx +++ b/pages/operators/chain-operators/tutorials/migrating-permissionless.mdx @@ -382,6 +382,6 @@ OP_PROPOSER_GAME_TYPE=0 ## Next steps * For more detail on deploying new dispute games with OPCM, [see the docs](/operators/chain-operators/tutorials/dispute-games). -* Read about [deploying new dispute games with OPCM](/operators/chain-operators/tutorials/dispute-games) -* Learn about [absolute prestate](/operators/chain-operators/tutorials/absolute-prestate) -* [Fault proofs explainer](/stack/fault-proofs/explainer) +* Deploy new dispute games with OPCM via [this tutorial](/operators/chain-operators/tutorials/dispute-games). +* Generate an absolute prestate using the [absolute prestate guide](/operators/chain-operators/tutorials/absolute-prestate). +* Understand fault proofs in the [Fault proofs explainer](/stack/fault-proofs/explainer). From 174452d5334121e3a35eaa4ad03efa387c720acb Mon Sep 17 00:00:00 2001 From: Zak Ayesh <44901995+ZakAyesh@users.noreply.github.com> Date: Mon, 9 Jun 2025 12:23:26 -0400 Subject: [PATCH 06/34] updated config values --- .../tutorials/proposer-setup-guide.mdx | 31 +++++-------------- 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx b/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx index 827da7b63..3f7c29c75 100644 --- a/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx @@ -71,28 +71,12 @@ Here's a production-ready configuration template for your proposer: | Parameter | Recommended Value | Description | | ---------------------- | ----------------- | ------------------------------------------------------ | -| `poll-interval` | `12s` | How frequently to check for new L2 blocks | +| `poll-interval` | `20s` | How frequently to check for new L2 blocks | | `proposal-interval` | `3600s` (1 hour) | Interval between output proposals | -| `num-confirmations` | `10` | L1 confirmations to wait before considering a tx final | -| `resubmission-timeout` | `48s` | Time before resubmitting a failed transaction | -| `fee-limit-multiplier` | `5` | Maximum fee bump multiplier for stuck transactions | +| `num-confirmations` | `1` | L1 confirmations to wait before considering a tx final | +| `resubmission-timeout` | `30s` | Time before resubmitting a failed transaction | +| `allow-non-finalized` | `false` | Only propose from finalized L1 blocks (safer) | -### Network and connectivity - -| Parameter | Recommended Value | Description | -| --------------------------------- | ----------------- | --------------------------------------------- | -| `network-timeout` | `10s` | Timeout for network operations | -| `active-sequencer-check-duration` | `2m0s` | Frequency to check active sequencer | -| `allow-non-finalized` | `false` | Only propose from finalized L1 blocks (safer) | - -### Transaction management - -| Parameter | Recommended Value | Description | -| -------------------------------- | ----------------- | ---------------------------------------- | -| `txmgr.min-basefee` | `1` (gwei) | Minimum base fee to assume | -| `txmgr.min-tip-cap` | `1` (gwei) | Minimum tip cap for transactions | -| `txmgr.fee-limit-threshold` | `100` (gwei) | Fee threshold for capping bumps | -| `safe-abort-nonce-too-low-count` | `3` | Retries before giving up on nonce issues | ## Step-by-step setup @@ -153,7 +137,7 @@ Configure and start your proposer with fault proof mode: ```bash ./bin/op-proposer \ - --poll-interval=12s \ + --poll-interval=20s \ --rpc.port=8560 \ --rpc.enable-admin \ --rollup-rpc=$ROLLUP_RPC_URL \ @@ -162,9 +146,8 @@ Configure and start your proposer with fault proof mode: --game-factory-address=$GAME_FACTORY_ADDRESS \ --game-type=0 \ --proposal-interval=3600s \ - --num-confirmations=10 \ - --resubmission-timeout=48s \ - --fee-limit-multiplier=5 \ + --num-confirmations=1 \ + --resubmission-timeout=30s \ --metrics.enabled=true \ --metrics.port=7300 \ --log.level=INFO From 00b8e4c8fce7f40f1acfa02888961ecdeb07cd9a Mon Sep 17 00:00:00 2001 From: Zak Ayesh <44901995+ZakAyesh@users.noreply.github.com> Date: Mon, 9 Jun 2025 12:25:10 -0400 Subject: [PATCH 07/34] Auto-fix: Update breadcrumbs, spelling dictionary and other automated fixes --- words.txt | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/words.txt b/words.txt index 367ff3cb5..52dcf3dfb 100644 --- a/words.txt +++ b/words.txt @@ -8,14 +8,12 @@ ADDIU ADDU airgap Allnodes -allocs Alphanet alphanet Alphanets alphanets altda ANDI -Ankr Apeworx Arweave authrpc @@ -57,10 +55,6 @@ BOOTNODES Bootnodes bootnodes bottlenecked -Brotli -brotli -Callouts -callouts CCIP cdef Celestia @@ -72,7 +66,6 @@ Chainstack chaosnet Chugsplash Clabby -codebases Collateralized collateralized compr @@ -90,13 +83,10 @@ Dapphub daserver DATACAP datacap -DATADIR -datadir Devnet devnet Devnets devnets -devs direnv DISABLETXPOOLGOSSIP disabletxpoolgossip @@ -107,7 +97,6 @@ Drand dripcheck Drippie Eigen -EIPs ENABLEDEPRECATEDPERSONAL enabledeprecatedpersonal enginekind @@ -123,7 +112,6 @@ EVMTIMEOUT evmtimeout excercise executability -exfiltrate EXITWHENSYNCED exitwhensynced EXTRADATA @@ -169,7 +157,6 @@ holesky IERC IGNOREPRICE ignoreprice -Immunefi Inator inator INFLUXDBV @@ -219,7 +206,6 @@ minsuggestedpriorityfee Mintable Mintplex MIPSEVM -Mitigations Monitorism monitorism Moralis @@ -243,7 +229,6 @@ NETWORKID networkid NEWPAYLOAD newpayload -nextra NOCOMPACTION nocompaction NODEKEY @@ -273,7 +258,6 @@ opcm Openfort oplabs opnode's -outfile Pausability pcscdpath Pectra @@ -307,7 +291,6 @@ Preimage preimage PREIMAGES preimages -preinstall Preinstalls preinstalls Prestate @@ -321,16 +304,12 @@ pricelimit productionize productionized Protip -Proxied Proxyd proxyd -Pyth -Pyth's QRNG Quicknode quicknode quickstarts -rebalancing reemit Reemitting Regenesis @@ -355,21 +334,15 @@ Routescan rpckind RPCPREFIX rpcprefix -rpcs RPGF Runbooks runbooks -RWAs safedb Schnorr -SEPOLIA -Sepolia -sepolia seqnr SEQUENCERHTTP sequencerhttp serv -signup SLLV SLTI SLTIU @@ -387,7 +360,6 @@ SRLV Stablecoins stablecoins statefulset -structs subcomponents subgame subheaders @@ -413,7 +385,6 @@ syscalls SYSCON thirdweb threadcreate -timeseries triggerable trustlessly trustrpc @@ -429,7 +400,6 @@ uncensorable uncountered undercollateralize Unichain -Unprotect unsubmitted UPNP upstreaming @@ -447,7 +417,6 @@ VMODULE vmodule xlarge XORI -ZKPs ZKVM Zora zora From e9b16ec20e99ac506586948607bffa11325d938f Mon Sep 17 00:00:00 2001 From: Zak Ayesh <44901995+ZakAyesh@users.noreply.github.com> Date: Mon, 9 Jun 2025 12:29:22 -0400 Subject: [PATCH 08/34] updated description of proposers roll --- .../chain-operators/tutorials/proposer-setup-guide.mdx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx b/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx index 3f7c29c75..d1fdc3c97 100644 --- a/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx @@ -31,9 +31,7 @@ After you have spun up your sequencer, you need to attach a proposer to post you The proposer (`op-proposer`) serves as a crucial bridge between your L2 chain and L1 Ethereum. Its primary responsibilities include: * **State commitment**: Proposing L2 state roots to L1 at regular intervals -* **Withdrawal enablement**: Providing the necessary commitments for users to prove and finalize withdrawals -* **Data availability**: Ensuring L2 state transitions are verifiable from L1 -* **Consensus participation**: Contributing to the security model through state root proposals +* **Withdrawal enablement**: Providing the necessary commitments for users to prove and finalize withdrawalsz The proposer creates dispute games via the `DisputeGameFactory` contract, enabling permissionless challenging of proposed state roots and providing a robust fault proof system. From 538b1bc9de389941a3e2e9922733a4b1fa3940d8 Mon Sep 17 00:00:00 2001 From: Zak Ayesh <44901995+ZakAyesh@users.noreply.github.com> Date: Mon, 9 Jun 2025 12:29:50 -0400 Subject: [PATCH 09/34] Auto-fix: Update breadcrumbs, spelling dictionary and other automated fixes --- words.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/words.txt b/words.txt index 52dcf3dfb..f689e6605 100644 --- a/words.txt +++ b/words.txt @@ -415,6 +415,7 @@ VMDEBUG vmdebug VMODULE vmodule +withdrawalsz xlarge XORI ZKVM From b1818ba1065a347765dd40f6efee2d63e327c063 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Fri, 13 Jun 2025 17:51:27 +0100 Subject: [PATCH 10/34] updated the structure --- .../chain-operators/configuration/batcher.mdx | 184 ------------------ pages/operators/chain-operators/deploy.mdx | 2 + .../chain-operators/deploy/_meta.json | 1 + .../proposer-setup-guide.mdx | 117 +---------- pages/operators/chain-operators/tutorials.mdx | 2 - .../chain-operators/tutorials/_meta.json | 1 - 6 files changed, 9 insertions(+), 298 deletions(-) rename pages/operators/chain-operators/{tutorials => deploy}/proposer-setup-guide.mdx (54%) diff --git a/pages/operators/chain-operators/configuration/batcher.mdx b/pages/operators/chain-operators/configuration/batcher.mdx index 844adba07..08967cb77 100644 --- a/pages/operators/chain-operators/configuration/batcher.mdx +++ b/pages/operators/chain-operators/configuration/batcher.mdx @@ -22,190 +22,6 @@ import { Callout, Tabs } from 'nextra/components' This page provides the **definitive guide** for OP Stack batcher configuration, serving as the single source of truth for chain operators. The op-batcher posts L2 sequencer data to the L1, to make it available for verifiers. -## Overview - -The batcher serves as a critical component that: - -* Stores a contiguous set of blocks & turns them into channels -* Compresses and batches L2 transaction data -* Submits this data to L1 either as calldata or blobs -* Ensures data availability for L2 block verification and derivation - -Understanding transaction finality is crucial for batcher configuration: transactions on OP Stack chains become finalized when their data is included in a finalized Ethereum block, typically around 20–30 minutes after submission. This is different from the 7-day withdrawal period, which affects only withdrawals through the Standard Bridge. - -**Finality levels:** - -* **Unsafe blocks**: The Sequencer can reorganize these blocks (typically within \~5–10 minutes) -* **Safe blocks**: The Sequencer would need to trigger a reorg on Ethereum itself, which is complex and unlikely -* **Finalized blocks**: Once blocks are included in a finalized Ethereum block (typically after \~15–30 minutes), the Sequencer cannot reorganize them without compromising Ethereum's finality guarantees - -## Recommended configuration - - - The following configuration provides optimal settings for most OP Stack chains while maintaining cost efficiency. - - -### Essential production configuration - -```bash -# Basic Configuration - Wait for sync and check recent transactions -OP_BATCHER_WAIT_NODE_SYNC=true -OP_BATCHER_CHECK_RECENT_TXS_DEPTH=5 -OP_BATCHER_POLL_INTERVAL=5s - -# Batch Settings - Use Span Batches (Delta upgrade feature) -OP_BATCHER_BATCH_TYPE=1 # Span batches for efficiency - -# Compression - Higher compression for lower data costs -OP_BATCHER_COMPRESSION_ALGO=brotli-10 - -# Data availability - Auto-switch between calldata and blobs -OP_BATCHER_DATA_AVAILABILITY_TYPE=auto - -# Channel duration - Target 5 hours (1500 L1 blocks) for cost optimization -OP_BATCHER_MAX_CHANNEL_DURATION=1500 - -# Blob configuration - Multi-blob transactions for higher throughput -OP_BATCHER_TARGET_NUM_FRAMES=5 # 5 blobs per transaction - -# Safety margins - 1 hour safety margin to prevent sequencing window issues -OP_BATCHER_SUB_SAFETY_MARGIN=300 -OP_BATCHER_NUM_CONFIRMATIONS=4 - -# Transaction Management - Optimized fee parameters -OP_BATCHER_NETWORK_TIMEOUT=10s -OP_BATCHER_TXMGR_MIN_BASEFEE=2.0 # 2 gwei -OP_BATCHER_TXMGR_MIN_TIP_CAP=2.0 # 2 gwei -OP_BATCHER_TXMGR_FEE_LIMIT_MULTIPLIER=16 # Allow up to 4 doublings -OP_BATCHER_MAX_PENDING_TX=10 -OP_BATCHER_RESUBMISSION_TIMEOUT=180s # 3 minutes - -# Sequencer following - Enable active sequencer detection -OP_BATCHER_ACTIVE_SEQUENCER_CHECK_DURATION=5s - -# Throttling configuration (requires op-geth v1.101411.1+) -OP_BATCHER_THROTTLE_THRESHOLD=1000000 # 1MB backlog triggers throttling -OP_BATCHER_THROTTLE_TX_SIZE=300 # Individual tx size limit -OP_BATCHER_THROTTLE_BLOCK_SIZE=21000 # Block size limit when throttling -OP_BATCHER_THROTTLE_ALWAYS_BLOCK_SIZE=130000 # Always-active block limit - -# Network connections -OP_BATCHER_L1_ETH_RPC="" -OP_BATCHER_L2_ETH_RPC="http://localhost:8551" -OP_BATCHER_ROLLUP_RPC="http://localhost:9545" - -# Authentication (choose one method) -OP_BATCHER_PRIVATE_KEY="your_private_key_here" - -# Monitoring -OP_BATCHER_METRICS_ENABLED=true -OP_BATCHER_METRICS_PORT=7300 -OP_BATCHER_LOG_LEVEL="INFO" -OP_BATCHER_LOG_FORMAT="json" -``` - -## Key configuration insights - -### Channel duration (`OP_BATCHER_MAX_CHANNEL_DURATION`) - -**Recommended value:** `1500` (5 hours) - - - The default value inside `op-batcher`, if not specified, is still `0`, which means channel duration tracking is disabled. - For very low throughput chains, this would mean to fill channels until close to the sequencing window and post the channel to `L1 SUB_SAFETY_MARGIN` L1 blocks before the sequencing window expires. - - -To minimize costs, we recommend setting your `OP_BATCHER_MAX_CHANNEL_DURATION` to target 5 hours, with a value of 1500 L1 blocks. When non-zero, this parameter is the max time (in L1 blocks, which are 12 seconds each) between which batches will be submitted to the L1. - -**Important considerations:** - -* While setting an `OP_BATCHER_MAX_CHANNEL_DURATION` of 1500 results in the cheapest fees, it also means that your [safe head](https://github.com/ethereum-optimism/specs/blob/main/specs/glossary.md#safe-l2-head) can stall for up to 5 hours -* This will negatively impact apps on your chain that rely on the safe head for operation. While many apps can likely operate simply by following the unsafe head, often Centralized Exchanges or third party bridges wait until transactions are marked safe before processing deposits and withdrawal -* Never exceed your L2's sequencing window (commonly 12 hours) -* If your chain fills up full blobs of data before the `OP_BATCHER_MAX_CHANNEL_DURATION` elapses, a batch will be submitted anyway - -### Data availability type (`OP_BATCHER_DATA_AVAILABILITY_TYPE`) - -**Recommended value:** `auto` - - - Setting this flag to auto will allow the batcher to automatically switch between calldata and blobs based on the current L1 gas price. - - -Setting this flag to auto will allow the batcher to automatically switch between calldata and blobs based on the current L1 gas price. - -**Options:** - -* `calldata` - Generally simpler but can be more expensive on mainnet Ethereum, depending on gas prices -* `blobs` - Typically lower cost when your chain has enough transaction volume to fill large chunks of data -* `auto` - Automatically switches based on L1 gas conditions (recommended for most chains) - -### Multi-blob configuration - - - When there's blob congestion, running with high blob counts can backfire, because you will have a harder time getting blobs included and then fees will bump, which always means a doubling of the priority fees. - - -For medium to high-throughput chains, configure multi-blob transactions: - -```bash -OP_BATCHER_DATA_AVAILABILITY_TYPE=blobs -OP_BATCHER_TARGET_NUM_FRAMES=6 # 6 blobs per transaction -OP_BATCHER_TXMGR_MIN_BASEFEE=2.0 # Higher fees for blob inclusion -OP_BATCHER_TXMGR_MIN_TIP_CAP=2.0 -OP_BATCHER_RESUBMISSION_TIMEOUT=240s # Wait 4 min before fee bumps -``` - -Multi-blob transactions are particularly useful for medium to high-throughput chains, where enough transaction volume exists to fill up 6 blobs in a reasonable amount of time. - -### Span batches (`OP_BATCHER_BATCH_TYPE`) - -**Recommended value:** `1` - -Span batches reduce the overhead of OP Stack chains, introduced in the Delta network upgrade. This is beneficial for sparse and low-throughput OP Stack chains. The overhead is reduced by representing a span of consecutive L2 blocks in a more efficient manner, while preserving the same consistency checks as regular batch data. - -### Batcher sequencer throttling - -This feature is a batcher-driven sequencer-throttling control loop. This is to avoid sudden spikes in L1 DA-usage consuming too much available gas and causing a backlog in batcher transactions. - - - Note that this feature requires the batcher to correctly follow the sequencer at all times, or it would set throttling parameters on a non-sequencer EL client. That means, active sequencer follow mode has to be enabled correctly by listing all the possible sequencers in the L2 rollup and EL endpoint flags. - - -**Feature requirements:** - -* Requires op-geth version `v1.101411.1` or later -* Enable the `miner` API namespace: `GETH_HTTP_API: web3,debug,eth,txpool,net,miner` - -**Throttling configuration:** - -```bash -OP_BATCHER_THROTTLE_THRESHOLD=1000000 # 1MB backlog triggers throttling -OP_BATCHER_THROTTLE_TX_SIZE=300 # Individual tx size limit -OP_BATCHER_THROTTLE_BLOCK_SIZE=21000 # Block size limit when throttling -OP_BATCHER_THROTTLE_ALWAYS_BLOCK_SIZE=130000 # Always-active block limit -``` - -## Chain-specific recommendations - -### For low-throughput chains - -* Consider longer `MAX_CHANNEL_DURATION` values (up to 1500 blocks) -* Use span batches (`BATCH_TYPE=1`) for reduced overhead -* Start with `DATA_AVAILABILITY_TYPE=auto` to optimize costs - -### For high-throughput chains - -* Use multi-blob configuration with `TARGET_NUM_FRAMES=6` -* Shorter `MAX_CHANNEL_DURATION` may be appropriate -* Monitor blob inclusion rates and adjust fee parameters accordingly - -### Sequencing window considerations - -Your chain should never exceed your L2's sequencing window (commonly 12 hours). The sequencing window is the maximum time allowed for posting batch data to L1 before the chain experiences issues. - -**Safety margin:** The batcher tx submission safety margin (in #L1-blocks) to subtract from a channel's timeout and sequencing window, to guarantee safe inclusion of a channel on L1. The default value is 10. - ## Batcher policy The batcher policy defines high-level constraints and responsibilities regarding how L2 data is posted to L1. Below are the [standard guidelines](/superchain/standard-configuration) for configuring the batcher within the OP Stack. diff --git a/pages/operators/chain-operators/deploy.mdx b/pages/operators/chain-operators/deploy.mdx index 82bfb891b..353c48b08 100644 --- a/pages/operators/chain-operators/deploy.mdx +++ b/pages/operators/chain-operators/deploy.mdx @@ -30,6 +30,8 @@ This section provides information on OP Stack genesis creation, deployment overv + + diff --git a/pages/operators/chain-operators/deploy/_meta.json b/pages/operators/chain-operators/deploy/_meta.json index 9921d07e6..3f611cbca 100644 --- a/pages/operators/chain-operators/deploy/_meta.json +++ b/pages/operators/chain-operators/deploy/_meta.json @@ -2,6 +2,7 @@ "overview": "Deployment overview", "smart-contracts": "Smart contract deployment", "validate-deployment": "Validate your contract deployment", + "proposer-setup-guide": "Spin up your proposer", "genesis": "Chain artifacts creation" } diff --git a/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx similarity index 54% rename from pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx rename to pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index d1fdc3c97..2df90aa73 100644 --- a/pages/operators/chain-operators/tutorials/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -1,7 +1,7 @@ --- title: Spin up your proposer lang: en-US -description: Learn how to set up and configure an OP Stack proposer to post L2 state roots to L1 for withdrawal verification. +description: Learn how to set up and configure an OP Stack proposer to post L2 state roots. content_type: tutorial topic: proposer-setup personas: @@ -20,15 +20,17 @@ import { Callout, Steps } from 'nextra/components' # Spin up your proposer -After you have spun up your sequencer, 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, 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. - This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed. If you haven't set up your sequencer yet, please refer to the [rollup creation tutorial](/operators/chain-operators/tutorials/create-l2-rollup) first. + This guide assumes you already have a functioning sequencer and the necessary [L1 contracts deployed](/operators/chain-operators/deploy/overview). + If you haven't set up your sequencer yet, please refer to the [sequencer guide](Todo - Add a link to the spining up your sequencer) first. ## Understanding the proposer's role -The proposer (`op-proposer`) serves as a crucial bridge between your L2 chain and L1 Ethereum. Its primary responsibilities include: +The proposer (`op-proposer`) serves as a crucial bridge between your L2 chain and L1. Its primary responsibilities include: * **State commitment**: Proposing L2 state roots to L1 at regular intervals * **Withdrawal enablement**: Providing the necessary commitments for users to prove and finalize withdrawalsz @@ -61,21 +63,6 @@ Before setting up your proposer, ensure you have: * L1 network details (chain ID, RPC endpoints) -## Recommended configuration - -Here's a production-ready configuration template for your proposer: - -### Essential parameters - -| Parameter | Recommended Value | Description | -| ---------------------- | ----------------- | ------------------------------------------------------ | -| `poll-interval` | `20s` | How frequently to check for new L2 blocks | -| `proposal-interval` | `3600s` (1 hour) | Interval between output proposals | -| `num-confirmations` | `1` | L1 confirmations to wait before considering a tx final | -| `resubmission-timeout` | `30s` | Time before resubmitting a failed transaction | -| `allow-non-finalized` | `false` | Only propose from finalized L1 blocks (safer) | - - ## Step-by-step setup ### Step 1: Prepare your environment @@ -98,15 +85,6 @@ Here's a production-ready configuration template for your proposer: export PROPOSER_PRIVATE_KEY="0xYourProposerPrivateKey" ``` - ### Verify contract deployment - - Confirm your contracts are properly deployed and accessible: - - ```bash - # Check DisputeGameFactory - cast call $GAME_FACTORY_ADDRESS "gameCount()" --rpc-url $L1_RPC_URL - ``` - ### Test connectivity Verify your proposer can connect to all required services: @@ -150,77 +128,6 @@ Configure and start your proposer with fault proof mode: --metrics.port=7300 \ --log.level=INFO ``` - -### Step 3: Production deployment considerations - - - ### Service configuration - - Create a systemd service file for production deployment: - - ```ini - [Unit] - Description=OP Stack Proposer - After=network.target - - [Service] - Type=simple - User=optimism - WorkingDirectory=/opt/optimism - ExecStart=/opt/optimism/bin/op-proposer \ - --poll-interval=12s \ - --rpc.port=8560 \ - --rpc.enable-admin \ - --rollup-rpc=http://localhost:9545 \ - --l1-eth-rpc=$L1_RPC_URL \ - --private-key=$PROPOSER_PRIVATE_KEY \ - --game-factory-address=$GAME_FACTORY_ADDRESS \ - --game-type=0 \ - --proposal-interval=3600s \ - --num-confirmations=10 \ - --resubmission-timeout=48s \ - --fee-limit-multiplier=5 \ - --metrics.enabled=true \ - --metrics.port=7300 \ - --log.level=INFO - - Restart=always - RestartSec=10 - - [Install] - WantedBy=multi-user.target - ``` - - ### Monitoring setup - - Set up monitoring for your proposer: - - ```bash - # Check service status - sudo systemctl status op-proposer - - # Monitor logs - sudo journalctl -u op-proposer -f - - # Monitor metrics (if enabled) - curl http://localhost:7300/metrics - ``` - - -## Output frequency policy - -The proposer policy defines how frequently L2 output roots are posted to L1: - -| Network Type | Recommended Frequency | Notes | -| ------------------ | --------------------- | --------------------------------- | -| Mainnet Production | 1-6 hours | Balance cost vs. withdrawal speed | -| High-Value Testnet | 30-60 minutes | More frequent for testing | -| Development | 5-15 minutes | Fast iteration cycles | - - - **Important**: The output frequency cannot be set to 0 - there must be some cadence for outputs. This will eventually be replaced or significantly changed by the introduction of fault proofs. - - ## Verification and monitoring Verify your proposer is working correctly: @@ -237,18 +144,6 @@ Verify your proposer is working correctly: # Check latest dispute game cast call $GAME_FACTORY_ADDRESS "gameCount()" --rpc-url $L1_RPC_URL ``` - - ### Monitor proposal activity - - ```bash - # Watch for new proposals - cast logs --from-block latest \ - --address $GAME_FACTORY_ADDRESS \ - --rpc-url $L1_RPC_URL - - # Check proposer wallet balance - cast balance $PROPOSER_ADDRESS --rpc-url $L1_RPC_URL - ``` ## Next steps diff --git a/pages/operators/chain-operators/tutorials.mdx b/pages/operators/chain-operators/tutorials.mdx index a2950439a..e18dc82c9 100644 --- a/pages/operators/chain-operators/tutorials.mdx +++ b/pages/operators/chain-operators/tutorials.mdx @@ -38,8 +38,6 @@ This section provides information on adding attributes to the derivation functio - - diff --git a/pages/operators/chain-operators/tutorials/_meta.json b/pages/operators/chain-operators/tutorials/_meta.json index f12ed3639..9168131fe 100644 --- a/pages/operators/chain-operators/tutorials/_meta.json +++ b/pages/operators/chain-operators/tutorials/_meta.json @@ -1,6 +1,5 @@ { "create-l2-rollup": "Creating your own rollup testnet", - "proposer-setup-guide": "Spin up your proposer", "adding-derivation-attributes": "Adding attributes to the derivation function", "adding-precompiles": "Adding a precompile", "modifying-predeploys": "Modifying predeployed contracts", From 34bdfda274b6e11700eb067300320559ce4bf017 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Fri, 13 Jun 2025 17:52:08 +0100 Subject: [PATCH 11/34] Auto-fix: Update breadcrumbs, spelling dictionary and other automated fixes --- .../deploy/proposer-setup-guide.mdx | 9 +++--- words.txt | 31 +++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 2df90aa73..1d43dc066 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -20,12 +20,12 @@ import { Callout, Steps } from 'nextra/components' # Spin up your proposer -After you have spun up your sequencer, you need to attach a proposer to post your L2 state roots data back onto L1 so we can prove withdrawal validity. +After you have spun up your sequencer, 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. - This guide assumes you already have a functioning sequencer and the necessary [L1 contracts deployed](/operators/chain-operators/deploy/overview). - If you haven't set up your sequencer yet, please refer to the [sequencer guide](Todo - Add a link to the spining up your sequencer) first. + This guide assumes you already have a functioning sequencer and the necessary [L1 contracts deployed](/operators/chain-operators/deploy/overview). + If you haven't set up your sequencer yet, please refer to the \[sequencer guide]\(Todo - Add a link to the spining up your sequencer) first. ## Understanding the proposer's role @@ -128,6 +128,7 @@ Configure and start your proposer with fault proof mode: --metrics.port=7300 \ --log.level=INFO ``` + ## Verification and monitoring Verify your proposer is working correctly: @@ -148,7 +149,7 @@ Verify your proposer is working correctly: ## Next steps -* For detailed parameter documentation, see the [proposer configuration reference](/operators/chain-operators/configuration/proposer). +* For detailed parameter documentation, see the [proposer configuration reference](/operators/chain-operators/configuration/proposer). * For more detail on deploying new dispute games with OPCM, [see the docs](/operators/chain-operators/tutorials/dispute-games). * checkout the [migrating to permissionless fault proofs](/operators/chain-operators/tutorials/migrating-permissionless) guide * For cost optimization resources, check out the [Fee calculation tools](/operators/chain-operators/tools/fee-calculator). diff --git a/words.txt b/words.txt index f689e6605..c82d49cd6 100644 --- a/words.txt +++ b/words.txt @@ -8,12 +8,14 @@ ADDIU ADDU airgap Allnodes +allocs Alphanet alphanet Alphanets alphanets altda ANDI +Ankr Apeworx Arweave authrpc @@ -55,6 +57,10 @@ BOOTNODES Bootnodes bootnodes bottlenecked +Brotli +brotli +Callouts +callouts CCIP cdef Celestia @@ -66,6 +72,7 @@ Chainstack chaosnet Chugsplash Clabby +codebases Collateralized collateralized compr @@ -83,10 +90,13 @@ Dapphub daserver DATACAP datacap +DATADIR +datadir Devnet devnet Devnets devnets +devs direnv DISABLETXPOOLGOSSIP disabletxpoolgossip @@ -97,6 +107,7 @@ Drand dripcheck Drippie Eigen +EIPs ENABLEDEPRECATEDPERSONAL enabledeprecatedpersonal enginekind @@ -112,6 +123,7 @@ EVMTIMEOUT evmtimeout excercise executability +exfiltrate EXITWHENSYNCED exitwhensynced EXTRADATA @@ -157,6 +169,7 @@ holesky IERC IGNOREPRICE ignoreprice +Immunefi Inator inator INFLUXDBV @@ -206,6 +219,7 @@ minsuggestedpriorityfee Mintable Mintplex MIPSEVM +Mitigations Monitorism monitorism Moralis @@ -229,6 +243,7 @@ NETWORKID networkid NEWPAYLOAD newpayload +nextra NOCOMPACTION nocompaction NODEKEY @@ -258,6 +273,7 @@ opcm Openfort oplabs opnode's +outfile Pausability pcscdpath Pectra @@ -291,6 +307,7 @@ Preimage preimage PREIMAGES preimages +preinstall Preinstalls preinstalls Prestate @@ -304,12 +321,16 @@ pricelimit productionize productionized Protip +Proxied Proxyd proxyd +Pyth +Pyth's QRNG Quicknode quicknode quickstarts +rebalancing reemit Reemitting Regenesis @@ -334,15 +355,21 @@ Routescan rpckind RPCPREFIX rpcprefix +rpcs RPGF Runbooks runbooks +RWAs safedb Schnorr +SEPOLIA +Sepolia +sepolia seqnr SEQUENCERHTTP sequencerhttp serv +signup SLLV SLTI SLTIU @@ -360,6 +387,7 @@ SRLV Stablecoins stablecoins statefulset +structs subcomponents subgame subheaders @@ -385,6 +413,7 @@ syscalls SYSCON thirdweb threadcreate +timeseries triggerable trustlessly trustrpc @@ -400,6 +429,7 @@ uncensorable uncountered undercollateralize Unichain +Unprotect unsubmitted UPNP upstreaming @@ -418,6 +448,7 @@ vmodule withdrawalsz xlarge XORI +ZKPs ZKVM Zora zora From 856e17d0f18625224511349c24181918ecbed3b3 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Fri, 13 Jun 2025 17:56:22 +0100 Subject: [PATCH 12/34] updated the docs --- .../deploy/proposer-setup-guide.mdx | 241 ++++++++++++------ 1 file changed, 164 insertions(+), 77 deletions(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 1d43dc066..c91336675 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -16,24 +16,18 @@ categories: is_imported_content: 'false' --- -import { Callout, Steps } from 'nextra/components' - # Spin up your proposer -After you have spun up your sequencer, 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, 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. - - This guide assumes you already have a functioning sequencer and the necessary [L1 contracts deployed](/operators/chain-operators/deploy/overview). - If you haven't set up your sequencer yet, please refer to the \[sequencer guide]\(Todo - Add a link to the spining up your sequencer) first. - +This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed using [`op-deployer`](/operators/chain-operators/tools/op-deployer). If you haven't set up your sequencer yet, please refer to the [sequencer guide](/operators/chain-operators/tutorials/spinning-sequencer) first. ## Understanding the proposer's role The proposer (`op-proposer`) serves as a crucial bridge between your L2 chain and L1. Its primary responsibilities include: * **State commitment**: Proposing L2 state roots to L1 at regular intervals -* **Withdrawal enablement**: Providing the necessary commitments for users to prove and finalize withdrawalsz +* **Withdrawal enablement**: Providing the necessary commitments for users to prove and finalize withdrawals The proposer creates dispute games via the `DisputeGameFactory` contract, enabling permissionless challenging of proposed state roots and providing a robust fault proof system. @@ -41,111 +35,204 @@ The proposer creates dispute games via the `DisputeGameFactory` contract, enabli Before setting up your proposer, ensure you have: - - ### Running infrastructure +**Running infrastructure:** +* A synced and operational sequencer node +* Access to a L1 RPC endpoint +* The rollup node (`op-node`) running and accessible + +**From op-deployer deployment:** +* Successfully deployed L1 contracts using `op-deployer apply` +* Access to your deployment output files + +**Security setup:** +* A dedicated proposer private key with sufficient L1 ETH for gas fees + +**Network information:** +* Your L2 chain ID and network configuration +* L1 network details (chain ID, RPC endpoints) + +## Software installation + +### Build from source + +Clone and build op-proposer + +```bash +# If you don't already have the optimism repository from the sequencer setup +git clone https://github.com/ethereum-optimism/optimism.git +cd optimism + +# Checkout the latest release tag +git checkout op-proposer/v1.10.0 + +# Build op-proposer +cd op-proposer +make op-proposer + +# Binary will be available at ./bin/op-proposer +``` + +### Verify installation + +```bash +./bin/op-proposer --version +``` + +## Configuration setup - * A synced and operational sequencer node - * Access to a L1 RPC endpoint - * The rollup node (`op-node`) running and accessible +### 1. Organize your workspace - ### Contract addresses +Create your proposer working directory: - * `DisputeGameFactory` address (for fault proof proposals) - * All relevant L1 contract addresses from your deployment +```bash +# Create proposer directory at the same level as your sequencer +mkdir ~/proposer-node +cd ~/proposer-node + +# Create scripts directory +mkdir scripts +``` - ### Security setup +### 2. Extract contract addresses + +Extract the necessary contract addresses from your op-deployer output: + +```bash +# Extract L1 contract addresses from your op-deployer deployment +cd ~/proposer-node - * A dedicated proposer private key with sufficient L1 ETH for gas fees +# Copy the L1 contracts file from op-deployer +cp ~/.deployer/state.json . - ### Network information +# Extract the DisputeGameFactory address +GAME_FACTORY_ADDRESS=$(cat state.json | jq -r '.opChainDeployment.disputeGameFactoryProxyAddress') +echo "DisputeGameFactory Address: $GAME_FACTORY_ADDRESS" +``` - * Your L2 chain ID and network configuration - * L1 network details (chain ID, RPC endpoints) - +### 3. Set up environment variables -## Step-by-step setup +Create your `.env` file with the actual values: -### Step 1: Prepare your environment +```bash +# Create .env file with your actual values +# L1 Configuration - Replace with your actual RPC URL +L1_RPC_URL=https://sepolia.infura.io/v3/YOUR_ACTUAL_INFURA_KEY - - ### Set up environment variables +# L2 Configuration - Should match your sequencer setup +L2_RPC_URL=http://localhost:8545 +ROLLUP_RPC_URL=http://localhost:8547 - Create a secure environment file with your configuration: +# Contract addresses - Extract from your op-deployer output +GAME_FACTORY_ADDRESS=YOUR_ACTUAL_GAME_FACTORY_ADDRESS - ```bash - # Core network configuration - export L1_RPC_URL="https://your-l1-rpc-endpoint" - export L2_RPC_URL="http://localhost:8545" # Your sequencer RPC - export ROLLUP_RPC_URL="http://localhost:9545" # Your op-node RPC +# Private key - Replace with your actual proposer private key +PROPOSER_PRIVATE_KEY=0xYOUR_ACTUAL_PROPOSER_PRIVATE_KEY - # Contract addresses (replace with your deployed contracts) - export GAME_FACTORY_ADDRESS="0xYourDisputeGameFactoryAddress" +# Proposer configuration +PROPOSAL_INTERVAL=3600s +GAME_TYPE=0 +POLL_INTERVAL=20s - # Security - export PROPOSER_PRIVATE_KEY="0xYourProposerPrivateKey" - ``` +# RPC configuration +PROPOSER_RPC_PORT=8560 +``` - ### Test connectivity +**Important**: Replace ALL placeholder values (`YOUR_ACTUAL_*`) with your real configuration values! - Verify your proposer can connect to all required services: +### 4. Get your proposer private key - ```bash - # Test L1 connectivity - curl -X POST -H "Content-Type: application/json" \ - --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ - $L1_RPC_URL +Extract the proposer private key from your op-deployer intent file: - # Test L2 connectivity - curl -X POST -H "Content-Type: application/json" \ - --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ - $L2_RPC_URL +```bash +# View your intent file to find the proposer private key +cat ~/.deployer/intent.toml - # Test rollup node connectivity - curl -X POST -H "Content-Type: application/json" \ - --data '{"jsonrpc":"2.0","method":"optimism_syncStatus","params":[],"id":1}' \ - $ROLLUP_RPC_URL - ``` - +# Look for a section like: +# [chains.my-chain.roles.proposer] +# privateKey = "0x..." +``` -### Step 2: Start the proposer +## Proposer configuration -Configure and start your proposer with fault proof mode: +Create `scripts/start-proposer.sh`: ```bash -./bin/op-proposer \ - --poll-interval=20s \ - --rpc.port=8560 \ +#!/bin/bash + +source .env + +# Path to the op-proposer binary we built +../optimism/op-proposer/bin/op-proposer \ + --poll-interval=$POLL_INTERVAL \ + --rpc.port=$PROPOSER_RPC_PORT \ --rpc.enable-admin \ --rollup-rpc=$ROLLUP_RPC_URL \ --l1-eth-rpc=$L1_RPC_URL \ --private-key=$PROPOSER_PRIVATE_KEY \ --game-factory-address=$GAME_FACTORY_ADDRESS \ - --game-type=0 \ - --proposal-interval=3600s \ + --game-type=$GAME_TYPE \ + --proposal-interval=$PROPOSAL_INTERVAL \ --num-confirmations=1 \ --resubmission-timeout=30s \ - --metrics.enabled=true \ - --metrics.port=7300 \ - --log.level=INFO + --wait-node-sync=true \ + --log.level=info +``` + +## Starting the proposer + +### 1. Verify prerequisites + +Ensure your sequencer and op-node are running: + +```bash +# Test L1 connectivity +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ + $L1_RPC_URL + +# Test L2 connectivity +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ + $L2_RPC_URL + +# Test rollup node connectivity +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"optimism_syncStatus","params":[],"id":1}' \ + $ROLLUP_RPC_URL +``` + +### 2. Start the proposer + +```bash +# Make the script executable +chmod +x scripts/start-proposer.sh + +# Start the proposer +./scripts/start-proposer.sh ``` -## Verification and monitoring +## Verification Verify your proposer is working correctly: - - ### Check proposer status +### Check proposer status - ```bash - # Verify proposer is responsive - curl -X POST -H "Content-Type: application/json" \ - --data '{"jsonrpc":"2.0","method":"admin_startProposer","params":[],"id":1}' \ - http://localhost:8560 +```bash +# Verify proposer is responsive +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"optimism_version","params":[],"id":1}' \ + http://localhost:8560 +``` + +### Monitor dispute games on L1 + +```bash +# Check latest dispute game count (requires cast from foundry) +cast call $GAME_FACTORY_ADDRESS "gameCount()" --rpc-url $L1_RPC_URL +``` - # Check latest dispute game - cast call $GAME_FACTORY_ADDRESS "gameCount()" --rpc-url $L1_RPC_URL - ``` - +Monitor your proposer's ETH balance and gas usage to ensure continuous operation. +Your proposer is now operational! ## Next steps From 06fbc45b45ee015d25a13285e939d13519090d1f Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Fri, 13 Jun 2025 17:57:56 +0100 Subject: [PATCH 13/34] Auto-fix: Update breadcrumbs, spelling dictionary and other automated fixes --- .../chain-operators/deploy/proposer-setup-guide.mdx | 6 +++++- words.txt | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index c91336675..ae5ce8d32 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -20,7 +20,7 @@ is_imported_content: 'false' After you have spun up your sequencer, 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. -This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed using [`op-deployer`](/operators/chain-operators/tools/op-deployer). If you haven't set up your sequencer yet, please refer to the [sequencer guide](/operators/chain-operators/tutorials/spinning-sequencer) first. +This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed using [`op-deployer`](/operators/chain-operators/tools/op-deployer). If you haven't set up your sequencer yet, please refer to the \[sequencer guide]\(Todo - Add this link when it's live) first. ## Understanding the proposer's role @@ -36,18 +36,22 @@ The proposer creates dispute games via the `DisputeGameFactory` contract, enabli Before setting up your proposer, ensure you have: **Running infrastructure:** + * A synced and operational sequencer node * Access to a L1 RPC endpoint * The rollup node (`op-node`) running and accessible **From op-deployer deployment:** + * Successfully deployed L1 contracts using `op-deployer apply` * Access to your deployment output files **Security setup:** + * A dedicated proposer private key with sufficient L1 ETH for gas fees **Network information:** + * Your L2 chain ID and network configuration * L1 network details (chain ID, RPC endpoints) diff --git a/words.txt b/words.txt index c82d49cd6..367ff3cb5 100644 --- a/words.txt +++ b/words.txt @@ -445,7 +445,6 @@ VMDEBUG vmdebug VMODULE vmodule -withdrawalsz xlarge XORI ZKPs From 3c7dde956d9a1872f4d28a36b01170d65515aacd Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Fri, 13 Jun 2025 18:45:17 +0100 Subject: [PATCH 14/34] revert batcher changes --- .../chain-operators/configuration/batcher.mdx | 32 ++++++------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/pages/operators/chain-operators/configuration/batcher.mdx b/pages/operators/chain-operators/configuration/batcher.mdx index 08967cb77..f9678ba59 100644 --- a/pages/operators/chain-operators/configuration/batcher.mdx +++ b/pages/operators/chain-operators/configuration/batcher.mdx @@ -19,8 +19,9 @@ import { Callout, Tabs } from 'nextra/components' # Batcher configuration -This page provides the **definitive guide** for OP Stack batcher configuration, serving as the single source of truth for chain operators. -The op-batcher posts L2 sequencer data to the L1, to make it available for verifiers. +This page lists all configuration options for the op-batcher. The op-batcher posts +L2 sequencer data to the L1, to make it available for verifiers. The following +options are from the `--help` in [v1.10.0](https://github.com/ethereum-optimism/optimism/releases/tag/op-batcher%2Fv1.10.0). ## Batcher policy @@ -31,12 +32,12 @@ The batcher policy defines high-level constraints and responsibilities regarding | Data Availability Type | Specifies whether the batcher uses **blobs**, **calldata**, or **auto** to post transaction data to L1. | Batch submitter address | Ethereum (Blobs or Calldata) | - Alternative data availability (Alt-DA) is not yet supported in the standard configuration.
- The sequencer can switch at will between blob transactions and calldata, with no restrictions, because both are fully secured by L1. | | Batch Submission Frequency | Determines how frequently the batcher submits aggregated transaction data to L1 (via the batcher transaction). | Batch submitter address | Must target **1,800 L1 blocks** (6 hours on Ethereum, assuming 12s L1 block time) or lower | - Batches must be posted before the sequencing window closes (commonly 12 hours by default).
- Leave a buffer for L1 network congestion and data size to ensure that each batch is fully committed in a timely manner. | -* **Data availability types**: +* **Data Availability Types**: * **Calldata** is generally simpler but can be more expensive on mainnet Ethereum, depending on gas prices. * **Blobs** are typically lower cost when your chain has enough transaction volume to fill large chunks of data. * The `op-batcher` can toggle between these approaches by setting the `--data-availability-type=` flag or with the `OP_BATCHER_DATA_AVAILABILITY_TYPE` env variable. Setting this flag to `auto` will allow the batcher to automatically switch between `calldata` and `blobs` based on the current L1 gas price. -* **Batch submission frequency** (`OP_BATCHER_MAX_CHANNEL_DURATION` and related flags): +* **Batch Submission Frequency** (`OP_BATCHER_MAX_CHANNEL_DURATION` and related flags): * Standard OP Chains frequently target a maximum channel duration between 1–6 hours. * Your chain should never exceed your L2's sequencing window (commonly 12 hours). * If targeting a longer submission window (e.g., 5 or 6 hours), be aware that the [safe head](https://github.com/ethereum-optimism/specs/blob/main/specs/glossary.md#safe-l2-head) can stall up to that duration. @@ -70,7 +71,7 @@ To minimize costs, we recommend setting your `OP_BATCHER_MAX_CHANNEL_DURATION` When there's blob congestion, running with high blob counts can backfire, because you will have a harder time getting blobs included and then fees will bump, which always means a doubling of the priority fees. -The `op-batcher` has the capabilities to send multiple blobs per single blob transaction. This is accomplished by the use of multi-frame channels, see the [specs](https://specs.optimism.io/protocol/derivation.html#frame-format?utm_source=op-docs\&utm_medium=docs) for more technical details on channels and frames. +The `op-batcher` has the capabilities to send multiple blobs per single blob transaction. This is accomplished by the use of multi-frame channels, see the [specs](https://specs.optimism.io/protocol/derivation.html#frame-format?utm_source=op-docs&utm_medium=docs) for more technical details on channels and frames. A minimal batcher configuration (with env vars) to enable 6-blob batcher transactions is: @@ -88,7 +89,7 @@ The minimum tip cap and base fee are also lifted to 2 gwei because it is uncerta The resubmission timeout is increased to a few minutes to give more time for inclusion before bumping the fees because current transaction pool implementations require a doubling of fees for blob transaction replacements. Multi-blob transactions are particularly useful for medium to high-throughput chains, where enough transaction volume exists to fill up 6 blobs in a reasonable amount of time. -You can use [this calculator](https://docs.google.com/spreadsheets/d/12VIiXHaVECG2RUunDSVJpn67IQp9NHFJqUsma2PndpE/edit) for your chain to determine what number of blobs are right for you, and what gas scalar configuration to use. Please also refer to guide on [Using Blobs](/operators/chain-operators/management/blobs) for chain operators. +You can use [this calculator](https://docs.google.com/spreadsheets/d/1V3CWpeUzXv5Iopw8lBSS8tWoSzyR4PDDwV9cu2kKOrs/edit?gid=186414307#gid=186414307) for your chain to determine what number of blobs are right for you, and what gas scalar configuration to use. Please also refer to guide on [Using Blobs](/operators/chain-operators/management/blobs) for chain operators. ### Set your `--batch-type=1` to use span batches @@ -165,7 +166,7 @@ however you can see some of the most important variables configured below: OP_BATCHER_ACTIVE_SEQUENCER_CHECK_DURATION: 5s ``` -Lower throughput chains, which aren't filling up channels before the `MAX_CHANNEL_DURATION` is hit, +Lower throughput chains, which aren't filling up channels before the `MAX_CHANNEL_DURATION` is hit, may save gas by increasing the `MAX_CHANNEL_DURATION`. See the [recommendations section](#set-your--op_batcher_max_channel_duration). ## All configuration variables @@ -537,6 +538,7 @@ flag must also be set. `OP_BATCHER_HD_PATH=` + #### signer.address Address the signer is signing transactions for. @@ -804,6 +806,7 @@ Enable the metrics server. The default value is `false`. `--version=false` + ### Miscellaneous #### active-sequencer-check-duration @@ -885,18 +888,3 @@ Print the version. The default value is false. `--version=` `--version=false` - -## Conclusion - -This configuration reference provides a complete foundation for operating an OP Stack batcher efficiently and securely. -The recommended settings balance cost optimization with operational reliability while ensuring proper transaction finality progression. - -The batcher is critical infrastructure that ensures your L2 chain inherits Ethereum's security properties through reliable data availability. -Proper configuration based on these guidelines will ensure optimal operation while meeting your chain's specific requirements. - -### Next steps - -* Read the [transaction finality](/stack/transactions/transaction-finality) docs -* Check out [rollup protocol](/stack/rollup/overview) specs -* Read the [derivation process](https://specs.optimism.io/protocol/derivation.html) guide -* Read the [batch submission wire format](https://specs.optimism.io/protocol/derivation.html#batch-submission) spec From 6e8fa74d5e345f16a685bc4c3396df4825214c8c Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Fri, 13 Jun 2025 19:42:24 +0100 Subject: [PATCH 15/34] updated the docs --- .../deploy/proposer-setup-guide.mdx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index ae5ce8d32..780e3a84a 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -29,7 +29,7 @@ The proposer (`op-proposer`) serves as a crucial bridge between your L2 chain an * **State commitment**: Proposing L2 state roots to L1 at regular intervals * **Withdrawal enablement**: Providing the necessary commitments for users to prove and finalize withdrawals -The proposer creates dispute games via the `DisputeGameFactory` contract, enabling permissionless challenging of proposed state roots and providing a robust fault proof system. +The proposer creates dispute games via the `DisputeGameFactory` contract, enabling permissionless challenging of proposed state roots. ## Prerequisites @@ -44,11 +44,11 @@ Before setting up your proposer, ensure you have: **From op-deployer deployment:** * Successfully deployed L1 contracts using `op-deployer apply` -* Access to your deployment output files +* Access to your deployment output (`genesis` and `rollup`) files. **Security setup:** -* A dedicated proposer private key with sufficient L1 ETH for gas fees +* A dedicated proposer private key **Network information:** @@ -90,8 +90,8 @@ Create your proposer working directory: ```bash # Create proposer directory at the same level as your sequencer -mkdir ~/proposer-node -cd ~/proposer-node +mkdir proposer-node +cd proposer-node # Create scripts directory mkdir scripts @@ -103,13 +103,13 @@ Extract the necessary contract addresses from your op-deployer output: ```bash # Extract L1 contract addresses from your op-deployer deployment -cd ~/proposer-node +cd proposer-node -# Copy the L1 contracts file from op-deployer -cp ~/.deployer/state.json . +# Copy the L1 contracts file from op-deployer, update to paths to wherever your `.deployer/state.json` live +cp ../.deployer/state.json . # Extract the DisputeGameFactory address -GAME_FACTORY_ADDRESS=$(cat state.json | jq -r '.opChainDeployment.disputeGameFactoryProxyAddress') +GAME_FACTORY_ADDRESS=$(cat state.json | jq -r '.opChainDeployments[0].disputeGameFactoryProxyAddress') echo "DisputeGameFactory Address: $GAME_FACTORY_ADDRESS" ``` From f8db0febe5b46653a0dc28e769966457057439af Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Tue, 17 Jun 2025 16:43:03 +0100 Subject: [PATCH 16/34] updated the contents --- .../deploy/proposer-setup-guide.mdx | 52 +++++++------------ 1 file changed, 20 insertions(+), 32 deletions(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 780e3a84a..5b57db964 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -37,15 +37,10 @@ Before setting up your proposer, ensure you have: **Running infrastructure:** -* A synced and operational sequencer node +* An operational sequencer node * Access to a L1 RPC endpoint * The rollup node (`op-node`) running and accessible -**From op-deployer deployment:** - -* Successfully deployed L1 contracts using `op-deployer apply` -* Access to your deployment output (`genesis` and `rollup`) files. - **Security setup:** * A dedicated proposer private key @@ -71,7 +66,7 @@ git checkout op-proposer/v1.10.0 # Build op-proposer cd op-proposer -make op-proposer +just # Binary will be available at ./bin/op-proposer ``` @@ -105,7 +100,7 @@ Extract the necessary contract addresses from your op-deployer output: # Extract L1 contract addresses from your op-deployer deployment cd proposer-node -# Copy the L1 contracts file from op-deployer, update to paths to wherever your `.deployer/state.json` live +# Copy the L1 contracts file from op-deployer, update to paths to wherever your `.deployer/state.json` lives cp ../.deployer/state.json . # Extract the DisputeGameFactory address @@ -129,8 +124,8 @@ ROLLUP_RPC_URL=http://localhost:8547 # Contract addresses - Extract from your op-deployer output GAME_FACTORY_ADDRESS=YOUR_ACTUAL_GAME_FACTORY_ADDRESS -# Private key - Replace with your actual proposer private key -PROPOSER_PRIVATE_KEY=0xYOUR_ACTUAL_PROPOSER_PRIVATE_KEY +# Private key - Replace with your actual private key +PRIVATE_KEY=0xYOUR_ACTUAL_PRIVATE_KEY # Proposer configuration PROPOSAL_INTERVAL=3600s @@ -143,18 +138,9 @@ PROPOSER_RPC_PORT=8560 **Important**: Replace ALL placeholder values (`YOUR_ACTUAL_*`) with your real configuration values! -### 4. Get your proposer private key - -Extract the proposer private key from your op-deployer intent file: - -```bash -# View your intent file to find the proposer private key -cat ~/.deployer/intent.toml +### 4. Get your private key -# Look for a section like: -# [chains.my-chain.roles.proposer] -# privateKey = "0x..." -``` +Get a private key from your wallet ## Proposer configuration @@ -189,7 +175,13 @@ source .env Ensure your sequencer and op-node are running: ```bash + # Test L1 connectivity +# Note: Make sure you have exported these environment variables to your current shell session: +# export L1_RPC_URL="https://sepolia.infura.io/v3/YOUR_KEY" +# export L2_RPC_URL="http://localhost:8545" +# export ROLLUP_RPC_URL="http://localhost:8547" + curl -X POST -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ $L1_RPC_URL @@ -222,20 +214,16 @@ Verify your proposer is working correctly: ### Check proposer status ```bash -# Verify proposer is responsive +# Check current L1 block number curl -X POST -H "Content-Type: application/json" \ - --data '{"jsonrpc":"2.0","method":"optimism_version","params":[],"id":1}' \ - http://localhost:8560 -``` - -### Monitor dispute games on L1 + --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ + $L1_RPC_URL -```bash -# Check latest dispute game count (requires cast from foundry) -cast call $GAME_FACTORY_ADDRESS "gameCount()" --rpc-url $L1_RPC_URL +# Check your rollup's sync status +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"optimism_syncStatus","params":[],"id":1}' \ + http://localhost:8547 ``` - -Monitor your proposer's ETH balance and gas usage to ensure continuous operation. Your proposer is now operational! ## Next steps From da61bee7e416be32e65162dceff311554a4aaf7c Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Tue, 17 Jun 2025 17:08:31 +0100 Subject: [PATCH 17/34] updated the contents of the docs --- .../deploy/proposer-setup-guide.mdx | 59 ++++++++++++++----- 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 5b57db964..1779fcc13 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -16,6 +16,8 @@ categories: is_imported_content: 'false' --- +import { Callout, Steps } from 'nextra/components' + # Spin up your proposer After you have spun up your sequencer, 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. @@ -41,10 +43,6 @@ Before setting up your proposer, ensure you have: * Access to a L1 RPC endpoint * The rollup node (`op-node`) running and accessible -**Security setup:** - -* A dedicated proposer private key - **Network information:** * Your L2 chain ID and network configuration @@ -70,9 +68,15 @@ just # Binary will be available at ./bin/op-proposer ``` + +This uses `op-proposer/v1.10.0` which is compatible with op-node/v1.13.3 and op-geth/v1.101511.0 from [spinning up the sequencer guide](Will link to this, when its live). +Always check the [release notes](https://github.com/ethereum-optimism/optimism/releases) for compatibility. + ### Verify installation +Run this command to verify the installation. + ```bash ./bin/op-proposer --version ``` @@ -92,15 +96,31 @@ cd proposer-node mkdir scripts ``` -### 2. Extract contract addresses +Your final directory structure should look like: + +```bash +~/ +├── optimism/ # Contains op-proposer binary +├── sequencer-node/ # Your sequencer setup +├── .deployer/ # From op-deployer +│ └── state.json +└── proposer-node/ # Your proposer working directory + ├── state.json # Copied from .deployer + ├── .env + └── scripts/ + └── start-proposer.sh +``` + +### 2. Extract DisputeGameFactory address -Extract the necessary contract addresses from your op-deployer output: +Extract the DisputeGameFactory contract address from your op-deployer output: ```bash -# Extract L1 contract addresses from your op-deployer deployment +# Navigate to proposer directory cd proposer-node -# Copy the L1 contracts file from op-deployer, update to paths to wherever your `.deployer/state.json` lives +# Copy the deployment state file from op-deployer +# Update the path if your .deployer directory is located elsewhere cp ../.deployer/state.json . # Extract the DisputeGameFactory address @@ -108,6 +128,11 @@ GAME_FACTORY_ADDRESS=$(cat state.json | jq -r '.opChainDeployments[0].disputeGam echo "DisputeGameFactory Address: $GAME_FACTORY_ADDRESS" ``` + +The proposer only needs the `DisputeGameFactory` address to submit proposals. +The `GAME_TYPE=0` represents the standard fault proof game type. + + ### 3. Set up environment variables Create your `.env` file with the actual values: @@ -140,7 +165,7 @@ PROPOSER_RPC_PORT=8560 ### 4. Get your private key -Get a private key from your wallet +Get a private key from your wallet. ## Proposer configuration @@ -158,7 +183,7 @@ source .env --rpc.enable-admin \ --rollup-rpc=$ROLLUP_RPC_URL \ --l1-eth-rpc=$L1_RPC_URL \ - --private-key=$PROPOSER_PRIVATE_KEY \ + --private-key=$PRIVATE_KEY \ --game-factory-address=$GAME_FACTORY_ADDRESS \ --game-type=$GAME_TYPE \ --proposal-interval=$PROPOSAL_INTERVAL \ @@ -214,15 +239,17 @@ Verify your proposer is working correctly: ### Check proposer status ```bash -# Check current L1 block number -curl -X POST -H "Content-Type: application/json" \ - --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ - $L1_RPC_URL -# Check your rollup's sync status +# Monitor proposal activity curl -X POST -H "Content-Type: application/json" \ - --data '{"jsonrpc":"2.0","method":"optimism_syncStatus","params":[],"id":1}' \ + --data '{"jsonrpc":"2.0","method":"optimism_outputAtBlock","params":["latest"],"id":1}' \ http://localhost:8547 + +# Check if your proposer address has enough ETH for gas +# (Replace with your actual proposer address) +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xYOUR_PROPOSER_ADDRESS","latest"],"id":1}' \ + $L1_RPC_URL ``` Your proposer is now operational! From 57b408f31344fe299a6e7248dcce77cb2ac681f1 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Tue, 17 Jun 2025 17:08:49 +0100 Subject: [PATCH 18/34] Auto-fix: Update breadcrumbs, spelling dictionary and other automated fixes --- .../chain-operators/deploy/proposer-setup-guide.mdx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 1779fcc13..b6a52f61f 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -68,9 +68,10 @@ just # Binary will be available at ./bin/op-proposer ``` + -This uses `op-proposer/v1.10.0` which is compatible with op-node/v1.13.3 and op-geth/v1.101511.0 from [spinning up the sequencer guide](Will link to this, when its live). -Always check the [release notes](https://github.com/ethereum-optimism/optimism/releases) for compatibility. + This uses `op-proposer/v1.10.0` which is compatible with op-node/v1.13.3 and op-geth/v1.101511.0 from \[spinning up the sequencer guide]\(Will link to this, when its live). + Always check the [release notes](https://github.com/ethereum-optimism/optimism/releases) for compatibility. ### Verify installation @@ -129,8 +130,8 @@ echo "DisputeGameFactory Address: $GAME_FACTORY_ADDRESS" ``` -The proposer only needs the `DisputeGameFactory` address to submit proposals. -The `GAME_TYPE=0` represents the standard fault proof game type. + The proposer only needs the `DisputeGameFactory` address to submit proposals. + The `GAME_TYPE=0` represents the standard fault proof game type. ### 3. Set up environment variables @@ -251,6 +252,7 @@ curl -X POST -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xYOUR_PROPOSER_ADDRESS","latest"],"id":1}' \ $L1_RPC_URL ``` + Your proposer is now operational! ## Next steps From ad8da1ea4dc3971901ac47f7b3cdc8d1a00609d7 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Tue, 17 Jun 2025 17:20:24 +0100 Subject: [PATCH 19/34] update the title --- pages/operators/chain-operators/deploy/_meta.json | 2 +- .../operators/chain-operators/deploy/proposer-setup-guide.mdx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/operators/chain-operators/deploy/_meta.json b/pages/operators/chain-operators/deploy/_meta.json index 3f611cbca..3254c62fe 100644 --- a/pages/operators/chain-operators/deploy/_meta.json +++ b/pages/operators/chain-operators/deploy/_meta.json @@ -2,7 +2,7 @@ "overview": "Deployment overview", "smart-contracts": "Smart contract deployment", "validate-deployment": "Validate your contract deployment", - "proposer-setup-guide": "Spin up your proposer", + "proposer-setup-guide": "Spinning up the proposer", "genesis": "Chain artifacts creation" } diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index b6a52f61f..5b096f1c0 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -1,5 +1,5 @@ --- -title: Spin up your proposer +title: Spinning up the proposer lang: en-US description: Learn how to set up and configure an OP Stack proposer to post L2 state roots. content_type: tutorial @@ -18,7 +18,7 @@ is_imported_content: 'false' import { Callout, Steps } from 'nextra/components' -# Spin up your proposer +# Spinning up the proposer After you have spun up your sequencer, 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. From 829dfa945b22bc37719d01832e1a49e16f4c7d55 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Tue, 17 Jun 2025 17:24:16 +0100 Subject: [PATCH 20/34] update the links --- pages/operators/chain-operators/deploy/proposer-setup-guide.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 5b096f1c0..d239adeba 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -20,7 +20,7 @@ import { Callout, Steps } from 'nextra/components' # Spinning up the proposer -After you have spun up your sequencer, 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)[link-to-sequencer-guide], 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. This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed using [`op-deployer`](/operators/chain-operators/tools/op-deployer). If you haven't set up your sequencer yet, please refer to the \[sequencer guide]\(Todo - Add this link when it's live) first. From 5fcae2c9ff0b0ab0265c2f166bbfcbe26527ec34 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Tue, 17 Jun 2025 17:24:35 +0100 Subject: [PATCH 21/34] Auto-fix: Update breadcrumbs, spelling dictionary and other automated fixes --- pages/operators/chain-operators/deploy/proposer-setup-guide.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index d239adeba..1a554f619 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -20,7 +20,7 @@ import { Callout, Steps } from 'nextra/components' # Spinning up the proposer -After you have (spun up your sequencer)[link-to-sequencer-guide], 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)\[link-to-sequencer-guide], 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. This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed using [`op-deployer`](/operators/chain-operators/tools/op-deployer). If you haven't set up your sequencer yet, please refer to the \[sequencer guide]\(Todo - Add this link when it's live) first. From 8bbf76bd1b9966c175ccbff8087d22a756b8c1c0 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Wed, 18 Jun 2025 17:26:42 +0100 Subject: [PATCH 22/34] Add todo --- pages/operators/chain-operators/deploy/_meta.json | 4 ++-- .../operators/chain-operators/deploy/proposer-setup-guide.mdx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/operators/chain-operators/deploy/_meta.json b/pages/operators/chain-operators/deploy/_meta.json index 3254c62fe..e9bcae2e8 100644 --- a/pages/operators/chain-operators/deploy/_meta.json +++ b/pages/operators/chain-operators/deploy/_meta.json @@ -2,7 +2,7 @@ "overview": "Deployment overview", "smart-contracts": "Smart contract deployment", "validate-deployment": "Validate your contract deployment", - "proposer-setup-guide": "Spinning up the proposer", - "genesis": "Chain artifacts creation" + "genesis": "Chain artifacts creation", + "proposer-setup-guide": "Spinning up the proposer" } diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 1a554f619..0726f8286 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -41,7 +41,6 @@ Before setting up your proposer, ensure you have: * An operational sequencer node * Access to a L1 RPC endpoint -* The rollup node (`op-node`) running and accessible **Network information:** @@ -261,3 +260,4 @@ Your proposer is now operational! * For more detail on deploying new dispute games with OPCM, [see the docs](/operators/chain-operators/tutorials/dispute-games). * checkout the [migrating to permissionless fault proofs](/operators/chain-operators/tutorials/migrating-permissionless) guide * For cost optimization resources, check out the [Fee calculation tools](/operators/chain-operators/tools/fee-calculator). +* TODO: Add the link to the sequencer node when it's live \ No newline at end of file From e988cc46af0e8f3a7709fd3565ff437a0e008f39 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Wed, 18 Jun 2025 17:27:03 +0100 Subject: [PATCH 23/34] Auto-fix: Update breadcrumbs, spelling dictionary and other automated fixes --- pages/operators/chain-operators/deploy/proposer-setup-guide.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 0726f8286..463a39ff2 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -260,4 +260,4 @@ Your proposer is now operational! * For more detail on deploying new dispute games with OPCM, [see the docs](/operators/chain-operators/tutorials/dispute-games). * checkout the [migrating to permissionless fault proofs](/operators/chain-operators/tutorials/migrating-permissionless) guide * For cost optimization resources, check out the [Fee calculation tools](/operators/chain-operators/tools/fee-calculator). -* TODO: Add the link to the sequencer node when it's live \ No newline at end of file +* TODO: Add the link to the sequencer node when it's live From a26f8fe021f6654ee67fbc9ce2b3ace437655948 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Wed, 18 Jun 2025 17:27:16 +0100 Subject: [PATCH 24/34] updated text --- pages/operators/chain-operators/deploy/proposer-setup-guide.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 463a39ff2..241e90283 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -260,4 +260,4 @@ Your proposer is now operational! * For more detail on deploying new dispute games with OPCM, [see the docs](/operators/chain-operators/tutorials/dispute-games). * checkout the [migrating to permissionless fault proofs](/operators/chain-operators/tutorials/migrating-permissionless) guide * For cost optimization resources, check out the [Fee calculation tools](/operators/chain-operators/tools/fee-calculator). -* TODO: Add the link to the sequencer node when it's live +* TODO: Add sequencer node when it's live From 0072ea3021c5679c7c7e28367b810c7f2a73fd22 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Tue, 24 Jun 2025 17:17:00 +0100 Subject: [PATCH 25/34] updated the content of the docs --- .../deploy/proposer-setup-guide.mdx | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 241e90283..18ed79b18 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -20,7 +20,7 @@ import { Callout, Steps } from 'nextra/components' # Spinning up the proposer -After you have (spun up your sequencer)\[link-to-sequencer-guide], 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)[link-to-sequencer-guide], 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. This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed using [`op-deployer`](/operators/chain-operators/tools/op-deployer). If you haven't set up your sequencer yet, please refer to the \[sequencer guide]\(Todo - Add this link when it's live) first. @@ -31,7 +31,7 @@ The proposer (`op-proposer`) serves as a crucial bridge between your L2 chain an * **State commitment**: Proposing L2 state roots to L1 at regular intervals * **Withdrawal enablement**: Providing the necessary commitments for users to prove and finalize withdrawals -The proposer creates dispute games via the `DisputeGameFactory` contract, enabling permissionless challenging of proposed state roots. +The proposer creates dispute games via the `DisputeGameFactory` contract. ## Prerequisites @@ -85,7 +85,7 @@ Run this command to verify the installation. ### 1. Organize your workspace -Create your proposer working directory: +at the same level as your sequencer from the [sequencer tutorial](link-to-the sequencer tutorial): ```bash # Create proposer directory at the same level as your sequencer @@ -96,21 +96,6 @@ cd proposer-node mkdir scripts ``` -Your final directory structure should look like: - -```bash -~/ -├── optimism/ # Contains op-proposer binary -├── sequencer-node/ # Your sequencer setup -├── .deployer/ # From op-deployer -│ └── state.json -└── proposer-node/ # Your proposer working directory - ├── state.json # Copied from .deployer - ├── .env - └── scripts/ - └── start-proposer.sh -``` - ### 2. Extract DisputeGameFactory address Extract the DisputeGameFactory contract address from your op-deployer output: @@ -119,7 +104,7 @@ Extract the DisputeGameFactory contract address from your op-deployer output: # Navigate to proposer directory cd proposer-node -# Copy the deployment state file from op-deployer +# Copy the state.json from .deployer directory created while using op-deployer # Update the path if your .deployer directory is located elsewhere cp ../.deployer/state.json . @@ -161,6 +146,21 @@ POLL_INTERVAL=20s PROPOSER_RPC_PORT=8560 ``` +Your final directory structure should look like: + +```bash +~/ +├── optimism/ # Contains op-proposer binary +├── sequencer-node/ # Your sequencer setup +├── .deployer/ # From op-deployer +│ └── state.json +└── proposer-node/ # Your proposer working directory + ├── state.json # Copied from .deployer + ├── .env + └── scripts/ + └── start-proposer.sh +``` + **Important**: Replace ALL placeholder values (`YOUR_ACTUAL_*`) with your real configuration values! ### 4. Get your private key From 2c2876baf9c7d6b503413a0b77d26d174d258b18 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Tue, 24 Jun 2025 17:17:21 +0100 Subject: [PATCH 26/34] Auto-fix: Update breadcrumbs, spelling dictionary and other automated fixes --- .../operators/chain-operators/deploy/proposer-setup-guide.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 18ed79b18..6ec99f71d 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -20,7 +20,7 @@ import { Callout, Steps } from 'nextra/components' # Spinning up the proposer -After you have (spun up your sequencer)[link-to-sequencer-guide], 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)\[link-to-sequencer-guide], 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. This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed using [`op-deployer`](/operators/chain-operators/tools/op-deployer). If you haven't set up your sequencer yet, please refer to the \[sequencer guide]\(Todo - Add this link when it's live) first. @@ -85,7 +85,7 @@ Run this command to verify the installation. ### 1. Organize your workspace -at the same level as your sequencer from the [sequencer tutorial](link-to-the sequencer tutorial): +at the same level as your sequencer from the \[sequencer tutorial]\(link-to-the sequencer tutorial): ```bash # Create proposer directory at the same level as your sequencer From ed205d23d9e5fee4f5888f155c4637a4d34224a9 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Thu, 26 Jun 2025 17:25:25 +0100 Subject: [PATCH 27/34] Clarify proposer setup instructions in the guide --- pages/operators/chain-operators/deploy/proposer-setup-guide.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 6ec99f71d..80c647ece 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -20,7 +20,7 @@ import { Callout, Steps } from 'nextra/components' # Spinning up the proposer -After you have (spun up your sequencer)\[link-to-sequencer-guide], 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)[link-to-sequencer-guide], 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. This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed using [`op-deployer`](/operators/chain-operators/tools/op-deployer). If you haven't set up your sequencer yet, please refer to the \[sequencer guide]\(Todo - Add this link when it's live) first. From afa1ae23951210b95e5be25dc39491847cace335 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Thu, 26 Jun 2025 17:54:50 +0100 Subject: [PATCH 28/34] Enhance proposer setup guide with updated links and additional configuration information --- .../deploy/proposer-setup-guide.mdx | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 80c647ece..d443c4cf5 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -20,9 +20,11 @@ import { Callout, Steps } from 'nextra/components' # Spinning up the proposer -After you have (spun up your sequencer)[link-to-sequencer-guide], 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]\(link to sequencer guide), 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. -This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed using [`op-deployer`](/operators/chain-operators/tools/op-deployer). If you haven't set up your sequencer yet, please refer to the \[sequencer guide]\(Todo - Add this link when it's live) first. +This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed using [`op-deployer`](/operators/chain-operators/tools/op-deployer). If you haven't set up your sequencer yet, please refer to the \[sequencer guide]\(link to sequencerguide) first. + +To see configuration info for the proposer, check out the [configuration page](/operators/chain-operators/configuration/proposer). ## Understanding the proposer's role @@ -146,21 +148,6 @@ POLL_INTERVAL=20s PROPOSER_RPC_PORT=8560 ``` -Your final directory structure should look like: - -```bash -~/ -├── optimism/ # Contains op-proposer binary -├── sequencer-node/ # Your sequencer setup -├── .deployer/ # From op-deployer -│ └── state.json -└── proposer-node/ # Your proposer working directory - ├── state.json # Copied from .deployer - ├── .env - └── scripts/ - └── start-proposer.sh -``` - **Important**: Replace ALL placeholder values (`YOUR_ACTUAL_*`) with your real configuration values! ### 4. Get your private key @@ -193,6 +180,21 @@ source .env --log.level=info ``` +Your final directory structure should look like: + +```bash +~/ +├── optimism/ # Contains op-proposer binary +├── sequencer-node/ # Your sequencer setup +├── .deployer/ # From op-deployer +│ └── state.json +└── proposer-node/ # Your proposer working directory + ├── state.json # Copied from .deployer + ├── .env + └── scripts/ + └── start-proposer.sh +``` + ## Starting the proposer ### 1. Verify prerequisites From 6d7807b9c699cbfe42ef757c7c2ebae64392814e Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Fri, 27 Jun 2025 16:47:36 +0100 Subject: [PATCH 29/34] Update proposer setup guide with corrected links to sequencer node and additional next steps --- .../chain-operators/deploy/proposer-setup-guide.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index d443c4cf5..14fb3c054 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -20,9 +20,9 @@ import { Callout, Steps } from 'nextra/components' # Spinning up the proposer -After you have \[spun up your sequencer]\(link to sequencer guide), 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](/operators/chain-operators/deploy/sequencer-node), 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. -This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed using [`op-deployer`](/operators/chain-operators/tools/op-deployer). If you haven't set up your sequencer yet, please refer to the \[sequencer guide]\(link to sequencerguide) first. +This guide assumes you already have a functioning sequencer and the necessary L1 contracts deployed using [`op-deployer`](/operators/chain-operators/tools/op-deployer). If you haven't set up your sequencer yet, please refer to the [sequencer guide](/operators/chain-operators/deploy/sequencer-node) first. To see configuration info for the proposer, check out the [configuration page](/operators/chain-operators/configuration/proposer). @@ -258,8 +258,8 @@ Your proposer is now operational! ## Next steps +* Learn how to set up the [sequencer node](/operators/chain-operators/deploy/sequencer-node) for your OP Stack chain. * For detailed parameter documentation, see the [proposer configuration reference](/operators/chain-operators/configuration/proposer). * For more detail on deploying new dispute games with OPCM, [see the docs](/operators/chain-operators/tutorials/dispute-games). * checkout the [migrating to permissionless fault proofs](/operators/chain-operators/tutorials/migrating-permissionless) guide * For cost optimization resources, check out the [Fee calculation tools](/operators/chain-operators/tools/fee-calculator). -* TODO: Add sequencer node when it's live From 66b06ee6489f4aafc47106d959709bc276ac2ea5 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Fri, 27 Jun 2025 17:03:41 +0100 Subject: [PATCH 30/34] update the breadcrumbs --- pages/operators/chain-operators/deploy.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pages/operators/chain-operators/deploy.mdx b/pages/operators/chain-operators/deploy.mdx index 8a85e6ac2..a707b873d 100644 --- a/pages/operators/chain-operators/deploy.mdx +++ b/pages/operators/chain-operators/deploy.mdx @@ -29,10 +29,12 @@ This section provides information on OP Stack genesis creation, deployment overv + + - + From 94e11dd80932d39b4cc71912a02c52d42f25d53c Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Mon, 7 Jul 2025 04:50:52 -0700 Subject: [PATCH 31/34] Update pages/operators/chain-operators/deploy/proposer-setup-guide.mdx Co-authored-by: Bradley Camacho <42678939+bradleycamacho@users.noreply.github.com> --- pages/operators/chain-operators/deploy/proposer-setup-guide.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 14fb3c054..10c850dbc 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -100,7 +100,7 @@ mkdir scripts ### 2. Extract DisputeGameFactory address -Extract the DisputeGameFactory contract address from your op-deployer output: +Extract the `DisputeGameFactory` contract address from your op-deployer output: ```bash # Navigate to proposer directory From 4fa2d3e75af0903bbcdb59941eaa25c261ef22b3 Mon Sep 17 00:00:00 2001 From: Blessing Krofegha Date: Mon, 7 Jul 2025 04:51:06 -0700 Subject: [PATCH 32/34] Update pages/operators/chain-operators/deploy/proposer-setup-guide.mdx Co-authored-by: Bradley Camacho <42678939+bradleycamacho@users.noreply.github.com> --- pages/operators/chain-operators/deploy/proposer-setup-guide.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 10c850dbc..369b4dbf2 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -53,7 +53,7 @@ Before setting up your proposer, ensure you have: ### Build from source -Clone and build op-proposer +Clone and build `op-proposer` ```bash # If you don't already have the optimism repository from the sequencer setup From 63e160c1275e75e876347fa198f0fc109fc3ed9f Mon Sep 17 00:00:00 2001 From: krofax Date: Mon, 7 Jul 2025 12:54:39 +0100 Subject: [PATCH 33/34] fix link --- pages/operators/chain-operators/deploy/proposer-setup-guide.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx index 369b4dbf2..734d9771a 100644 --- a/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx +++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx @@ -71,7 +71,7 @@ just ``` - This uses `op-proposer/v1.10.0` which is compatible with op-node/v1.13.3 and op-geth/v1.101511.0 from \[spinning up the sequencer guide]\(Will link to this, when its live). + This uses `op-proposer/v1.10.0` which is compatible with op-node/v1.13.3 and op-geth/v1.101511.0 from [spinning up the sequencer guide](/operators/chain-operators/deploy/sequencer-node). Always check the [release notes](https://github.com/ethereum-optimism/optimism/releases) for compatibility. From f1e4cd3ae136fd252b13ba87f43f43a2667535f5 Mon Sep 17 00:00:00 2001 From: krofax Date: Mon, 7 Jul 2025 12:56:57 +0100 Subject: [PATCH 34/34] Auto-fix: Update breadcrumbs, spelling dictionary and other automated fixes --- words.txt | 230 +++++++++++++++++++++++++++--------------------------- 1 file changed, 115 insertions(+), 115 deletions(-) diff --git a/words.txt b/words.txt index fb23b2231..4d347dc57 100644 --- a/words.txt +++ b/words.txt @@ -1,7 +1,7 @@ -ACCOUNTQUEUE accountqueue -ACCOUNTSLOTS +ACCOUNTQUEUE accountslots +ACCOUNTSLOTS ACDC ADDI ADDIU @@ -9,58 +9,58 @@ ADDU airgap Allnodes allocs -Alphanet alphanet -Alphanets +Alphanet alphanets +Alphanets altda ANDI Ankr Apeworx Arweave authrpc -Autorelay autorelay +Autorelay autorelayer basefee bcde -Betanet betanet -Betanets +Betanet betanets +Betanets BGEZ BGTZ Biconomy BLEZ -BLOBPOOL blobpool +BLOBPOOL blobspace Blockdaemon blockhash blocklists -BLOCKLOGS blocklogs -BLOCKPROFILERATE +BLOCKLOGS blockprofilerate +BLOCKPROFILERATE Blockscout -Blockspace blockspace +Blockspace blocktime -Blocktimes blocktimes -BLOOMFILTER +Blocktimes bloomfilter +BLOOMFILTER BLTZ Bootcamp bootnode -BOOTNODES -Bootnodes bootnodes +Bootnodes +BOOTNODES bottlenecked -Brotli brotli -Callouts +Brotli callouts +Callouts CCIP cdef Celestia @@ -73,65 +73,65 @@ chaosnet Chugsplash Clabby codebases -Collateralized collateralized +Collateralized compr Comprensive -COMPUTEPENDINGBLOCK computependingblock +COMPUTEPENDINGBLOCK confs corsdomain counterfactually -Crosschain crosschain +Crosschain Crossmint daserver -DATACAP datacap -DATADIR +DATACAP datadir +DATADIR Defi Defillama's -Devnet devnet -Devnets +Devnet devnets +Devnets devs direnv -DISABLETXPOOLGOSSIP disabletxpoolgossip -Discv +DISABLETXPOOLGOSSIP discv +Discv DIVU Drand dripcheck Drippie Eigen EIPs -ENABLEDEPRECATEDPERSONAL enabledeprecatedpersonal +ENABLEDEPRECATEDPERSONAL enginekind -Erigon erigon -ETHERBASE +Erigon etherbase +ETHERBASE Ethernity Ethernow -ETHSTATS ethstats -EVMTIMEOUT +ETHSTATS evmtimeout +EVMTIMEOUT executability exfiltrate -EXITWHENSYNCED exitwhensynced +EXITWHENSYNCED extensibly -EXTRADATA extradata +EXTRADATA Farcaster Faultproof -FDLIMIT fdlimit +FDLIMIT Flashblocks Flashbots forkable @@ -140,51 +140,51 @@ FPVM FPVMs Fraxtal Funct -GASCAP gascap +GASCAP gaslessly -GCMODE gcmode +GCMODE Gelato gifs -GLOBALQUEUE globalqueue -GLOBALSLOTS +GLOBALQUEUE globalslots +GLOBALSLOTS gokzg growthepie hardfork hardforks -HEALTHCHECK healthcheck +HEALTHCHECK healthchecks -HISTORICALRPC historicalrpc -HISTORICALRPCTIMEOUT +HISTORICALRPC historicalrpctimeout -HOLESKY -Holesky +HISTORICALRPCTIMEOUT holesky +Holesky +HOLESKY IERC -IGNOREPRICE ignoreprice +IGNOREPRICE Immunefi -Inator inator -INFLUXDBV +Inator influxdbv +INFLUXDBV initcode -IPCDISABLE ipcdisable +IPCDISABLE ipcfile -IPCPATH ipcpath +IPCPATH IPFS JALR -JOURNALREMOTES journalremotes -JSPATH +JOURNALREMOTES jspath +JSPATH jwtsecret Keccak leveldb @@ -193,34 +193,34 @@ Lisk logfile logfmt Mainnets -MAXAGE maxage -MAXBACKUPS +MAXAGE maxbackups -MAXPEERS +MAXBACKUPS maxpeers -MAXPENDPEERS +MAXPEERS maxpendpeers -MAXPRICE +MAXPENDPEERS maxprice -MEMPROFILERATE +MAXPRICE memprofilerate -Merkle +MEMPROFILERATE merkle +Merkle MFHI MFLO Mgas Minato -MINFREEDISK minfreedisk -MINSUGGESTEDPRIORITYFEE +MINFREEDISK minsuggestedpriorityfee +MINSUGGESTEDPRIORITYFEE Mintable Mintplex MIPSEVM Mitigations -Monitorism monitorism +Monitorism Moralis Mordor mountpoint @@ -230,144 +230,144 @@ MTHI MTLO MULT multiaddr -Multichain multichain +Multichain multiclient multisigs MULTU nethermind -NETRESTRICT netrestrict -NETWORKID +NETRESTRICT networkid -NEWPAYLOAD +NETWORKID newpayload +NEWPAYLOAD nextra -NOCOMPACTION nocompaction -NODEKEY +NOCOMPACTION nodekey -NODEKEYHEX +NODEKEY nodekeyhex +NODEKEYHEX nodename Nodies -NODISCOVER nodiscover -NOLOCALS +NODISCOVER nolocals -NOPREFETCH +NOLOCALS noprefetch -NOPRUNING +NOPREFETCH nopruning -NOSYNCSERVE +NOPRUNING nosyncserve +NOSYNCSERVE Numba NVME -Offchain offchain +Offchain opchaina opchainb -OPCM opcm +OPCM Openfort oplabs opnode's outfile outperformance pcscdpath -Pectra pectra +Pectra Pectra's -Peerstore peerstore +Peerstore peerstores -Permissioned permissioned +Permissioned permissioning -Permissionless permissionless +Permissionless permissionlessly Perps Peta Pimlico POAP POAPs -PPROF pprof -Precommitments +PPROF precommitments +Precommitments preconfigured predeploy -Predeployed predeployed -Predeploys +Predeployed predeploys +Predeploys prefunded -Preimage preimage -PREIMAGES +Preimage preimages +PREIMAGES preinstall -Preinstalls preinstalls -Prestate +Preinstalls prestate +Prestate prestates PREVRANDAO -PRICEBUMP pricebump -PRICELIMIT +PRICEBUMP pricelimit +PRICELIMIT productionize productionized Protip Proxied -Proxyd proxyd +Proxyd Pyth Pyth's QRNG -Quicknode quicknode +Quicknode quickstarts rebalancing reemit Reemitting -Regenesis regenesis +Regenesis Reimagine -REJOURNAL rejournal -REMOTEDB +REJOURNAL remotedb +REMOTEDB Reown Reown's replayability replayor reposts reproven -REQUIREDBLOCKS requiredblocks +REQUIREDBLOCKS rollouts -Rollups rollups +Rollups Routescan rpckind -RPCPREFIX rpcprefix +RPCPREFIX rpcs RPGF -Runbooks runbooks +Runbooks RWAs safedb Schnorr -SEPOLIA -Sepolia sepolia +Sepolia +SEPOLIA seqnr -SEQUENCERHTTP sequencerhttp +SEQUENCERHTTP serv signup SLLV @@ -376,16 +376,16 @@ SLTIU SLTU smartcard snapshotlog -Snapsync snapsync +Snapsync Solana Soneium soyboy Spearbit SRAV SRLV -Stablecoins stablecoins +Stablecoins statefulset structs subcomponents @@ -394,21 +394,21 @@ subheaders subsecond SUBU Sunnyside -SUPERCHAIN -Superchain superchain +Superchain +SUPERCHAIN Superchain's superchainerc Superlend Superloans Superscan Superseed -Supersim supersim -SYNCMODE +Supersim syncmode -SYNCTARGET +SYNCMODE synctarget +SYNCTARGET syscalls SYSCON thirdweb @@ -422,8 +422,8 @@ Twei txfeecap txmgr txns -TXPOOL txpool +TXPOOL txproxy txproxyd uncensorable @@ -434,21 +434,21 @@ Unprotect unsubmitted UPNP upstreaming -VERKLE verkle -VHOSTS +VERKLE vhosts -Viem +VHOSTS viem -Viem's +Viem viem's -VMDEBUG +Viem's vmdebug -VMODULE +VMDEBUG vmodule +VMODULE xlarge XORI ZKPs ZKVM -Zora zora +Zora