# DigitalOcean

Run a Webhash Node on a premium DigitalOcean Droplet and contribute to the future of decentralized, censorship-resistant web hosting — while earning rewards for uptime and storage.

***

#### ✅ Prerequisites

Make sure you have:

* A **DigitalOcean** account
* Droplet type: **Premium AMD** (2 vCPUs, 4GB RAM, 100GB SSD)
* **Floating IP** for static public access
* A **new EVM-compatible wallet** (with Sepolia ETH on Base) for node registration

***

#### 🪙 Step 1: Create a New Wallet & Fund It

1. Create a wallet using MetaMask or any EVM-compatible wallet
2. Export your private key (⚠️ Don’t use your main wallet)\
   📺 [Watch: How to Export Private Key from MetaMask](https://www.youtube.com/watch?v=ke9j2wuYhPE\&t=96s)
3. Fund your wallet with **Sepolia ETH on Base** using the faucet:\
   👉  [Base Sepolia Faucet – Alchemy](https://www.alchemy.com/faucets/base-sepolia)

***

#### 🧠 Step 2: Get Your WebSocket URLs (Base Sepolia + Ethereum Mainnet)

Webhash requires **two WebSocket URLs**:\
1️⃣ One for **Base Sepolia**\
2️⃣ One for **Ethereum Mainnet**&#x20;

***

**🔹 Option A: Using Alchemy (Recommended)**

You only need **one app** to get **both URLs**:

1. Go to the Alchemy Dashboard and log in
2. Click **"Create App"**
   * **Name**: Webhash Node
   * **Chain**: Base
   * **Network**: Base Sepolia
3. After the app is created, click **"Configure"** (top right)
4. Under **"Add Chains"**, enable **Ethereum → Mainnet**
5. Now go back to the app dashboard:
   * Click the **"Network"** tab
   * Copy the WebSocket URL for **Base Sepolia**
   * Then switch to **Ethereum Mainnet** and copy its WebSocket URL

✅ Examples:

* **Base Sepolia**: `wss://base-sepolia.g.alchemy.com/v2/your-api-key`
* **Ethereum Mainnet**: `wss://eth-mainnet.g.alchemy.com/v2/your-api-key`

📌 *Ensure both URLs start with `wss://`. HTTP URLs are not supported.*

***

**🔹 Option B: Using QuickNode**

1. Go to [QuickNode](https://www.quicknode.com)
2. Create **two endpoints**:
   * One for **Base Sepolia**
   * One for **Ethereum Mainnet**
3. Go to each endpoint’s dashboard
4. Copy the **WebSocket URL** from the **WebSockets tab**

✅ Examples:

* **Base Sepolia**: `wss://your-node.base-sepolia.quiknode.pro/your-key/`
* **Ethereum Mainnet**: `wss://your-node.ethereum.quiknode.pro/your-key/`

📌 *Again, make sure to copy the `wss://` URLs only. HTTP endpoints won't work.*

***

#### 🖥️ Step 3: Deploy a Droplet on DigitalOcean

1. Log in to DigitalOcean → **Create Droplet**
2. Select **Ubuntu 22.04 LTS** as your OS
3. Choose:
   * Plan: **Premium AMD**
   * Specs: **2 vCPUs**, **4GB RAM**, **100GB SSD**
4. Launch the droplet

***

#### 🔐 Step 4: Configure Firewall & Networking

1. Open the droplet's settings → **Cloud Firewalls**
2. Allow **TCP/UDP traffic on port 4001**
3. You can also run the following inside your droplet:

```bash
sudo ufw allow 4001/tcp
sudo ufw allow 4001/udp
sudo ufw enable
```

***

#### 🌐 Step 5: Assign a Floating IP

1. Go to **Networking → Floating IPs**
2. Reserve and assign a **Floating IP** to your droplet\
   📌 This ensures your public IP remains static.

***

#### 🧪 Step 6: Run the Webhash Node Setup Script

1. SSH into your droplet
2. Run the setup command:

```bash
curl -fsSL https://raw.githubusercontent.com/WebHash-eth/hash-node-setup/refs/heads/main/scripts/setup.sh > setup.sh && chmod +x setup.sh && ./setup.sh
```

***

#### 🛠️ During Setup – Required Inputs

You will be prompted for:

1️⃣ **WebSocket URL – Base Sepolia**\
Paste the `wss://` endpoint from Alchemy or QuickNode

2️⃣ **WebSocket URL – Ethereum Mainnet**\
Paste your second `wss://` URL&#x20;

**3️⃣** Enter Your Email for Updates

After entering your Ethereum Mainnet WebSocket URL, you’ll be prompted to enter your email:\
**Please enter your email address:**\
This helps us send you important updates, community news, and reward announcements related to your node activity.\
📌 *Your email is stored securely and never shared.*

4️⃣ **Select Storage Directory** You'll see this prompt:

```
Do you want to use a separate disk for storage? (y/n)
```

* Type `y` to specify a custom directory (e.g., `/mnt/webhash`)
* Type `n` to use the default path: `/root/.webhash-node-data`

The script will continue automatically after your input.

***

#### ✅ Step 7: Confirm Node Registration Output

After setup, you should see:

```
✔ Container node       Healthy
✔ Container pinner     Started
Waiting for node container to be ready...
Configuring node...
Node started with peer ID: 12D3KooW...
Registering node with peer ID: 12D3KooW...
Node registered successfully with peer ID: 12D3KooW...
```

📌 If you see **“Node registered successfully”**, your Webhash node is now live and contributing to decentralized hosting.

***

#### 📢 Final Step – Join the Webhash Community

Once your node is successfully registered, you’ll see a message prompting you to join our official Discord and Telegram channels.\
👉 **Join our**[ Discord](https://discord.gg/zUpBGJ4uh5) **to claim your exclusive “🥷Node Ninja” role** and connect with other node operators!

Stay connected, get support, and earn early contributor perks by being part of the Webhash community.

***

**⚠️ Troubleshooting & Support**

If you run into any issues while setting up your **Webhash Node**, we’re here to help!

📌 Join our Discord and create a support ticket – Our team will assist you instantly.

🔗 [Join Webhash Discord](https://discord.gg/zUpBGJ4uh5)&#x20;


---

# 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://node-setup.webhash.com/digitalocean.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.
