Skip to content

Commit a5814a3

Browse files
Merge pull request #1615 from ethereum-optimism/New-nethermind-PR
Add Support for Nethermind on OP Docs
2 parents af32162 + 56395c1 commit a5814a3

File tree

18 files changed

+690
-366
lines changed

18 files changed

+690
-366
lines changed

components/calculator/ChainParametersForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,4 +276,4 @@ export function ChainParametersForm(): ReactElement {
276276
{!isLoading && showResult && <ResultsTable data={resultsParams} />}
277277
</div>
278278
);
279-
}
279+
}

pages/operators/node-operators/architecture.mdx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ is_imported_content: 'false'
2020

2121
# Node architecture
2222

23-
This page reviews node architecture for all nodes running on the Superchain network. All OP Mainnet nodes are composed of two core software services, the Rollup Node and the Execution Client.
23+
This page reviews node architecture for all nodes running on the Superchain network. All OP Mainnet nodes are composed of two core software services, the Rollup Node and the Execution Client.
2424
OP Mainnet also optionally supports a third component, Legacy Geth, that can serve stateful queries for blocks and transactions created before the [Bedrock Upgrade](https://web.archive.org/web/20230608050602/https://blog.oplabs.co/introducing-optimism-bedrock/).
2525

2626
## Node flow diagram
2727
The following diagram shows how the Rollup Node, Execution Client, and Legacy Geth components work together to form a complete node running on the Superchain network.
28-
This diagram uses the `op-node` and `op-geth` implementations of the Rollup Node and Execution Client respectively, but the same architecture generally applies to other implementations as well.
28+
This diagram uses the `op-node` implementation of the Rollup Node and shows the general architecture that applies to all execution client implementations.
2929

3030
![OP Mainnet node architecture diagram.](/img/guides/node-operators/node-arch.svg)
3131

@@ -39,6 +39,16 @@ The Execution Client is responsible for executing the block payloads it receives
3939
The Execution Client exposes the standard JSON-RPC API that Ethereum developers are familiar with, and can be used to query blockchain data and submit transactions to the network.
4040
The Execution Client is largely analogous to an [execution client](https://ethereum.org/en/developers/docs/nodes-and-clients/#what-are-nodes-and-clients) in Ethereum.
4141

42+
The OP Stack supports multiple execution client implementations:
43+
44+
### op-geth
45+
46+
`op-geth` is the original execution client for the OP Stack, based on the Go Ethereum (Geth) implementation. It has been modified to support the specific requirements of OP Stack chains.
47+
48+
### Nethermind
49+
50+
Nethermind is a high-performance execution client implementation written in C#. The `Nethermind` client has been adapted to support OP Stack chains, providing an alternative execution client option for node operators.
51+
4252
## Legacy Geth
4353

4454
OP Mainnet underwent a large database migration as part of the [Bedrock Upgrade](https://web.archive.org/web/20230608050602/https://blog.oplabs.co/introducing-optimism-bedrock/) in 2023.
@@ -51,6 +61,6 @@ Legacy Geth is **not** required and is typically only necessary if you want to m
5161

5262
## Next steps
5363

54-
* To get your node up and running, start with the [run a node from docker](/operators/node-operators/tutorials/node-from-docker) or [build a node from source](/operators/node-operators/tutorials/node-from-source) tutorial.
64+
* To get your node up and running, start with the [run a node from docker](/operators/node-operators/tutorials/node-from-docker) or [build a node from source](/operators/node-operators/tutorials/node-from-source) tutorial. These guides include instructions for both `op-geth` and `Nethermind` execution clients.
5565
* If you've already got your node up and running, check out the [Node Metrics and Monitoring Guide](./management/metrics) to learn how to keep tabs on your node and make sure it keeps running smoothly.
5666
* If you run into any problems, please visit the [Node Troubleshooting Guide](./management/troubleshooting) for help.

pages/operators/node-operators/configuration.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,5 @@ This section provides information on node base configuration, consensus layer co
3131

3232
<Card title="Consensus layer configuration options (op Node)" href="/operators/node-operators/configuration/consensus-config" />
3333

34-
<Card title="Execution layer configuration options (op Geth)" href="/operators/node-operators/configuration/execution-config" />
34+
<Card title="Execution layer configuration options" href="/operators/node-operators/configuration/execution-config" />
3535
</Cards>

pages/operators/node-operators/configuration/base-config.mdx

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Node base configuration
33
lang: en-US
4-
description: Learn the node base configuration and recommended flags for op-node, op-geth, and legacy geth.
4+
description: Learn the node base configuration and recommended flags for `op-node`, `op-geth`, and legacy geth.
55
content_type: guide
66
topic: node-base-configuration
77
personas:
@@ -16,22 +16,26 @@ categories:
1616
is_imported_content: 'false'
1717
---
1818

19-
import { Callout } from 'nextra/components'
19+
import { Callout, Tabs } from 'nextra/components'
2020

2121
# Node base configuration
2222

2323
<Callout type="warning">
24-
Always run `op-node` and `op-geth` in a one-to-one configuration. Don't run multiple `op-geth` instances behind one `op-node`, or vice versa.
24+
Always run `op-node` and your execution client (`op-geth` or `nethermind`) in a one-to-one configuration. Don't run multiple execution client instances behind one `op-node`, or vice versa.
2525
</Callout>
2626

2727
To configure your node, you will need to do the following:
2828

29-
1. Configure `op-node` to point to the correct L1, `op-geth`, and L2 network.
30-
2. Initialize `op-geth` with the correct network parameters.
31-
3. Configure `op-geth` to properly communicate with the Rollup Node.
29+
1. Configure `op-node` to point to the correct L1, execution client, and L2 network.
30+
2. Initialize your execution client (`op-geth` or `nethermind`) with the correct network parameters.
31+
3. Configure your execution client to properly communicate with the Rollup Node.
3232
4. Optionally, configure Legacy Geth.
3333

34-
## Configuring `op-geth`
34+
## Configuring Your execution client
35+
36+
You can choose between two execution clients for your OP Stack rollup node: `op-geth` or `nethermind`. Each has its own configuration requirements and recommended settings.
37+
38+
### Configuring `op-geth`
3539

3640
<Callout type="info">
3741
Although the Docker image for the Execution Engine is called `op-geth`, the actual binary is still called `geth` in order to minimize differences between `op-geth` and `go-ethereum`. You can see the difference [here](https://op-geth.optimism.io/?utm_source=op-docs&utm_medium=docs).
@@ -146,6 +150,22 @@ geth \
146150
147151
Consult [Geth's documentation](https://geth.ethereum.org/docs/) for more information on customizing `op-geth`'s behavior.
148152
153+
### Configuring `nethermind`
154+
155+
Nethermind is an alternative execution client for OP Stack rollup nodes. It provides high performance and reliability while maintaining compatibility with the OP Stack protocol.
156+
157+
#### Working base configuration for Nethermind
158+
159+
To run `Nethermind` on the OP Mainnet, use the following command:
160+
161+
```bash
162+
nethermind \
163+
-c op-mainnet \
164+
--data-dir path/to/data/dir \
165+
--jsonrpc-jwtsecretfile path/to/jwt.hex
166+
```
167+
Consult [`Nethermind`'s documentation](https://docs.nethermind.io/fundamentals/configuration) for more detailed configuration options.
168+
149169
## Configuring `op-node`
150170
151171
`op-node` is a standalone, statically linked binary. It stores no state, and requires no initialization. It consumes configuration parameters either via the command line or environment variables. For some networks, the Rollup Node also requires a configuration file (called `rollup.json` or the "rollup config") that configures network-specific genesis parameters. For official networks like OP Sepolia and OP Mainnet, the genesis config is hardcoded in the `op-node` software and can be specified via a `--network` flag.
@@ -163,6 +183,8 @@ from a Beacon node.
163183
164184
A minimal valid configuration that runs `op-node` looks like:
165185
186+
<Tabs items={['op-geth', 'Nethermind']}>
187+
<Tabs.Tab>
166188
```bash
167189
op-node --l1=<ethereum mainnet RPC url> \
168190
--l2=<op-geth authenticated RPC url> \
@@ -174,6 +196,21 @@ op-node --l1=<ethereum mainnet RPC url> \
174196
--syncmode=execution-layer \
175197
--l2.enginekind=geth
176198
```
199+
</Tabs.Tab>
200+
<Tabs.Tab>
201+
```bash
202+
op-node --l1=<ethereum mainnet RPC url> \
203+
--l2=<nethermind authenticated RPC url> \
204+
--network=op-mainnet \
205+
--rpc.addr=127.0.0.1 \
206+
--rpc.port=9545 \
207+
--l2.jwt-secret=<path to JWT secret> \
208+
--l1.beacon=<http endpoint address of L1 Beacon-node> \
209+
--syncmode=execution-layer \
210+
--l2.enginekind=nethermind
211+
```
212+
</Tabs.Tab>
213+
</Tabs>
177214
178215
You can manually specify a path to a rollup config with the `--rollup.config` flag. This is used for testnets or internal deployments that are not migrated from a legacy network.
179216
@@ -229,6 +266,6 @@ The term *historical execution* refers to RPC methods that need to execute trans
229266
If you do not need these RPC methods for historical data, then you do not need to run Legacy Geth at all.
230267
231268
## Next steps
232-
* See the [op-node configuration](/operators/node-operators/configuration/consensus-config) guide for additional configuration options for `op-node` and the Consensus-Layer.
233-
* Similarly, visit the [op-geth configuration](/operators/node-operators/configuration/execution-config) guide for additional configuration options for `op-geth` and Execution-Layer.
269+
* See the [`op-node` configuration](/operators/node-operators/configuration/consensus-config) guide for additional configuration options for `op-node` and the Consensus-Layer.
270+
* For execution client configuration, visit [execution client configuration](/operators/node-operators/configuration/execution-config) for additional options when using `op-geth` or `nethermind`
234271
* If you run into any problems, please reach out to our [developer support forum](https://github.com/ethereum-optimism/developers/discussions) for help.

pages/operators/node-operators/configuration/consensus-config.mdx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Consensus layer configuration options (op-node)
33
lang: en-US
4-
description: Learn additional configuration and command line options for op-node and the Consensus-Layer.
4+
description: Learn additional configuration and command line options for `op-node` and the Consensus-Layer.
55
content_type: reference
66
topic: consensus-layer-configuration
77
personas:
@@ -20,7 +20,7 @@ is_imported_content: 'false'
2020
import { Callout } from 'nextra/components'
2121
import { Tabs } from 'nextra/components'
2222

23-
# Consensus layer configuration options (op-node)
23+
# Consensus layer configuration options (`op-node`)
2424

2525
<Callout type="info">
2626
You can configure your node using the command line options below (also called flags).
@@ -94,7 +94,7 @@ If true, all sidecars are fetched and filtered locally. Workaround for buggy Bea
9494

9595
### l1.beacon.ignore
9696

97-
When false, halts op-node startup if the healthcheck to the Beacon-node endpoint fails. The default value is `false`.
97+
When false, halts `op-node` startup if the healthcheck to the Beacon-node endpoint fails. The default value is `false`.
9898

9999
<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
100100
<Tabs.Tab>`--l1.beacon.ignore=<boolean>`</Tabs.Tab>
@@ -154,7 +154,7 @@ Optional self-imposed global rate-limit on L1 RPC requests, specified in request
154154

155155
### l1.rpckind
156156

157-
The kind of RPC provider, used to inform optimal transactions receipts fetching, and thus reduce costs. Valid options: alchemy, quicknode, infura, parity, nethermind, debug\_geth, erigon, basic, any, standard. The default value is `standard`.
157+
The kind of RPC provider, used to inform optimal transactions receipts fetching, and thus reduce costs. Valid options: alchemy, quicknode, infura, parity, `nethermind`, debug\_geth, erigon, basic, any, standard. The default value is `standard`.
158158

159159
<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
160160
<Tabs.Tab>`--l1.rpckind=<value>`</Tabs.Tab>
@@ -277,7 +277,7 @@ are as follows:
277277
low-level system operations. This level generates a large amount of log data and is
278278
typically used only for in-depth troubleshooting.
279279

280-
To set the log level, use the `--log.level` flag when running the op-node command. For
280+
To set the log level, use the `--log.level` flag when running the `op-node` command. For
281281
example, to set the log level to debug:
282282

283283
```bash

pages/operators/node-operators/json-rpc.mdx

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,10 +1004,24 @@ Sample success output:
10041004
todo: add Sample success output
10051005
```
10061006

1007-
## op-geth
1007+
## Execution clients
10081008

1009+
The OP Stack supports multiple execution client implementations. Each client implements the execution layer with minimal changes for a secure Ethereum-equivalent application environment.
10091010

1010-
`op-geth` implements the Execution-Layer, with minimal changes for a secure Ethereum-equivalent application environment.
1011+
<Tabs items={['op-geth', 'Nethermind']}>
1012+
<Tabs.Tab>
1013+
### op-geth
1014+
1015+
`op-geth` is the original execution client for the OP Stack, based on the Go Ethereum (Geth) implementation.
1016+
1017+
The execution engine's RPC interface is identical to [the upstream Geth RPC interface](https://geth.ethereum.org/docs/interacting-with-geth/rpc). The responses are nearly identical too, except we also include the L1 gas usage and price information.
1018+
</Tabs.Tab>
1019+
<Tabs.Tab>
1020+
### Nethermind
10111021

1012-
The execution engine's RPC interface is identical to [the upstream Geth RPC interface](https://geth.ethereum.org/docs/interacting-with-geth/rpc). The responses are nearly identical too, except we also include the L1 gas usage and price information.
1022+
`Nethermind` is a high-performance execution client implementation written in C#. The `Nethermind` client has been adapted to support OP Stack chains, providing an alternative execution client option for node operators.
1023+
1024+
The execution engine's RPC interface is identical to [the upstream `Nethermind` RPC interface](https://docs.nethermind.io/interacting/json-rpc-server/). The responses are nearly identical too, except we also include the L1 gas usage and price information.
1025+
</Tabs.Tab>
1026+
</Tabs>
10131027

pages/operators/node-operators/management/blobs.mdx

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,31 @@ See the [Software Releases](/operators/node-operators/releases) page for the min
4141
### Configure the Ecotone activation date
4242

4343
* If you are operating a node for an OP Chain that has an entry in the [`superchain-registry`](https://github.com/ethereum-optimism/superchain-registry/blob/main/chainList.json),
44-
the Ecotone activation date is part of the `op-node` and `op-geth` nodes. So,
45-
no action is needed for the sequencer after upgrading to the latest release.
46-
* For node operators of custom chains not included in the [`superchain-registry`](https://github.com/ethereum-optimism/superchain-registry/blob/main/chainList.json),
47-
the activation dates can be set in the `rollup.json` (set `ecotone_time`) or
48-
set the activation time via overrides (CLI) in both `op-node` and `op-geth`.
49-
These will need to be set on `op-node` and `op-geth` for the sequencer and all other nodes.
44+
the Ecotone activation date is handled automatically by both execution clients:
45+
46+
<Tabs items={['op-geth', 'Nethermind']}>
47+
<Tabs.Tab>
48+
The activation date is part of the node configuration. No action needed after upgrading to the latest release.
49+
</Tabs.Tab>
50+
<Tabs.Tab>
51+
The activation date is included in the built-in chain configuration. No action needed after upgrading to the latest release.
52+
</Tabs.Tab>
53+
</Tabs>
54+
55+
* For node operators of custom chains not included in the [`superchain-registry`](https://github.com/ethereum-optimism/superchain-registry/blob/main/chainList.json):
56+
57+
<Tabs items={['op-geth', 'Nethermind']}>
58+
<Tabs.Tab>
59+
Set the activation time in `rollup.json` (`ecotone_time`) and via CLI overrides
60+
</Tabs.Tab>
61+
<Tabs.Tab>
62+
Use the chain configuration examples in `src/Nethermind/Chains` as templates for your custom chain configuration
63+
</Tabs.Tab>
64+
</Tabs>
5065

5166
<Callout type="warning">
52-
Even if the ecotone activation is configured via the `rollup.json`, it still
53-
needs to be configured separately on `op-geth` via command line flag.
67+
When using `op-geth`, even if the ecotone activation is configured via the `rollup.json`, it still
68+
needs to be configured separately via command line flag.
5469
</Callout>
5570

5671
<Tabs items={['op-node', 'op-geth']}>

0 commit comments

Comments
 (0)