diff --git a/pages/operators/chain-operators/deploy.mdx b/pages/operators/chain-operators/deploy.mdx
index 0f8eb1de4..a707b873d 100644
--- a/pages/operators/chain-operators/deploy.mdx
+++ b/pages/operators/chain-operators/deploy.mdx
@@ -30,10 +30,11 @@ 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 ec4a2cbbf..0a9c15516 100644
--- a/pages/operators/chain-operators/deploy/_meta.json
+++ b/pages/operators/chain-operators/deploy/_meta.json
@@ -3,6 +3,7 @@
"smart-contracts": "Smart contract deployment",
"genesis": "Chain artifacts creation",
"validate-deployment": "Validate your contract deployment",
- "sequencer-node": "Spinning up the sequencer"
+ "sequencer-node": "Spinning up the sequencer",
+ "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
new file mode 100644
index 000000000..734d9771a
--- /dev/null
+++ b/pages/operators/chain-operators/deploy/proposer-setup-guide.mdx
@@ -0,0 +1,265 @@
+---
+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
+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'
+
+# Spinning up the proposer
+
+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](/operators/chain-operators/deploy/sequencer-node) first.
+
+To see configuration info for the proposer, check out the [configuration page](/operators/chain-operators/configuration/proposer).
+
+## 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 withdrawals
+
+The proposer creates dispute games via the `DisputeGameFactory` contract.
+
+## Prerequisites
+
+Before setting up your proposer, ensure you have:
+
+**Running infrastructure:**
+
+* An operational sequencer node
+* Access to a L1 RPC endpoint
+
+**Network information:**
+
+* Your L2 chain ID and network configuration
+* L1 network details (chain ID, RPC endpoints)
+
+## 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
+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](/operators/chain-operators/deploy/sequencer-node).
+ 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
+```
+
+## Configuration setup
+
+### 1. Organize your workspace
+
+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
+mkdir proposer-node
+cd proposer-node
+
+# Create scripts directory
+mkdir scripts
+```
+
+### 2. Extract DisputeGameFactory address
+
+Extract the `DisputeGameFactory` contract address from your op-deployer output:
+
+```bash
+# Navigate to proposer directory
+cd proposer-node
+
+# 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 .
+
+# Extract the DisputeGameFactory address
+GAME_FACTORY_ADDRESS=$(cat state.json | jq -r '.opChainDeployments[0].disputeGameFactoryProxyAddress')
+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:
+
+```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
+
+# L2 Configuration - Should match your sequencer setup
+L2_RPC_URL=http://localhost:8545
+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 private key
+PRIVATE_KEY=0xYOUR_ACTUAL_PRIVATE_KEY
+
+# Proposer configuration
+PROPOSAL_INTERVAL=3600s
+GAME_TYPE=0
+POLL_INTERVAL=20s
+
+# RPC configuration
+PROPOSER_RPC_PORT=8560
+```
+
+**Important**: Replace ALL placeholder values (`YOUR_ACTUAL_*`) with your real configuration values!
+
+### 4. Get your private key
+
+Get a private key from your wallet.
+
+## Proposer configuration
+
+Create `scripts/start-proposer.sh`:
+
+```bash
+#!/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=$PRIVATE_KEY \
+ --game-factory-address=$GAME_FACTORY_ADDRESS \
+ --game-type=$GAME_TYPE \
+ --proposal-interval=$PROPOSAL_INTERVAL \
+ --num-confirmations=1 \
+ --resubmission-timeout=30s \
+ --wait-node-sync=true \
+ --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
+
+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
+
+# 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
+
+Verify your proposer is working correctly:
+
+### Check proposer status
+
+```bash
+
+# Monitor proposal activity
+curl -X POST -H "Content-Type: application/json" \
+ --data '{"jsonrpc":"2.0","method":"optimism_outputAtBlock","params":["latest"],"id":1}' \
+ http://localhost:8547
+
+# 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!
+
+## 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).
diff --git a/pages/operators/chain-operators/tutorials/absolute-prestate.mdx b/pages/operators/chain-operators/tutorials/absolute-prestate.mdx
index 757e50041..6e1d988f0 100644
--- a/pages/operators/chain-operators/tutorials/absolute-prestate.mdx
+++ b/pages/operators/chain-operators/tutorials/absolute-prestate.mdx
@@ -277,6 +277,6 @@ 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)
+* 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)
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..e22ebcf62 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).
+* 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).
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