Skip to content

Managing the proposer address #1573

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions pages/operators/chain-operators/tutorials.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ This section provides information on adding attributes to the derivation functio

<Card title="Running a Local Development Environment" href="/operators/chain-operators/tutorials/chain-dev-net" />

<Card title="Managing the proposer address" href="/operators/chain-operators/tutorials/proposer-address" />

<Card title="Integrating a new da layer with alt Da" href="/operators/chain-operators/tutorials/integrating-da-layer" />

<Card title="Modifying predeployed contracts" href="/operators/chain-operators/tutorials/modifying-predeploys" />
Expand Down
1 change: 1 addition & 0 deletions pages/operators/chain-operators/tutorials/_meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
86 changes: 86 additions & 0 deletions pages/operators/chain-operators/tutorials/proposer-address.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
---
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 for chains using permissioned fault proofs.
The proposer is responsible for submitting L2 outputs to L1, which is a critical component of the OP Stack.
You will need access to the [L1ProxyAdmin](/superchain/privileged-roles#l1-proxy-admin) account, before you begin.

## Overview

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.

2. **Prepare the new implementation**

You'll need to deploy a new implementation of the `PermissionedDisputeGame.sol` contract with the updated proposer address.

```solidity
// The PermissionedDisputeGame contract defines the proposer
// https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/dispute/PermissionedDisputeGame.sol
```

TODO: Add specific details on preparing the new implementation contract with the updated proposer address.
Confirm with Zak if a completely new contract deployment is needed or if there's another method.

3. **Update the implementation in the DisputeGameFactory**

Using the L1ProxyAdmin account, call the `setImplementation()` function in the `DisputeGameFactory.sol` contract:

```solidity
// DisputeGameFactory.sol
function setImplementation(GameType _gameType, address _impl) external;
```

Parameters:

* `_gameType`: Use `1` for fault proof games as defined in `Types.sol`
* `_impl`: The address of your new implementation with the updated proposer

TODO: Are there additional parameters or considerations needed when calling this function?

4. **Verify the update**

After updating the implementation, verify that the change was successful by:

TODO: Add specific verification steps - how to check that the proposer has been properly updated.

## Important considerations

* 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.

## 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.

* [Proposer Configuration](/operators/chain-operators/configuration/proposer)

* [Dispute Game Factory Contract](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol)

* [Permissioned Dispute Game Contract](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/dispute/PermissionedDisputeGame.sol)

* [Protocol Configurability Specifications](https://specs.optimism.io/protocol/configurability.html#proposer-address)
Loading