Skip to content
Branch: master
Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples Bump vendor/nim-eth Jan 23, 2020
rpc Change Waku RPC methods prefix Jan 23, 2020 Check all subscribed topics in quicksim + bump vendor/nim-eth Feb 14, 2020
config.nim Update to use waku topic-interest Feb 7, 2020
nim.cfg Start implementation of waku node Jan 23, 2020
quicksim.nim Check all subscribed topics in quicksim + bump vendor/nim-eth Feb 14, 2020
start_network.nim Update to use waku topic-interest Feb 7, 2020
wakunode.nim Update to use waku topic-interest Feb 7, 2020


wakunode is a cli application that allows you to run a Waku enabled node.

The application and Waku specification are still experimental and fully in flux.

Additionally the original Whisper (EIP-627) protocol can also be enabled as can an experimental Whisper - Waku bridging option.

How to Build & Run

make wakunode
./build/wakunode --help

Using Metrics

Metrics are available for valid envelopes and dropped envelopes.

To compile in an HTTP endpoint for accessing the metrics we need to provide the insecure flag:

make NIMFLAGS="-d:insecure" wakunode
./build/wakunode --metrics-server

Ensure your Prometheus config prometheus.yml contains the targets you care about, e.g.:

  - job_name: "waku"
      - targets: ['localhost:8008', 'localhost:8009', 'localhost:8010']

For visualisation, similar steps can be used as is written down for Nimbus here.

There is a similar example dashboard that includes visualisation of the envelopes available at waku/examples/waku-grafana-dashboard.json.

Testing Waku Protocol

One can set up several nodes, get them connected and then instruct them via the JSON-RPC interface. This can be done via e.g. web3.js, nim-web3 (needs to be updated) or simply curl your way out.

The JSON-RPC interface is currently the same as the one of Whisper. The only difference is the addition of broadcasting the topics interest when a filter with a certain set of topics is subcribed.

Example of a quick simulation using this approach:

# Build wakunode + quicksim
make NIMFLAGS="-d:insecure" wakusim

# Start the simulation nodes, this currently requires multitail to be installed
./build/start_network --topology:FullMesh --amount:6 --test-node-peers:2
# In another shell run

The start_network tool will also provide a prometheus.yml with targets set to all simulation nodes that are started. This way you can easily start prometheus with this config, e.g.:

cd waku/metrics/prometheus

A Grafana dashboard containing the example dashboard for each simulation node is also generated and can be imported in case you have Grafana running. This dashboard can be found at ./waku/metrics/waku-sim-all-nodes-grafana-dashboard.json

Spec support

This section last updated February 14, 2020

This client of Waku is spec compliant with Waku spec v0.3.

It doesn't yet implement the following recommended features:

  • No support for rate limiting
  • No support for DNS discovery to find Waku nodes
  • It doesn't disconnect a peer if it receives a message before a Status message
  • No support for negotiation with peer supporting multiple versions via Devp2p capabilities in Hello packet

Additionally it makes the following choices:

  • It doesn't send message confirmations
  • It has partial support for accounting:
    • Accounting of total resource usage and total circulated envelopes is done through metrics But no accounting is done for individual peers.
You can’t perform that action at this time.