112 lines
4.4 KiB
Markdown
112 lines
4.4 KiB
Markdown
# nwaku-compose
|
||
|
||
Ready to use docker-compose to run your own [nwaku](https://github.com/waku-org/nwaku) full node:
|
||
* nwaku node running relay and store protocols with RLN enabled.
|
||
* Simple frontend to interact with your node and the network, to publish and receive messages.
|
||
* Grafana dashboard for advanced users or node operators.
|
||
* Requires `docker-compose` and `git`.
|
||
|
||
|
||
**📝 0. Prerequisites**
|
||
|
||
You need:
|
||
* Ethereum Sepolia WebSocket endpoint. Get one free from [Infura](https://www.infura.io/).
|
||
* Ethereum Sepolia account with some balance <0.01 Eth. Get some [here](https://www.infura.io/faucet/sepolia).
|
||
* A password to protect your rln membership.
|
||
|
||
`docker-compose` [will read the `./.env` file](https://docs.docker.com/compose/environment-variables/set-environment-variables/#additional-information-3) from the filesystem. There is `.env.example` available for you as a template to use for providing the above values. The process when working with `.env` files is to copy the `.env.example`, store it as `.env` and edit the values there.
|
||
|
||
```
|
||
cp .env.example .env
|
||
${EDITOR} .env
|
||
```
|
||
|
||
Make sure to **NOT** place any secrets into `.env.example`, as they might be unintentionally published in the Git repository.
|
||
|
||
|
||
**🔑 1. Register RLN membership**
|
||
|
||
The RLN membership is your access key to The Waku Network. Its registration is done onchain, and allows your nwaku node to publish messages in a decentralized and private way, respecting some [rate limits](https://rfc.vac.dev/spec/64/#rate-limit-exceeded).
|
||
Messages exceeding the rate limit won't be relayed by other peers.
|
||
|
||
This command will register your membership and store it in `keystore/keystore.json`.
|
||
Note that if you just want to relay traffic (not publish), you don't need one.
|
||
|
||
```
|
||
./register_rln.sh
|
||
```
|
||
|
||
**🖥️ 2. Start your node**
|
||
|
||
Start all processes: nwaku node, database and grafana for metrics. Your [RLN](https://rate-limiting-nullifier.github.io/rln-docs/what_is_rln.html) membership is loaded into nwaku under the hood.
|
||
```console
|
||
docker-compose up -d
|
||
```
|
||
⚠️ The node might take ~5' the very first time it runs because it needs to build locally the RLN community membership tree.
|
||
|
||
**🏄🏼♂️ 3. Interact with your nwaku node**
|
||
* See [http://localhost:3000/d/yns_4vFVk/nwaku-monitoring](http://localhost:3000/d/yns_4vFVk/nwaku-monitoring) for node metrics.
|
||
* See [localhost:4000](http://localhost:4000). Under development 🚧
|
||
|
||
**📬 4. Use the REST API**
|
||
|
||
Your nwaku node exposes a [REST API](https://waku-org.github.io/waku-rest-api/) to interact with it.
|
||
|
||
```
|
||
# get nwaku version
|
||
curl http://127.0.0.1:8645/debug/v1/version
|
||
# get nwaku info
|
||
curl http://127.0.0.1:8645/debug/v1/info
|
||
```
|
||
|
||
**Publish a message to a `contentTopic`**. Everyone subscribed to it will receive it. Note that `payload` is base64 encoded.
|
||
|
||
```
|
||
curl -X POST "http://127.0.0.1:8645/relay/v1/auto/messages" \
|
||
-H "content-type: application/json" \
|
||
-d '{"payload":"'$(echo -n "Hello Waku Network - from Anonymous User" | base64)'","contentTopic":"/my-app/2/chatroom-1/proto"}'
|
||
```
|
||
|
||
**Get messages sent to a `contentTopic`**. Note that any store node in the network is used to reply.
|
||
```
|
||
curl -X GET "http://127.0.0.1:8645/store/v1/messages?contentTopics=%2Fmy-app%2F2%2Fchatroom-1%2Fproto&pageSize=50&ascending=true" \
|
||
-H "accept: application/json"
|
||
```
|
||
|
||
For advanced documentation, refer to [ADVANCED.md](https://github.com/waku-org/nwaku-compose/blob/master/ADVANCED.md).
|
||
|
||
# Node operator recognition
|
||
We appreciate the participation on The Waku Network!
|
||
|
||
With that, for those aiming to have their nodes monitored we
|
||
encourage to do the following:
|
||
|
||
1. Establish a fixed and private node key.
|
||
Create a 64 character random hex string with:
|
||
```bash
|
||
openssl rand -hex 32
|
||
```
|
||
and paste it in the `NODEKEY` env var.
|
||
|
||
Example:
|
||
```bash
|
||
NODEKEY=90200835bf53c689559bdd420fcab1a9057454377ccd9ae938fcf3b9b4c40785
|
||
```
|
||
|
||
2. Restart your node (`docker compose down` & `docker-compose up -d`)
|
||
|
||
3. Wait a few minutes and retrieve your public multiaddress with the following command:
|
||
```bash
|
||
curl -X GET http://localhost:8645/debug/v1/info | sed -n 's/.*listenAddresses":\["\(.*\)"\].*/\1/p'
|
||
```
|
||
|
||
You should see something similar to:
|
||
```bash
|
||
/ip4/57.129.6.17/tcp/30304/p2p/16Uiu2HAmD4dpgoGKXHjEp5749uPpDwRm6Bpf4TuKTKrj6ErsAa1N
|
||
```
|
||
|
||
:warning: Make sure your node always retrieve the same public multiaddress. This can be checked by restarting the node twice.
|
||
|
||
4. Send that public address to us on Discord:
|
||
https://discord.com/channels/1110799176264056863/1216748184592711691
|