diff --git a/pages/operators/chain-operators/tutorials.mdx b/pages/operators/chain-operators/tutorials.mdx index c8aafa822..eb74f228b 100644 --- a/pages/operators/chain-operators/tutorials.mdx +++ b/pages/operators/chain-operators/tutorials.mdx @@ -36,6 +36,8 @@ 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 b09812685..31f9e8612 100644 --- a/pages/operators/chain-operators/tutorials/_meta.json +++ b/pages/operators/chain-operators/tutorials/_meta.json @@ -4,5 +4,6 @@ "adding-precompiles": "Adding a precompile", "modifying-predeploys": "Modifying predeployed contracts", "integrating-da-layer": "Integrating a new DA layer", + "proposer-address": "Managing the proposer address", "chain-dev-net": "Running a local network environment" } \ No newline at end of file diff --git a/pages/operators/chain-operators/tutorials/proposer-address.mdx b/pages/operators/chain-operators/tutorials/proposer-address.mdx new file mode 100644 index 000000000..909733c3d --- /dev/null +++ b/pages/operators/chain-operators/tutorials/proposer-address.mdx @@ -0,0 +1,79 @@ +--- +title: Managing the proposer address +lang: en-US +description: Learn how to update the proposer address for chains using permissioned fault proofs. +content_type: tutorial +topic: proposer-management +personas: + - chain-operator + - protocol-developer +categories: + - chain-operation + - chain-management + - proxy + - fault-proofs +is_imported_content: 'false' +--- + +# Managing the proposer address + +This guide explains how to update the proposer address, within the dispute game smart contracts, for chains using permissioned fault proofs. +The [proposer](https://docs.optimism.io/operators/chain-operators/architecture#permissioned-components) is responsible for submitting L2 outputs to L1, which is a critical component of the OP Stack. +You will need the [L1ProxyAdmin](/superchain/privileged-roles#l1-proxy-admin) account, before you begin. + +The proposer role is defined in the [`PermissionedDisputeGame.sol`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/dispute/PermissionedDisputeGame.sol) contract for chains running permissioned fault proofs. +When you need to change the proposer address, you must update the implementation for `gametype 1` in the `DisputeGameFactory.sol` contract. + +## Steps to update the proposer address + +1. **Identify the current configuration** + + First, confirm that your chain is using permissioned fault proofs by checking the `DisputeGameFactory` contract on your L1. You can verify the current implementation by querying the `gameImpls` mapping with the permissioned cannon game type. This will return the current implementation contract for permissioned fault proof games. + + See the [DisputeGameFactory contract](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol) for the `gameImpls` function details. + +2. **Prepare the new implementation** + + You'll need to deploy a new implementation of the `PermissionedDisputeGame.sol` contract with the updated proposer address. When deploying: + + * The constructor requires multiple parameters including the _new_ proposer address + * Use the same parameters as your existing implementation, except for the new proposer address + * Ensure all inherited contracts are properly initialized + * Test deployment on a testnet first + + For constructor parameters, refer to the [PermissionedDisputeGame contract](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/dispute/PermissionedDisputeGame.sol). + +3. **Update the implementation in the DisputeGameFactory** + + Using the L1ProxyAdmin account, call the `setImplementation()` function to update the permissioned game type: + + * `_gameType`: Use `GameType.PERMISSIONED_CANNON` (value: 1) for permissioned fault proof games + * `_impl`: The address of your new implementation with the updated proposer + + Only the owner of the DisputeGameFactory contract (typically the ProxyAdmin) can call this function. See the [DisputeGameFactory contract source](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol) for the function signature. + +4. **Verify the update** + + After updating the implementation, verify the change was successful by: + + a. Checking the implementation address is updated in the `gameImpls` mapping + + b. Creating a new dispute game to confirm the proposer address: + + b. Creating a new dispute game to confirm the proposer address: + 1. Call `create()` on the DisputeGameFactory with the permissioned cannon game type. + 2. Query the `PROPOSER()` function on the newly created game. + 3. Verify it matches the new address. + +* This operation should be planned carefully as the proposer is a critical component of your rollup. +* Ensure the new proposer address is valid and properly controlled before making the change. +* Consider testing the procedure on a testnet before applying to production environments. +* The `L1ProxyAdmin` is a highly privileged role - ensure proper access controls are in place. +* All existing dispute games will continue to use the old proposer address, but newly created games will use the updated proposer. +* The proposer must have sufficient ETH balance to post bonds and pay for gas when creating new dispute games. + +## Next steps + +* After updating the proposer address, you may need to configure the new proposer node. See the [proposer configuration](/operators/chain-operators/configuration/proposer) for details. + +* Read the [protocol configurability specifications](https://specs.optimism.io/protocol/configurability.html#proposer-address) for more in-depth details. diff --git a/words.txt b/words.txt index cf0226b3c..d0793a111 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 -betanet Betanet -betanets +betanet Betanets +betanets BGEZ BGTZ Biconomy BLEZ -blobpool BLOBPOOL +blobpool blobspace Blockdaemon Blockdaemon's 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 Celestia Celestia's @@ -72,65 +72,65 @@ chaosnet Chugsplash Clabby codebases -collateralized Collateralized +collateralized compr Comprensive -computependingblock COMPUTEPENDINGBLOCK +computependingblock confs Consen corsdomain counterfactually -crosschain Crosschain +crosschain Crossmint Dapphub daserver -datacap DATACAP -datadir +datacap DATADIR -devnet +datadir 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 excercise executability exfiltrate -exitwhensynced EXITWHENSYNCED -extradata +exitwhensynced EXTRADATA +extradata Farcaster Faultproof -fdlimit FDLIMIT +fdlimit Flashblocks Flashbots forkable @@ -141,52 +141,52 @@ Fraxtal funcationality Funct gameplay -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 Isthumus JALR -journalremotes JOURNALREMOTES -jspath +journalremotes JSPATH +jspath jwtsecret Keccak leveldb @@ -194,34 +194,34 @@ lightkdf Lisk logfile logfmt -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 @@ -231,39 +231,39 @@ 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 -nodiscover NODISCOVER -nolocals +nodiscover NOLOCALS -noprefetch +nolocals NOPREFETCH -nopruning +noprefetch NOPRUNING -nosyncserve +nopruning NOSYNCSERVE +nosyncserve Numba -offchain Offchain +offchain opchaina opchainb OPCM @@ -273,96 +273,96 @@ opnode's opstack Pausability pcscdpath -pectra Pectra +pectra Pectra's -peerstore Peerstore +peerstore peerstores -permissioned Permissioned -permissionless +permissioned 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 -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 @@ -371,16 +371,16 @@ SLTIU SLTU smartcard snapshotlog -snapsync Snapsync +snapsync Solana Soneium soyboy Spearbit SRAV SRLV -stablecoins Stablecoins +stablecoins statefulset subcomponents subgame @@ -388,20 +388,20 @@ subheaders subsecond SUBU Sunnyside -superchain -Superchain SUPERCHAIN +Superchain +superchain Superchain's superchainerc Superlend Superloans Superscan -supersim Supersim -syncmode +supersim SYNCMODE -synctarget +syncmode SYNCTARGET +synctarget syscalls thirdweb threadcreate @@ -413,8 +413,8 @@ Twei txfeecap txmgr txns -txpool TXPOOL +txpool txproxy txproxyd uncensorable @@ -426,21 +426,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