Files
rfc-index/waku/standards/legacy/9/rpc.html
2025-12-22 15:08:29 +00:00

618 lines
49 KiB
HTML

<!DOCTYPE HTML>
<html lang="en" class="ayu" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>9/RPC - 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" class="active"><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"><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="9waku-rpc"><a class="header" href="#9waku-rpc">9/WAKU-RPC</a></h1>
<div class="table-wrapper"><table><thead><tr><th>Field</th><th>Value</th></tr></thead><tbody>
<tr><td>Name</td><td>Waku RPC API</td></tr>
<tr><td>Slug</td><td>9</td></tr>
<tr><td>Status</td><td>stable</td></tr>
<tr><td>Editor</td><td>Andrea Maria Piana <a href="mailto:andreap@status.im">andreap@status.im</a></td></tr>
<tr><td>Contributors</td><td>Dean Eigenmann <a href="mailto:dean@status.im">dean@status.im</a>, Oskar Thorén <a href="mailto:oskarth@titanproxy.com">oskarth@titanproxy.com</a></td></tr>
</tbody></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/0f1855edcf68ef982c4ce478b67d660809aa9830/docs/waku/standards/legacy/9/rpc.md"><code>0f1855e</code></a> — Chore/fix headers (#239)</li>
<li><strong>2025-12-22</strong><a href="https://github.com/vacp2p/rfc-index/blob/b1a578393edf8487ccc97a5f25b25af9bf41efb3/docs/waku/standards/legacy/9/rpc.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/waku/standards/legacy/9/rpc.md"><code>d03e699</code></a> — ci: add mdBook configuration (#233)</li>
<li><strong>2024-09-13</strong><a href="https://github.com/vacp2p/rfc-index/blob/3ab314d87d4525ff1296bf3d9ec634d570777b91/waku/standards/legacy/9/rpc.md"><code>3ab314d</code></a> — Fix Files for Linting (#94)</li>
<li><strong>2024-03-21</strong><a href="https://github.com/vacp2p/rfc-index/blob/2eaa7949c4abe7d14e2b9560e8c045bf2e937c9a/waku/standards/legacy/9/rpc.md"><code>2eaa794</code></a> — Broken Links + Change Editors (#26)</li>
<li><strong>2024-02-12</strong><a href="https://github.com/vacp2p/rfc-index/blob/5eb393f47c2d7c7b10f024e07a20e2b6647a14bc/waku/standards/legacy/9/rpc.md"><code>5eb393f</code></a> — Rename waku/legacy/9/rpc.md to waku/standards/legacy/9/rpc.md</li>
<li><strong>2024-02-12</strong><a href="https://github.com/vacp2p/rfc-index/blob/9617146a6a5ddaa676ef6d5ee47bf073c2b86f9f/waku/legacy/9/rpc.md"><code>9617146</code></a> — Rename waku/standards/core/waku_legacy/9/waku2-rpc.md to waku/legacy/9/rpc.md</li>
<li><strong>2024-02-12</strong><a href="https://github.com/vacp2p/rfc-index/blob/75705cd142342c905961c55da5914513599b2a7b/waku/standards/core/waku_legacy/9/waku2-rpc.md"><code>75705cd</code></a> — Rename waku/standards/core/9/waku2-rpc.md to waku/standards/core/waku_legacy/9/waku2-rpc.md</li>
<li><strong>2024-02-01</strong><a href="https://github.com/vacp2p/rfc-index/blob/e808e36eb7f011c6f15fb2f73f9520b5cc7dbff1/waku/standards/core/9/waku2-rpc.md"><code>e808e36</code></a> — Create waku2-rpc.md</li>
</ul>
<!-- timeline:end -->
<p>This specification describes the RPC API that Waku nodes MAY adhere to.
The unified API allows clients to easily
be able to connect to any node implementation.
The API described is privileged as a node stores the keys of clients.</p>
<h2 id="introduction"><a class="header" href="#introduction">Introduction</a></h2>
<p>This API is based off the <a href="https://github.com/ethereum/go-ethereum/wiki/Whisper-v6-RPC-API">Whisper V6 RPC API</a>.</p>
<h2 id="wire-protocol"><a class="header" href="#wire-protocol">Wire Protocol</a></h2>
<h3 id="transport"><a class="header" href="#transport">Transport</a></h3>
<p>Nodes SHOULD expose a <a href="https://www.jsonrpc.org/specification">JSON RPC</a> API
that can be accessed.
The JSON RPC version SHOULD be <code>2.0</code>.
Below is an example request:</p>
<pre><code class="language-json">{
"jsonrpc":"2.0",
"method":"waku_version",
"params":[],
"id":1
}
</code></pre>
<h4 id="fields"><a class="header" href="#fields">Fields</a></h4>
<div class="table-wrapper"><table><thead><tr><th>Field</th><th>Description</th></tr></thead><tbody>
<tr><td><code>jsonrpc</code></td><td>Contains the used JSON RPC version (<code>Default: 2.0</code>)</td></tr>
<tr><td><code>method</code></td><td>Contains the JSON RPC method that is being called</td></tr>
<tr><td><code>params</code></td><td>An array of parameters for the request</td></tr>
<tr><td><code>id</code></td><td>The request ID</td></tr>
</tbody></table>
</div>
<h3 id="objects"><a class="header" href="#objects">Objects</a></h3>
<p>In this section you will find objects used throughout the JSON RPC API.</p>
<h4 id="message"><a class="header" href="#message">Message</a></h4>
<p>The message object represents a Waku message.
Below you will find the description of the attributes contained in the message object.
A message is the decrypted payload and
padding of an <a href="../7/data.html">envelope</a> along with all of its metadata and
other extra information such as the hash.</p>
<div class="table-wrapper"><table><thead><tr><th style="text-align: right">Field</th><th style="text-align: center">Type</th><th>Description</th></tr></thead><tbody>
<tr><td style="text-align: right"><code>sig</code></td><td style="text-align: center">string</td><td>Public Key that signed this message</td></tr>
<tr><td style="text-align: right"><code>recipientPublicKey</code></td><td style="text-align: center">string</td><td>The recipients public key</td></tr>
<tr><td style="text-align: right"><code>ttl</code></td><td style="text-align: center">number</td><td>Time-to-live in seconds</td></tr>
<tr><td style="text-align: right"><code>timestamp</code></td><td style="text-align: center">number</td><td>Unix timestamp of the message generation</td></tr>
<tr><td style="text-align: right"><code>topic</code></td><td style="text-align: center">string</td><td>4 bytes, the message topic</td></tr>
<tr><td style="text-align: right"><code>payload</code></td><td style="text-align: center">string</td><td>Decrypted payload</td></tr>
<tr><td style="text-align: right"><code>padding</code></td><td style="text-align: center">string</td><td>Optional padding, byte array of arbitrary length</td></tr>
<tr><td style="text-align: right"><code>pow</code></td><td style="text-align: center">number</td><td>The proof of work value</td></tr>
<tr><td style="text-align: right"><code>hash</code></td><td style="text-align: center">string</td><td>Hash of the enveloped message</td></tr>
</tbody></table>
</div>
<h4 id="filter"><a class="header" href="#filter">Filter</a></h4>
<p>The filter object represents filters that can be applied to retrieve messages.
Below you will find the description of the attributes contained in the filter object.</p>
<div class="table-wrapper"><table><thead><tr><th style="text-align: right">Field</th><th style="text-align: center">Type</th><th>Description</th></tr></thead><tbody>
<tr><td style="text-align: right"><code>symKeyID</code></td><td style="text-align: center">string</td><td>ID of the symmetric key for message decryption</td></tr>
<tr><td style="text-align: right"><code>privateKeyID</code></td><td style="text-align: center">string</td><td>ID of private (asymmetric) key for message decryption</td></tr>
<tr><td style="text-align: right"><code>sig</code></td><td style="text-align: center">string</td><td>Public key of the signature</td></tr>
<tr><td style="text-align: right"><code>minPow</code></td><td style="text-align: center">number</td><td>Minimal PoW requirement for incoming messages</td></tr>
<tr><td style="text-align: right"><code>topics</code></td><td style="text-align: center">array</td><td>Array of possible topics, this can also contain partial topics</td></tr>
<tr><td style="text-align: right"><code>allowP2P</code></td><td style="text-align: center">boolean</td><td>Indicates if this filter allows processing of direct peer-to-peer messages</td></tr>
</tbody></table>
</div>
<p>All fields are optional, however <code>symKeyID</code> or <code>privateKeyID</code> must be present,
it cannot be both.
Additionally, the <code>topics</code> field is only optional when an asymmetric key is used.</p>
<h3 id="methods"><a class="header" href="#methods">Methods</a></h3>
<h4 id="waku_version"><a class="header" href="#waku_version"><code>waku_version</code></a></h4>
<p>The <code>waku_version</code> method returns the current version number.</p>
<h5 id="parameters"><a class="header" href="#parameters">Parameters</a></h5>
<p>none</p>
<h5 id="response"><a class="header" href="#response">Response</a></h5>
<ul>
<li><strong>string</strong> - The version number.</li>
</ul>
<h4 id="waku_info"><a class="header" href="#waku_info"><code>waku_info</code></a></h4>
<p>The <code>waku_info</code> method returns information about a Waku node.</p>
<p>Parameters</p>
<p>none</p>
<p>Response</p>
<p>The response is an <code>Object</code> containing the following fields:</p>
<ul>
<li><strong><code>minPow</code> [number]</strong> - The current PoW requirement.</li>
<li><strong><code>maxEnvelopeSize</code> [float]</strong> - The current maximum envelope size in bytes.</li>
<li><strong><code>memory</code> [number]</strong> - The memory size of the floating messages in bytes.</li>
<li><strong><code>envelopes</code> [number]</strong> - The number of floating envelopes.</li>
</ul>
<h4 id="waku_setmaxenvelopesize"><a class="header" href="#waku_setmaxenvelopesize"><code>waku_setMaxEnvelopeSize</code></a></h4>
<p>Sets the maximum envelope size allowed by this node.
Any envelopes larger than this size both incoming and outgoing will be rejected.
The envelope size can never exceed the underlying envelope size of <code>10mb</code>.</p>
<p>Parameters</p>
<ul>
<li><strong>number</strong> - The message size in bytes.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>bool</strong> -
<code>true</code> on success or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_setminpow"><a class="header" href="#waku_setminpow"><code>waku_setMinPoW</code></a></h4>
<p>Sets the minimal PoW required by this node.</p>
<p>Parameters</p>
<ul>
<li><strong>number</strong> - The new PoW requirement.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>bool</strong> -
<code>true</code> on success or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_marktrustedpeer"><a class="header" href="#waku_marktrustedpeer"><code>waku_markTrustedPeer</code></a></h4>
<p>Marks a specific peer as trusted allowing it to send expired messages.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - <code>enode</code> of the peer.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>bool</strong> -
<code>true</code> on success or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_newkeypair"><a class="header" href="#waku_newkeypair"><code>waku_newKeyPair</code></a></h4>
<p>Generates a keypair used for message encryption and decryption.</p>
<p>Parameters</p>
<p>none</p>
<p>Response</p>
<ul>
<li><strong>string</strong> -
Key ID on success or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_addprivatekey"><a class="header" href="#waku_addprivatekey"><code>waku_addPrivateKey</code></a></h4>
<p>Stores a key and returns its ID.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - Private key as hex bytes.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>string</strong> - Key ID on success or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_deletekeypair"><a class="header" href="#waku_deletekeypair"><code>waku_deleteKeyPair</code></a></h4>
<p>Deletes a specific key if it exists.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - ID of the Key pair.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>bool</strong> - <code>true</code> on success or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_haskeypair"><a class="header" href="#waku_haskeypair"><code>waku_hasKeyPair</code></a></h4>
<p>Checks if the node has a private key of a key pair matching the given ID.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - ID of the Key pair.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>bool</strong> -
<code>true</code> or
<code>false</code> or an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_getpublickey"><a class="header" href="#waku_getpublickey"><code>waku_getPublicKey</code></a></h4>
<p>Returns the public key for an ID.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - ID of the Key.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>string</strong> - The public key or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_getprivatekey"><a class="header" href="#waku_getprivatekey"><code>waku_getPrivateKey</code></a></h4>
<p>Returns the private key for an ID.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - ID of the Key.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>string</strong> - The private key or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_newsymkey"><a class="header" href="#waku_newsymkey"><code>waku_newSymKey</code></a></h4>
<p>Generates a random symmetric key and stores it under an ID.
This key can be used to encrypt and
decrypt messages where the key is known to both parties.</p>
<p>Parameters</p>
<p>none</p>
<p>Response</p>
<ul>
<li><strong>string</strong> - The key ID or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_addsymkey"><a class="header" href="#waku_addsymkey"><code>waku_addSymKey</code></a></h4>
<p>Stores the key and returns its ID.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - The raw key for symmetric encryption hex encoded.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>string</strong> - The key ID or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_generatesymkeyfrompassword"><a class="header" href="#waku_generatesymkeyfrompassword"><code>waku_generateSymKeyFromPassword</code></a></h4>
<p>Generates the key from a password and stores it.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - The password.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>string</strong> - The key ID or an <a href="https://www.jsonrpc.org/specification#error_object">error</a>
on failure.</li>
</ul>
<h4 id="waku_hassymkey"><a class="header" href="#waku_hassymkey"><code>waku_hasSymKey</code></a></h4>
<p>Returns whether there is a key associated with the ID.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - ID of the Key.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>bool</strong> - <code>true</code> or <code>false</code> or an <a href="https://www.jsonrpc.org/specification#error_object">error</a>
on failure.</li>
</ul>
<h4 id="waku_getsymkey"><a class="header" href="#waku_getsymkey"><code>waku_getSymKey</code></a></h4>
<p>Returns the symmetric key associated with an ID.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - ID of the Key.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>string</strong> - Raw key on success or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> of failure.</li>
</ul>
<h4 id="waku_deletesymkey"><a class="header" href="#waku_deletesymkey"><code>waku_deleteSymKey</code></a></h4>
<p>Deletes the key associated with an ID.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - ID of the Key.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>bool</strong> -
<code>true</code> or <code>false</code> or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_subscribe"><a class="header" href="#waku_subscribe"><code>waku_subscribe</code></a></h4>
<p>Creates and
registers a new subscription to receive notifications for inbound Waku messages.</p>
<p>Parameters</p>
<p>The parameters for this request is an array containing the following fields:</p>
<ol>
<li><strong>string</strong> - The ID of the function call,
in case of Waku this must contain the value "messages".</li>
<li><strong>object</strong> - The <a href="#filter">message filter</a>.</li>
</ol>
<p>Response</p>
<ul>
<li><strong>string</strong> - ID of the subscription or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<p>Notifications</p>
<p>Notifications received by the client contain a <a href="#message">message</a> matching the filter.
Below is an example notification:</p>
<pre><code class="language-json">{
"jsonrpc": "2.0",
"method": "waku_subscription",
"params": {
"subscription": "02c1f5c953804acee3b68eda6c0afe3f1b4e0bec73c7445e10d45da333616412",
"result": {
"sig": "0x0498ac1951b9078a0549c93c3f6088ec7c790032b17580dc3c0c9e900899a48d89eaa27471e3071d2de6a1f48716ecad8b88ee022f4321a7c29b6ffcbee65624ff",
"recipientPublicKey": null,
"ttl": 10,
"timestamp": 1498577270,
"topic": "0xffaadd11",
"payload": "0xffffffdddddd1122",
"padding": "0x35d017b66b124dd4c67623ed0e3f23ba68e3428aa500f77aceb0dbf4b63f69ccfc7ae11e39671d7c94f1ed170193aa3e327158dffdd7abb888b3a3cc48f718773dc0a9dcf1a3680d00fe17ecd4e8d5db31eb9a3c8e6e329d181ecb6ab29eb7a2d9889b49201d9923e6fd99f03807b730780a58924870f541a8a97c87533b1362646e5f573dc48382ef1e70fa19788613c9d2334df3b613f6e024cd7aadc67f681fda6b7a84efdea40cb907371cd3735f9326d02854",
"pow": 0.6714754098360656,
"hash": "0x17f8066f0540210cf67ef400a8a55bcb32a494a47f91a0d26611c5c1d66f8c57"
}
}
}
</code></pre>
<h4 id="waku_unsubscribe"><a class="header" href="#waku_unsubscribe"><code>waku_unsubscribe</code></a></h4>
<p>Cancels and removes an existing subscription.
The node MUST stop sending the client notifications.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - The subscription ID.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>bool</strong> - <code>true</code> or <code>false</code></li>
</ul>
<h4 id="waku_newmessagefilter"><a class="header" href="#waku_newmessagefilter"><code>waku_newMessageFilter</code></a></h4>
<p>Creates a new message filter within the node.
This filter can be used to poll for new messages that match the criteria.</p>
<p>Parameters</p>
<p>The request must contain a <a href="#filter">message filter</a> as its parameter.</p>
<p>Response</p>
<ul>
<li><strong>string</strong> - The ID of the filter.</li>
</ul>
<h4 id="waku_deletemessagefilter"><a class="header" href="#waku_deletemessagefilter"><code>waku_deleteMessageFilter</code></a></h4>
<p>Removes a message filter from the node.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - ID of the filter created with <a href="#waku_newmessagefilter"><code>waku_newMessageFilter</code></a>.</li>
</ul>
<p>Response</p>
<ul>
<li><strong>bool</strong> - <code>true</code> on success or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h4 id="waku_getfiltermessages"><a class="header" href="#waku_getfiltermessages"><code>waku_getFilterMessages</code></a></h4>
<p>Retrieves messages that match a filter criteria and
were received after the last time this function was called.</p>
<p>Parameters</p>
<ul>
<li><strong>string</strong> - ID of the filter created with <a href="#waku_newmessagefilter"><code>waku_newMessageFilter</code></a>.</li>
</ul>
<p>Response</p>
<p>The response contains an array of <a href="#message">messages</a> or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</p>
<h4 id="waku_post"><a class="header" href="#waku_post"><code>waku_post</code></a></h4>
<p>The <code>waku_post</code> method creates a waku envelope and propagates it to the network.</p>
<p>Parameters</p>
<p>The parameters is an <code>Object</code> containing the following fields:</p>
<ul>
<li><strong><code>symKeyID</code> [string]</strong> <code>optional</code> - The ID of the symmetric key used for encryption</li>
<li><strong><code>pubKey</code> [string]</strong> <code>optional</code> - The public key for message encryption.</li>
<li><strong><code>sig</code> [string]</strong> <code>optional</code> - The ID of the signing key.</li>
<li><strong><code>ttl</code> [number]</strong> - The time-to-live in seconds.</li>
<li><strong><code>topic</code> [string]</strong> - 4 bytes message topic.</li>
<li><strong><code>payload</code> [string]</strong> - The payload to be encrypted.</li>
<li><strong><code>padding</code> [string]</strong> <code>optional</code> - The padding, a byte array of arbitrary length.</li>
<li><strong><code>powTime</code> [number]</strong> - Maximum time in seconds to be spent on the proof of work.</li>
<li><strong><code>powTarget</code> [number]</strong> - Minimal PoW target required for this message.</li>
<li><strong><code>targetPeer</code> [string]</strong> <code>optional</code> - The optional peer ID for peer-to-peer messages.</li>
</ul>
<p><em>Either the <strong><code>symKeyID</code></strong> or the <strong><code>pubKey</code></strong> need to be present.
It can not be both.</em></p>
<p>Response</p>
<ul>
<li><strong>bool</strong> -
<code>true</code> on success or
an <a href="https://www.jsonrpc.org/specification#error_object">error</a> on failure.</li>
</ul>
<h2 id="changelog"><a class="header" href="#changelog">Changelog</a></h2>
<div class="table-wrapper"><table><thead><tr><th style="text-align: center">Version</th><th>Comment</th></tr></thead><tbody>
<tr><td style="text-align: center"><a href="https://github.com/vacp2p/specs/commit/bc7e75ebb2e45d2cbf6ab27352c113e666df37c8">1.0.0</a></td><td>Initial release.</td></tr>
</tbody></table>
</div>
<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>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../../../../waku/standards/legacy/8/mail.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="../../../../waku/informational/index.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="../../../../waku/standards/legacy/8/mail.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="../../../../waku/informational/index.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>