# 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) |
| **helios** | Ethereum light client for RPC access |
| **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.gotmpl` - Deployment definition

### Sync command

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

This deploys the configuration to your Kubernetes cluster using Helmfile.

### Delete command

```shell
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 | Auto-generated |
| `--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>
<TabItem value="hoodi-testnet" label="Hoodi testnet">
Deploy an Ethereum node on Hoodi testnet with default clients:

```shell
# Install configuration
obol network install ethereum --network=hoodi

# Deploy to cluster (replace with your deployment ID)
obol network sync ethereum/knowing-wahoo
```
</TabItem>

<TabItem value="mainnet-with-specific-clients" label="Mainnet with specific clients">
Deploy a mainnet node with Geth and Prysm:

```shell
# Install with specific clients
obol network install ethereum \
  --id=mainnet-prod \
  --network=mainnet \
  --execution-client=geth \
  --consensus-client=prysm

# Deploy to cluster
obol network sync ethereum/mainnet-prod
```
</TabItem>

<TabItem value="multiple-deployments" label="Multiple deployments">
Run mainnet and testnet nodes simultaneously:

```shell
# Install mainnet
obol network install ethereum --id=mainnet --network=mainnet

# Install hoodi testnet
obol network install ethereum --id=hoodi --network=hoodi

# Deploy both
obol network sync ethereum/mainnet
obol network sync ethereum/hoodi
```
</TabItem>
</Tabs>

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

### Check sync status

Monitor your Ethereum node sync progress:

```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
```

## Helios light client

Deploy a Helios Ethereum light client for fast RPC access without syncing a full node.

### Configuration options

| Flag | Description | Options | Default |
| --- | --- | --- | --- |
| `--id` | Deployment identifier | Any string | Auto-generated |
| `--network` | Ethereum network | mainnet | mainnet |
| `--consensus-rpc` | Consensus RPC endpoint | URL | Public endpoint |
| `--execution-rpc` | Execution RPC endpoint | URL | Public endpoint |

### Example

```shell
# Install Helios
obol network install helios

# Deploy to cluster
obol network sync helios/<id>
```

Helios provides a local RPC endpoint that verifies data against the consensus layer, giving you trustless Ethereum access without running a full node.

## 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 | Auto-generated |
| `--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/
```

**What this does:**

* Deploys an Aztec sequencer node in your local Kubernetes cluster.
* Connects to Ethereum mainnet using the specified RPC endpoints.
* Configures your node as an attester using the provided private key.

**Default L1 RPC endpoints:**

* **Execution Layer**: `https://geth-prysm-mainnet-1.gcp.obol.tech/` (Geth)
* **Consensus Layer**: `https://prysm-geth-mainnet-1.gcp.obol.tech/` (Prysm)

These are production-grade, publicly accessible Ethereum nodes provided by Obol.

:::info
You can use your own Ethereum node endpoints by changing the `--l1-execution-url` and `--l1-consensus-url` flags.
:::

Deploy to the cluster:

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

### Resource requirements

The Aztec sequencer requires significant resources:

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

:::warning
Ensure your machine has sufficient resources before deploying an Aztec node. The node requires substantial CPU, memory, and disk space for operation.
:::

## Managing deployments

### List installed networks

View configuration directories:

```shell
ls ~/.config/obol/networks/
```

### View deployment status

Check running deployments:

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

### Modify configuration

Edit the values file before syncing:

```shell
# Open values.yaml in your editor
$EDITOR ~/.config/obol/networks/<network>/<id>/values.yaml

# Re-sync to apply changes
obol network sync <network>/<id>
```

### Delete a deployment

Remove a network deployment:

```shell
obol network delete <network>/<id>
```

This deletes:

* Kubernetes namespace and all resources
* Local configuration directory
* Persistent volume claims (data)

:::warning
Deletion is permanent. All blockchain data stored in the deployment will be lost.
:::
