nwaku/docs/tutorial/rln-chat2-live-testnet.md

5.8 KiB

Communicating with waku2 test fleets using chat2 application in spam-protected mode

This document is a tutorial on how to run chat2 in spam-protected/rate-limited mode using the waku-RLN-Relay protocol on a designated content topic /toy-chat/3/mingde/proto. You will connect your chat2 client to waku2 test fleets. Note that test fleets will not filter spam messages, they merely route messages. Spam detection takes place at the chat2 users end. In this setting, you should try to spam the network by violating the message rate limit i.e., sending more than one message per epoch. At the time of this tutorial, the epoch duration is set to 10 seconds. You can inspect the current epoch value by checking the following constant variable in the nim-waku codebase. Your messages will be routed via test fleets and will arrive at other live chat2 clients that are running in rate-limited mode over the same content topic i.e., /toy-chat/3/mingde/proto. Your spam activity will be detected by them and a proper message will be shown on their console.

Set up

Build chat2

First, build chat2

make chat2

Setup a chat2 node in rate-limited mode

Run the following command to set up your chat2 client.

./build/chat2 --content-topic:/toy-chat/3/mingde/proto --ports-shift=1 --fleet:test --rln-relay:true --rln-relay-membership-index:your_index

In this command

  • the rln-relay flag is set to true to enable RLN-Relay protocol for spam protection.
  • the rln-relay-membership-index is used to pick one RLN key out of the 100 available hardcoded RLN keys. You can pass your index using this command --rln-relay-membership-index: your_index e.g., --rln-relay-membership-index:19 . Please use the index assigned to you in the dogfooding coordination phase. If you pick an index at random you may end up using the same key-pair as someone else, hence your messaging rate will be shared with that person(s).

Next, choose your nickname:

Choose a nickname >> your_nick_name

Wait for the chat prompt >> to appear. Now your chat2 client is ready.

You may set up more than one chat client, just make sure that you increment the --ports-shift value for each new client you set up e.g., --ports-shift=2.

Run the test

Now that you have set up your client, start chatting. Once you type a chat line and hit enter, you will see a message that indicates the epoch at which the message is sent e.g.,

>> Hi!
--rln epoch: 164495684
<Feb 15, 12:27> Bob: Hi!

The numerical value 164495684 indicates the epoch of the message Hi!. You will see a different value than 164495684 on your screen. If two messages sent by the same chat2 client happen to have the same RLN epoch value, then one of them will be detected as spam by the receiving chat2 clients. At the time of this tutorial, the epoch duration is set to 10 seconds. Thus, if you send two messages less than 10 seconds apart, they are likely to get the same rln epoch values.

After sending a chat message, you may experience some delay before the next chat prompt appears. The reason is that under the hood a zero-knowledge proof is being generated and attached to your message.

Once you are done with the test, make sure you close all the chat2 clients by typing /exit command.

>> /exit
quitting...

Sample test output

In the following sample test, two chat2 clients are set up, namely Alice and Bob. Bob sends three messages i.e., message1, message2, and message3 to the test fleets. Test fleets will route the messages to their connections including Alice. The two messages message2 and message3 have an identical RLN epoch value of 164504930, so, one of them will be detected as a spam message by Alice. You can check this fact by looking at the Alice console, where A spam message is found and discarded : <Feb 16, 14:08> Bob: message3 is presented.

Bob

./build/chat2  --content-topic:/toy-chat/3/mingde/proto --ports-shift=2 --fleet:test  --rln-relay:true --rln-relay-membership-index:2
Choose a nickname >> Bob
Welcome, Bob!
Connecting to test fleet using DNS discovery...
Discovered and connecting to @[16Uiu2HAkykgaECHswi3YKJ5dMLbq2kPVCo89fcyTd38UcQD6ej5W, 16Uiu2HAkzHaTP5JsUwfR9NR8Rj9HC24puS6ocaU8wze4QrXr9iXp, 16Uiu2HAmDCp8XJ9z1ev18zuv8NHekAsjNyezAvmMfFEJkiharitG]
Listening on
 /ip4/75.157.120.249/tcp/60002/p2p/16Uiu2HAmKdCdP89q6CwLc6PeFDJnVR1EmM7fTgtphHiacSNBnuAz
Store enabled, but no store nodes configured. Choosing one at random from discovered peers
Connecting to storenode: 16Uiu2HAkykgaECHswi3YKJ5dMLbq2kPVCo89fcyTd38UcQD6ej5W
>> message1
--rln epoch: 164504929
<Feb 16, 14:08> Bob: message1
>> message2
--rln epoch: 164504930
<Feb 16, 14:08> Bob: message2
>> message3
--rln epoch: 164504930
<Feb 16, 14:08> Bob: message3
>> message4
--rln epoch: 164504973
<Feb 16, 14:15> Bob: message4
>> /exit
quitting...

Alice

./build/chat2 --content-topic:/toy-chat/3/mingde/proto --ports-shift=1 --fleet:test  --rln-relay:true --rln-relay-membership-index:1

Choose a nickname >> Alice
Welcome, Alice!
Connecting to test fleet using DNS discovery...
Discovered and connecting to @[16Uiu2HAkykgaECHswi3YKJ5dMLbq2kPVCo89fcyTd38UcQD6ej5W, 16Uiu2HAkzHaTP5JsUwfR9NR8Rj9HC24puS6ocaU8wze4QrXr9iXp, 16Uiu2HAmDCp8XJ9z1ev18zuv8NHekAsjNyezAvmMfFEJkiharitG]
Listening on
 /ip4/75.157.120.249/tcp/60001/p2p/16Uiu2HAkyTos6LeGrj1YJyA3WYzp9qKQGCsxbtvyoBRHSu9PCrQZ
Store enabled, but no store nodes configured. Choosing one at random from discovered peers
Connecting to storenode: 16Uiu2HAkykgaECHswi3YKJ5dMLbq2kPVCo89fcyTd38UcQD6ej5W
>> <Feb 16, 14:08> Bob: message1
>> <Feb 16, 14:08> Bob: message2
>> A spam message is found and discarded : <Feb 16, 14:08> Bob: message3
<Feb 16, 14:15> Bob: message4
>> /exit
quitting...