2022-12-01 07:58:41 +00:00
<!DOCTYPE html>
< html lang = "en" dir = "ltr" >
< head >
2022-12-01 08:37:15 +00:00
< meta name = "generator" content = "Hugo 0.106.0" >
2022-12-01 07:58:41 +00:00
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< meta name = "description" content = "Content Topic: / toy-chat / 2 / huilong / proto .
This specification explains a toy chat example using Waku v2. This protocol is mainly used to:
2022-12-01 08:37:15 +00:00
Dogfood Waku v2, Show an example of how to use Waku v2. Currently, all main Waku v2 implementations support the toy chat protocol: nim-waku, js-waku (NodeJS and web) and go-waku.
2022-12-01 07:58:41 +00:00
Note that this is completely separate from the protocol the Status app is using for its chat functionality.
2022-12-01 08:37:15 +00:00
Design # The chat protocol enables sending and receiving messages in a chat room.">
2022-12-01 07:58:41 +00:00
< meta name = "theme-color" content = "#FFFFFF" > < meta property = "og:title" content = "22/TOY-CHAT" / >
< meta property = "og:description" content = "Content Topic: / toy-chat / 2 / huilong / proto .
This specification explains a toy chat example using Waku v2. This protocol is mainly used to:
2022-12-01 08:37:15 +00:00
Dogfood Waku v2, Show an example of how to use Waku v2. Currently, all main Waku v2 implementations support the toy chat protocol: nim-waku, js-waku (NodeJS and web) and go-waku.
2022-12-01 07:58:41 +00:00
Note that this is completely separate from the protocol the Status app is using for its chat functionality.
2022-12-01 08:37:15 +00:00
Design # The chat protocol enables sending and receiving messages in a chat room." />
2022-12-01 07:58:41 +00:00
< meta property = "og:type" content = "article" / >
< meta property = "og:url" content = "https://rfc.vac.dev/spec/22/" / > < meta property = "article:section" content = "docs" / >
< title > 22/TOY-CHAT | Vac RFC< / title >
< link rel = "manifest" href = "/manifest.json" >
< link rel = "icon" href = "/favicon.png" type = "image/x-icon" >
< link rel = "stylesheet" href = "/book.min.e935e20bd0d469378cb482f0958edf258c731a4f895dccd55799c6fbc8043f23.css" integrity = "sha256-6TXiC9DUaTeMtILwlY7fJYxzGk+JXczVV5nG+8gEPyM=" >
2022-12-07 18:15:09 +00:00
< script defer src = "/en.search.min.aa3278d1aeda578ff7108aa1b25e09f72893c3f391dc643c98382c7328f1faed.js" integrity = "sha256-qjJ40a7aV4/3EIqhsl4J9yiTw/OR3GQ8mDgscyjx+u0=" > < / script >
2022-12-01 07:58:41 +00:00
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
< / head >
< body dir = "ltr" >
< input type = "checkbox" class = "hidden toggle" id = "menu-control" / >
< input type = "checkbox" class = "hidden toggle" id = "toc-control" / >
< main class = "container flex" >
< aside class = "book-menu" >
< div class = "book-menu-content" >
< nav >
< h2 class = "book-brand" >
< a href = "/" > < span > Vac RFC< / span >
< / a >
< / h2 >
< div class = "book-search" >
< input type = "text" id = "book-search-input" placeholder = "Search" aria-label = "Search" maxlength = "64" data-hotkeys = "s/" / >
< div class = "book-search-spinner hidden" > < / div >
< ul id = "book-search-results" > < / ul >
< / div >
< ul >
< li > Raw
< ul >
< li > < a href = "/spec/20/" > 20/TOY-ETH-PM< / a > < / li >
< li > < a href = "/spec/24/" > 24/STATUS-CURATION< / a > < / li >
< li > < a href = "/spec/28/" > 28/STATUS-FEATURING< / a > < / li >
< li > < a href = "/spec/31/" > 31/WAKU2-ENR< / a > < / li >
< li > < a href = "/spec/32/" > 32/RLN-SPEC< / a > < / li >
< li > < a href = "/spec/34/" > 34/WAKU2-PEER-EXCHANGE< / a > < / li >
< li > < a href = "/spec/35/" > 35/WAKU2-NOISE< / a > < / li >
< li > < a href = "/spec/37/" > 37/WAKU2-NOISE-SESSIONS< / a > < / li >
2022-12-06 09:59:38 +00:00
< li > < a href = "/spec/38/" > 38/CONSENSUS-CLARO< / a > < / li >
2022-12-01 07:58:41 +00:00
< li > < a href = "/spec/43/" > 43/WAKU2-NOISE-PAIRING< / a > < / li >
< li > < a href = "/spec/44/" > 44/WAKU2-DANDELION< / a > < / li >
< li > < a href = "/spec/45/" > 45/WAKU2-ADVERSARIAL-MODELS< / a > < / li >
2022-12-02 14:32:42 +00:00
< li > < a href = "/spec/46/" > 46/GOSSIPSUB-TOR-PUSH< / a > < / li >
< li > < a href = "/spec/47/" > 47/WAKU2-TOR-PUSH< / a > < / li >
2022-12-01 07:58:41 +00:00
< / ul >
< / li >
< li > Draft
< ul >
< li > < a href = "/spec/1/" > 1/COSS< / a > < / li >
< li > < a href = "/spec/3/" > 3/REMOTE-LOG< / a > < / li >
< li > < a href = "/spec/4/" > 4/MVDS-META< / a > < / li >
< li > < a href = "/spec/10/" > 10/WAKU2< / a > < / li >
< li > < a href = "/spec/12/" > 12/WAKU2-FILTER< / a > < / li >
< li > < a href = "/spec/13/" > 13/WAKU2-STORE< / a > < / li >
< li > < a href = "/spec/14/" > 14/WAKU2-MESSAGE< / a > < / li >
< li > < a href = "/spec/15/" > 15/WAKU2-BRIDGE< / a > < / li >
< li > < a href = "/spec/16/" > 16/WAKU2-RPC< / a > < / li >
< li > < a href = "/spec/17/" > 17/WAKU2-RLN-RELAY< / a > < / li >
< li > < a href = "/spec/18/" > 18/WAKU2-SWAP< / a > < / li >
< li > < a href = "/spec/19/" > 19/WAKU2-LIGHTPUSH< / a > < / li >
< li > < a href = "/spec/21/" > 21/WAKU2-FTSTORE< / a > < / li >
< li > < a href = "/spec/22/" class = active > 22/TOY-CHAT< / a > < / li >
< li > < a href = "/spec/23/" > 23/WAKU2-TOPICS< / a > < / li >
< li > < a href = "/spec/26/" > 26/WAKU2-PAYLOAD< / a > < / li >
< li > < a href = "/spec/27/" > 27/WAKU2-PEERS< / a > < / li >
< li > < a href = "/spec/29/" > 29/WAKU2-CONFIG< / a > < / li >
< li > < a href = "/spec/30/" > 30/ADAPTIVE-NODES< / a > < / li >
< li > < a href = "/spec/33/" > 33/WAKU2-DISCV5< / a > < / li >
< li > < a href = "/spec/36/" > 36/WAKU2-BINDINGS-API< / a > < / li >
< / ul >
< / li >
< li > Stable
< ul >
< li > < a href = "/spec/2/" > 2/MVDS< / a > < / li >
< li > < a href = "/spec/6/" > 6/WAKU1< / a > < / li >
< li > < a href = "/spec/7/" > 7/WAKU-DATA< / a > < / li >
< li > < a href = "/spec/8/" > 8/WAKU-MAIL< / a > < / li >
< li > < a href = "/spec/9/" > 9/WAKU-RPC< / a > < / li >
< li > < a href = "/spec/11/" > 11/WAKU2-RELAY< / a > < / li >
< / ul >
< / li >
< li > Deprecated
< ul >
< li > < a href = "/spec/5/" > 5/WAKU0< / a > < / li >
< / ul >
< / li >
< li > Retired< / li >
< / ul >
< / nav >
2022-12-01 08:37:15 +00:00
< script > ( function ( ) { var e = document . querySelector ( "aside.book-menu nav" ) ; addEventListener ( "beforeunload" , function ( ) { localStorage . setItem ( "menu.scrollTop" , e . scrollTop ) } ) , e . scrollTop = localStorage . getItem ( "menu.scrollTop" ) } ) ( ) < / script >
2022-12-01 07:58:41 +00:00
< / div >
< / aside >
< div class = "book-page" >
< header class = "book-header" >
< div class = "flex align-center justify-between" >
< label for = "menu-control" >
< img src = "/svg/menu.svg" class = "book-icon" alt = "Menu" / >
< / label >
< strong > 22/TOY-CHAT< / strong >
< label for = "toc-control" >
< img src = "/svg/toc.svg" class = "book-icon" alt = "Table of Contents" / >
< / label >
< / div >
< aside class = "hidden clearfix" >
< nav id = "TableOfContents" > < / nav >
< / aside >
< / header >
< article class = "markdown" >
2022-12-01 08:37:15 +00:00
< h1 id = "22toy-chat" >
22/TOY-CHAT
< a class = "anchor" href = "#22toy-chat" > #< / a >
< / h1 >
2022-12-01 07:58:41 +00:00
2022-12-01 08:37:15 +00:00
< h1 id = "waku-v2-toy-chat" >
Waku v2 Toy Chat
< a class = "anchor" href = "#waku-v2-toy-chat" > #< / a >
< / h1 >
2022-12-01 07:58:41 +00:00
< img src = "https://img.shields.io/badge/status-draft-blue?style=flat-square" / >
< ul >
< li > Status: draft< / li >
< li > Editor: Franck Royer < a href = "mailto:franck@status.im" > franck@status.im< / a > < / li >
< li > Contributors:
Hanno Cornelius < a href = "mailto:hanno@status.im" > hanno@status.im< / a >
< / li >
< / ul > < p > < strong > Content Topic< / strong > : < code > /toy-chat/2/huilong/proto< / code > .< / p >
< p > This specification explains a toy chat example using Waku v2.
This protocol is mainly used to:< / p >
< ol >
< li > Dogfood Waku v2,< / li >
< li > Show an example of how to use Waku v2.< / li >
< / ol >
< p > Currently, all main Waku v2 implementations support the toy chat protocol:
< a href = "https://github.com/status-im/nim-waku/blob/master/examples/v2/chat2.nim" > nim-waku< / a > ,
js-waku (< a href = "https://github.com/status-im/js-waku/tree/main/examples/cli-chat" > NodeJS< / a > and < a href = "https://github.com/status-im/js-waku/tree/main/examples/web-chat" > web< / a > )
and < a href = "https://github.com/status-im/go-waku/tree/master/examples/chat2" > go-waku< / a > .< / p >
< p > Note that this is completely separate from the protocol the Status app is using for its chat functionality.< / p >
< h1 id = "design" >
Design
< a class = "anchor" href = "#design" > #< / a >
< / h1 >
< p > The chat protocol enables sending and receiving messages in a chat room.
There is currently only one chat room, which is tied to the content topic.
The messages SHOULD NOT be encrypted.< / p >
< p > The < code > contentTopic< / code > MUST be set to < code > /toy-chat/2/huilong/proto< / code > .< / p >
< h1 id = "payloads" >
Payloads
< a class = "anchor" href = "#payloads" > #< / a >
< / h1 >
2022-12-01 08:37:15 +00:00
< div class = "highlight" > < pre tabindex = "0" style = "color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;" > < code class = "language-protobuf" data-lang = "protobuf" > < span style = "display:flex;" > < span > syntax < span style = "color:#f92672" > =< / span > < span style = "color:#e6db74" > " proto3" < / span > ;< span style = "color:#960050;background-color:#1e0010" >
< / span > < / span > < / span > < span style = "display:flex;" > < span > < span style = "color:#960050;background-color:#1e0010" >
< / span > < / span > < / span > < span style = "display:flex;" > < span > < span style = "color:#960050;background-color:#1e0010" > < / span > < span style = "color:#66d9ef" > message< / span > < span style = "color:#a6e22e" > Chat2Message< / span > {< span style = "color:#960050;background-color:#1e0010" >
< / span > < / span > < / span > < span style = "display:flex;" > < span > < span style = "color:#960050;background-color:#1e0010" > < / span > < span style = "color:#66d9ef" > uint64< / span > timestamp < span style = "color:#f92672" > =< / span > < span style = "color:#ae81ff" > 1< / span > ;< span style = "color:#960050;background-color:#1e0010" >
< / span > < / span > < / span > < span style = "display:flex;" > < span > < span style = "color:#960050;background-color:#1e0010" > < / span > < span style = "color:#66d9ef" > string< / span > nick < span style = "color:#f92672" > =< / span > < span style = "color:#ae81ff" > 2< / span > ;< span style = "color:#960050;background-color:#1e0010" >
< / span > < / span > < / span > < span style = "display:flex;" > < span > < span style = "color:#960050;background-color:#1e0010" > < / span > < span style = "color:#66d9ef" > bytes< / span > payload < span style = "color:#f92672" > =< / span > < span style = "color:#ae81ff" > 3< / span > ;< span style = "color:#960050;background-color:#1e0010" >
< / span > < / span > < / span > < span style = "display:flex;" > < span > < span style = "color:#960050;background-color:#1e0010" > < / span > }< span style = "color:#960050;background-color:#1e0010" >
< / span > < / span > < / span > < / code > < / pre > < / div > < ul >
2022-12-01 07:58:41 +00:00
< li > < code > timestamp< / code > : The time at which the message was sent, in Unix Epoch seconds,< / li >
< li > < code > nick< / code > : The nickname of the user sending the message,< / li >
< li > < code > payload< / code > : The text of the messages, UTF-8 encoded.< / li >
< / ul >
< h1 id = "copyright" >
Copyright
< a class = "anchor" href = "#copyright" > #< / a >
< / h1 >
< p > Copyright and related rights waived via < a href = "https://creativecommons.org/publicdomain/zero/1.0/" > CC0< / a > .< / p >
< / article >
< footer class = "book-footer" >
< div class = "flex flex-wrap justify-between" >
< / div >
< / footer >
< div class = "book-comments" >
< / div >
< label for = "menu-control" class = "hidden book-menu-overlay" > < / label >
< / div >
< aside class = "book-toc" >
< div class = "book-toc-content" >
< nav id = "TableOfContents" > < / nav >
< / div >
< / aside >
< / main >
< / body >
< / html >