# Waku Operator Trial | Q3 2022
_Feel free to skip to the [TL;DR version](#TLDR-version) at the end of this document._
One of the best ways to ensure the future sustainability of the Waku network, the decentralized communication layer for Web3, is to have a rapidly growing fleet of stable operator-run Waku nodes. Our operator programme aims to achieve exactly that, encouraging and assisting operators to run and maintain their own Waku nodes while contributing valuable services to the network.
In the first phase of our operator programme, we're launching a trial among core contributors in the Vac, Waku Product and Status teams. However, we're encouraging _any_ interested operators or Waku users to join the programme at any stage. All communication, support and feedback will take place in open channels to include as many community members as possible. Many platforms already running their own nodes may want to use this opportunity to participate in the regular feedback cycles.
To join the trial, follow the steps below:
## Step 1: Choose your Waku client and version
Operators can use any of the [existing Waku implementations](https://waku.org/#implementations) to participate. However, the trial communication and tutorials will be directed at [nwaku](https://github.com/status-im/nwaku/tree/ca1718c50483fb2bde897a95f34cc76085db7f17/docs/operators) clients.
For nwaku, the [quickstart page](https://github.com/status-im/nwaku/blob/ca1718c50483fb2bde897a95f34cc76085db7f17/docs/operators/quickstart.md#1-build) provides instructions on how to either build the latest version or download a precompiled binary. We recommend running version `v0.12` of nwaku or later. Keep your eye on the [`#operator-trial` channel](https://discord.com/channels/864066763682218004/1023954638573146215) on Discord for the latest information on important fixes, workarounds, etc.
> **NB:** We're launching this trial a couple of days before the planned release of `v0.12` of nwaku. If you are joining the trial before this release, please [build](https://github.com/status-im/nwaku/blob/ca1718c50483fb2bde897a95f34cc76085db7f17/docs/operators/how-to/build.md) your client binary off the [latest master](https://github.com/status-im/nwaku/tree/master) to include some important fixes since the previous release.
## Step 2: Choose your run environment
We're asking operators to run and maintain long-lived Waku nodes. This implies either running Waku on a piece of "always-on" hardware (such as a home server) or making use of a cloud computing service. Since this is a service that will be familiar to many developers, we have compiled a [quickstart guide](https://github.com/status-im/nwaku/blob/ca1718c50483fb2bde897a95f34cc76085db7f17/docs/operators/droplet-quickstart.md) on getting nwaku to run on a [DigitalOcean Droplet](https://www.digitalocean.com/products/droplets).
The more diverse the runtime environments on which Waku instances run, the more truly decentralized the network becomes. We especially encourage running Waku on your own hardware. If you're setting up Waku in an interesting environment (such as a Raspberry Pi!), we'd love to hear about it and any unique challenges you may have faced. Remember that our [operator documentation](https://github.com/status-im/nwaku/tree/ca1718c50483fb2bde897a95f34cc76085db7f17/docs/operators) is also open sourced, so feel free to contribute to our how-to guides.
## Step 3: Configure the services you want to provide
The trial focuses on Waku nodes providing a [`relay`](https://rfc.vac.dev/spec/11/) service to help route messages through the network. The [typical configuration guide](https://github.com/status-im/nwaku/blob/ca1718c50483fb2bde897a95f34cc76085db7f17/docs/operators/how-to/run.md) explains many of the most common configuration options for nwaku. For the trial, bear the following in mind:
### Use the `wakuv2.prod` fleet for bootstrapping
Although various bootstrap fleets have naturally discovered and connected to each other, we recommend configuring the `wakuv2.prod` fleet. You can do this using
```
--dns-discovery:true \
--dns-discovery-url:enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im
```
as CLI options.
### Ensure you participate in [Waku's Discovery v5](https://rfc.vac.dev/spec/33/)
Use `--discv5-discovery:true` - the distributed routing table will automatically be bootstrapped with addresses discovered via DNS discovery.
### Make sure your node is externally discoverable
This is one of the most important steps to becoming a useful node in the network. When running nwaku, be on the lookout for a log similar to the one below, which indicates that no public address could be determined for your node:
```
WRN 2022-09-23 13:27:39.504+01:00 No external IP provided for the ENR, this node will not be discoverable topics="discv5" tid=14584 file=protocol.nim:993
```
For a node to be externally discoverable, one of the following strategies must be followed:
1. Establish NAT via NAT-UPnP or NAT-PMP strategies
By default both strategies will be attempted during node startup in nwaku.
2. Manually configure an external IP address
You can use the `--nat=extip:<your-public-ip-here>` CLI option. This option works best if you have a static public IP, which is often the case in cloud computing environments. If you expect your external IP to change during the lifetime of the node, consider configuring a [Dynamic DNS service](https://en.wikipedia.org/wiki/Dynamic_DNS) instead and using the `--dns4-domain-name` option described below.
3. Manually configure a domain name
If you own a domain name resolving to your node's public IPv4 address, this can be configured with the `--dns4-domain-name:<public.domain.here>` option.
### Consider providing more services
The trial focuses on `relay` services, but that does not mean that you cannot experiment with providing other useful services to the network, including `store`, `filter` and `lightpush`. We have an ever-growing list of [configuration guides](https://github.com/status-im/nwaku/blob/ca1718c50483fb2bde897a95f34cc76085db7f17/docs/operators/how-to/configure.md) for you to explore.
One exciting experimental service you can provide, is to participate in [RLN spam detection](https://github.com/status-im/nwaku/blob/ca1718c50483fb2bde897a95f34cc76085db7f17/docs/tutorial/onchain-rln-relay-chat2.md). We have an [active RLN testnet](https://github.com/status-im/nwaku/blob/ca1718c50483fb2bde897a95f34cc76085db7f17/docs/tutorial/rln-chat2-live-testnet.md) and a second one scheduled to occur during the operator trial. Operators are encouraged to participate. Watch this space as more details about the upcoming testnet is published.
## Step 4: Launch and monitor
You should now be ready to run your node. Depending on your runtime environment, you may want to consider redirecting the node's logs from stdout to a file or running in a terminal multiplexer such as `screen` or `tmux`.
We have a [basic guide](https://github.com/status-im/nwaku/blob/ca1718c50483fb2bde897a95f34cc76085db7f17/docs/operators/how-to/monitor.md) ready on how to monitor your node using Prometheus and Grafana dashboards. We have provided [a very basic dashboard](https://github.com/status-im/nwaku/blob/ca1718c50483fb2bde897a95f34cc76085db7f17/metrics/waku-single-node-dashboard.json) as a starting point. If you are building your own (or any other monitoring tools), feel free to share it with the community.
## Step 5: Provide feedback
Feedback will be gathered informally on a weekly basis on the [`#operator-trial` channel](https://discord.com/channels/864066763682218004/1023954638573146215) on Discord. As guideline, you'll be asked to answer two questions:
1. How can we improve operator experience in terms of documentation, client features and monitoring tools?
2. How well has your node performed during the past week (that is, have you noticed any bugs, irregularities, etc.)?
However, we'll appreciate any ongoing feedback, bug reports and inquiries as you go along. The [`#operator-trial` Discord channel](https://discord.com/channels/864066763682218004/1023954638573146215) will be used as main communication channel, but you're also encouraged to open issues in the Github repo of your chosen Waku client.
## TL;DR version
To get started without any of the hassle of the above steps, copy and paste the following to run your own nwaku node:
```bash
git clone --recurse-submodules https://github.com/status-im/nwaku
cd nwaku
make wakunode2
./build/wakunode2 \
--dns-discovery:true \
--dns-discovery-url:enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im \
--discv5-discovery \
--nat=extip:[yourpublicip] # or, if you are behind a nat: --nat=any
```
Thank you to [Menduist](https://github.com/menduist) for providing this shorter version! :)
---
The Waku Product team is excited to see this trial grow into a large operator programme, a stable foundation for a truly decentralized, private and secure messaging infrastructure.