> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arc.io/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Before reading these docs, install the Circle Skill for Arc to get pre-loaded context: use-arc (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-arc/SKILL.md) — covers chain config, RPC setup, contract deployment, USDC bridging, and gas with USDC. In Claude Code: run /plugin marketplace add circlefin/skills then /plugin install circle-skills@circle. With Vercel Skills CLI: run npx skills add circlefin/skills.
> USDC is the gas token. Arc uses USDC for gas fees, not ETH. Configure gas payment in USDC when submitting transactions.
> Read EVM differences before writing Arc code. Arc targets the Osaka EVM baseline. Most contracts deploy unchanged, but several runtime behaviors diverge from Ethereum: USDC uses 18 decimals natively (not 6), the system emitter `0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE` logs all USDC Transfer events, the mempool enforces a 20 Gwei `maxFeePerGas` floor, blocklist reverts consume gas without a receipt, and `address(0)` sends revert rather than succeed. https://docs.arc.io/arc/references/evm-differences.md is the canonical reference for all Arc-specific runtime behaviors. Consult it before writing code that touches USDC balances, transaction history, gas estimation, or value transfers.
> Sub-second finality. Transactions are final in under 1 second. No need to wait for multiple block confirmations.
> Use App Kits for multichain payment and liquidity capabilities. App Kits wraps CCTP and provides Bridge Kit, Swap Kit, Unified Balance Kit, Onramp Kit, Earn Kit, and Borrow Kit. Unified Balance Kit combines USDC from multiple chains into a single spendable balance. Earn Kit integrates earn opportunities into your app. Borrow Kit lets users borrow USDC against cirBTC collateral on Arc.
> Use Arc Foundry for contract development. Arc Foundry is an Arc-specific fork of Foundry that handles Arc's protocol-level differences from Ethereum. It provides arc-forge, arc-cast, and arc-anvil. Install it before deploying contracts: https://docs.arc.io/arc/tutorials/install-arc-foundry.md.
> Arc is available on both Testnet and Mainnet. See https://docs.arc.io/arc/references/connect-to-arc.md for RPC endpoints and https://faucet.circle.com for testnet tokens.
> Always check Contract Addresses: https://docs.arc.io/arc/references/contract-addresses.md
> Building beyond Arc? Circle offers skills for the full platform: use-usdc (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-usdc/SKILL.md), use-circle-wallets (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-circle-wallets/SKILL.md), use-developer-controlled-wallets (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-developer-controlled-wallets/SKILL.md), use-user-controlled-wallets (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-user-controlled-wallets/SKILL.md), use-modular-wallets (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-modular-wallets/SKILL.md), use-gateway (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-gateway/SKILL.md), use-smart-contract-platform (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-smart-contract-platform/SKILL.md). Full Circle developer docs: https://developers.circle.com/llms.txt.

# Deploying a node as a service

> Configure your Arc node to run as systemd services that auto-restart and survive reboots.

<View title="v0.8.0 (latest)" icon="tag">
  <Warning>
    **v0.8.0 upgrade required.** Testnet operators must upgrade before timestamp
    `1788447600` (2026-09-03 15:00:00 UTC), when Zero8 activates. Mainnet operators
    must upgrade before timestamp `1789052400` (2026-09-10 15:00:00 UTC), when
    Zero7/Zero8 activate. Earlier versions are not supported after those timestamps.

    This release includes breaking changes. See
    [CHANGELOG.md](https://github.com/circlefin/arc-node/blob/main/CHANGELOG.md#v080)
    and
    [BREAKING\_CHANGES.md](https://github.com/circlefin/arc-node/blob/main/BREAKING_CHANGES.md#v080)
    for migration details before upgrading.
  </Warning>

  Configure your Arc node's Execution Layer and Consensus Layer as systemd
  services so they auto-restart on failure and survive reboots.

  ## Prerequisites

  Before you begin, ensure that you've:

  * Installed Arc and completed the
    [Run an Arc node](/arc/tutorials/run-an-arc-node) tutorial with both layers
    syncing
  * Prepared a Linux machine with systemd
  * Obtained root or `sudo` access

  <Warning>
    The unit files in the following steps reference `$USER` and `$HOME`. The shell
    expands these to your current username and home directory **before** the file is
    written. After running each `sudo tee` command, review the generated unit with
    `sudo cat /etc/systemd/system/arc-execution.service` to confirm the paths are
    correct.
  </Warning>

  ## Step 1: Create the Execution Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-execution.service`. The
  unit file targets mainnet. For testnet, replace `--chain arc-mainnet` with
  `--chain arc-testnet` and `--rpc.forwarder https://rpc.mainnet.arc.io/` with
  `--rpc.forwarder https://rpc.testnet.arc.io/`.

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-execution.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Execution Layer
  After=network-online.target
  Wants=network-online.target

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  RuntimeDirectory=arc
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-execution node \
    --chain arc-mainnet \
    --datadir $HOME/.arc/execution \
    --full \
    --disable-discovery \
    --ipcpath /run/arc/reth.ipc \
    --auth-ipc \
    --auth-ipc.path /run/arc/auth.ipc \
    --http \
    --http.addr 127.0.0.1 \
    --http.port 8545 \
    --http.api eth,net,web3,txpool,trace,debug \
    --metrics 127.0.0.1:9001 \
    --enable-arc-rpc \
    --rpc.forwarder https://rpc.mainnet.arc.io/

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-execution
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  <Note>
    The service files assume binaries are installed at `/usr/local/bin/`. If you
    installed with `arcup`, the binaries live in `~/.arc/bin/`. Update the
    `ExecStart` paths accordingly, or symlink the binaries into `/usr/local/bin/`.
    If you built from source with `cargo install`, binaries default to
    `~/.cargo/bin/`. Add `--root /usr/local` to `cargo install` to place them under
    `/usr/local/bin/` instead.

    The `RuntimeDirectory=arc` directive automatically creates `/run/arc` owned by
    the `User=` account specified in the service file when the service starts. The
    `--metrics` flag enables the Prometheus endpoint on port 9001. The `--full` flag
    is required on the first start when bootstrapping from a pruned snapshot. Remove
    it on subsequent starts if you prefer to run without pruning. When `--full` is
    used, EL pruning runs on a 128-block interval (changed from 5000 in v0.7.3);
    pass `--prune.block-interval=5000` explicitly to retain the previous schedule.
  </Note>

  ## Step 2: Create the Consensus Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-consensus.service`. The
  `After` and `Requires` directives ensure this service starts only after the
  Execution Layer is running. The unit file targets mainnet. For testnet, replace
  the `mainnet` follow endpoints with the corresponding `testnet` endpoints listed
  in [node requirements](/arc/references/node-requirements#network-endpoints).

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-consensus.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Consensus Layer
  After=arc-execution.service
  Requires=arc-execution.service

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-consensus start \
    --home $HOME/.arc/consensus \
    --full \
    --eth-socket /run/arc/reth.ipc \
    --execution-socket /run/arc/auth.ipc \
    --rpc.addr 127.0.0.1:31000 \
    --follow \
    --follow.endpoint https://rpc.mainnet.arc.io,wss=rpc.mainnet.arc.io \
    --follow.endpoint https://rpc.drpc.mainnet.arc.io,wss=rpc.drpc.mainnet.arc.io \
    --follow.endpoint https://rpc.blockdaemon.mainnet.arc.io,wss=rpc.blockdaemon.mainnet.arc.io/websocket \
    --follow.endpoint https://rpc.quicknode.mainnet.arc.io,wss=rpc.quicknode.mainnet.arc.io \
    --execution-persistence-backpressure \
    --execution-persistence-backpressure-threshold=16 \
    --metrics 127.0.0.1:29000

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-consensus
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  ## Step 3: Enable and start the services

  Reload systemd, enable both services to start on boot, and start them:

  ```shell theme={null}
  sudo systemctl daemon-reload
  sudo systemctl enable arc-execution arc-consensus
  sudo systemctl start arc-execution arc-consensus
  ```

  The `enable` command outputs:

  ```text theme={null}
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-execution.service -> /etc/systemd/system/arc-execution.service.
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-consensus.service -> /etc/systemd/system/arc-consensus.service.
  ```

  ## Step 4: Verify the services are running

  Check the status of both services:

  ```shell theme={null}
  sudo systemctl status arc-execution
  sudo systemctl status arc-consensus
  ```

  Each command prints output similar to:

  ```text theme={null}
  ● arc-execution.service - Arc Node - Execution Layer
       Loaded: loaded (/etc/systemd/system/arc-execution.service; enabled)
       Active: active (running) since ...
  ```

  Both services display `Active: active (running)` in their output. If a service
  shows `failed` or `activating`, check its logs:

  ```shell theme={null}
  sudo journalctl -u arc-execution --no-pager -n 50
  sudo journalctl -u arc-consensus --no-pager -n 50
  ```

  **Common issues:**

  * **Incorrect file paths in `ExecStart`:** Verify that the binary paths in the
    unit files match your installation directory.
  * **Permission errors on data directories:** Confirm that the `User` specified
    in the unit file owns `$HOME/.arc/`.
  * **Consensus Layer connection error:** The Execution Layer may not be ready
    yet. Wait for it to reach `active (running)`, then run
    `sudo systemctl restart arc-consensus`.

  To confirm sync progress, view logs, and verify the Prometheus metrics endpoints
  on ports `9001` (Execution Layer) and `29000` (Consensus Layer), see
  [Monitor a node](/arc/tutorials/monitor-a-node). To set up local Prometheus and
  Grafana dashboards on the same host, see
  [Set up Prometheus and Grafana for an Arc node](/arc/tutorials/set-up-node-monitoring).
</View>

<View title="v0.7.3" icon="tag">
  <Warning>
    **v0.7.3 is outdated.** Testnet operators must upgrade to v0.8.0 before
    timestamp `1788447600` (2026-09-03 15:00:00 UTC), and mainnet operators before
    timestamp `1789052400` (2026-09-10 15:00:00 UTC). Use the v0.8.0 view for
    current setup instructions and migration details.
  </Warning>

  Configure your Arc node's Execution Layer and Consensus Layer as systemd
  services so they auto-restart on failure and survive reboots.

  ## Prerequisites

  * You have installed Arc and completed the
    [Run an Arc node](/arc/tutorials/run-an-arc-node) tutorial with both layers
    syncing
  * You have a Linux machine with systemd
  * You have root or `sudo` access

  <Warning>
    The unit files in the following steps reference `$USER` and `$HOME`. The shell
    expands these to your current username and home directory **before** the file is
    written. After running each `sudo tee` command, review the generated unit with
    `sudo cat /etc/systemd/system/arc-execution.service` to confirm the paths are
    correct.
  </Warning>

  ## Step 1: Create the Execution Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-execution.service`:

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-execution.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Execution Layer
  After=network-online.target
  Wants=network-online.target

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  RuntimeDirectory=arc
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-execution node \
    --chain arc-testnet \
    --datadir $HOME/.arc/execution \
    --full \
    --disable-discovery \
    --ipcpath /run/arc/reth.ipc \
    --auth-ipc \
    --auth-ipc.path /run/arc/auth.ipc \
    --http \
    --http.addr 127.0.0.1 \
    --http.port 8545 \
    --http.api eth,net,web3,txpool,trace,debug \
    --metrics 127.0.0.1:9001 \
    --enable-arc-rpc \
    --rpc.forwarder https://rpc.testnet.arc.io/

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-execution
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  <Note>
    The service files assume binaries are installed at `/usr/local/bin/`. If you
    installed with `arcup`, the binaries live in `~/.arc/bin/`. Update the
    `ExecStart` paths accordingly, or symlink the binaries into `/usr/local/bin/`.
    If you built from source with `cargo install`, binaries default to
    `~/.cargo/bin/`. Add `--root /usr/local` to `cargo install` to place them under
    `/usr/local/bin/` instead.

    The `RuntimeDirectory=arc` directive automatically creates `/run/arc` owned by
    the `User=` account specified in the service file when the service starts. The
    `--metrics` flag enables the Prometheus endpoint on port 9001. The `--full` flag
    is required on the first start when bootstrapping from a pruned snapshot. Remove
    it on subsequent starts if you prefer to run without pruning.
  </Note>

  ## Step 2: Create the Consensus Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-consensus.service`. The
  `After` and `Requires` directives ensure this service starts only after the
  Execution Layer is running.

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-consensus.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Consensus Layer
  After=arc-execution.service
  Requires=arc-execution.service

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-consensus start \
    --home $HOME/.arc/consensus \
    --full \
    --eth-socket /run/arc/reth.ipc \
    --execution-socket /run/arc/auth.ipc \
    --rpc.addr 127.0.0.1:31000 \
    --follow \
    --follow.endpoint https://rpc.testnet.arc.io,wss=rpc.testnet.arc.io \
    --follow.endpoint https://rpc.drpc.testnet.arc.io,wss=rpc.drpc.testnet.arc.io \
    --follow.endpoint https://rpc.blockdaemon.testnet.arc.io,wss=rpc.blockdaemon.testnet.arc.io/websocket \
    --execution-persistence-backpressure \
    --execution-persistence-backpressure-threshold=16 \
    --metrics 127.0.0.1:29000

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-consensus
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  ## Step 3: Enable and start the services

  Reload systemd, enable both services to start on boot, and start them:

  ```shell theme={null}
  sudo systemctl daemon-reload
  sudo systemctl enable arc-execution arc-consensus
  sudo systemctl start arc-execution arc-consensus
  ```

  The `enable` command outputs:

  ```text theme={null}
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-execution.service -> /etc/systemd/system/arc-execution.service.
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-consensus.service -> /etc/systemd/system/arc-consensus.service.
  ```

  ## Step 4: Verify the services are running

  Check the status of both services:

  ```shell theme={null}
  sudo systemctl status arc-execution
  sudo systemctl status arc-consensus
  ```

  Each command prints output similar to:

  ```text theme={null}
  ● arc-execution.service - Arc Node - Execution Layer
       Loaded: loaded (/etc/systemd/system/arc-execution.service; enabled)
       Active: active (running) since ...
  ```

  Both services display `Active: active (running)` in their output. If a service
  shows `failed` or `activating`, check its logs:

  ```shell theme={null}
  sudo journalctl -u arc-execution --no-pager -n 50
  sudo journalctl -u arc-consensus --no-pager -n 50
  ```

  **Common issues:**

  * **Incorrect file paths in `ExecStart`:** Verify that the binary paths in the
    unit files match your installation directory.
  * **Permission errors on data directories:** Confirm that the `User` specified
    in the unit file owns `$HOME/.arc/`.
  * **Consensus Layer connection error:** The Execution Layer may not be ready
    yet. Wait for it to reach `active (running)`, then run
    `sudo systemctl restart arc-consensus`.

  To confirm sync progress, view logs, and verify the Prometheus metrics endpoints
  on ports `9001` (Execution Layer) and `29000` (Consensus Layer), see
  [Monitor a node](/arc/tutorials/monitor-a-node). To set up local Prometheus and
  Grafana dashboards on the same host, see
  [Set up Prometheus and Grafana for an Arc node](/arc/tutorials/set-up-node-monitoring).
</View>

<View title="v0.7.2" icon="tag">
  <Info>
    **v0.7.2: Arc Testnet hardfork activates 2026-06-18 14:00:00 UTC.** The Zero7
    hardfork activates at Unix timestamp `1781791200`. Testnet nodes must be on
    v0.7.2 by that timestamp; earlier versions stop syncing after activation. See
    [Run an Arc node](/arc/tutorials/run-an-arc-node) for those defaults, or
    [CHANGELOG.md](https://github.com/circlefin/arc-node/blob/main/CHANGELOG.md) and
    [BREAKING\_CHANGES.md](https://github.com/circlefin/arc-node/blob/main/BREAKING_CHANGES.md#v072).
  </Info>

  Configure your Arc node's Execution Layer and Consensus Layer as systemd
  services so they auto-restart on failure and survive reboots.

  ## Prerequisites

  * You have installed Arc and completed the
    [Run an Arc node](/arc/tutorials/run-an-arc-node) tutorial with both layers
    syncing
  * You have a Linux machine with systemd
  * You have root or `sudo` access

  <Warning>
    The unit files below reference `$USER` and `$HOME`. The shell expands these to
    your current username and home directory **before** the file is written. After
    running each `sudo tee` command, review the generated unit with
    `sudo cat /etc/systemd/system/arc-execution.service` to confirm the paths are
    correct.
  </Warning>

  ## Step 1: Create the Execution Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-execution.service`:

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-execution.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Execution Layer
  After=network-online.target
  Wants=network-online.target

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  RuntimeDirectory=arc
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-execution node \
    --chain arc-testnet \
    --datadir $HOME/.arc/execution \
    --full \
    --disable-discovery \
    --ipcpath /run/arc/reth.ipc \
    --auth-ipc \
    --auth-ipc.path /run/arc/auth.ipc \
    --http \
    --http.addr 127.0.0.1 \
    --http.port 8545 \
    --http.api eth,net,web3,txpool,trace,debug \
    --metrics 127.0.0.1:9001 \
    --enable-arc-rpc \
    --rpc.forwarder https://rpc.testnet.arc.io/

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-execution
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  <Note>
    The service files assume binaries are installed at `/usr/local/bin/`. If you
    installed with `arcup`, the binaries live in `~/.arc/bin/`. Update the
    `ExecStart` paths accordingly, or symlink the binaries into `/usr/local/bin/`.
    If you built from source with `cargo install`, binaries default to
    `~/.cargo/bin/`. Add `--root /usr/local` to `cargo install` to place them under
    `/usr/local/bin/` instead.

    The `RuntimeDirectory=arc` directive automatically creates `/run/arc` owned by
    the `User=` account specified in the service file when the service starts. The
    `--metrics` flag enables the Prometheus endpoint on port 9001. The `--full` flag
    is required on the first start when bootstrapping from a pruned snapshot. Remove
    it on subsequent starts if you prefer to run without pruning.
  </Note>

  ## Step 2: Create the Consensus Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-consensus.service`. The
  `After` and `Requires` directives ensure this service starts only after the
  Execution Layer is running.

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-consensus.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Consensus Layer
  After=arc-execution.service
  Requires=arc-execution.service

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-consensus start \
    --home $HOME/.arc/consensus \
    --full \
    --eth-socket /run/arc/reth.ipc \
    --execution-socket /run/arc/auth.ipc \
    --rpc.addr 127.0.0.1:31000 \
    --follow \
    --follow.endpoint https://rpc.testnet.arc.io,wss=rpc.testnet.arc.io \
    --follow.endpoint https://rpc.drpc.testnet.arc.io,wss=rpc.drpc.testnet.arc.io \
    --follow.endpoint https://rpc.blockdaemon.testnet.arc.io,wss=rpc.blockdaemon.testnet.arc.io/websocket \
    --execution-persistence-backpressure \
    --execution-persistence-backpressure-threshold=16 \
    --metrics 127.0.0.1:29000

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-consensus
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  ## Step 3: Enable and start the services

  Reload systemd, enable both services to start on boot, and start them:

  ```shell theme={null}
  sudo systemctl daemon-reload
  sudo systemctl enable arc-execution arc-consensus
  sudo systemctl start arc-execution arc-consensus
  ```

  The `enable` command outputs:

  ```text theme={null}
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-execution.service -> /etc/systemd/system/arc-execution.service.
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-consensus.service -> /etc/systemd/system/arc-consensus.service.
  ```

  ## Step 4: Verify the services are running

  Check the status of both services:

  ```shell theme={null}
  sudo systemctl status arc-execution
  sudo systemctl status arc-consensus
  ```

  Each command prints output similar to:

  ```text theme={null}
  ● arc-execution.service - Arc Node - Execution Layer
       Loaded: loaded (/etc/systemd/system/arc-execution.service; enabled)
       Active: active (running) since ...
  ```

  Both services display `Active: active (running)` in their output. If a service
  shows `failed` or `activating`, check its logs:

  ```shell theme={null}
  sudo journalctl -u arc-execution --no-pager -n 50
  sudo journalctl -u arc-consensus --no-pager -n 50
  ```

  **Common issues:**

  * **Incorrect file paths in `ExecStart`:** Verify that the binary paths in the
    unit files match your installation directory.
  * **Permission errors on data directories:** Confirm that the `User` specified
    in the unit file owns `$HOME/.arc/`.
  * **Consensus Layer connection error:** The Execution Layer may not be ready
    yet. Wait for it to reach `active (running)`, then run
    `sudo systemctl restart arc-consensus`.

  To confirm sync progress, view logs, and verify the Prometheus metrics endpoints
  on ports `9001` (Execution Layer) and `29000` (Consensus Layer), see
  [Monitor a node](/arc/tutorials/monitor-a-node). To set up local Prometheus and
  Grafana dashboards on the same host, see
  [Set up Prometheus and Grafana for an Arc node](/arc/tutorials/set-up-node-monitoring).
</View>

<View title="v0.7.1" icon="tag">
  <Info>
    **v0.7.1: Arc Testnet hardfork activates 2026-05-27 15:08:37 UTC.** The Zero5
    and Zero6 hardforks activate at Unix timestamp `1779894517`. Testnet nodes must
    be on v0.7.1 by that timestamp; earlier versions stop syncing after activation.
    The systemd unit files below are unchanged from v0.7.0; v0.7.1 only tightens EL
    RPC connection defaults (`--rpc.max-connections` and
    `--rpc.max-subscriptions-per-connection`). See
    [Run an Arc node](/arc/tutorials/run-an-arc-node) for those defaults, or
    [CHANGELOG.md](https://github.com/circlefin/arc-node/blob/main/CHANGELOG.md) and
    [BREAKING\_CHANGES.md](https://github.com/circlefin/arc-node/blob/main/BREAKING_CHANGES.md#v071)
    for the full upgrade notes.
  </Info>

  Configure your Arc node's Execution Layer and Consensus Layer as systemd
  services so they auto-restart on failure and survive reboots.

  ## Prerequisites

  * You have installed Arc and completed the
    [Run an Arc node](/arc/tutorials/run-an-arc-node) tutorial with both layers
    syncing
  * You have a Linux machine with systemd
  * You have root or `sudo` access

  <Warning>
    The unit files below reference `$USER` and `$HOME`. The shell expands these to
    your current username and home directory **before** the file is written. After
    running each `sudo tee` command, review the generated unit with
    `sudo cat /etc/systemd/system/arc-execution.service` to confirm the paths are
    correct.
  </Warning>

  ## Step 1: Create the Execution Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-execution.service`:

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-execution.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Execution Layer
  After=network-online.target
  Wants=network-online.target

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  RuntimeDirectory=arc
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-execution node \
    --chain arc-testnet \
    --datadir $HOME/.arc/execution \
    --full \
    --disable-discovery \
    --ipcpath /run/arc/reth.ipc \
    --auth-ipc \
    --auth-ipc.path /run/arc/auth.ipc \
    --http \
    --http.addr 127.0.0.1 \
    --http.port 8545 \
    --http.api eth,net,web3,txpool,trace,debug \
    --metrics 127.0.0.1:9001 \
    --enable-arc-rpc \
    --rpc.forwarder https://rpc.testnet.arc.io/

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-execution
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  <Note>
    The service files assume binaries are installed at `/usr/local/bin/`. If you
    installed with `arcup`, the binaries live in `~/.arc/bin/`. Update the
    `ExecStart` paths accordingly, or symlink the binaries into `/usr/local/bin/`.
    If you built from source with `cargo install`, binaries default to
    `~/.cargo/bin/`. Add `--root /usr/local` to `cargo install` to place them under
    `/usr/local/bin/` instead.

    The `RuntimeDirectory=arc` directive automatically creates `/run/arc` owned by
    the `User=` account specified in the service file when the service starts. The
    `--metrics` flag enables the Prometheus endpoint on port 9001. The `--full` flag
    is required on the first start when bootstrapping from a pruned snapshot. Remove
    it on subsequent starts if you prefer to run without pruning.
  </Note>

  ## Step 2: Create the Consensus Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-consensus.service`. The
  `After` and `Requires` directives ensure this service starts only after the
  Execution Layer is running.

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-consensus.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Consensus Layer
  After=arc-execution.service
  Requires=arc-execution.service

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-consensus start \
    --home $HOME/.arc/consensus \
    --full \
    --eth-socket /run/arc/reth.ipc \
    --execution-socket /run/arc/auth.ipc \
    --rpc.addr 127.0.0.1:31000 \
    --follow \
    --follow.endpoint https://rpc.testnet.arc.io,wss=rpc.testnet.arc.io \
    --follow.endpoint https://rpc.drpc.testnet.arc.io,wss=rpc.drpc.testnet.arc.io \
    --follow.endpoint https://rpc.blockdaemon.testnet.arc.io,wss=rpc.blockdaemon.testnet.arc.io/websocket \
    --execution-persistence-backpressure \
    --execution-persistence-backpressure-threshold=16 \
    --metrics 127.0.0.1:29000

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-consensus
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  ## Step 3: Enable and start the services

  Reload systemd, enable both services to start on boot, and start them:

  ```shell theme={null}
  sudo systemctl daemon-reload
  sudo systemctl enable arc-execution arc-consensus
  sudo systemctl start arc-execution arc-consensus
  ```

  The `enable` command outputs:

  ```text theme={null}
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-execution.service -> /etc/systemd/system/arc-execution.service.
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-consensus.service -> /etc/systemd/system/arc-consensus.service.
  ```

  ## Step 4: Verify the services are running

  Check the status of both services:

  ```shell theme={null}
  sudo systemctl status arc-execution
  sudo systemctl status arc-consensus
  ```

  Each command prints output similar to:

  ```text theme={null}
  ● arc-execution.service - Arc Node - Execution Layer
       Loaded: loaded (/etc/systemd/system/arc-execution.service; enabled)
       Active: active (running) since ...
  ```

  Both services display `Active: active (running)` in their output. If a service
  shows `failed` or `activating`, check its logs:

  ```shell theme={null}
  sudo journalctl -u arc-execution --no-pager -n 50
  sudo journalctl -u arc-consensus --no-pager -n 50
  ```

  **Common issues:**

  * **Incorrect file paths in `ExecStart`:** Verify that the binary paths in the
    unit files match your installation directory.
  * **Permission errors on data directories:** Confirm that the `User` specified
    in the unit file owns `$HOME/.arc/`.
  * **Consensus Layer connection error:** The Execution Layer may not be ready
    yet. Wait for it to reach `active (running)`, then run
    `sudo systemctl restart arc-consensus`.

  To confirm sync progress, view logs, and verify the Prometheus metrics endpoints
  on ports `9001` (Execution Layer) and `29000` (Consensus Layer), see
  [Monitor a node](/arc/tutorials/monitor-a-node). To set up local Prometheus and
  Grafana dashboards on the same host, see
  [Set up Prometheus and Grafana for an Arc node](/arc/tutorials/set-up-node-monitoring).
</View>

<View title="v0.7.0" icon="tag">
  <Warning>
    **Upgrade required by 2026-05-27 15:08:37 UTC.** The Zero5 and Zero6 hardforks
    activate at Unix timestamp `1779894517`. The v0.7.0 systemd unit files below
    stop syncing on Arc Testnet after activation. Switch the view at the top of this
    page to **v0.7.1 (latest)** and follow those instructions before the deadline.
    See
    [BREAKING\_CHANGES.md](https://github.com/circlefin/arc-node/blob/main/BREAKING_CHANGES.md#v071)
    for migration details.
  </Warning>

  Configure your Arc node's Execution Layer and Consensus Layer as systemd
  services so they auto-restart on failure and survive reboots.

  ## Prerequisites

  * You have installed Arc and completed the
    [Run an Arc node](/arc/tutorials/run-an-arc-node) tutorial with both layers
    syncing
  * You have a Linux machine with systemd
  * You have root or `sudo` access

  <Warning>
    The unit files below reference `$USER` and `$HOME`. The shell expands these to
    your current username and home directory **before** the file is written. After
    running each `sudo tee` command, review the generated unit with
    `sudo cat /etc/systemd/system/arc-execution.service` to confirm the paths are
    correct.
  </Warning>

  ## Step 1: Create the Execution Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-execution.service`:

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-execution.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Execution Layer
  After=network-online.target
  Wants=network-online.target

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  RuntimeDirectory=arc
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-execution node \
    --chain arc-testnet \
    --datadir $HOME/.arc/execution \
    --full \
    --disable-discovery \
    --ipcpath /run/arc/reth.ipc \
    --auth-ipc \
    --auth-ipc.path /run/arc/auth.ipc \
    --http \
    --http.addr 127.0.0.1 \
    --http.port 8545 \
    --http.api eth,net,web3,txpool,trace,debug \
    --metrics 127.0.0.1:9001 \
    --enable-arc-rpc \
    --rpc.forwarder https://rpc.testnet.arc.io/

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-execution
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  <Note>
    The service files assume binaries are installed at `/usr/local/bin/`. If you
    installed with `arcup`, the binaries live in `~/.arc/bin/`. Update the
    `ExecStart` paths accordingly, or symlink the binaries into `/usr/local/bin/`.
    If you built from source with `cargo install`, binaries default to
    `~/.cargo/bin/`. Add `--root /usr/local` to `cargo install` to place them under
    `/usr/local/bin/` instead.

    The `RuntimeDirectory=arc` directive automatically creates `/run/arc` owned by
    the `User=` account specified in the service file when the service starts. The
    `--metrics` flag enables the Prometheus endpoint on port 9001. The `--full` flag
    is required on the first start when bootstrapping from a pruned snapshot. Remove
    it on subsequent starts if you prefer to run without pruning.
  </Note>

  ## Step 2: Create the Consensus Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-consensus.service`. The
  `After` and `Requires` directives ensure this service starts only after the
  Execution Layer is running.

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-consensus.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Consensus Layer
  After=arc-execution.service
  Requires=arc-execution.service

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-consensus start \
    --home $HOME/.arc/consensus \
    --full \
    --eth-socket /run/arc/reth.ipc \
    --execution-socket /run/arc/auth.ipc \
    --rpc.addr 127.0.0.1:31000 \
    --follow \
    --follow.endpoint https://rpc.testnet.arc.io,wss=rpc.testnet.arc.io \
    --follow.endpoint https://rpc.drpc.testnet.arc.io,wss=rpc.drpc.testnet.arc.io \
    --follow.endpoint https://rpc.blockdaemon.testnet.arc.io,wss=rpc.blockdaemon.testnet.arc.io/websocket \
    --execution-persistence-backpressure \
    --execution-persistence-backpressure-threshold=16 \
    --metrics 127.0.0.1:29000

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-consensus
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  ## Step 3: Enable and start the services

  Reload systemd, enable both services to start on boot, and start them:

  ```shell theme={null}
  sudo systemctl daemon-reload
  sudo systemctl enable arc-execution arc-consensus
  sudo systemctl start arc-execution arc-consensus
  ```

  The `enable` command outputs:

  ```text theme={null}
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-execution.service -> /etc/systemd/system/arc-execution.service.
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-consensus.service -> /etc/systemd/system/arc-consensus.service.
  ```

  ## Step 4: Verify the services are running

  Check the status of both services:

  ```shell theme={null}
  sudo systemctl status arc-execution
  sudo systemctl status arc-consensus
  ```

  Each command prints output similar to:

  ```text theme={null}
  ● arc-execution.service - Arc Node - Execution Layer
       Loaded: loaded (/etc/systemd/system/arc-execution.service; enabled)
       Active: active (running) since ...
  ```

  Both services display `Active: active (running)` in their output. If a service
  shows `failed` or `activating`, check its logs:

  ```shell theme={null}
  sudo journalctl -u arc-execution --no-pager -n 50
  sudo journalctl -u arc-consensus --no-pager -n 50
  ```

  **Common issues:**

  * **Incorrect file paths in `ExecStart`:** Verify that the binary paths in the
    unit files match your installation directory.
  * **Permission errors on data directories:** Confirm that the `User` specified
    in the unit file owns `$HOME/.arc/`.
  * **Consensus Layer connection error:** The Execution Layer may not be ready
    yet. Wait for it to reach `active (running)`, then run
    `sudo systemctl restart arc-consensus`.

  To confirm sync progress, view logs, and verify the Prometheus metrics endpoints
  on ports `9001` (Execution Layer) and `29000` (Consensus Layer), see
  [Monitor a node](/arc/tutorials/monitor-a-node). To set up local Prometheus and
  Grafana dashboards on the same host, see
  [Set up Prometheus and Grafana for an Arc node](/arc/tutorials/set-up-node-monitoring).
</View>

<View title="v0.6.0" icon="tag">
  <Warning>
    **Upgrade required by 2026-05-27 15:08:37 UTC.** The Zero5 and Zero6 hardforks
    activate at Unix timestamp `1779894517`. v0.6.0 is two releases behind and stops
    syncing on Arc Testnet after activation. Switch the view at the top of this page
    to **v0.7.1 (latest)** and follow those instructions before the deadline. See
    [BREAKING\_CHANGES.md](https://github.com/circlefin/arc-node/blob/main/BREAKING_CHANGES.md#v071)
    for migration details.
  </Warning>

  Configure your Arc node's Execution Layer and Consensus Layer as systemd
  services so they auto-restart on failure and survive reboots.

  ## Prerequisites

  * You have installed Arc and completed the
    [Run an Arc node](/arc/tutorials/run-an-arc-node) tutorial with both layers
    syncing
  * You have a Linux machine with systemd
  * You have root or `sudo` access

  <Warning>
    The unit files below reference `$USER` and `$HOME`. The shell expands these to
    your current username and home directory **before** the file is written. After
    running each `sudo tee` command, review the generated unit with
    `sudo cat /etc/systemd/system/arc-execution.service` to confirm the paths are
    correct.
  </Warning>

  ## Step 1: Create the Execution Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-execution.service`:

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-execution.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Execution Layer
  After=network-online.target
  Wants=network-online.target

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  RuntimeDirectory=arc
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-execution node \
    --chain arc-testnet \
    --datadir $HOME/.arc/execution \
    --disable-discovery \
    --ipcpath /run/arc/reth.ipc \
    --auth-ipc \
    --auth-ipc.path /run/arc/auth.ipc \
    --http \
    --http.addr 127.0.0.1 \
    --http.port 8545 \
    --http.api eth,net,web3,txpool,trace,debug \
    --metrics 127.0.0.1:9001 \
    --enable-arc-rpc \
    --rpc.forwarder https://rpc.testnet.arc.io/

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-execution
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  <Note>
    The service files assume binaries are installed at `/usr/local/bin/`. If you
    built from source with `cargo install`, binaries default to `~/.cargo/bin/`. Add
    `--root /usr/local` to `cargo install` to place them under `/usr/local/bin/`
    instead.

    The `RuntimeDirectory=arc` directive automatically creates `/run/arc` owned by
    the `User=` account specified in the service file when the service starts. The
    `--metrics` flag enables the Prometheus endpoint on port 9001.
  </Note>

  ## Step 2: Create the Consensus Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-consensus.service`. The
  `After` and `Requires` directives ensure this service starts only after the
  Execution Layer is running.

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-consensus.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Consensus Layer
  After=arc-execution.service
  Requires=arc-execution.service

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-consensus start \
    --home $HOME/.arc/consensus \
    --eth-socket /run/arc/reth.ipc \
    --execution-socket /run/arc/auth.ipc \
    --rpc.addr 127.0.0.1:31000 \
    --follow \
    --follow.endpoint https://rpc.testnet.arc.io,wss=rpc.testnet.arc.io \
    --follow.endpoint https://rpc.drpc.testnet.arc.io,wss=rpc.drpc.testnet.arc.io \
    --follow.endpoint https://rpc.blockdaemon.testnet.arc.io,wss=rpc.blockdaemon.testnet.arc.io \
    --metrics 127.0.0.1:29000

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-consensus
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  ## Step 3: Enable and start the services

  Reload systemd, enable both services to start on boot, and start them:

  ```shell theme={null}
  sudo systemctl daemon-reload
  sudo systemctl enable arc-execution arc-consensus
  sudo systemctl start arc-execution arc-consensus
  ```

  The `enable` command outputs:

  ```text theme={null}
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-execution.service -> /etc/systemd/system/arc-execution.service.
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-consensus.service -> /etc/systemd/system/arc-consensus.service.
  ```

  ## Step 4: Verify the services are running

  Check the status of both services:

  ```shell theme={null}
  sudo systemctl status arc-execution
  sudo systemctl status arc-consensus
  ```

  Each command prints output similar to:

  ```text theme={null}
  ● arc-execution.service - Arc Node - Execution Layer
       Loaded: loaded (/etc/systemd/system/arc-execution.service; enabled)
       Active: active (running) since ...
  ```

  Both services display `Active: active (running)` in their output. If a service
  shows `failed` or `activating`, check its logs:

  ```shell theme={null}
  sudo journalctl -u arc-execution --no-pager -n 50
  sudo journalctl -u arc-consensus --no-pager -n 50
  ```

  **Common issues:**

  * **Incorrect file paths in `ExecStart`:** Verify that the binary paths in the
    unit files match your installation directory.
  * **Permission errors on data directories:** Confirm that the `User` specified
    in the unit file owns `$HOME/.arc/`.
  * **Consensus Layer connection error:** The Execution Layer may not be ready
    yet. Wait for it to reach `active (running)`, then run
    `sudo systemctl restart arc-consensus`.

  To confirm sync progress, view logs, and verify the Prometheus metrics endpoints
  on ports `9001` (Execution Layer) and `29000` (Consensus Layer), see
  [Monitor a node](/arc/tutorials/monitor-a-node). To set up local Prometheus and
  Grafana dashboards on the same host, see
  [Set up Prometheus and Grafana for an Arc node](/arc/tutorials/set-up-node-monitoring).
</View>
