Files
rfc-index/status/deprecated/waku-usage.html
2025-12-22 13:04:47 +00:00

559 lines
50 KiB
HTML

<!DOCTYPE HTML>
<html lang="en" class="ayu" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Waku Usage - Vac RFC</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../../favicon.svg">
<link rel="shortcut icon" href="../../favicon.png">
<link rel="stylesheet" href="../../css/variables.css">
<link rel="stylesheet" href="../../css/general.css">
<link rel="stylesheet" href="../../css/chrome.css">
<link rel="stylesheet" href="../../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="../../highlight.css">
<link rel="stylesheet" href="../../tomorrow-night.css">
<link rel="stylesheet" href="../../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<link rel="stylesheet" href="../../custom.css">
</head>
<body class="sidebar-visible no-js">
<div id="body-container">
<!-- Provide site root to javascript -->
<script>
var path_to_root = "../../";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "ayu";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('ayu')
html.classList.add(theme);
var body = document.querySelector('body');
body.classList.remove('no-js')
body.classList.add('js');
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var body = document.querySelector('body');
var sidebar = null;
var sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
body.classList.remove('sidebar-visible');
body.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded affix "><a href="../../index.html">Introduction</a></li><li class="chapter-item expanded "><a href="../../vac/index.html"><strong aria-hidden="true">1.</strong> Vac</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../vac/1/coss.html"><strong aria-hidden="true">1.1.</strong> 1/COSS</a></li><li class="chapter-item expanded "><a href="../../vac/2/mvds.html"><strong aria-hidden="true">1.2.</strong> 2/MVDS</a></li><li class="chapter-item expanded "><a href="../../vac/3/remote-log.html"><strong aria-hidden="true">1.3.</strong> 3/Remote Log</a></li><li class="chapter-item expanded "><a href="../../vac/4/mvds-meta.html"><strong aria-hidden="true">1.4.</strong> 4/MVDS Meta</a></li><li class="chapter-item expanded "><a href="../../vac/25/libp2p-dns-discovery.html"><strong aria-hidden="true">1.5.</strong> 25/Libp2p DNS Discovery</a></li><li class="chapter-item expanded "><a href="../../vac/32/rln-v1.html"><strong aria-hidden="true">1.6.</strong> 32/RLN-V1</a></li><li class="chapter-item expanded "><a href="../../vac/raw/index.html"><strong aria-hidden="true">1.7.</strong> Raw</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../vac/raw/consensus-hashgraphlike.html"><strong aria-hidden="true">1.7.1.</strong> Consensus Hashgraphlike</a></li><li class="chapter-item expanded "><a href="../../vac/raw/decentralized-messaging-ethereum.html"><strong aria-hidden="true">1.7.2.</strong> Decentralized Messaging Ethereum</a></li><li class="chapter-item expanded "><a href="../../vac/raw/eth-mls-offchain.html"><strong aria-hidden="true">1.7.3.</strong> ETH MLS Offchain</a></li><li class="chapter-item expanded "><a href="../../vac/raw/eth-mls-onchain.html"><strong aria-hidden="true">1.7.4.</strong> ETH MLS Onchain</a></li><li class="chapter-item expanded "><a href="../../vac/raw/deleted/eth-secpm.html"><strong aria-hidden="true">1.7.5.</strong> ETH SecPM</a></li><li class="chapter-item expanded "><a href="../../vac/raw/gossipsub-tor-push.html"><strong aria-hidden="true">1.7.6.</strong> Gossipsub Tor Push</a></li><li class="chapter-item expanded "><a href="../../vac/raw/logos-capability-discovery.html"><strong aria-hidden="true">1.7.7.</strong> Logos Capability Discovery</a></li><li class="chapter-item expanded "><a href="../../vac/raw/mix.html"><strong aria-hidden="true">1.7.8.</strong> Mix</a></li><li class="chapter-item expanded "><a href="../../vac/raw/noise-x3dh-double-ratchet.html"><strong aria-hidden="true">1.7.9.</strong> Noise X3DH Double Ratchet</a></li><li class="chapter-item expanded "><a href="../../vac/raw/rln-interep-spec.html"><strong aria-hidden="true">1.7.10.</strong> RLN Interep Spec</a></li><li class="chapter-item expanded "><a href="../../vac/raw/rln-stealth-commitments.html"><strong aria-hidden="true">1.7.11.</strong> RLN Stealth Commitments</a></li><li class="chapter-item expanded "><a href="../../vac/raw/rln-v2.html"><strong aria-hidden="true">1.7.12.</strong> RLN-V2</a></li><li class="chapter-item expanded "><a href="../../vac/raw/sds.html"><strong aria-hidden="true">1.7.13.</strong> SDS</a></li></ol></li><li class="chapter-item expanded "><a href="../../vac/template.html"><strong aria-hidden="true">1.8.</strong> Template</a></li></ol></li><li class="chapter-item expanded "><a href="../../waku/index.html"><strong aria-hidden="true">2.</strong> Waku</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../waku/standards/core/index.html"><strong aria-hidden="true">2.1.</strong> Standards - Core</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../waku/standards/core/10/waku2.html"><strong aria-hidden="true">2.1.1.</strong> 10/Waku2</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/11/relay.html"><strong aria-hidden="true">2.1.2.</strong> 11/Relay</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/12/filter.html"><strong aria-hidden="true">2.1.3.</strong> 12/Filter</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/13/store.html"><strong aria-hidden="true">2.1.4.</strong> 13/Store</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/14/message.html"><strong aria-hidden="true">2.1.5.</strong> 14/Message</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/15/bridge.html"><strong aria-hidden="true">2.1.6.</strong> 15/Bridge</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/17/rln-relay.html"><strong aria-hidden="true">2.1.7.</strong> 17/RLN Relay</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/19/lightpush.html"><strong aria-hidden="true">2.1.8.</strong> 19/Lightpush</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/31/enr.html"><strong aria-hidden="true">2.1.9.</strong> 31/ENR</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/33/discv5.html"><strong aria-hidden="true">2.1.10.</strong> 33/Discv5</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/34/peer-exchange.html"><strong aria-hidden="true">2.1.11.</strong> 34/Peer Exchange</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/36/bindings-api.html"><strong aria-hidden="true">2.1.12.</strong> 36/Bindings API</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/64/network.html"><strong aria-hidden="true">2.1.13.</strong> 64/Network</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/66/metadata.html"><strong aria-hidden="true">2.1.14.</strong> 66/Metadata</a></li></ol></li><li class="chapter-item expanded "><a href="../../waku/standards/application/index.html"><strong aria-hidden="true">2.2.</strong> Standards - Application</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../waku/standards/application/20/toy-eth-pm.html"><strong aria-hidden="true">2.2.1.</strong> 20/Toy ETH PM</a></li><li class="chapter-item expanded "><a href="../../waku/standards/application/26/payload.html"><strong aria-hidden="true">2.2.2.</strong> 26/Payload</a></li><li class="chapter-item expanded "><a href="../../waku/standards/application/53/x3dh.html"><strong aria-hidden="true">2.2.3.</strong> 53/X3DH</a></li><li class="chapter-item expanded "><a href="../../waku/standards/application/54/x3dh-sessions.html"><strong aria-hidden="true">2.2.4.</strong> 54/X3DH Sessions</a></li></ol></li><li class="chapter-item expanded "><a href="../../waku/standards/legacy/index.html"><strong aria-hidden="true">2.3.</strong> Standards - Legacy</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../waku/standards/legacy/6/waku1.html"><strong aria-hidden="true">2.3.1.</strong> 6/Waku1</a></li><li class="chapter-item expanded "><a href="../../waku/standards/legacy/7/data.html"><strong aria-hidden="true">2.3.2.</strong> 7/Data</a></li><li class="chapter-item expanded "><a href="../../waku/standards/legacy/8/mail.html"><strong aria-hidden="true">2.3.3.</strong> 8/Mail</a></li><li class="chapter-item expanded "><a href="../../waku/standards/legacy/9/rpc.html"><strong aria-hidden="true">2.3.4.</strong> 9/RPC</a></li></ol></li><li class="chapter-item expanded "><a href="../../waku/informational/index.html"><strong aria-hidden="true">2.4.</strong> Informational</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../waku/informational/22/toy-chat.html"><strong aria-hidden="true">2.4.1.</strong> 22/Toy Chat</a></li><li class="chapter-item expanded "><a href="../../waku/informational/23/topics.html"><strong aria-hidden="true">2.4.2.</strong> 23/Topics</a></li><li class="chapter-item expanded "><a href="../../waku/informational/27/peers.html"><strong aria-hidden="true">2.4.3.</strong> 27/Peers</a></li><li class="chapter-item expanded "><a href="../../waku/informational/29/config.html"><strong aria-hidden="true">2.4.4.</strong> 29/Config</a></li><li class="chapter-item expanded "><a href="../../waku/informational/30/adaptive-nodes.html"><strong aria-hidden="true">2.4.5.</strong> 30/Adaptive Nodes</a></li></ol></li><li class="chapter-item expanded "><a href="../../waku/deprecated/index.html"><strong aria-hidden="true">2.5.</strong> Deprecated</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../waku/deprecated/5/waku0.html"><strong aria-hidden="true">2.5.1.</strong> 5/Waku0</a></li><li class="chapter-item expanded "><a href="../../waku/deprecated/16/rpc.html"><strong aria-hidden="true">2.5.2.</strong> 16/RPC</a></li><li class="chapter-item expanded "><a href="../../waku/deprecated/18/swap.html"><strong aria-hidden="true">2.5.3.</strong> 18/Swap</a></li><li class="chapter-item expanded "><a href="../../waku/deprecated/fault-tolerant-store.html"><strong aria-hidden="true">2.5.4.</strong> Fault Tolerant Store</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="../../nomos/index.html"><strong aria-hidden="true">3.</strong> Nomos</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../nomos/raw/index.html"><strong aria-hidden="true">3.1.</strong> Raw</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../nomos/raw/nomosda-encoding.html"><strong aria-hidden="true">3.1.1.</strong> NomosDA Encoding</a></li><li class="chapter-item expanded "><a href="../../nomos/raw/nomosda-network.html"><strong aria-hidden="true">3.1.2.</strong> NomosDA Network</a></li><li class="chapter-item expanded "><a href="../../nomos/raw/p2p-hardware-requirements.html"><strong aria-hidden="true">3.1.3.</strong> P2P Hardware Requirements</a></li><li class="chapter-item expanded "><a href="../../nomos/raw/p2p-nat-solution.html"><strong aria-hidden="true">3.1.4.</strong> P2P NAT Solution</a></li><li class="chapter-item expanded "><a href="../../nomos/raw/p2p-network-bootstrapping.html"><strong aria-hidden="true">3.1.5.</strong> P2P Network Bootstrapping</a></li><li class="chapter-item expanded "><a href="../../nomos/raw/p2p-network.html"><strong aria-hidden="true">3.1.6.</strong> P2P Network</a></li><li class="chapter-item expanded "><a href="../../nomos/raw/sdp.html"><strong aria-hidden="true">3.1.7.</strong> SDP</a></li></ol></li><li class="chapter-item expanded "><a href="../../nomos/deprecated/index.html"><strong aria-hidden="true">3.2.</strong> Deprecated</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../nomos/deprecated/claro.html"><strong aria-hidden="true">3.2.1.</strong> Claro</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="../../codex/index.html"><strong aria-hidden="true">4.</strong> Codex</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../codex/raw/index.html"><strong aria-hidden="true">4.1.</strong> Raw</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../codex/raw/codex-block-exchange.html"><strong aria-hidden="true">4.1.1.</strong> Block Exchange</a></li><li class="chapter-item expanded "><a href="../../codex/raw/codex-marketplace.html"><strong aria-hidden="true">4.1.2.</strong> Marketplace</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="../../status/index.html"><strong aria-hidden="true">5.</strong> Status</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../status/24/curation.html"><strong aria-hidden="true">5.1.</strong> 24/Curation</a></li><li class="chapter-item expanded "><a href="../../status/28/featuring.html"><strong aria-hidden="true">5.2.</strong> 28/Featuring</a></li><li class="chapter-item expanded "><a href="../../status/55/1to1-chat.html"><strong aria-hidden="true">5.3.</strong> 55/1-to-1 Chat</a></li><li class="chapter-item expanded "><a href="../../status/56/communities.html"><strong aria-hidden="true">5.4.</strong> 56/Communities</a></li><li class="chapter-item expanded "><a href="../../status/61/community-history-service.html"><strong aria-hidden="true">5.5.</strong> 61/Community History Service</a></li><li class="chapter-item expanded "><a href="../../status/62/payloads.html"><strong aria-hidden="true">5.6.</strong> 62/Payloads</a></li><li class="chapter-item expanded "><a href="../../status/63/keycard-usage.html"><strong aria-hidden="true">5.7.</strong> 63/Keycard Usage</a></li><li class="chapter-item expanded "><a href="../../status/65/account-address.html"><strong aria-hidden="true">5.8.</strong> 65/Account Address</a></li><li class="chapter-item expanded "><a href="../../status/71/push-notification-server.html"><strong aria-hidden="true">5.9.</strong> 71/Push Notification Server</a></li><li class="chapter-item expanded "><a href="../../status/raw/index.html"><strong aria-hidden="true">5.10.</strong> Raw</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../status/raw/simple-scaling.html"><strong aria-hidden="true">5.10.1.</strong> Simple Scaling</a></li><li class="chapter-item expanded "><a href="../../status/raw/status-app-protocols.html"><strong aria-hidden="true">5.10.2.</strong> Status App Protocols</a></li><li class="chapter-item expanded "><a href="../../status/raw/status-mvds.html"><strong aria-hidden="true">5.10.3.</strong> Status MVDS</a></li><li class="chapter-item expanded "><a href="../../status/raw/url-data.html"><strong aria-hidden="true">5.10.4.</strong> URL Data</a></li><li class="chapter-item expanded "><a href="../../status/raw/url-scheme.html"><strong aria-hidden="true">5.10.5.</strong> URL Scheme</a></li></ol></li><li class="chapter-item expanded "><a href="../../status/deprecated/index.html"><strong aria-hidden="true">5.11.</strong> Deprecated</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../status/deprecated/3rd-party.html"><strong aria-hidden="true">5.11.1.</strong> 3rd Party</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/account.html"><strong aria-hidden="true">5.11.2.</strong> Account</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/client.html"><strong aria-hidden="true">5.11.3.</strong> Client</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/dapp-browser-API-usage.html"><strong aria-hidden="true">5.11.4.</strong> Dapp Browser API Usage</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/eips.html"><strong aria-hidden="true">5.11.5.</strong> EIPs</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/ethereum-usage.html"><strong aria-hidden="true">5.11.6.</strong> Ethereum Usage</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/group-chat.html"><strong aria-hidden="true">5.11.7.</strong> Group Chat</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/IPFS-gateway-for-sticker-Pack.html"><strong aria-hidden="true">5.11.8.</strong> IPFS Gateway for Sticker Pack</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/keycard-usage-for-wallet-and-chat-keys.html"><strong aria-hidden="true">5.11.9.</strong> Keycard Usage for Wallet and Chat Keys</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/notifications.html"><strong aria-hidden="true">5.11.10.</strong> Notifications</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/payloads.html"><strong aria-hidden="true">5.11.11.</strong> Payloads</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/push-notification-server.html"><strong aria-hidden="true">5.11.12.</strong> Push Notification Server</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/secure-transport.html"><strong aria-hidden="true">5.11.13.</strong> Secure Transport</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/waku-mailserver.html"><strong aria-hidden="true">5.11.14.</strong> Waku Mailserver</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/waku-usage.html" class="active"><strong aria-hidden="true">5.11.15.</strong> Waku Usage</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/whisper-mailserver.html"><strong aria-hidden="true">5.11.16.</strong> Whisper Mailserver</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/whisper-usage.html"><strong aria-hidden="true">5.11.17.</strong> Whisper Usage</a></li></ol></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<!-- Track and set sidebar scroll position -->
<script>
var sidebarScrollbox = document.querySelector('#sidebar .sidebar-scrollbox');
sidebarScrollbox.addEventListener('click', function(e) {
if (e.target.tagName === 'A') {
sessionStorage.setItem('sidebar-scroll', sidebarScrollbox.scrollTop);
}
}, { passive: true });
var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll');
sessionStorage.removeItem('sidebar-scroll');
if (sidebarScrollTop) {
// preserve sidebar scroll position when navigating via links within sidebar
sidebarScrollbox.scrollTop = sidebarScrollTop;
} else {
// scroll sidebar to current active section when navigating via "next/previous chapter" buttons
var activeSection = document.querySelector('#sidebar .active');
if (activeSection) {
activeSection.scrollIntoView({ block: 'center' });
}
}
</script>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Vac RFC</h1>
<div class="right-buttons">
<a href="../../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
<a href="https://github.com/vacp2p/rfc-index" title="Git repository" aria-label="Git repository">
<i id="git-repository-button" class="fa fa-github"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="waku-usage"><a class="header" href="#waku-usage">WAKU-USAGE</a></h1>
<div class="rfc-meta">
<table>
<tr><th>Name</th><td>Waku Usage</td></tr>
<tr><th>Status</th><td>deprecated</td></tr>
<tr><th>Editor</th><td>Filip Dimitrijevic &lt;filip@status.im&gt;</td></tr>
<tr><th>Contributors</th><td>Adam Babik &lt;adam@status.im&gt;<br>Corey Petty &lt;corey@status.im&gt;<br>Oskar Thorén &lt;oskar@status.im&gt;<br>Samuel Hawksby-Robinson &lt;samuel@status.im&gt;</td></tr>
</table>
</div>
<!-- timeline:start -->
<h2 id="timeline"><a class="header" href="#timeline">Timeline</a></h2>
<ul>
<li><strong>2025-12-22</strong><a href="https://github.com/vacp2p/rfc-index/blob/b1a578393edf8487ccc97a5f25b25af9bf41efb3/docs/status/deprecated/waku-usage.md"><code>b1a5783</code></a> — Chore/mdbook updates (#237)</li>
<li><strong>2025-12-18</strong><a href="https://github.com/vacp2p/rfc-index/blob/d03e699084774ebecef9c6d4662498907c5e2080/docs/status/deprecated/waku-usage.md"><code>d03e699</code></a> — ci: add mdBook configuration (#233)</li>
<li><strong>2025-04-29</strong><a href="https://github.com/vacp2p/rfc-index/blob/614348a4982aa9e519ccff8b8fbcd4c554683288/status/deprecated/waku-usage.md"><code>614348a</code></a> — Status deprecated update2 (#134)</li>
</ul>
<!-- timeline:end -->
<h2 id="abstract"><a class="header" href="#abstract">Abstract</a></h2>
<p>Status uses <a href="/waku/standards/legacy/6/waku1.html">Waku</a> to provide privacy-preserving routing
and messaging on top of devP2P.
Waku uses topics to partition its messages,
and these are leveraged for all chat capabilities.
In the case of public chats, the channel name maps directly to its Waku topic.
This allows anyone to listen on a single channel.</p>
<p>Additionally, since anyone can receive Waku envelopes,
it relies on the ability to decrypt messages to decide who is the correct recipient.
Status nodes do not rely upon this property,
and implement another secure transport layer on top of Whisper.</p>
<h2 id="reason"><a class="header" href="#reason">Reason</a></h2>
<p>Provide routing, metadata protection, topic-based multicasting and basic
encryption properties to support asynchronous chat.</p>
<h2 id="terminology"><a class="header" href="#terminology">Terminology</a></h2>
<ul>
<li><em>Waku node</em>: an Ethereum node with Waku V1 enabled</li>
<li><em>Waku network</em>: a group of Waku nodes connected together through the internet connection and forming a graph</li>
<li><em>Message</em>: a decrypted Waku message</li>
<li><em>Offline message</em>: an archived envelope</li>
<li><em>Envelope</em>: an encrypted message with metadata like topic and Time-To-Live</li>
</ul>
<h2 id="waku-packets"><a class="header" href="#waku-packets">Waku packets</a></h2>
<div class="table-wrapper"><table><thead><tr><th>Packet Name</th><th style="text-align: right">Code</th><th>References</th></tr></thead><tbody>
<tr><td>Status</td><td style="text-align: right">0</td><td><a href="status">Status</a>, <a href="/waku/standards/legacy/6/waku1.html#status">WAKU-1</a></td></tr>
<tr><td>Messages</td><td style="text-align: right">1</td><td><a href="/waku/standards/legacy/6/waku1.html#messages">WAKU-1</a></td></tr>
<tr><td>Batch Ack</td><td style="text-align: right">11</td><td>Undocumented. Marked for Deprecation</td></tr>
<tr><td>Message Response</td><td style="text-align: right">12</td><td><a href="/waku/standards/legacy/6/waku1.html#batch-ack-and-message-response">WAKU-1</a></td></tr>
<tr><td>Status Update</td><td style="text-align: right">22</td><td><a href="/waku/standards/legacy/6/waku1.html#status-update">WAKU-1</a></td></tr>
<tr><td>P2P Request Complete</td><td style="text-align: right">125</td><td><a href="/status/deprecated/waku-mailserver.html">4/WAKU-MAILSERVER</a></td></tr>
<tr><td>P2P Request</td><td style="text-align: right">126</td><td><a href="/status/deprecated/waku-mailserver.html">4/WAKU-MAILSERVER</a>, <a href="/waku/standards/legacy/6/waku1.html#p2p-request">WAKU-1</a></td></tr>
<tr><td>P2P Messages</td><td style="text-align: right">127</td><td><a href="/status/deprecated/waku-mailserver.html">4/WAKU-MAILSERVER</a>, <a href="/waku/standards/legacy/6/waku1.html#p2p-request-complete">WAKU-1</a></td></tr>
</tbody></table>
</div>
<h2 id="waku-node-configuration"><a class="header" href="#waku-node-configuration">Waku node configuration</a></h2>
<p>A Waku node must be properly configured to receive messages from Status clients.</p>
<p>Nodes use Waku's Proof Of Work algorithm to deter denial of service and various spam/flood attacks against the Whisper network.
The sender of a message must perform some work which in this case means processing time.
Because Status' main client is a mobile client, this easily leads to battery draining and poor performance of the app itself.
Hence, all clients MUST use the following Whisper node settings:</p>
<ul>
<li>proof-of-work requirement not larger than <code>0.002</code> for payloads less than 50,000 bytes</li>
<li>proof-of-work requirement not larger than <code>0.000002</code> for payloads greater than or equal to 50,000 bytes</li>
<li>time-to-live not lower than <code>10</code> (in seconds)</li>
</ul>
<h2 id="status"><a class="header" href="#status">Status</a></h2>
<p>Handshake is a RLP-encoded packet sent to a newly connected peer. It MUST start with a Status Code (<code>0x00</code>) and follow up with items:</p>
<pre><code class="language-golang">[
[ pow-requirement-key pow-requirement ]
[ bloom-filter-key bloom-filter ]
[ light-node-key light-node ]
[ confirmations-enabled-key confirmations-enabled ]
[ rate-limits-key rate-limits ]
[ topic-interest-key topic-interest ]
]
</code></pre>
<div class="table-wrapper"><table><thead><tr><th>Option Name</th><th>Key</th><th>Type</th><th>Description</th><th>References</th></tr></thead><tbody>
<tr><td><code>pow-requirement</code></td><td><code>0x00</code></td><td><code>uint64</code></td><td>minimum PoW accepted by the peer</td><td><a href="/waku/standards/legacy/6/waku1.html#pow-requirement-field">WAKU-1#pow-requirement</a></td></tr>
<tr><td><code>bloom-filter</code></td><td><code>0x01</code></td><td><code>[]byte</code></td><td>bloom filter of Waku topic accepted by the peer</td><td><a href="/waku/standards/legacy/6/waku1.html#bloom-filter-field">WAKU-1#bloom-filter</a></td></tr>
<tr><td><code>light-node</code></td><td><code>0x02</code></td><td><code>bool</code></td><td>when true, the peer won't forward envelopes through the Messages packet.</td><td><a href="/waku/standards/legacy/6/waku1.html#light-node">WAKU-1#light-node</a></td></tr>
<tr><td><code>confirmations-enabled</code></td><td><code>0x03</code></td><td><code>bool</code></td><td>when true, the peer will send message confirmations</td><td><a href="/waku/standards/legacy/6/waku1.html#confirmations-enabled-field">WAKU-1#confirmations-enabled-field</a></td></tr>
<tr><td><code>rate-limits</code></td><td><code>0x04</code></td><td></td><td>See <a href="/waku/standards/legacy/6/waku1.html#rate-limits-field">Rate limiting</a></td><td><a href="/waku/standards/legacy/6/waku1.html#rate-limits-field">WAKU-1#rate-limits</a></td></tr>
<tr><td><code>topic-interest</code></td><td><code>0x05</code></td><td><code>[10000][4]byte</code></td><td>Topic interest is used to share a node's interest in envelopes with specific topics. It does this in a more bandwidth considerate way, at the expense of some metadata protection. Peers MUST only send envelopes with specified topics.</td><td><a href="/waku/standards/legacy/6/waku1.html#topic-interest-field">WAKU-1#topic-interest</a>, <a href="https://github.com/vacp2p/research/tree/dcc71f4779be832d3b5ece9c4e11f1f7ec24aac2/whisper_scalability">the theoretical scaling model</a></td></tr>
</tbody></table>
</div><!-- TODO Add `light-node` and `confirmations-enabled` links when https://github.com/vacp2p/specs/pull/128 is merged -->
<h2 id="rate-limiting"><a class="header" href="#rate-limiting">Rate limiting</a></h2>
<p>In order to provide an optional very basic Denial-of-Service attack protection, each node SHOULD define its own rate limits.
The rate limits SHOULD be applied on IPs, peer IDs, and envelope topics.</p>
<p>Each node MAY decide to whitelist, i.e. do not rate limit, selected IPs or peer IDs.</p>
<p>If a peer exceeds node's rate limits, the connection between them MAY be dropped.</p>
<p>Each node SHOULD broadcast its rate limits to its peers using <code>rate limits</code> in <code>status-options</code> via packet code <code>0x00</code> or <code>0x22</code>. The rate limits is RLP-encoded information:</p>
<pre><code class="language-golang">[ IP limits, PeerID limits, Topic limits ]
</code></pre>
<p><code>IP limits</code>: 4-byte wide unsigned integer
<code>PeerID limits</code>: 4-byte wide unsigned integer
<code>Topic limits</code>: 4-byte wide unsigned integer</p>
<p>The rate limits MAY also be sent as an optional parameter in the handshake.</p>
<p>Each node SHOULD respect rate limits advertised by its peers. The number of packets SHOULD be throttled in order not to exceed peer's rate limits.
If the limit gets exceeded, the connection MAY be dropped by the peer.</p>
<h2 id="keys-management"><a class="header" href="#keys-management">Keys management</a></h2>
<p>The protocol requires a key (symmetric or asymmetric) for the following actions:</p>
<ul>
<li>signing &amp; verifying messages (asymmetric key)</li>
<li>encrypting &amp; decrypting messages (asymmetric or symmetric key).</li>
</ul>
<p>As nodes require asymmetric keys and symmetric keys to process incoming messages,
they must be available all the time and are stored in memory.</p>
<p>Keys management for PFS is described in <a href="/status/deprecated/secure-transport.html">5/SECURE-TRANSPORT</a>.</p>
<p>The Status protocols uses a few particular Waku topics to achieve its goals.</p>
<h3 id="contact-code-topic"><a class="header" href="#contact-code-topic">Contact code topic</a></h3>
<p>Nodes use the contact code topic to facilitate the discovery of X3DH bundles so that the first message can be PFS-encrypted.</p>
<p>Each user publishes periodically to this topic. If user A wants to contact user B, she SHOULD look for their bundle on this contact code topic.</p>
<p>Contact code topic MUST be created following the algorithm below:</p>
<pre><code class="language-golang">contactCode := "0x" + hexEncode(activePublicKey) + "-contact-code"
var hash []byte = keccak256(contactCode)
var topicLen int = 4
if len(hash) &lt; topicLen {
topicLen = len(hash)
}
var topic [4]byte
for i = 0; i &lt; topicLen; i++ {
topic[i] = hash[i]
}
</code></pre>
<h3 id="partitioned-topic"><a class="header" href="#partitioned-topic">Partitioned topic</a></h3>
<p>Waku is broadcast-based protocol. In theory, everyone could communicate using a single topic but that would be extremely inefficient.
Opposite would be using a unique topic for each conversation, however,
this brings privacy concerns because it would be much easier to detect whether and when two parties have an active conversation.</p>
<p>Nodes use partitioned topics to broadcast private messages efficiently.
By selecting a number of topic, it is possible to balance efficiency and privacy.</p>
<p>Currently, nodes set the number of partitioned topics to <code>5000</code>. They MUST be generated following the algorithm below:</p>
<pre><code class="language-golang">var partitionsNum *big.Int = big.NewInt(5000)
var partition *big.Int = big.NewInt(0).Mod(publicKey.X, partitionsNum)
partitionTopic := "contact-discovery-" + strconv.FormatInt(partition.Int64(), 10)
var hash []byte = keccak256(partitionTopic)
var topicLen int = 4
if len(hash) &lt; topicLen {
topicLen = len(hash)
}
var topic [4]byte
for i = 0; i &lt; topicLen; i++ {
topic[i] = hash[i]
}
</code></pre>
<h3 id="public-chats"><a class="header" href="#public-chats">Public chats</a></h3>
<p>A public chat MUST use a topic derived from a public chat name following the algorithm below:</p>
<pre><code class="language-golang">var hash []byte
hash = keccak256(name)
topicLen = 4
if len(hash) &lt; topicLen {
topicLen = len(hash)
}
var topic [4]byte
for i = 0; i &lt; topicLen; i++ {
topic[i] = hash[i]
}
</code></pre>
<!-- NOTE: commented out as it is currently not used. In code for potential future use. - C.P. Oct 8, 2019
### Personal discovery topic
Personal discovery topic is used to ???
A client MUST implement it following the algorithm below:
```golang
personalDiscoveryTopic := "contact-discovery-" + hexEncode(publicKey)
var hash []byte = keccak256(personalDiscoveryTopic)
var topicLen int = 4
if len(hash) < topicLen {
topicLen = len(hash)
}
var topic [4]byte
for i = 0; i < topicLen; i++ {
topic[i] = hash[i]
}
```
Each Status Client SHOULD listen to this topic in order to receive ??? -->
<h3 id="group-chat-topic"><a class="header" href="#group-chat-topic">Group chat topic</a></h3>
<p>Group chats does not have a dedicated topic.
All group chat messages (including membership updates) are sent as one-to-one messages to multiple recipients.</p>
<h3 id="negotiated-topic"><a class="header" href="#negotiated-topic">Negotiated topic</a></h3>
<p>When a client sends a one to one message to another client, it MUST listen to their negotiated topic.
This is computed by generating a diffie-hellman key exchange between two members
and taking the first four bytes of the <code>SHA3-256</code> of the key generated.</p>
<pre><code class="language-golang">
sharedKey, err := ecies.ImportECDSA(myPrivateKey).GenerateShared(
ecies.ImportECDSAPublic(theirPublicKey),
16,
16,
)
hexEncodedKey := hex.EncodeToString(sharedKey)
var hash []byte = keccak256(hexEncodedKey)
var topicLen int = 4
if len(hash) &lt; topicLen {
topicLen = len(hash)
}
var topic [4]byte
for i = 0; i &lt; topicLen; i++ {
topic[i] = hash[i]
}
</code></pre>
<p>A client SHOULD send to the negotiated topic only if it has received a message from all the devices included in the conversation.</p>
<h3 id="flow"><a class="header" href="#flow">Flow</a></h3>
<p>To exchange messages with client <code>B</code>, a client <code>A</code> SHOULD:</p>
<ul>
<li>Listen to client's <code>B</code> Contact Code Topic to retrieve their bundle information, including a list of active devices</li>
<li>Send a message on client's <code>B</code> partitioned topic</li>
<li>Listen to the Negotiated Topic between <code>A</code> &amp; <code>B</code></li>
<li>Once client <code>A</code> receives a message from <code>B</code>, the Negotiated Topic SHOULD be used</li>
</ul>
<h2 id="message-encryption"><a class="header" href="#message-encryption">Message encryption</a></h2>
<p>Even though, the protocol specifies an encryption layer that encrypts messages before passing them to the transport layer,
Waku protocol requires each Waku message to be encrypted anyway.</p>
<p>The node encrypts public and group messages using symmetric encryption, and creates the key from a channel name string.
The implementation is available in <a href="https://github.com/ethereum/go-ethereum/wiki/Whisper-v6-RPC-API#shh_generatesymkeyfrompassword"><code>shh_generateSymKeyFromPassword</code></a> JSON-RPC method of go-ethereum Whisper implementation.</p>
<p>The node encrypts one-to-one messages using asymmetric encryption.</p>
<h2 id="message-confirmations"><a class="header" href="#message-confirmations">Message confirmations</a></h2>
<p>Sending a message is a complex process where many things can go wrong.
Message confirmations tell a node that a message originating from it has been seen by its direct peers.</p>
<p>A node MAY send a message confirmation for any batch of messages received in a packet Messages Code (<code>0x01</code>).</p>
<p>A node sends a message confirmation using Batch Acknowledge packet (<code>0x0b</code>) or Message Response packet (<code>0x0c</code>).</p>
<p>The Batch Acknowledge packet is followed by a keccak256 hash of the envelopes batch data (raw bytes).</p>
<p>The Message Response packet is more complex and is followed by a Versioned Message Response:</p>
<pre><code class="language-golang">[ Version, Response]
</code></pre>
<p><code>Version</code>: a version of the Message Response, equal to <code>1</code>,
<code>Response</code>: <code>[ Hash, Errors ]</code> where <code>Hash</code> is a keccak256 hash of the envelopes batch data (raw bytes)
for which the confirmation is sent and <code>Errors</code> is a list of envelope errors when processing the batch.
A single error contains <code>[ Hash, Code, Description ]</code> where <code>Hash</code> is a hash of the processed envelope,
<code>Code</code> is an error code and <code>Description</code> is a descriptive error message.</p>
<p>The supported codes:
<code>1</code>: means time sync error which happens when an envelope is too old
or created in the future (the root cause is no time sync between nodes).</p>
<p>The drawback of sending message confirmations is that it increases the noise in the network because for each sent message,
one or more peers broadcast a corresponding confirmation. To limit that, both Batch Acknowledge packet (<code>0x0b</code>)
and Message Response packet (<code>0x0c</code>) are not broadcast to peers of the peers, i.e. they do not follow epidemic spread.</p>
<p>In the current Status network setup, only <code>Mailservers</code> support message confirmations.
A client posting a message to the network and after receiving a confirmation can be sure that the message got processed by the <code>Mailserver</code>.
If additionally, sending a message is limited to non-<code>Mailserver</code> peers,
it also guarantees that the message got broadcast through the network and it reached the selected <code>Mailserver</code>.</p>
<h2 id="waku-v1-extensions"><a class="header" href="#waku-v1-extensions">Waku V1 extensions</a></h2>
<h3 id="request-historic-messages"><a class="header" href="#request-historic-messages">Request historic messages</a></h3>
<p>Sends a request for historic messages to a <code>Mailserver</code>.
The <code>Mailserver</code> node MUST be a direct peer and MUST be marked as trusted (using <code>waku_markTrustedPeer</code>).</p>
<p>The request does not wait for the response.
It merely sends a peer-to-peer message to the <code>Mailserver</code> and it's up to <code>Mailserver</code> to process it and start sending historic messages.</p>
<p>The drawback of this approach is that it is impossible to tell which historic messages are the result of which request.</p>
<p>It's recommended to return messages from newest to oldest.
To move further back in time, use <code>cursor</code> and <code>limit</code>.</p>
<h4 id="wakuext_requestmessages"><a class="header" href="#wakuext_requestmessages">wakuext_requestMessages</a></h4>
<p><strong>Parameters</strong>:</p>
<ul>
<li>Object - The message request object:
<ul>
<li><code>mailServerPeer</code> - <code>String</code>: <code>Mailserver</code>'s enode address.</li>
<li><code>from</code> - <code>Number</code> (optional): Lower bound of time range as unix timestamp, default is 24 hours back from now.</li>
<li><code>to</code> - <code>Number</code> (optional): Upper bound of time range as unix timestamp, default is now.</li>
<li><code>limit</code> - <code>Number</code> (optional): Limit the number of messages sent back, default is no limit.</li>
<li><code>cursor</code> - <code>String</code> (optional): Used for paginated requests.</li>
<li><code>topics</code> - <code>Array</code>: hex-encoded message topics.</li>
<li><code>symKeyID</code> - <code>String</code>: an ID of a symmetric key used to authenticate with the <code>Mailserver</code>, derived from the <code>Mailserver</code> password.</li>
</ul>
</li>
</ul>
<p><strong>Returns</strong>:
<code>Boolean</code> - returns <code>true</code> if the request was sent.</p>
<p>The above <code>topics</code> is then converted into a bloom filter and then and sent to the <code>Mailserver</code>.</p>
<!-- TODO: Clarify actual request with bloom filter to mailserver -->
<h2 id="changelog"><a class="header" href="#changelog">Changelog</a></h2>
<h3 id="version-01"><a class="header" href="#version-01">Version 0.1</a></h3>
<p>Released <a href="https://github.com/status-im/specs/commit/664dd1c9df6ad409e4c007fefc8c8945b8d324e8">May 22, 2020</a></p>
<ul>
<li>Created document</li>
<li>Forked from <a href="3-whisper-usage.html">3-whisper-usage</a></li>
<li>Change to keep <code>Mailserver</code> term consistent</li>
<li>Replaced Whisper references with Waku</li>
<li>Added <a href="#status">Status options</a> section</li>
<li>Updated <a href="#waku-packets">Waku packets</a> section to match Waku</li>
<li>Added that <code>Batch Ack</code> is marked for deprecation</li>
<li>Changed <code>shh_generateSymKeyFromPassword</code> to <code>waku_generateSymKeyFromPassword</code>
<ul>
<li><a href="https://github.com/status-im/status-go/blob/2d13ccf5ec3db7e48d7a96a7954be57edb96f12f/waku/api.go#L172-L175">Exists here</a></li>
<li><a href="https://github.com/status-im/status-go/blob/2d13ccf5ec3db7e48d7a96a7954be57edb96f12f/eth-node/bridge/geth/public_waku_api.go#L33-L36">Exists here</a></li>
</ul>
</li>
<li>Changed <code>shh_markTrustedPeer</code> to <code>waku_markTrustedPeer</code>
<ul>
<li><a href="https://github.com/status-im/status-go/blob/2d13ccf5ec3db7e48d7a96a7954be57edb96f12f/waku/api.go#L100-L108">Exists here</a></li>
</ul>
</li>
<li>Changed <code>shhext_requestMessages</code> to <code>wakuext_requestMessages</code>
<ul>
<li><a href="https://github.com/status-im/status-go/blob/2d13ccf5ec3db7e48d7a96a7954be57edb96f12f/services/wakuext/api.go#L76-L139">Exists here</a></li>
</ul>
</li>
</ul>
<h2 id="copyright"><a class="header" href="#copyright">Copyright</a></h2>
<p>Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a>.</p>
<h2 id="references"><a class="header" href="#references">References</a></h2>
<ul>
<li><a href="waku">Waku</a></li>
<li><a href="/waku/standards/legacy/6/waku1.html">WAKU1</a></li>
<li><a href="/status/deprecated/waku-mailserver.html">WAKU-MAILSERVER</a></li>
<li><a href="https://github.com/vacp2p/research/tree/dcc71f4779be832d3b5ece9c4e11f1f7ec24aac2/whisper_scalability">The theoretical scaling model</a></li>
<li><a href="/status/deprecated/secure-transport.html">SECURE-TRANSPORT</a></li>
<li><a href="https://github.com/status-im/specs/commit/664dd1c9df6ad409e4c007fefc8c8945b8d324e8">May 22, 2020 commit</a></li>
<li><a href="https://github.com/ethereum/go-ethereum/wiki/Whisper-v6-RPC-API#shh_generatesymkeyfrompassword"><code>shh_generateSymKeyFromPassword</code></a></li>
<li><a href="https://github.com/status-im/status-go/blob/2d13ccf5ec3db7e48d7a96a7954be57edb96f12f/waku/api.go#L172-L175">Key Change #1</a></li>
<li><a href="https://github.com/status-im/status-go/blob/2d13ccf5ec3db7e48d7a96a7954be57edb96f12f/eth-node/bridge/geth/public_waku_api.go#L33-L36">Key Change #2</a></li>
<li><a href="https://github.com/status-im/status-go/blob/2d13ccf5ec3db7e48d7a96a7954be57edb96f12f/waku/api.go#L100-L108">Key Change #3</a></li>
<li><a href="https://github.com/status-im/status-go/blob/2d13ccf5ec3db7e48d7a96a7954be57edb96f12f/services/wakuext/api.go#L76-L139">Key Change #4</a></li>
</ul>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../../status/deprecated/waku-mailserver.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../../status/deprecated/whisper-mailserver.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../../status/deprecated/waku-mailserver.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../../status/deprecated/whisper-mailserver.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../../elasticlunr.min.js"></script>
<script src="../../mark.min.js"></script>
<script src="../../searcher.js"></script>
<script src="../../clipboard.min.js"></script>
<script src="../../highlight.js"></script>
<script src="../../book.js"></script>
<!-- Custom JS scripts -->
<script src="../../scripts/rfc-index.js"></script>
</div>
</body>
</html>