# Installing Networks

The Obol Stack supports installing multiple blockchain networks on your local Kubernetes cluster. Each network installation creates a unique deployment with its own namespace, allowing you to run multiple instances simultaneously.

## Available networks

View all available networks:

```shell
obol network list
```

Currently supported networks:

| Network      | Description                                        |
| ------------ | -------------------------------------------------- |
| **ethereum** | Full Ethereum node (execution + consensus clients) |
| **aztec**    | Aztec Layer 2 sequencer node                       |

## Network installation workflow

Installing a network follows a two-step process:

1. **Install** - Generate configuration and save to disk
2. **Sync** - Deploy the configuration to the cluster

This separation allows you to review and modify configuration before deployment.

### Install command

```shell
obol network install <network> [flags]
```

This creates a deployment directory at `~/.config/obol/networks/<network>/<id>/` containing:

* `values.yaml` - Configuration values (editable)
* `helmfile.yaml` - Deployment definition

### Sync command

```shell
# Auto-selects if only one deployment exists
obol network sync

# By type (auto-selects if only one ethereum deployment)
obol network sync ethereum

# By full identifier
obol network sync <network>/<id>

# Sync all deployments at once
obol network sync --all
```

This deploys the configuration to your Kubernetes cluster using Helmfile.

### Delete command

```shell
# Auto-selects if only one deployment exists
obol network delete

# By type (auto-selects if only one of that type)
obol network delete ethereum

# By full identifier
obol network delete <network>/<id>
```

This removes both the Kubernetes resources and local configuration.

## Ethereum network

Deploy a full Ethereum node with configurable execution and consensus clients.

### Configuration options

| Flag                 | Description            | Options                                             | Default                                     |
| -------------------- | ---------------------- | --------------------------------------------------- | ------------------------------------------- |
| `--id`               | Deployment identifier  | Any string                                          | Network name (e.g. `mainnet`), then petname |
| `--network`          | Ethereum network       | mainnet, sepolia, hoodi                             | mainnet                                     |
| `--execution-client` | Execution layer client | reth, geth, nethermind, besu, erigon, ethereumjs    | reth                                        |
| `--consensus-client` | Consensus layer client | lighthouse, prysm, teku, nimbus, lodestar, grandine | lighthouse                                  |

### Examples

{% tabs %}
{% tab title="Hoodi testnet" %}
Deploy an Ethereum node on Hoodi testnet with default clients:

```shell
# Install configuration (ID defaults to "hoodi")
obol network install ethereum --network=hoodi

# Deploy to cluster
obol network sync ethereum/hoodi
```

{% endtab %}

{% tab title="Mainnet with specific clients" %}
Deploy a mainnet node with Geth and Prysm:

```shell
obol network install ethereum \
  --id=mainnet-prod \
  --network=mainnet \
  --execution-client=geth \
  --consensus-client=prysm

obol network sync ethereum/mainnet-prod
```

{% endtab %}

{% tab title="Multiple deployments" %}
Run mainnet and testnet nodes simultaneously:

```shell
obol network install ethereum --network=mainnet
obol network install ethereum --network=hoodi

obol network sync ethereum/mainnet
obol network sync ethereum/hoodi
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
Full Ethereum nodes require significant resources. Mainnet execution clients need 1+ TB of storage and can take days to sync. Consider using testnets for development.
{% endhint %}

### Check sync status

```shell
# View pod status
obol kubectl get pods -n ethereum-<id>

# Check execution client logs
obol kubectl logs -n ethereum-<id> -l app=execution -f

# Check consensus client logs
obol kubectl logs -n ethereum-<id> -l app=consensus -f
```

## Aztec network

Deploy an Aztec Layer 2 sequencer node for the privacy-focused Ethereum rollup.

### Configuration options

| Flag                     | Description                | Options    | Default                                     |
| ------------------------ | -------------------------- | ---------- | ------------------------------------------- |
| `--id`                   | Deployment identifier      | Any string | Network name (e.g. `mainnet`), then petname |
| `--network`              | Aztec network              | mainnet    | mainnet                                     |
| `--attester-private-key` | Attester private key (hex) | Required   | None                                        |
| `--l1-execution-url`     | L1 execution RPC URL       | URL        | ERPC endpoint                               |
| `--l1-consensus-url`     | L1 consensus RPC URL       | URL        | Public endpoint                             |

### Example

```shell
obol network install aztec \
  --attester-private-key=<YOUR_PRIVATE_KEY> \
  --l1-execution-url=https://geth-prysm-mainnet-1.gcp.obol.tech/ \
  --l1-consensus-url=https://prysm-geth-mainnet-1.gcp.obol.tech/
```

Deploy to the cluster:

```shell
obol network sync aztec/<id>
```

{% hint style="info" %}
You can use your own Ethereum node endpoints or the in-cluster ERPC endpoint by changing the L1 URL flags.
{% endhint %}

### Resource requirements

| Resource    | Request | Limit   |
| ----------- | ------- | ------- |
| **CPU**     | 4 cores | 8 cores |
| **Memory**  | 16 GB   | 32 GB   |
| **Storage** | 1 TB    | -       |

{% hint style="warning" %}
Ensure your machine has sufficient resources before deploying an Aztec node.
{% endhint %}

## Managing deployments

### View deployment status

```shell
obol kubectl get namespaces | grep -E "ethereum|aztec"
```

### Modify configuration

```shell
$EDITOR ~/.config/obol/networks/<network>/<id>/values.yaml

# Re-deploy (auto-selects if only one deployment, otherwise specify)
obol network sync <network>/<id>
```

### Delete a deployment

```shell
# Auto-selects if only one deployment exists
obol network delete

# Or specify explicitly
obol network delete <network>/<id>
```

{% hint style="warning" %}
Deletion is permanent. All blockchain data stored in the deployment will be lost.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.obol.org/obol-stack/installing-networks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
