3fcb13015e | ||
---|---|---|
monitoring | ||
postgres_cfg | ||
.gitignore | ||
ADVANCED.md | ||
README.md | ||
docker-compose.yml | ||
register_rln.sh | ||
run_node.sh |
README.md
nwaku-compose
Ready to use docker-compose to run your own 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
andgit
.
📝 0. Prerequisites
You need:
- Ethereum Sepolia WebSocket endpoint. Get one free from Infura.
- Ethereum Sepolia account with some balance <0.01 Eth. Get some here.
- A password to protect your rln membership.
export ETH_CLIENT_ADDRESS=wss://sepolia.infura.io/ws/v3/YOUR_INFURA_KEY
export ETH_TESTNET_KEY=REPLACE_BY_YOUR_KEY
export KEYSTORE_PASSWORD=PICK_A_PASSWORD
🔑 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. 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 membership is loaded into nwaku under the hood.
docker-compose up -d
🏄🏼♂️ 3. Interact with your nwaku node
- See http://localhost:3000/d/yns_4vFVk/nwaku-monitoring for node metrics.
- See localhost:4000. Under development 🚧
📬 4. Use the REST API
Your nwaku node exposes a 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.