mirror of
https://github.com/vacp2p/rfc-index.git
synced 2026-01-09 22:08:07 -05:00
552 lines
54 KiB
HTML
552 lines
54 KiB
HTML
<!DOCTYPE HTML>
|
|
<html lang="en" class="ayu" dir="ltr">
|
|
<head>
|
|
<!-- Book generated using mdBook -->
|
|
<meta charset="UTF-8">
|
|
<title>Client - 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" class="active"><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="client"><a class="header" href="#client">CLIENT</a></h1>
|
|
<div class="table-wrapper"><table><thead><tr><th>Field</th><th>Value</th></tr></thead><tbody>
|
|
<tr><td>Name</td><td>Client</td></tr>
|
|
<tr><td>Status</td><td>deprecated</td></tr>
|
|
<tr><td>Editor</td><td>Filip Dimitrijevic <a href="mailto:filip@status.im">filip@status.im</a></td></tr>
|
|
<tr><td>Contributors</td><td>Adam Babik <a href="mailto:adam@status.im">adam@status.im</a>, Andrea Maria Piana <a href="mailto:andreap@status.im">andreap@status.im</a>, Dean Eigenmann <a href="mailto:dean@status.im">dean@status.im</a>, Corey Petty <a href="mailto:corey@status.im">corey@status.im</a>, Oskar Thorén <a href="mailto:oskar@status.im">oskar@status.im</a>, Samuel Hawksby-Robinson <a href="mailto:samuel@status.im">samuel@status.im</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/status/deprecated/client.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/status/deprecated/client.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/client.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/client.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>This specification describes how to write a Status client for communicating<br />
|
|
with other Status clients.<br />
|
|
This specification presents a reference implementation of the protocol
|
|
used in a command-line client and a mobile app.</p>
|
|
<p>This document consists of two parts.<br />
|
|
The first outlines the specifications required to be a full Status client.<br />
|
|
The second provides a design rationale and answers some common questions.</p>
|
|
<h2 id="introduction"><a class="header" href="#introduction">Introduction</a></h2>
|
|
<h3 id="protocol-layers"><a class="header" href="#protocol-layers">Protocol layers</a></h3>
|
|
<p>Implementing a Status clients largely means implementing the following layers.
|
|
Additionally, there are separate specifications for things like key management and account lifecycle.</p>
|
|
<p>Other aspects, such as how a node uses IPFS for stickers or how the browser works, are currently underspecified.
|
|
These specifications facilitate the implementation of a Status client for basic private communication.</p>
|
|
<div class="table-wrapper"><table><thead><tr><th>Layer</th><th>Purpose</th><th>Technology</th></tr></thead><tbody>
|
|
<tr><td>Data and payloads</td><td>End user functionality</td><td>1:1, group chat, public chat</td></tr>
|
|
<tr><td>Data sync</td><td>Data consistency</td><td>MVDS.</td></tr>
|
|
<tr><td>Secure transport</td><td>Confidentiality, PFS, etc</td><td>Double Ratchet</td></tr>
|
|
<tr><td>Transport privacy</td><td>Routing, Metadata protection</td><td>Waku / Whisper</td></tr>
|
|
<tr><td>P2P Overlay</td><td>Overlay routing, NAT traversal</td><td>devp2p</td></tr>
|
|
</tbody></table>
|
|
</div>
|
|
<h3 id="protobuf"><a class="header" href="#protobuf">Protobuf</a></h3>
|
|
<p><a href="https://developers.google.com/protocol-buffers/"><code>protobuf</code></a> is used in different layers, version <code>proto3</code> used is unless stated otherwise.</p>
|
|
<h2 id="components"><a class="header" href="#components">Components</a></h2>
|
|
<h3 id="p2p-overlay"><a class="header" href="#p2p-overlay">P2P Overlay</a></h3>
|
|
<p>Status clients run on a public, permissionless peer-to-peer network, as specified by the devP2P
|
|
network protocols. devP2P provides a protocol for node discovery which is in
|
|
draft mode
|
|
<a href="https://github.com/ethereum/devp2p/blob/master/discv5/discv5.md">here</a>. See
|
|
more on node discovery and management in the next section.</p>
|
|
<p>To communicate between Status nodes, the <a href="https://github.com/ethereum/devp2p/blob/master/rlpx.md">RLPx Transport
|
|
Protocol, v5</a> is used, which
|
|
allows for TCP-based communication between nodes.</p>
|
|
<p>On top of this RLPx-based subprotocols are ran, the client
|
|
SHOULD NOT use <a href="https://eips.ethereum.org/EIPS/eip-627">Whisper V6</a>, the client
|
|
SHOULD use <a href="/waku/standards/legacy/6/waku1.html">Waku V1</a>
|
|
for privacy-preserving messaging and efficient usage of a node's bandwidth.</p>
|
|
<h4 id="node-discovery-and-roles"><a class="header" href="#node-discovery-and-roles">Node discovery and roles</a></h4>
|
|
<p>There are four types of node roles:</p>
|
|
<ol>
|
|
<li><code>Bootstrap node</code></li>
|
|
<li><code>Whisper/Waku relayer</code></li>
|
|
<li><code>Mailserver</code> (servers and clients)</li>
|
|
<li><code>Mobile node</code> (Status Clients)</li>
|
|
</ol>
|
|
<p>A standard Status client MUST implement both <code>Whisper/Waku relayer</code> and <code>Mobile node</code> node types. The
|
|
other node types are optional, but it is RECOMMEND to implement a <code>Mailserver</code>
|
|
client mode, otherwise the user experience is likely to be poor.</p>
|
|
<h4 id="bootstrapping"><a class="header" href="#bootstrapping">Bootstrapping</a></h4>
|
|
<p>Bootstrap nodes allow Status nodes to discover and connect to other Status nodes
|
|
in the network.</p>
|
|
<p>Currently, Status Gmbh provides the main bootstrap nodes, but anyone can
|
|
run these provided they are connected to the rest of the Whisper/Waku network.</p>
|
|
<p>Status maintains a list of production fleet bootstrap nodes in the following locations:</p>
|
|
<p><strong>Hong Kong:</strong></p>
|
|
<ul>
|
|
<li><code>enode://6e6554fb3034b211398fcd0f0082cbb6bd13619e1a7e76ba66e1809aaa0c5f1ac53c9ae79cf2fd4a7bacb10d12010899b370c75fed19b991d9c0cdd02891abad@47.75.99.169:443</code></li>
|
|
<li><code>enode://23d0740b11919358625d79d4cac7d50a34d79e9c69e16831c5c70573757a1f5d7d884510bc595d7ee4da3c1508adf87bbc9e9260d804ef03f8c1e37f2fb2fc69@47.52.106.107:443</code></li>
|
|
</ul>
|
|
<p><strong>Amsterdam:</strong></p>
|
|
<ul>
|
|
<li><code>enode://436cc6f674928fdc9a9f7990f2944002b685d1c37f025c1be425185b5b1f0900feaf1ccc2a6130268f9901be4a7d252f37302c8335a2c1a62736e9232691cc3a@178.128.138.128:443</code></li>
|
|
<li><code>enode://5395aab7833f1ecb671b59bf0521cf20224fe8162fc3d2675de4ee4d5636a75ec32d13268fc184df8d1ddfa803943906882da62a4df42d4fccf6d17808156a87@178.128.140.188:443</code></li>
|
|
</ul>
|
|
<p><strong>Central US:</strong></p>
|
|
<ul>
|
|
<li><code>enode://32ff6d88760b0947a3dee54ceff4d8d7f0b4c023c6dad34568615fcae89e26cc2753f28f12485a4116c977be937a72665116596265aa0736b53d46b27446296a@34.70.75.208:443</code></li>
|
|
<li><code>enode://5405c509df683c962e7c9470b251bb679dd6978f82d5b469f1f6c64d11d50fbd5dd9f7801c6ad51f3b20a5f6c7ffe248cc9ab223f8bcbaeaf14bb1c0ef295fd0@35.223.215.156:443</code></li>
|
|
</ul>
|
|
<p>These bootstrap nodes MAY change and are not guaranteed to stay this way forever
|
|
and at some point circumstances might force them to change.</p>
|
|
<h4 id="discovery"><a class="header" href="#discovery">Discovery</a></h4>
|
|
<p>A Status client MUST discover or have a list of peers to connect to. Status uses a
|
|
light discovery mechanism based on a combination of <a href="https://github.com/ethereum/devp2p/blob/master/discv5/discv5.md">Discovery v5</a> and
|
|
<a href="https://github.com/libp2p/specs/tree/master/rendezvous">Rendezvous Protocol</a>,
|
|
(with some <a href="https://github.com/status-im/rendezvous#differences-with-original-rendezvous">modifications</a>).
|
|
Additionally, some static nodes MAY also be used.</p>
|
|
<p>A Status client MUST use at least one discovery method or use static nodes
|
|
to communicate with other clients.</p>
|
|
<p>Discovery V5 uses bootstrap nodes to discover other peers. Bootstrap nodes MUST support
|
|
Discovery V5 protocol as well in order to provide peers. It is kademlia-based discovery mechanism
|
|
and it might consume significant (at least on mobile) amount of network traffic to operate.</p>
|
|
<p>In order to take advantage from simpler and more mobile-friendly peers discovery mechanism,
|
|
i.e. Rendezvous protocol, one MUST provide a list of Rendezvous nodes which speak
|
|
Rendezvous protocol. Rendezvous protocol is request-response discovery mechanism.
|
|
It uses Ethereum Node Records (ENR) to report discovered peers.</p>
|
|
<p>Both peers discovery mechanisms use topics to provide peers with certain capabilities.
|
|
There is no point in returning peers that do not support a particular protocol.
|
|
Status nodes that want to be discovered MUST register to Discovery V5 and/or Rendezvous
|
|
with the <code>whisper</code> topic. Status nodes that are <code>Mailservers</code> and want to
|
|
be discoverable MUST additionally register with the <code>whispermail</code> topic.</p>
|
|
<p>It is RECOMMENDED to use both mechanisms but at the same time implement a structure
|
|
called <code>PeerPool</code>. <code>PeerPool</code> is responsible for maintaining an optimal number of peers.
|
|
For mobile nodes, there is no significant advantage to have more than 2-3 peers and one <code>Mailserver</code>.
|
|
<code>PeerPool</code> can notify peers discovery protocol implementations that they should suspend
|
|
their execution because the optimal number of peers is found. They should resume
|
|
if the number of connected peers drops or a <code>Mailserver</code> disconnects.</p>
|
|
<p>It is worth noticing that an efficient caching strategy MAY be of great use, especially,
|
|
on mobile devices. Discovered peers can be cached as they rarely change and used
|
|
when the client starts again. In such a case, there might be no need to even start
|
|
peers discovery protocols because cached peers will satisfy the optimal number of peers.</p>
|
|
<p>Alternatively, a client MAY rely exclusively on a list of static peers. This is the most efficient
|
|
way because there are no peers discovery algorithm overhead introduced. The disadvantage
|
|
is that these peers might be gone and without peers discovery mechanism, it won't be possible to find
|
|
new ones.</p>
|
|
<p>The current list of static peers is published on <a href="https://fleets.status.im/">https://fleets.status.im/</a>. <code>eth.prod</code> is the current
|
|
group of peers the official Status client uses. The others are test networks.</p>
|
|
<p>Finally, Waku node addresses can be retrieved by traversing
|
|
the merkle tree found at <a href="https://fleets.status.im"><code>fleets.status.im</code></a>, as described in <a href="https://eips.ethereum.org/EIPS/eip-1459#client-protocol">EIP-1459</a>.</p>
|
|
<h4 id="mobile-nodes"><a class="header" href="#mobile-nodes">Mobile nodes</a></h4>
|
|
<p>A <code>Mobile node</code> is a Whisper and/or Waku node which connects to part of the respective Whisper
|
|
and/or Waku network(s). A <code>Mobile node</code> MAY relay messages. See next section for more details on how
|
|
to use Whisper and/or Waku to communicate with other Status nodes.</p>
|
|
<h3 id="transport-privacy-and-whisper--waku-usage"><a class="header" href="#transport-privacy-and-whisper--waku-usage">Transport privacy and Whisper / Waku usage</a></h3>
|
|
<p>Once a Whisper and/or Waku node is up and running there are some specific settings required
|
|
to communicate with other Status nodes.</p>
|
|
<p>See <a href="/status/deprecated/whisper-usage.html">WHISPER-USAGE</a> and <a href="/status/deprecated/waku-usage.html">WAKU-USAGE</a> for more details.</p>
|
|
<p>For providing an offline inbox, see the complementary <a href="/status/deprecated/whisper-mailserver.html">WHISPER-MAILSERVER</a> and <a href="/status/deprecated/waku-mailserver.html">WAKU-MAILSERVER</a>.</p>
|
|
<h3 id="secure-transport"><a class="header" href="#secure-transport">Secure Transport</a></h3>
|
|
<p>In order to provide confidentiality, integrity, authentication and forward
|
|
secrecy of messages the node implements a secure transport on top of Whisper and Waku. This is
|
|
used in 1:1 chats and group chats, but not for public chats. See <a href="/status/deprecated/secure-transport.html">SECURE-TRANSPORT</a> for more.</p>
|
|
<h3 id="data-sync"><a class="header" href="#data-sync">Data Sync</a></h3>
|
|
<p><a href="/vac/2/mvds.html">MVDS</a> is used for 1:1 and group chats, however it is currently not in use for public chats.
|
|
<a href="#payloads-and-clients">Status payloads</a> are serialized and then wrapped inside an
|
|
MVDS message which is added to an <a href="/vac/2/mvds.html#payloads">MVDS payload</a>,
|
|
the node encrypts this payload (if necessary for 1-to-1 / group-chats) and sends it using
|
|
Whisper or Waku which also encrypts it.</p>
|
|
<h3 id="payloads-and-clients"><a class="header" href="#payloads-and-clients">Payloads and clients</a></h3>
|
|
<p>On top of secure transport, various types of data sync clients and
|
|
the node uses payload formats for things like 1:1 chat, group chat and public chat. These have
|
|
various degrees of standardization. Please refer to <a href="/status/deprecated/payloads.html">PAYLOADS</a> for more details.</p>
|
|
<h3 id="bips-and-eips-standards-support"><a class="header" href="#bips-and-eips-standards-support">BIPs and EIPs Standards support</a></h3>
|
|
<p>For a list of EIPs and BIPs that SHOULD be supported by Status client, please
|
|
see <a href="/status/deprecated/eips.html">EIPS</a>.</p>
|
|
<h2 id="security-considerations"><a class="header" href="#security-considerations">Security Considerations</a></h2>
|
|
<p>See <a href="#appendix-a-security-considerations">Appendix A</a></p>
|
|
<h2 id="design-rationale"><a class="header" href="#design-rationale">Design Rationale</a></h2>
|
|
<p>P2P Overlay</p>
|
|
<h3 id="why-devp2p-why-not-use-libp2p"><a class="header" href="#why-devp2p-why-not-use-libp2p">Why devp2p? Why not use libp2p?</a></h3>
|
|
<p>At the time Status developed the main Status clients, devp2p was the most
|
|
mature. However, in the future libp2p is likely to be used, as it'll
|
|
provide us with multiple transports, better protocol negotiation, NAT traversal,
|
|
etc.</p>
|
|
<p>For very experimental bridge support, see the bridge between libp2p and devp2p
|
|
in <a href="https://github.com/status-im/murmur">Murmur</a>.</p>
|
|
<h3 id="what-about-other-rlpx-subprotocols-like-les-and-swarm"><a class="header" href="#what-about-other-rlpx-subprotocols-like-les-and-swarm">What about other RLPx subprotocols like LES, and Swarm?</a></h3>
|
|
<p>Status is primarily optimized for resource restricted devices, and at present
|
|
time light client support for these protocols are suboptimal. This is a work in
|
|
progress.</p>
|
|
<p>For better Ethereum light client support, see <a href="https://github.com/status-im/status-go/issues/1025">Re-enable LES as
|
|
option</a>. For better Swarm
|
|
support, see <a href="https://github.com/ethersphere/SWIPs/pull/12">Swarm adaptive
|
|
nodes</a>.</p>
|
|
<p>For transaction support, Status clients currently have to rely on Infura.</p>
|
|
<p>Status clients currently do not offer native support for file storage.</p>
|
|
<h3 id="why-do-you-use-whisper"><a class="header" href="#why-do-you-use-whisper">Why do you use Whisper?</a></h3>
|
|
<p>Whisper is one of the <a href="http://gavwood.com/dappsweb3.html">three parts</a> of the
|
|
vision of Ethereum as the world computer, Ethereum and Swarm being the other
|
|
two. Status was started as an encapsulation of and a clear window to this world
|
|
computer.</p>
|
|
<h3 id="why-do-you-use-waku"><a class="header" href="#why-do-you-use-waku">Why do you use Waku?</a></h3>
|
|
<p>Waku is a direct upgrade and replacement for Whisper, the main motivation for
|
|
developing and implementing Waku can be found in the <a href="/waku/">Waku specs</a>.</p>
|
|
<blockquote>
|
|
<p>Waku was created to incrementally improve in areas that Whisper is lacking in,
|
|
with special attention to resource restricted devices. We specify the standard for
|
|
Waku messages in order to ensure forward compatibility of different Waku clients,
|
|
backwards compatibility with Whisper clients, as well as to allow multiple
|
|
implementations of Waku and its capabilities. We also modify the language to be more
|
|
unambiguous, concise and consistent.</p>
|
|
</blockquote>
|
|
<p>Considerable work has gone into the active development of Ethereum, in contrast Whisper
|
|
is not currently under active development, and it has several drawbacks. Among others:</p>
|
|
<ul>
|
|
<li>Whisper is very wasteful bandwidth-wise and doesn't appear to be scalable</li>
|
|
<li>Proof of work is a poor spam protection mechanism for heterogeneous devices</li>
|
|
<li>The privacy guarantees provided are not rigorous</li>
|
|
<li>There are no incentives to run a node</li>
|
|
</ul>
|
|
<p>Finding a more suitable transport privacy is an ongoing research effort,
|
|
together with <a href="https://vac.dev/vac-overview">Vac</a> and other teams in the space.</p>
|
|
<h3 id="why-is-pow-for-waku-set-so-low"><a class="header" href="#why-is-pow-for-waku-set-so-low">Why is PoW for Waku set so low?</a></h3>
|
|
<p>A higher PoW would be desirable, but this kills the battery on mobile phones,
|
|
which is a prime target for Status clients.</p>
|
|
<p>This means the network is currently vulnerable to DDoS attacks. Alternative
|
|
methods of spam protection are currently being researched.</p>
|
|
<h3 id="why-do-you-not-use-discovery-v5-for-node-discovery"><a class="header" href="#why-do-you-not-use-discovery-v5-for-node-discovery">Why do you not use Discovery v5 for node discovery?</a></h3>
|
|
<p>At the time of implementing dynamic node discovery, Discovery v5 wasn't completed
|
|
yet. Additionally, running a DHT on a mobile leads to slow node discovery, bad
|
|
battery and poor bandwidth usage. Instead, each client can choose to turn on
|
|
Discovery v5 for a short period until the node populates their peer list.</p>
|
|
<p>For some further investigation, see
|
|
<a href="https://github.com/status-im/swarms/blob/master/ideas/092-disc-v5-research.md">here</a>.</p>
|
|
<h3 id="i-heard-something-about-mailservers-being-trusted-somehow"><a class="header" href="#i-heard-something-about-mailservers-being-trusted-somehow">I heard something about <code>Mailservers</code> being trusted somehow?</a></h3>
|
|
<p>In order to use a <code>Mailserver</code>, a given node needs to connect to it directly, i.e. add the <code>Mailserver</code>
|
|
as its peer and mark it as trusted.
|
|
This means that the <code>Mailserver</code> is able to send direct p2p messages to the node instead of broadcasting them.
|
|
Effectively, it knows the bloom filter of the topics the node is interested in,
|
|
when it is online as well as many metadata like IP address.</p>
|
|
<h3 id="data-sync-1"><a class="header" href="#data-sync-1">Data sync</a></h3>
|
|
<h4 id="why-is-mvds-not-used-for-public-chats"><a class="header" href="#why-is-mvds-not-used-for-public-chats">Why is MVDS not used for public chats?</a></h4>
|
|
<p>Currently, public chats are broadcast-based, and there's no direct way of finding
|
|
out who is receiving messages. Hence there's no clear group sync state context
|
|
whereby participants can sync. Additionally, MVDS is currently not optimized for
|
|
large group contexts, which means bandwidth usage will be a lot higher than
|
|
reasonable. See <a href="https://vac.dev/p2p-data-sync-for-mobile">P2P Data Sync for Mobile</a> for more.
|
|
This is an active area of research.</p>
|
|
<h2 id="footnotes"><a class="header" href="#footnotes">Footnotes</a></h2>
|
|
<ol>
|
|
<li><a href="https://github.com/status-im/status-protocol-go/">https://github.com/status-im/status-protocol-go/</a></li>
|
|
<li><a href="https://github.com/status-im/status-console-client/">https://github.com/status-im/status-console-client/</a></li>
|
|
<li><a href="https://github.com/status-im/status-mobile/">https://github.com/status-im/status-mobile/</a></li>
|
|
</ol>
|
|
<h2 id="appendix-a-security-considerations"><a class="header" href="#appendix-a-security-considerations">Appendix A: Security considerations</a></h2>
|
|
<p>There are several security considerations to take into account when running Status.
|
|
Chief among them are: scalability, DDoS-resistance and privacy.
|
|
These also vary depending on what capabilities are used, such as <code>Mailserver</code>, light node, and so on.</p>
|
|
<h3 id="scalability-and-ux"><a class="header" href="#scalability-and-ux">Scalability and UX</a></h3>
|
|
<p><strong>Bandwidth usage:</strong></p>
|
|
<p>In version 1 of Status, bandwidth usage is likely to be an issue.
|
|
In Status version 1.1 this is partially addressed with Waku usage, see <a href="https://github.com/vacp2p/research/tree/dcc71f4779be832d3b5ece9c4e11f1f7ec24aac2/whisper_scalability">the theoretical scaling model</a>.</p>
|
|
<p><strong><code>Mailserver</code> High Availability requirement:</strong></p>
|
|
<p>A <code>Mailserver</code> has to be online to receive messages for other nodes, this puts a high availability requirement on it.</p>
|
|
<p><strong>Gossip-based routing:</strong></p>
|
|
<p>Use of gossip-based routing doesn't necessarily scale.
|
|
It means each node can see a message multiple times,
|
|
and having too many light nodes can cause propagation probability that is too low.
|
|
See <a href="https://our.status.im/whisper-pss-comparison/">Whisper vs PSS</a> for more and a possible Kademlia based alternative.</p>
|
|
<p><strong>Lack of incentives:</strong></p>
|
|
<p>Status currently lacks incentives to run nodes, which means node operators are more likely to create centralized choke points.</p>
|
|
<h3 id="privacy"><a class="header" href="#privacy">Privacy</a></h3>
|
|
<p><strong>Light node privacy:</strong></p>
|
|
<p>The main privacy concern with light nodes is that directly connected peers will know that a message originates from them (as it are the only ones it sends). This means nodes can make assumptions about what messages (topics) their peers are interested in.</p>
|
|
<p><strong>Bloom filter privacy:</strong></p>
|
|
<p>A user reveals which messages they are interested in, by setting only the topics they are interested in on the bloom filter.
|
|
This is a fundamental trade-off between bandwidth usage and privacy,
|
|
though the trade-off space is likely suboptimal in terms of the <a href="https://eprint.iacr.org/2017/954.pdf">Anonymity</a> <a href="https://petsymposium.org/2019/files/hotpets/slides/coordination-helps-anonymity-slides.pdf">trilemma</a>.</p>
|
|
<p><strong><code>Mailserver client</code> privacy:</strong></p>
|
|
<p>A <code>Mailserver client</code> has to trust a <code>Mailserver</code>, which means they can send direct traffic. This reveals what topics / bloom filter a node is interested in, along with its peerID (with IP).</p>
|
|
<p><strong>Privacy guarantees not rigorous:</strong></p>
|
|
<p>Privacy for Whisper or Waku hasn't been studied rigorously for various threat models like global passive adversary, local active attacker, etc. This is unlike e.g. Tor and mixnets.</p>
|
|
<p><strong>Topic hygiene:</strong></p>
|
|
<p>Similar to bloom filter privacy, using a very specific topic reveals more information. See scalability model linked above.</p>
|
|
<h3 id="spam-resistance"><a class="header" href="#spam-resistance">Spam resistance</a></h3>
|
|
<p><strong>PoW bad for heterogeneous devices:</strong></p>
|
|
<p>Proof of work is a poor spam prevention mechanism. A mobile device can only have a very low PoW in order not to use too much CPU / burn up its phone battery. This means someone can spin up a powerful node and overwhelm the network.</p>
|
|
<p><strong><code>Mailserver</code> trusted connection:</strong></p>
|
|
<p>A <code>Mailserver</code> has a direct TCP connection, which means they are trusted to send traffic. This means a malicious or malfunctioning <code>Mailserver</code> can overwhelm an individual node.</p>
|
|
<h3 id="censorship-resistance"><a class="header" href="#censorship-resistance">Censorship resistance</a></h3>
|
|
<p><strong>Devp2p TCP port blockable:</strong></p>
|
|
<p>By default Devp2p runs on port <code>30303</code>, which is not commonly used for any other service. This means it is easy to censor, e.g. airport WiFi. This can be mitigated somewhat by running on e.g. port <code>80</code> or <code>443</code>, but there are still outstanding issues. See libp2p and Tor's Pluggable Transport for how this can be improved.</p>
|
|
<p>See <a href="https://github.com/status-im/status-mobile/issues/6351">https://github.com/status-im/status-mobile/issues/6351</a> for some discussion.</p>
|
|
<h2 id="acknowledgments"><a class="header" href="#acknowledgments">Acknowledgments</a></h2>
|
|
<p>Jacek Sieka</p>
|
|
<h2 id="changelog"><a class="header" href="#changelog">Changelog</a></h2>
|
|
<h3 id="version-03"><a class="header" href="#version-03">Version 0.3</a></h3>
|
|
<p>Released <a href="https://github.com/status-im/specs/commit/664dd1c9df6ad409e4c007fefc8c8945b8d324e8">May 22, 2020</a></p>
|
|
<ul>
|
|
<li>Added that Waku SHOULD be used</li>
|
|
<li>Added that Whisper SHOULD NOT be used</li>
|
|
<li>Added language to include Waku in all relevant places</li>
|
|
<li>Change to keep <code>Mailserver</code> term consistent</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="https://developers.google.com/protocol-buffers/">Protobuf</a></li>
|
|
<li><a href="https://github.com/ethereum/devp2p/blob/master/discv5/discv5.md">Discv5</a></li>
|
|
<li><a href="https://github.com/ethereum/devp2p/blob/master/rlpx.md">RLPx Transport Protocol, v5</a></li>
|
|
<li><a href="https://eips.ethereum.org/EIPS/eip-627">Whisper V6</a></li>
|
|
<li><a href="/waku/standards/legacy/6/waku1.html">Waku V1</a></li>
|
|
<li><a href="https://github.com/libp2p/specs/tree/master/rendezvous">Rendezvous Protocol</a></li>
|
|
<li><a href="https://github.com/status-im/rendezvous#differences-with-original-rendezvous">Rendezvous Protocol modifications</a></li>
|
|
<li><a href="https://fleets.status.im">Fleets Status</a></li>
|
|
<li><a href="https://eips.ethereum.org/EIPS/eip-1459#client-protocol">EIP-1459</a></li>
|
|
<li><a href="/status/deprecated/whisper-usage.html">WHISPER-USAGE</a></li>
|
|
<li><a href="/status/deprecated/waku-usage.html">WAKU-USAGE</a></li>
|
|
<li><a href="/status/deprecated/whisper-mailserver.html">WHISPER-MAILSERVER</a></li>
|
|
<li><a href="/status/deprecated/waku-mailserver.html">WAKU-MAILSERVER</a></li>
|
|
<li><a href="/status/deprecated/secure-transport.html">SECURE-TRANSPORT</a></li>
|
|
<li><a href="/vac/2/mvds.html">MVDS</a></li>
|
|
<li><a href="/status/deprecated/payloads.html">PAYLOADS</a></li>
|
|
<li><a href="/status/deprecated/eips.html">EIPS</a></li>
|
|
<li><a href="https://github.com/status-im/murmur">Murmur</a></li>
|
|
<li><a href="https://github.com/status-im/status-go/issues/1025">Re-enable LES as option</a></li>
|
|
<li><a href="https://github.com/ethersphere/SWIPs/pull/12">Swarm adaptive nodes</a></li>
|
|
<li><a href="https://our.status.im/whisper-pss-comparison/">Whisper vs PSS</a></li>
|
|
<li><a href="/waku/">Waku specs</a></li>
|
|
<li><a href="https://vac.dev/vac-overview">Vac</a></li>
|
|
<li><a href="https://github.com/vacp2p/research/tree/dcc71f4779be832d3b5ece9c4e11f1f7ec24aac2/whisper_scalability">theoretical scaling model</a></li>
|
|
<li><a href="https://eprint.iacr.org/2017/954.pdf">Anonymity</a></li>
|
|
<li><a href="https://petsymposium.org/2019/files/hotpets/slides/coordination-helps-anonymity-slides.pdf">trilemma</a></li>
|
|
<li><a href="https://our.status.im/whisper-pss-comparison/">Whisper vs PSS</a></li>
|
|
<li><a href="https://github.com/status-im/swarms/blob/master/ideas/092-disc-v5-research.md">Discovery v5 research</a></li>
|
|
<li><a href="https://vac.dev/p2p-data-sync-for-mobile">P2P Data Sync for Mobile</a></li>
|
|
<li><a href="https://github.com/status-im/status-protocol-go/">Status protocol go</a></li>
|
|
<li><a href="https://github.com/status-im/status-console-client/">Status console client</a></li>
|
|
<li><a href="https://github.com/status-im/status-mobile/">Status mobile</a></li>
|
|
<li><a href="https://github.com/status-im/status-mobile/issues/6351">Status mobile issue 6351</a></li>
|
|
</ul>
|
|
|
|
</main>
|
|
|
|
<nav class="nav-wrapper" aria-label="Page navigation">
|
|
<!-- Mobile navigation buttons -->
|
|
<a rel="prev" href="../../status/deprecated/account.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/dapp-browser-API-usage.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/account.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/dapp-browser-API-usage.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>
|