3.6 KiB
How to run spam prevention on your nwaku node (RLN)
This guide explains how to run a nwaku node with RLN (Rate Limiting Nullifier) enabled.
RLN is a protocol integrated into waku v2, which prevents spam-based attacks on the network.
For further background on the research for RLN tailored to waku, refer to this RFC.
Registering to the membership group has been left out for brevity. If you would like to register to the membership group and send messages with RLN, refer to the on-chain chat2 tutorial.
This guide specifically allows a node to participate in RLN testnet 2. You may alter the rln-specific arguments as required.
Prerequisites
- Follow the droplet quickstart or the build guide till the
make
command for the wakunode2 binary.
Note: If you would like to run a nwaku node with RLN enabled within a docker container, skip ahead to step 2.
1. Update the build command
Instead of just running -
make wakunode2
Run the following command -
make wakunode2 RLN=true
The RLN=true
flag will enable compilation of the waku-rln-relay protocol
into your wakunode2 binary.
2. Update the runtime arguments
Follow Step 10 of the droplet quickstart guide, while replacing the run command with -
export GOERLI_WS_NODE_ADDRESS=<WS RPC URL to a Goerli Node>
export RLN_RELAY_CONTRACT_ADDRESS="0x4252105670fe33d2947e8ead304969849e64f2a6" # Replace this with any compatible implementation
$WAKUNODE_DIR/wakunode2 \
--store:true \
--persist-messages \
--dns-discovery \
--dns-discovery-url:"$WAKU_FLEET" \
--discv5-discovery:true \
--rln-relay:true \
--rln-relay-dynamic:true \
--rln-relay-eth-contract-address:"$RLN_RELAY_CONTRACT_ADDRESS" \
--rln-relay-eth-client-address:"$GOERLI_WS_NODE_ADDRESS"
OR
If you are running the nwaku node within docker, follow Step 2 while replacing the run command with -
export WAKU_FLEET=<entree of the fleet>
export GOERLI_WS_NODE_ADDRESS=<WS RPC URL to a Goerli Node>
export RLN_RELAY_CONTRACT_ADDRESS="0x4252105670fe33d2947e8ead304969849e64f2a6" # Replace this with any compatible implementation
docker run -i -t -p 60000:60000 -p 9000:9000/udp statusteam/nim-waku:v0.12.0 \
--dns-discovery:true \
--dns-discovery-url:"$WAKU_FLEET" \
--discv5-discovery \
--nat:extip:[yourpublicip] \ # or, if you are behind a nat: --nat=any
--rln-relay:true \
--rln-relay-dynamic:true \
--rln-relay-eth-contract-address:"$RLN_RELAY_CONTRACT_ADDRESS" \
--rln-relay-eth-client-address:"$GOERLI_WS_NODE_ADDRESS"
Note: You can choose to keep connections to other nodes alive by adding the
--keep-alive
flag.
Following is the list of additional fields that have been added to the runtime arguments -
--rln-relay
: Allows waku-rln-relay to be mounted into the setup of the nwaku node--rln-relay-dynamic
: Enables waku-rln-relay to connect to an ethereum node to fetch the membership group--rln-relay-eth-contract-address
: The contract address of an RLN membership group--rln-relay-eth-client-address
: The websocket url to a Goerli ethereum node
You should now have nwaku running, with RLN enabled!
To see metrics related to the functioning of RLN, refer to this guide. You can also refer to the periodic logging, for a few metrics like -
- number of spam messages
- number of valid messages
- number of invalid messages
Note: This guide will be updated in the future to include features like slashing.