> ## Documentation Index
> Fetch the complete documentation index at: https://seilabs-monty-plt-816-seed-nodes-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Node Operations on Sei

> Deploy and maintain Sei Network infrastructure with comprehensive guides for validators, RPC nodes, and archive nodes, including hardware requirements, installation steps, and operational best practices.

export const Seeds = ({format = 'bash', network = 'mainnet'}) => {
  const SEEDS = {
    mainnet: ['0cd5f57c249b5aca815710338e1fe7a14797585d@seed-0-p2p.pacific-1.prod.platform.sei.io:26656', 'f0f057f1593d28bec11591cf146bd223e0be1866@seed-1-p2p.pacific-1.prod-euw1.platform.sei.io:26656', '8e28f62368a1ceae0102645db8584b218650930d@seed-2-p2p.pacific-1.prod-use2.platform.sei.io:26656'],
    testnet: ['362f934ead3654fca9cafdac63b52b47b2f9a95e@seed-0-p2p.atlantic-2.prod.platform.sei.io:26656', '1f55cd51183d3a6cad8a3667b91d08d0338bd52e@seed-1-p2p.atlantic-2.prod-euw1.platform.sei.io:26656', '7152be2e4c1a057d2b2467723058c5f0ec790472@seed-2-p2p.atlantic-2.prod-use2.platform.sei.io:26656']
  };
  const CopyIcon = ({className}) => <svg role="img" aria-label="Copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className={className}>
      <path d="M7 7m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z" />
      <path d="M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1" />
    </svg>;
  const CheckIcon = ({className}) => <svg role="img" aria-label="Copied" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className={className}>
      <path d="M5 12l5 5l10 -10" />
    </svg>;
  const [copied, setCopied] = useState(false);
  const seeds = SEEDS[network] ?? [];
  if (seeds.length === 0) {
    return <div className="not-prose w-full">
        <pre className="m-0 p-3 rounded-md bg-neutral-100 dark:bg-neutral-800 text-sm opacity-70" style={{
      fontFamily: 'var(--sei-font-mono)'
    }}>
          No seeds configured for network “{network}”.
        </pre>
      </div>;
  }
  const seedString = seeds.join(',');
  const displayText = format === 'toml' ? `bootstrap-peers = "${seedString}"` : `SEEDS="${seedString}"`;
  const handleCopy = async () => {
    try {
      await navigator.clipboard.writeText(displayText);
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    } catch {}
  };
  return <div className="not-prose w-full">
      <div className="relative">
        <pre className="m-0 px-4 py-3 pr-24 rounded-lg bg-neutral-100 dark:bg-neutral-900 text-[12.5px] leading-[1.55] whitespace-pre-wrap break-all border border-neutral-200 dark:border-neutral-700 text-neutral-900 dark:text-neutral-100" style={{
    fontFamily: 'var(--sei-font-mono)'
  }}>
          <code style={{
    fontFamily: 'var(--sei-font-mono)'
  }}>{displayText}</code>
        </pre>
        <div className="absolute top-2 right-2 flex items-center gap-1.5">
          <button type="button" onClick={handleCopy} aria-label="Copy seeds" title="Copy to clipboard" className="inline-flex items-center gap-1 px-2 py-1 rounded-md text-[11px] font-semibold border border-neutral-300 dark:border-neutral-600 bg-white/80 dark:bg-neutral-800/80 text-neutral-700 dark:text-neutral-200 hover:bg-white dark:hover:bg-neutral-800 transition-colors">
            {copied ? <>
                <CheckIcon className="text-green-600" />
                Copied
              </> : <>
                <CopyIcon />
                Copy
              </>}
          </button>
        </div>
      </div>
    </div>;
};

export const VersionTable = () => {
  const networks = [{
    label: 'Mainnet',
    chainId: 'pacific-1',
    rpcEndpoint: 'https://rpc.sei-apis.com',
    evmChainId: '1329'
  }, {
    label: 'Testnet',
    chainId: 'atlantic-2',
    rpcEndpoint: 'https://rpc-testnet.sei-apis.com',
    evmChainId: '1328'
  }];
  const [versions, setVersions] = useState({});
  useEffect(() => {
    const oneHour = 3600000;
    const setVersionFor = (chainId, version) => {
      setVersions(prev => ({
        ...prev,
        [chainId]: version
      }));
    };
    const fetchVersion = async (chainId, rpcEndpoint) => {
      try {
        const response = await fetch(`${rpcEndpoint}/abci_info`);
        const data = await response.json();
        const info = data && data.result && data.result.response || data && data.response || ({});
        const version = info.version;
        if (typeof version === 'string' && version) {
          setVersionFor(chainId, version);
          localStorage.setItem(`${chainId}-version`, version);
          localStorage.setItem(`${chainId}-version-timestamp`, Date.now().toString());
          return;
        }
        throw new Error('abci_info response had no version field');
      } catch (error) {
        console.error('Error fetching version:', error);
        if (!localStorage.getItem(`${chainId}-version`)) {
          setVersionFor(chainId, 'Unavailable');
        }
      }
    };
    networks.forEach(({chainId, rpcEndpoint}) => {
      const storedVersion = localStorage.getItem(`${chainId}-version`);
      const storedTimestamp = localStorage.getItem(`${chainId}-version-timestamp`);
      const isFresh = storedVersion && storedTimestamp && Date.now() - parseInt(storedTimestamp, 10) < oneHour;
      if (storedVersion) {
        setVersionFor(chainId, storedVersion);
      }
      if (!isFresh) {
        fetchVersion(chainId, rpcEndpoint);
      }
    });
  }, []);
  return <table className="min-w-full divide-y divide-neutral-200 dark:divide-neutral-800">
      <thead className="bg-neutral-50 dark:bg-neutral-900/50">
        <tr>
          <th className="px-4 py-3 text-left text-sm font-medium text-neutral-900 dark:text-neutral-100">Network</th>
          <th className="px-4 py-3 text-left text-sm font-medium text-neutral-900 dark:text-neutral-100">Version</th>
          <th className="px-4 py-3 text-left text-sm font-medium text-neutral-900 dark:text-neutral-100">Chain ID</th>
          <th className="px-4 py-3 text-left text-sm font-medium text-neutral-900 dark:text-neutral-100">EVM Chain ID</th>
        </tr>
      </thead>
      <tbody className="divide-y divide-neutral-200 dark:divide-neutral-800 bg-neutral-50 dark:bg-neutral-900/30">
        {networks.map(({label, chainId, evmChainId}) => <tr key={chainId}>
            <td className="px-4 py-3 text-sm font-medium text-neutral-900 dark:text-neutral-100">{label}</td>
            <td className="px-4 py-3 text-sm text-neutral-600 dark:text-neutral-400">
              <code style={{
    fontFamily: 'var(--sei-font-mono)'
  }}>{versions[chainId] || 'Fetching...'}</code>
            </td>
            <td className="px-4 py-3 text-sm text-neutral-600 dark:text-neutral-400">{chainId}</td>
            <td className="px-4 py-3 text-sm text-neutral-600 dark:text-neutral-400">{evmChainId}</td>
          </tr>)}
      </tbody>
    </table>;
};

**Power the Sei Network Infrastructure**

Comprehensive guides for running, maintaining, and optimizing Sei network nodes. Whether you're setting up a validator, an RPC node, or a relayer, you'll find detailed instructions and best practices to ensure optimal performance and security.

<CardGroup cols={4}>
  <Card horizontal title="RPC/API Nodes" icon="network-wired" />

  <Card horizontal title="Validator Nodes" icon="shield" />

  <Card horizontal title="Statesync Nodes" icon="shuffle" />

  <Card horizontal title="Archive Nodes" icon="database" />
</CardGroup>

## Network Versions

<VersionTable />

*Live binary versions, genesis, and seed peers — see the [technical reference](/node/technical-reference).*

## Hardware Requirements

| Component | Required                                           |
| --------- | -------------------------------------------------- |
| CPU       | 16 cores (Intel Xeon/Core i7/i9 or AMD Epyc/Ryzen) |
| RAM       | 256 GB DDR5 or better                              |
| Storage   | 2 TB NVMe SSD (high IOPS required)                 |
| Network   | 2 Gbps with low latency                            |

## Installation & Setup Steps

<Steps>
  <Step title="Environment Setup">
    ##### System Preparation

    ###### 1. Update and Upgrade System

    ```bash theme={"dark"}
    sudo apt update && sudo apt upgrade -y
    ```

    ###### 2. Install Essential Packages

    ```bash theme={"dark"}
    sudo apt install make gcc git jq chrony curl lz4 wget tar build-essential -y
    ```

    ###### 3. Synchronize System Time

    ```bash theme={"dark"}
    sudo timedatectl set-timezone UTC
    sudo systemctl enable --now chronyd
    timedatectl
    ```

    ##### Install Go

    Suggested Version: Go 1.24.x (required for seid v6.3+)

    ###### Installation Steps

    ```bash theme={"dark"}
    # Check for existing Go installation
    go version

    # Download and install Go 1.24.x
    wget https://go.dev/dl/go1.24.5.linux-amd64.tar.gz
    sudo tar -C /usr/local -xzf go1.24.5.linux-amd64.tar.gz

    # Add Go to your environment variables
    echo 'export PATH=$PATH:/usr/local/go/bin' >> $HOME/.bashrc
    source $HOME/.bashrc

    # Verify installation
    go version
    ```
  </Step>

  <Step title="Install Sei">
    ##### Install Sei Binary

    ```bash theme={"dark"}
    # Clone repository and install
    git clone https://github.com/sei-protocol/sei-chain.git
    cd sei-chain
    git checkout <version-tag>  # Replace with specific version
    make install

    # Verify installation
    seid version
    ```

    See Network Versions table above for current recommended version.

    <Accordion title="Alternative: Docker Image">
      Official Docker images are available at GitHub Container Registry.

      ```bash theme={"dark"}
      # Pull the latest version
      docker pull ghcr.io/sei-protocol/sei:latest

      # Or pull a specific version (recommended)
      docker pull ghcr.io/sei-protocol/sei:v6.3.1
      ```

      Available architectures: linux/amd64 and linux/arm64.
    </Accordion>

    <Info>
      If you encounter an error like `command not found: seid`, you may need to set your GOPATH environment variable.

      Add the following to your `~/.bashrc` or `~/.zshrc`:

      ```bash theme={"dark"}
      export GOPATH=$(go env GOPATH)
      export PATH=$PATH:$GOPATH/bin
      ```

      Then reload your shell with `source ~/.bashrc` or `source ~/.zshrc`.

      For more information see [here](https://pkg.go.dev/cmd/go#hdr-GOPATH_environment_variable).
    </Info>

    ##### Initialize Chain Files

    <Info>Default init mode is **full** (RPC/P2P bind to all interfaces). For **validator** or **seed** nodes, use `--mode validator` or `--mode seed` so RPC and P2P bind to localhost only. See the [Validator Operations Guide](/node/validators) for the full validator init example.</Info>

    ```bash theme={"dark"}
    # Initialize node (default mode is full: RPC/P2P bind to all interfaces)
    # For validator nodes, use: seid init <your-moniker> --chain-id <chain-id> --mode validator
    seid init <your-moniker> --chain-id <chain-id>

    # Genesis is written automatically for known networks (mainnet and testnets); no download needed.
    # bootstrap-peers is also populated automatically with the Sei Labs seeds — no
    # manual peer list needed. See "Peer discovery" below.
    ```

    ##### Peer discovery

    `seid init` writes the Sei Labs seed nodes into `bootstrap-peers` for you, so a
    fresh node finds peers with no further configuration. The seeds run in three
    regions per network, and they gossip the rest of the network to you over PEX —
    you do not need to maintain a peer list.

    <Info>
      Seeds belong in `bootstrap-peers`, not `persistent-peers`. Bootstrap peers seed
      your address book and may then be dropped once you have real peers;
      `persistent-peers` holds connections open indefinitely, which is only
      appropriate for nodes you operate yourself.
    </Info>

    If you need to set them by hand — an existing node initialised before seeds
    shipped, or a home you did not create with `seid init` — the values are:

    * mainnet (pacific-1):

    <Seeds network="mainnet" format="toml" />

    * testnet (atlantic-2):

    <Seeds network="testnet" format="toml" />

    ```bash theme={"dark"}
    # Only needed if bootstrap-peers is empty (e.g. a node initialised before seeds shipped)
    sed -i 's/bootstrap-peers = .*/bootstrap-peers = "<comma-separated-seed-list>"/' ~/.sei/config/config.toml
    ```

    ##### Configure App Settings

    ```bash theme={"dark"}
    # Set minimum gas price (recommended; helps prevent spam transactions)
    # Mainnet enforces a chain-wide minimum of 0.02usei, so set at least that value
    # Use "0usei" only for local development or private networks
    sed -i -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.02usei\"/" $HOME/.sei/config/app.toml

    # Tune mempool settings
    sed -i \
      -e 's/^keep-invalid-txs-in-cache = .*/keep-invalid-txs-in-cache = true/' \
      -e 's/^ttl-duration = .*/ttl-duration = "5s"/' \
      -e 's/^ttl-num-blocks = .*/ttl-num-blocks = 5/' \
      $HOME/.sei/config/config.toml

    # Set Concurrent Workers to 500 and enable occ
    sed -i -e "s/^#concurrency-workers *=.*/concurrency-workers = 500/" $HOME/.sei/config/app.toml
    sed -i -e "s/^occ-enabled *=.*/occ-enabled = true/" $HOME/.sei/config/app.toml
    ```

    <Info>
      In case of running an Archive Node, make sure to set your state-store settings to `ss-keep-recent = 0` with

      ```bash theme={"dark"}
      sed -i 's/^ss-keep-recent = [0-9]*/ss-keep-recent = 0/' ~/.sei/config/app.toml
      ```
    </Info>

    <Accordion title="Advanced Configuration">
      #### Archive Node Setup

      An archive node maintains the complete historical record of the chain. This requires disabling state sync and starting with a pre-existing database using a "snapshot".

      **1. Disable State Sync** — In \$HOME/.sei/config/config.toml , modify the \[statesync] section:

      ```toml theme={"dark"}
      # State sync configuration
      [statesync]
      enable = false
      ```

      **2. Configure Archive Node Peers** — To sync from the height your snapshot was created at, you need peers retaining a large amount of historical blocks. The node will require specific peers during initial sync, which can be changed at a later time.

      #### Mempool Configuration

      For optimal transaction handling and resource management, it is recommended to update the mempool settings in your `config.toml` file.

      <Info>
        Adjust these parameters if you encounter performance or resource issues on your specific hardware.
      </Info>

      ```toml theme={"dark"}
      # Mempool configuration settings
      [mempool]

      # Broadcast transactions to other nodes
      broadcast = true

      # Maximum number of transactions in the mempool
      size = 5000

      # Limit the total size of all txs in the mempool.
      max-txs-bytes = 10737418240

      # Size of the cache (used to filter duplicate transactions)
      cache-size = 10000

      # Do not remove invalid transactions from the cache
      keep-invalid-txs-in-cache = true

      # Maximum size of a single transaction
      max-tx-bytes = 2048576

      # Maximum size of a batch of transactions to send to a peer
      max-batch-bytes = 0

      # Maximum length of time a transaction can remain in the mempool
      ttl-duration = "3s"

      # Maximum number of blocks a transaction can remain in the mempool
      ttl-num-blocks = 5

      tx-notify-threshold = 0

      check-tx-error-blacklist-enabled = true

      check-tx-error-threshold = 50

      pending-size = 5000

      max-pending-txs-bytes = 1073741824

      pending-ttl-duration = "3s"

      pending-ttl-num-blocks = 5
      ```
    </Accordion>
  </Step>

  <Step title="Run Node">
    ##### Setting Up a systemd Service

    <Danger>If you see an error such as `panic: recovered: runtime error: integer divide by zero` it means you can’t start nodes straight from the genesis file. Instead, sync to the block tip via [state sync](/node/statesync) or using a [snapshot](/node/snapshot).</Danger>

    For production deployments, configure a systemd service to ensure your node restarts automatically:

    ```bash theme={"dark"}
    # Create the systemd service file
    sudo tee /etc/systemd/system/seid.service > /dev/null << EOF
    [Unit]
    Description=Sei Node
    After=network-online.target

    [Service]
    User=$USER
    ExecStart=$(which seid) start
    Restart=always
    RestartSec=3
    LimitNOFILE=65535

    [Install]
    WantedBy=multi-user.target
    EOF

    # Reload systemd, enable and start the service
    sudo systemctl daemon-reload
    sudo systemctl enable seid
    sudo systemctl start seid
    ```

    ##### Monitoring & Troubleshooting

    Check your node's status with these commands:

    ```bash theme={"dark"}
    # Check sync status
    seid status

    # Monitor logs in real-time
    journalctl -u seid -f -o cat

    # Check validator status (if running a validator)
    seid query staking validator $(seid keys show <your_key> --bech val -a)
    ```

    **Common Issues & Solutions**

    <CardGroup cols={2}>
      <Card horizontal title="Sync Issues">
        * Verify sufficient disk space
        * Ensure stable network connectivity
        * Confirm system time is synchronized
        * Consider using state sync for initial setup
      </Card>

      <Card horizontal title="Performance Problems">
        * Monitor system resources (CPU, RAM, I/O)
        * Evaluate disk performance and network bandwidth
        * Adjust mempool and peer settings if needed
      </Card>
    </CardGroup>
  </Step>
</Steps>

[View Complete Node Setup Guide](/node/node-operators)

## Node Resources

### Node Setup

<CardGroup cols={3}>
  <Card horizontal title="Node Operations Guide" icon="server" href="/node/node-operators">
    Complete guide to setting up and running a Sei node with hardware requirements and configuration steps.
  </Card>

  <Card horizontal title="Validator Operations Guide" icon="shield" href="/node/validators">
    Specialized instructions for validators, including staking, commission settings, and security best practices.
  </Card>

  <Card horizontal title="Default Configurations" icon="file-lines" href="/node/node-operators#default-configurations">
    Full reference for `app.toml`, `config.toml`, and `client.toml` shipped by the latest `seid` release.
  </Card>
</CardGroup>

### Advanced Operations

<CardGroup cols={3}>
  <Card horizontal title="Configuration & Monitoring" icon="gauge-simple-high" href="/node/advanced-config-monitoring">
    Optimize your node's performance with advanced settings and monitoring tools.
  </Card>

  <Card horizontal title="RocksDB Backend" icon="database" href="/node/rocksdb-backend">
    Run with RocksDB instead of the default backend.
  </Card>

  <Card horizontal title="Technical Reference" icon="terminal" href="/node/technical-reference">
    Detailed technical specifications, API endpoints, and commands for node operators.
  </Card>
</CardGroup>
