484 lines
28 KiB
HTML
484 lines
28 KiB
HTML
<!DOCTYPE html>
|
||
<html class="h-full" lang="en-US">
|
||
<head>
|
||
|
||
<title>Vac - [Talk] Vac, Waku v2 and Ethereum Messaging</title>
|
||
|
||
|
||
<meta charset="utf-8" />
|
||
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||
<title>Vac</title>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
|
||
<script async defer src="https://cdn.simpleanalytics.io/hello.js"></script>
|
||
<noscript><img src="https://api.simpleanalytics.io/hello.gif" alt="" /></noscript>
|
||
|
||
<!-- Fathom - simple website analytics - https://github.com/usefathom/fathom -->
|
||
<script>
|
||
(function (f, a, t, h, o, m) {
|
||
a[h] =
|
||
a[h] ||
|
||
function () {
|
||
(a[h].q = a[h].q || []).push(arguments);
|
||
};
|
||
(o = f.createElement("script")), (m = f.getElementsByTagName("script")[0]);
|
||
o.async = 1;
|
||
o.src = t;
|
||
o.id = "fathom-script";
|
||
m.parentNode.insertBefore(o, m);
|
||
})(document, window, "//fathom.status.im/tracker.js", "fathom");
|
||
fathom("set", "siteId", "YELIA");
|
||
fathom("trackPageview");
|
||
</script>
|
||
<!-- / Fathom -->
|
||
|
||
<!-- Twitter cards -->
|
||
<meta name="twitter:site" content="@vacp2p" />
|
||
<meta name="twitter:creator" content="@oskarth" />
|
||
<meta name="twitter:title" content="[Talk] Vac, Waku v2 and Ethereum Messaging" />
|
||
|
||
|
||
<meta name="twitter:description" content="Talk from Taipei Ethereum Meetup. Read on to find out about our journey from Whisper to Waku v2, as well as how Waku v2 can be useful for Etherum Messaging." />
|
||
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
<meta name="twitter:image" content="https://vac.dev/assets/img/taipei_ethereum_meetup_slide.png" />
|
||
|
||
<!-- end of Twitter cards -->
|
||
|
||
<link rel="shortcut icon" href="/assets/img/favicon.png" type="image/png" />
|
||
<link rel="preload" href="/fonts/OpenSans-Regular.woff2" as="font" type="font/woff2" crossorigin />
|
||
<link rel="preload" href="/fonts/OpenSans-SemiBold.woff2" as="font" type="font/woff2" crossorigin />
|
||
<link rel="preload" href="/fonts/OpenSans-SemiBoldItalic.woff2" as="font" type="font/woff2" crossorigin />
|
||
<link rel="stylesheet" href="/assets/css/style.css" />
|
||
</head>
|
||
|
||
<body class="h-full flex flex-col font-body">
|
||
<div class="flex-grow container max-w-screen-xl mx-auto px-5 md:px-12 lg:pt-6">
|
||
<header class="sm:sticky sm:top-0 bg-white z-50">
|
||
<div class="container max-w-screen-xl sm:border-b">
|
||
<div class="nav-section flex justify-between items-center py-3 md:py-5 lg:py-10">
|
||
<div class="logo md:pr-8 l:p-0">
|
||
<a href="/"><img src="/assets/img/logo.png" alt="Vac logo" class="w-9 h-11" /></a>
|
||
</div>
|
||
<div class="flex justify-between items-center w-9/12">
|
||
<div class="burger block sm:hidden z-50">
|
||
<button class="burger__button burger__button--open fixed top-2 right-5 w-12 h-12" type="button" aria-label="Mobile menu button">
|
||
<img class="burger__icon" src="/assets/img/burger.svg" alt="Open menu button" />
|
||
</button>
|
||
<button class="burger__button burger__button--close hidden fixed top-2 right-5 w-12 h-12" type="button" aria-label="Close mobile menu button">
|
||
<img class="burger__icon burger__icon--close" src="/assets/img/close.svg" alt="Close menu button" />
|
||
</button>
|
||
</div>
|
||
|
||
<nav class="nav max-w-screen-xm md:max-w-screen-sl container">
|
||
<ul class="nav__list hidden sm:flex justify-between container text-xs font-semibold md:pr-8 l:p-0">
|
||
<li class="hover:opacity-50">
|
||
|
||
<a class="nav__link" href="/#work">Work</a>
|
||
|
||
</li>
|
||
<li class="hover:opacity-50">
|
||
|
||
<a class="nav__link" href="/#about">About</a>
|
||
|
||
</li>
|
||
<li class="hover:opacity-50">
|
||
|
||
<a class="nav__link" href="/#join">Join Vac</a>
|
||
|
||
</li>
|
||
<li class="hover:opacity-50">
|
||
|
||
<a class="nav__link" href="/research-log">Research log</a>
|
||
|
||
</li>
|
||
<li class="hover:opacity-50">
|
||
|
||
<a class="nav__link" href="/media">Media</a>
|
||
|
||
</li>
|
||
<li class="hover:opacity-50">
|
||
|
||
<a href="https://rfc.vac.dev/" target="_blank" rel="noopener noreferrer">Specs</a>
|
||
|
||
</li>
|
||
<li class="hover:opacity-50">
|
||
|
||
<a href="https://forum.vac.dev/" target="_blank" rel="noopener noreferrer">Forum</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<ul class="social items-center hidden md:flex">
|
||
<li class="pr-5">
|
||
<a href="https://twitter.com/vacp2p" target="_blank" rel="noopener noreferrer">
|
||
<svg width="25" height="21" viewBox="0 0 25 21" fill="none" xmlns="http://www.w3.org/2000/svg" class="hover:opacity-50">
|
||
<path
|
||
d="M24.8872 3.04499C23.9872 3.43499 23.0572 3.70498 22.0672 3.82499C23.0872 3.22498 23.8672 2.26499 24.2272 1.09499C23.2672 1.66499 22.2172 2.05499 21.1072 2.29499C20.2072 1.33499 18.9172 0.734985 17.5072 0.734985C14.7772 0.734985 12.5872 2.95499 12.5872 5.65499C12.5872 6.04499 12.6172 6.40498 12.7072 6.76498C8.62721 6.58498 5.02721 4.60498 2.59721 1.63499C0.857207 4.75498 2.80721 7.33499 4.09721 8.20499C3.31721 8.20499 2.53721 7.96499 1.87721 7.60499C1.87721 10.035 3.58721 12.045 5.80721 12.495C5.32721 12.645 4.24721 12.735 3.58721 12.585C4.21721 14.535 6.04721 15.975 8.17721 16.005C6.49721 17.325 4.03721 18.375 0.887207 18.045C3.07721 19.455 5.65721 20.265 8.44721 20.265C17.5072 20.265 22.4272 12.765 22.4272 6.28499C22.4272 6.07499 22.4272 5.86499 22.3972 5.65499C23.4172 4.90499 24.2572 4.03499 24.8872 3.04499Z"
|
||
fill="#151512"
|
||
/>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
<li class="pr-5">
|
||
<a href="https://github.com/vacp2p" target="_blank" rel="noopener noreferrer">
|
||
<svg width="26" height="25" viewBox="0 0 26 25" fill="none" xmlns="http://www.w3.org/2000/svg" class="hover:opacity-50">
|
||
<path
|
||
d="M12.8857 0.856567C6.26021 0.856567 0.915339 6.20154 0.950043 12.7951C0.9778 18.0687 4.43935 22.5427 9.21766 24.1227C9.81824 24.2327 10.0353 23.864 10.0336 23.5474C10.0321 23.2635 10.0177 22.5129 10.0065 21.5171C6.67274 22.238 5.95552 19.9163 5.95552 19.9163C5.40376 18.5369 4.61433 18.1698 4.61433 18.1698C3.51994 17.4296 4.69151 17.4444 4.69151 17.4444C5.89646 17.5291 6.53549 18.6751 6.53549 18.6751C7.61609 20.4989 9.35182 19.9727 10.0342 19.6665C10.1382 18.8951 10.4459 18.3689 10.7878 18.0702C8.12222 17.7684 5.31483 16.7443 5.29076 12.1708C5.2839 10.8672 5.74629 9.80152 6.50989 8.96619C6.3838 8.66445 5.96641 7.45009 6.61027 5.80766C6.61027 5.80766 7.61658 5.4866 9.9167 7.03094C10.8723 6.76636 11.8976 6.63408 12.9191 6.62962C13.9376 6.63556 14.9658 6.76636 15.9257 7.03242C18.2081 5.48809 19.2163 5.80914 19.2163 5.80914C19.8789 7.45306 19.4743 8.66594 19.3529 8.96767C20.1268 9.80301 20.5959 10.8687 20.6028 12.1723C20.6269 16.7577 17.8272 17.767 15.1558 18.0628C15.5882 18.4314 15.976 19.1597 15.9819 20.273C15.9903 21.8693 15.9821 23.1565 15.9841 23.5474C15.9858 23.867 16.2038 24.2386 16.8122 24.1212C21.5663 22.5397 24.9778 18.0672 24.95 12.7951C24.9153 6.20154 19.5142 0.856567 12.8857 0.856567Z"
|
||
fill="#151512"
|
||
/>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://discord.gg/PQFdubGt6d" target="_blank" rel="noopener noreferrer">
|
||
<svg width="25" height="21" viewBox="0 0 25 21" fill="none" xmlns="http://www.w3.org/2000/svg" class="hover:opacity-50">
|
||
<path
|
||
d="M22.7861 9.04256C21.8482 5.74455 20.7799 4.04048 20.7627 4.00991C20.7017 3.93459 19.189 2.104 15.5271 0.75L15.0353 2.0764C16.7774 2.72057 18.0116 3.50643 18.6899 4.01419C16.6599 3.40408 14.2431 3.03041 12.1008 3.03041C9.95851 3.03041 7.53775 3.40408 5.50128 4.01419C6.18496 3.50648 7.42744 2.72057 9.17631 2.0764L8.69846 0.75C5.02238 2.104 3.49044 3.93459 3.42863 4.00991C3.41108 4.04048 2.32479 5.74455 1.35221 9.04256C0.414855 12.2208 0.0415214 16.7045 0.027872 16.8843C0.109225 17.0131 1.97891 20.25 7.12077 20.25L8.43406 18.3536C6.97595 17.964 5.58693 17.3357 4.31689 16.4832L5.10228 15.3069C7.15122 16.6822 9.54509 17.4092 12.0251 17.4092C14.5051 17.4092 16.9067 16.6822 18.9701 15.3069L19.7431 16.4832C18.4641 17.3357 17.0684 17.964 15.6062 18.3536L16.8995 20.25C22.0414 20.25 23.9452 17.0131 24.0279 16.8843C24.0161 16.7045 23.69 12.2208 22.7861 9.04256ZM8.79853 12.7392H7.39228L7.40468 10.3841H8.81093L8.79853 12.7392ZM16.7071 12.7392H15.3008L15.3132 10.3841H16.7195L16.7071 12.7392Z"
|
||
fill="#151512"
|
||
/>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="overlay container max-w-screen-sm w-full hidden sm:hidden fixed top-0 right-0 h-screen bg-black bg-opacity-40 z-30">
|
||
<nav class="nav-mobile hidden fixed top-0 right-0 flex flex-col justify-between items-center pt-14 px-12 pb-5 bg-white w-9/12 h-3/4 z-40">
|
||
<ul class="nav__list flex flex-col flex-1 justify-between items-center container box-content w-32 h-auto max-h-nav text-xs font-normal">
|
||
<li class="hover:opacity-50">
|
||
|
||
<a class="nav__link" href="/#work">Work</a>
|
||
|
||
</li>
|
||
<li class="hover:opacity-50">
|
||
|
||
<a class="nav__link" href="/#about">About</a>
|
||
|
||
</li>
|
||
<li class="hover:opacity-50">
|
||
|
||
<a class="nav__link" href="/#join">Join Vac</a>
|
||
|
||
</li>
|
||
<li class="hover:opacity-50">
|
||
|
||
<a class="nav__link" href="/research-log">Research log</a>
|
||
|
||
</li>
|
||
<li class="hover:opacity-50">
|
||
|
||
<a class="nav__link" href="/media">Media</a>
|
||
|
||
</li>
|
||
<li class="hover:opacity-50">
|
||
|
||
<a href="https://rfc.vac.dev/" target="_blank" rel="noopener noreferrer">Specs</a>
|
||
|
||
</li>
|
||
<li class="hover:opacity-50">
|
||
|
||
<a href="https://forum.vac.dev/" target="_blank" rel="noopener noreferrer">Forum</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
<ul class="social items-center flex mt-8">
|
||
<li class="pr-5">
|
||
<a href="https://twitter.com/vacp2p" target="_blank" rel="noopener noreferrer">
|
||
<svg width="25" height="21" viewBox="0 0 25 21" fill="none" xmlns="http://www.w3.org/2000/svg" class="hover:opacity-50">
|
||
<path
|
||
d="M24.8872 3.04499C23.9872 3.43499 23.0572 3.70498 22.0672 3.82499C23.0872 3.22498 23.8672 2.26499 24.2272 1.09499C23.2672 1.66499 22.2172 2.05499 21.1072 2.29499C20.2072 1.33499 18.9172 0.734985 17.5072 0.734985C14.7772 0.734985 12.5872 2.95499 12.5872 5.65499C12.5872 6.04499 12.6172 6.40498 12.7072 6.76498C8.62721 6.58498 5.02721 4.60498 2.59721 1.63499C0.857207 4.75498 2.80721 7.33499 4.09721 8.20499C3.31721 8.20499 2.53721 7.96499 1.87721 7.60499C1.87721 10.035 3.58721 12.045 5.80721 12.495C5.32721 12.645 4.24721 12.735 3.58721 12.585C4.21721 14.535 6.04721 15.975 8.17721 16.005C6.49721 17.325 4.03721 18.375 0.887207 18.045C3.07721 19.455 5.65721 20.265 8.44721 20.265C17.5072 20.265 22.4272 12.765 22.4272 6.28499C22.4272 6.07499 22.4272 5.86499 22.3972 5.65499C23.4172 4.90499 24.2572 4.03499 24.8872 3.04499Z"
|
||
fill="#151512"
|
||
/>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
<li class="pr-5">
|
||
<a href="https://github.com/vacp2p" target="_blank" rel="noopener noreferrer">
|
||
<svg width="26" height="25" viewBox="0 0 26 25" fill="none" xmlns="http://www.w3.org/2000/svg" class="hover:opacity-50">
|
||
<path
|
||
d="M12.8857 0.856567C6.26021 0.856567 0.915339 6.20154 0.950043 12.7951C0.9778 18.0687 4.43935 22.5427 9.21766 24.1227C9.81824 24.2327 10.0353 23.864 10.0336 23.5474C10.0321 23.2635 10.0177 22.5129 10.0065 21.5171C6.67274 22.238 5.95552 19.9163 5.95552 19.9163C5.40376 18.5369 4.61433 18.1698 4.61433 18.1698C3.51994 17.4296 4.69151 17.4444 4.69151 17.4444C5.89646 17.5291 6.53549 18.6751 6.53549 18.6751C7.61609 20.4989 9.35182 19.9727 10.0342 19.6665C10.1382 18.8951 10.4459 18.3689 10.7878 18.0702C8.12222 17.7684 5.31483 16.7443 5.29076 12.1708C5.2839 10.8672 5.74629 9.80152 6.50989 8.96619C6.3838 8.66445 5.96641 7.45009 6.61027 5.80766C6.61027 5.80766 7.61658 5.4866 9.9167 7.03094C10.8723 6.76636 11.8976 6.63408 12.9191 6.62962C13.9376 6.63556 14.9658 6.76636 15.9257 7.03242C18.2081 5.48809 19.2163 5.80914 19.2163 5.80914C19.8789 7.45306 19.4743 8.66594 19.3529 8.96767C20.1268 9.80301 20.5959 10.8687 20.6028 12.1723C20.6269 16.7577 17.8272 17.767 15.1558 18.0628C15.5882 18.4314 15.976 19.1597 15.9819 20.273C15.9903 21.8693 15.9821 23.1565 15.9841 23.5474C15.9858 23.867 16.2038 24.2386 16.8122 24.1212C21.5663 22.5397 24.9778 18.0672 24.95 12.7951C24.9153 6.20154 19.5142 0.856567 12.8857 0.856567Z"
|
||
fill="#151512"
|
||
/>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://discord.gg/PQFdubGt6d" target="_blank" rel="noopener noreferrer">
|
||
<svg width="25" height="21" viewBox="0 0 25 21" fill="none" xmlns="http://www.w3.org/2000/svg" class="hover:opacity-50">
|
||
<path
|
||
d="M22.7861 9.04256C21.8482 5.74455 20.7799 4.04048 20.7627 4.00991C20.7017 3.93459 19.189 2.104 15.5271 0.75L15.0353 2.0764C16.7774 2.72057 18.0116 3.50643 18.6899 4.01419C16.6599 3.40408 14.2431 3.03041 12.1008 3.03041C9.95851 3.03041 7.53775 3.40408 5.50128 4.01419C6.18496 3.50648 7.42744 2.72057 9.17631 2.0764L8.69846 0.75C5.02238 2.104 3.49044 3.93459 3.42863 4.00991C3.41108 4.04048 2.32479 5.74455 1.35221 9.04256C0.414855 12.2208 0.0415214 16.7045 0.027872 16.8843C0.109225 17.0131 1.97891 20.25 7.12077 20.25L8.43406 18.3536C6.97595 17.964 5.58693 17.3357 4.31689 16.4832L5.10228 15.3069C7.15122 16.6822 9.54509 17.4092 12.0251 17.4092C14.5051 17.4092 16.9067 16.6822 18.9701 15.3069L19.7431 16.4832C18.4641 17.3357 17.0684 17.964 15.6062 18.3536L16.8995 20.25C22.0414 20.25 23.9452 17.0131 24.0279 16.8843C24.0161 16.7045 23.69 12.2208 22.7861 9.04256ZM8.79853 12.7392H7.39228L7.40468 10.3841H8.81093L8.79853 12.7392ZM16.7071 12.7392H15.3008L15.3132 10.3841H16.7195L16.7071 12.7392Z"
|
||
fill="#151512"
|
||
/>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
|
||
|
||
<main class="bg-white text-black flex flex-col"><section class="container max-w-screen-xl flex flex-col items-center pt-10 pb-0 md:pb-10 lg:pb-0">
|
||
<div class="info-block max-w-680 pb-5 sm:pb-10 overflow-hidden">
|
||
<div class="post mb-10">
|
||
<h1 class="text-xl md:text-xxl mb-5 sm:max-w-md lg:max-w-2xl">[Talk] Vac, Waku v2 and Ethereum Messaging</h1>
|
||
<div>
|
||
<span class="text-s lg:text-base"> 10 Nov 2020 • by </span>
|
||
<a href="/authors/oskarth" class="text-s lg:text-base font-bold hover:underline">oskarth</a>
|
||
</div>
|
||
</div>
|
||
<div class="post__content"><p><em>The following post is a transcript of the talk given at the <a href="https://www.meetup.com/Taipei-Ethereum-Meetup/events/274033344/">Taipei Ethereum meetup, November 5</a>. There is also a <a href="https://www.youtube.com/watch?v=lUDy1MoeYnI">video recording</a>.</em></p>
|
||
|
||
<hr />
|
||
|
||
<h2 id="0-introduction">0. Introduction</h2>
|
||
|
||
<p>Hi! My name is Oskar and I’m the protocol research lead at Vac. This talk will be divided into two parts. First I’ll talk about the journey from Whisper, to Waku v1 and now to Waku v2. Then I’ll talk about messaging in Ethereum. After this talk, you should have an idea of what Waku v2 is, the problems it is trying to solve, as well as where it can be useful for messaging in Ethereum.</p>
|
||
|
||
<h2 id="part-1---vac-and-the-journey-from-whisper-to-waku-v1-to-waku-v2">PART 1 - VAC AND THE JOURNEY FROM WHISPER TO WAKU V1 TO WAKU V2</h2>
|
||
|
||
<h2 id="1-vac-intro">1. Vac intro</h2>
|
||
|
||
<p>First, what is Vac? Vac grew out of our efforts Status to create a window on to Ethereum and secure messenger. Vac is modular protocol stack for p2p secure messaging, paying special attention to resource restricted devices, privacy and censorship resistance.</p>
|
||
|
||
<p>Today we are going to talk mainly about Waku v2, which is the transport privacy / routing aspect of the Vac protocol stack. It sits “above” the p2p overlay, such as libp2p dealing with transports etc, and below a conversational security layer dealing with messaging encryption, such as using Double Ratchet etc.</p>
|
||
|
||
<h2 id="2-whisper-to-waku-v1">2. Whisper to Waku v1</h2>
|
||
|
||
<p>In the beginning, there was Whisper. Whisper was part of the holy trinity of Ethereum. You had Ethereum for consensus/computation, Whisper for messaging, and Swarm for storage.</p>
|
||
|
||
<p>However, for various reasons, Whisper didn’t get the attention it deserved. Development dwindled, it promised too much and it suffered from many issues, such as being extremely inefficient and not being suitable for running on e.g. mobile phone. Despite this, Status used it in its app from around 2017 to 2019. As far as I know, it was one of very few, if not the only, production uses of Whisper.</p>
|
||
|
||
<p>In an effort to solve some of its immediate problems, we forked Whisper into Waku and formalized it with a proper specification. This solved immediate bandwidth issues for light nodes, introduced rate limiting for better spam protection, improved historical message support, etc.</p>
|
||
|
||
<p>If you are interested in this journey, checkout the <a href="https://www.youtube.com/watch?v=6lLT33tsJjs">EthCC talk Dean and I gave in Paris earlier this year</a>.</p>
|
||
|
||
<p>Status upgraded to Waku v1 early 2020. What next?</p>
|
||
|
||
<h2 id="3-waku-v1-to-v2">3. Waku v1 to v2</h2>
|
||
|
||
<p>We were far from done. The changes we had made were quite incremental and done in order to get tangible improvements as quickly as possible. This meant we couldn’t address more fundamental issues related to full node routing scalability, running with libp2p for more transports, better security, better spam protection and incentivization.</p>
|
||
|
||
<p>This kickstarted Waku v2 efforts, which is what we’ve been working on since July. This work was and is initally centered around a few pieces:</p>
|
||
|
||
<p>(a) Moving to libp2p</p>
|
||
|
||
<p>(b) Better routing</p>
|
||
|
||
<p>(c) Accounting and user-run nodes</p>
|
||
|
||
<p>The general theme was: making the Waku network more scalable and robust.</p>
|
||
|
||
<p>We also did a scalability study to show at what point the network would run into issues, due to the inherent lack of routing that Whisper and Waku v1 provided.</p>
|
||
|
||
<p>You can read more about this <a href="https://vac.dev/waku-v2-plan">here</a>.</p>
|
||
|
||
<h2 id="35-waku-v2---design-goals">3.5 Waku v2 - Design goals</h2>
|
||
|
||
<p>Taking a step back, what problem does Waku v2 attempt to solve compared to all the other solutions that exists out there? What type of applications should use it and why? We have the following design goals:</p>
|
||
|
||
<ol>
|
||
<li>
|
||
<p><strong>Generalized messaging</strong>. Many applications requires some form of messaging protocol to communicate between different subsystems or different nodes. This messaging can be human-to-human or machine-to-machine or a mix.</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Peer-to-peer</strong>. These applications sometimes have requirements that make them suitable for peer-to-peer solutions.</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Resource restricted</strong>. These applications often run in constrained environments, where resources or the environment is restricted in some fashion. E.g.:</p>
|
||
|
||
<ul>
|
||
<li>limited bandwidth, CPU, memory, disk, battery, etc</li>
|
||
<li>not being publicly connectable</li>
|
||
<li>only being intermittently connected; mostly-offline</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p><strong>Privacy</strong>. These applications have a desire for some privacy guarantees, such as pseudonymity, metadata protection in transit, etc.</p>
|
||
</li>
|
||
</ol>
|
||
|
||
<p>As well as to do so in a modular fashion. Meaning you can find a reasonable trade-off depending on your exact requirements. For example, you usually have to trade off some bandwidth to get metadata protection, and vice versa.</p>
|
||
|
||
<p>The concept of designing for resource restricted devices also leads to the concept of adaptive nodes, where you have more of a continuum between full nodes and light nodes. For example, if you switch your phone from mobile data to WiFi you might be able to handle more bandwidth, and so on.</p>
|
||
|
||
<h2 id="4-waku-v2---breakdown">4. Waku v2 - Breakdown</h2>
|
||
|
||
<p>Where is Waku v2 at now, and how is it structured?</p>
|
||
|
||
<p>It is running over libp2p and we had our second internal testnet last week or so. As a side note, we name our testnets after subway stations in Taipei, the first one being Nangang, and the most recent one being Dingpu.</p>
|
||
|
||
<p>The main implementation is written in Nim using nim-libp2p, which is also powering Nimbus, an Ethereum 2 client. There is also a PoC for running Waku v2 in the browser. On a spec level, we have the following specifications that corresponds to the components that make up Waku v2:</p>
|
||
|
||
<ul>
|
||
<li>Waku v2 - this is the main spec that explains the goals of providing generalized messaging, in a p2p context, with a focus on privacy and running on resources restricted devices.</li>
|
||
<li>Relay - this is the main PubSub spec that provides better routing. It builds on top of GossipSub, which is what Eth2 heavily relies on as well.</li>
|
||
<li>Store - this is a 1-1 protocol for light nodes to get historical messages, if they are mostly-offline.</li>
|
||
<li>Filter - this is a 1-1 protocol for light nodes that are bandwidth restricted to only (or mostly) get messages they care about.</li>
|
||
<li>Message - this explains the payload, to get some basic encryption and content topics. It corresponds roughly to envelopes in Whisper/Waku v1.</li>
|
||
<li>Bridge - this explains how to do bridging between Waku v1 and Waku v2 for compatibility.</li>
|
||
</ul>
|
||
|
||
<p>Right now, all protocols, with the exception of bridge, are in draft mode, meaning they have been implemented but are not yet being relied upon in production.</p>
|
||
|
||
<p>You can read more about the breakdown in this <a href="https://vac.dev/waku-v2-update">update</a> though some progress has been made since then, as well was in the <a href="https://rfc.vac.dev/spec/10">main Waku v2 spec</a>.</p>
|
||
|
||
<h2 id="5-waku-v2---upcoming">5. Waku v2 - Upcoming</h2>
|
||
|
||
<p>What’s coming up next? There are a few things.</p>
|
||
|
||
<p>For Status to use it in production, it needs to be integrated into the main app using the Nim Node API. The bridge also needs to be implemented and tested.</p>
|
||
|
||
<p>For other users, we are currently overhauling the API to allow usage from a browser, e.g. To make this experience great, there are also a few underlying infrastructure things that we need in nim-libp2p, such as a more secure HTTP server in Nim, Websockets and WebRTC support.</p>
|
||
|
||
<p>There are also some changes we made to at what level content encryption happens, and this needs to be made easier to use in the API. This means you can use a node without giving your keys to it, which is useful in some environments.</p>
|
||
|
||
<p>More generally, beyond getting to production-ready use, there are a few bigger pieces that we are working on or will work on soon. These are things like:</p>
|
||
|
||
<ul>
|
||
<li>Better scaling, by using topic sharding.</li>
|
||
<li>Accounting and user-run nodes, to account for and incentives full nodes.</li>
|
||
<li>Stronger and more rigorous privacy guarantees, e.g. through study of GossipSub, unlinkable packet formats, etc.</li>
|
||
<li>Rate Limit Nullifier for privacy preserving spam protection, a la what Barry Whitehat has presented before.</li>
|
||
</ul>
|
||
|
||
<p>As well as better support for Ethereum M2M Messaging. Which is what I’ll talk about next.</p>
|
||
|
||
<h2 id="part-2---ethereum-messaging">PART 2 - ETHEREUM MESSAGING</h2>
|
||
|
||
<p>A lot of what follows is inspired by exploratory work that John Lea has done at Status, previously Head of UX Architecture at Ubuntu.</p>
|
||
|
||
<h2 id="6-ethereum-messaging---why">6. Ethereum Messaging - Why?</h2>
|
||
|
||
<p>It is easy to think that Waku v2 is only for human to human messaging, since that’s how Waku is currently primarily used in the Status app. However, the goal is to be useful for generalized messaging, which includes other type of information as well as machine to machine messaging.</p>
|
||
|
||
<p>What is Ethereum M2M messaging? Going back to the Holy Trinity of Ethereum/Whisper/Swarm, the messaging component was seen as something that could facilitate messages between dapps and acts as a building block. This can help with things such as:</p>
|
||
|
||
<ul>
|
||
<li>Reducing on-chain transactions</li>
|
||
<li>Reduce latency for operations</li>
|
||
<li>Decentralize centrally coordinated services (like WalletConnect)</li>
|
||
<li>Improve UX of dapps</li>
|
||
<li>Broadcast live information</li>
|
||
<li>A message transport layer for state channels</li>
|
||
</ul>
|
||
|
||
<p>And so on.</p>
|
||
|
||
<h2 id="7-ethereum-messaging---why-cont">7. Ethereum Messaging - Why? (Cont)</h2>
|
||
|
||
<p>What are some examples of practical things Waku as used for Ethereum Messaging could solve?</p>
|
||
|
||
<ul>
|
||
<li>Multisig transfers only needing one on chain transaction</li>
|
||
<li>DAO votes only needing one one chain transaction</li>
|
||
<li>Giving dapps ability to direct push notifications to users</li>
|
||
<li>Giving users ability to directly respond to requests from daps</li>
|
||
<li>Decentralized Wallet Connect</li>
|
||
</ul>
|
||
|
||
<p>Etc.</p>
|
||
|
||
<h2 id="8-whats-needed-to-deliver-this">8. What’s needed to deliver this?</h2>
|
||
|
||
<p>We can break it down into our actors:</p>
|
||
|
||
<ul>
|
||
<li>Decentralized M2M messaging system (Waku)</li>
|
||
<li>Native wallets (Argent, Metamask, Status, etc)</li>
|
||
<li>Dapps that benefit from M2M messaging</li>
|
||
<li>Users whose problems are being solved</li>
|
||
</ul>
|
||
|
||
<p>Each of these has a bunch of requirements in turn. The messaging system needs to be decentralized, scalable, robust, etc. Wallets need support for messaging layer, dapps need to integrate this, etc.</p>
|
||
|
||
<p>This is a lot! Growing adoption is a challenge. There is a catch 22 in terms of justifying development efforts for wallets, when no dapps need it, and likewise for dapps when no wallets support Waku. In addition to this, there must be proven usage of Waku before it can be relied on, etc. How can we break this up into smaller pieces of work?</p>
|
||
|
||
<h2 id="9-breaking-up-the-problem-and-a-high-level-roadmap">9. Breaking up the problem and a high level roadmap</h2>
|
||
|
||
<p>We can start small. It doesn’t and need to be used for critical features first. A more hybrid approach can be taken where it acts more as nice-to-haves.</p>
|
||
|
||
<ol>
|
||
<li>Forking Whisper and solving scalablity, spam etc issues with it.
|
||
This is a work in progress. What we talked about in part 1.</li>
|
||
<li>Expose messaging API for Dapp developers.</li>
|
||
<li>Implement decentralized version of WalletConnect.
|
||
Currently wallets connect ot dapps with centralized service. Great UX.</li>
|
||
<li>Solve DAO/Multi-Sig coordination problem.
|
||
E.g. send message to wallet-derived key when it is time to sign a transaction.</li>
|
||
<li>Extend dapp-to-user and user-to-dapp communication to more dapps.
|
||
Use lessons learned and examples to drive adoptation for wallets/dapps.</li>
|
||
</ol>
|
||
|
||
<p>And then build up from there.</p>
|
||
|
||
<h2 id="10-we-are-hiring">10. We are hiring!</h2>
|
||
|
||
<p>A lot of this will happen in Javascript and browsers, since that’s the primarily environment for a lot of wallets and dapps. We are currently hiring for a Waku JS Wallet integration lead to help push this effort further.</p>
|
||
|
||
<p>Come talk to me after or <a href="https://status.im/our_team/open_positions.html?gh_jid=2385338">apply here</a>.</p>
|
||
|
||
<p>That’s it! You can find us on Status, Telegram, vac.dev. I’m on twitter <a href="https://twitter.com/oskarth">here</a>.</p>
|
||
|
||
<p>Questions?</p>
|
||
|
||
<hr />
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</main>
|
||
</div>
|
||
<footer class="footer bg-black flex flex-shrink-0 justify-center">
|
||
<div class="container max-w-screen-xl flex sl:justify-between lm:justify-start p-5 md:px-12 md:pt-5 lg:py-10">
|
||
<div class="logo mr-10 sm:mr-0 sm:w-2/12 lg:w-3/12">
|
||
<a href="/"><img src="/assets/img/logo.png" alt="Vac logo" class="w-9 h-11" /></a>
|
||
</div>
|
||
|
||
<div class="flex flex-col xm:flex-row xm:justify-between sm:w-10/12 lg:w-9/12">
|
||
<p class="hidden sl:inline-block sl:mr-10 text-xxs lg:text-base text-white opacity-75">Vac researches peer-to-peer, private, censorship resistant communication</p>
|
||
<nav class="flex max-w-xs mr-0 xm:mr-5 l:mr-32 mb-5 sm:mb-0">
|
||
<div class="flex">
|
||
<div class="flex flex-col mr-5 sm:mr-10 sl:mr-14">
|
||
<p class="text-xxs lg:text-base text-white opacity-75 mb-5 lg:mb-8">Research</p>
|
||
<ul>
|
||
<li class="text-xxs lg:text-base text-white hover:opacity-50 mb-5">
|
||
<a href="/research-log" target="_blank" rel="noopener noreferrer">Log</a>
|
||
</li>
|
||
<li class="text-xxs lg:text-base text-white hover:opacity-50 mb-5">
|
||
<a href="https://rfc.vac.dev/" target="_blank" rel="noopener noreferrer">Specs</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
<div class="flex flex-col sl:mr-14">
|
||
<p class="text-xxs lg:text-base text-white opacity-75 mb-5 lg:mb-8">Socials</p>
|
||
<ul>
|
||
<li class="text-xxs lg:text-base text-white hover:opacity-50 mb-5">
|
||
<a href="https://twitter.com/vacp2p" target="_blank" rel="noopener noreferrer">Twitter</a>
|
||
</li>
|
||
<li class="text-xxs lg:text-base text-white hover:opacity-50 mb-5">
|
||
<a href="https://discord.gg/PQFdubGt6d" target="_blank" rel="noopener noreferrer">Discord</a>
|
||
</li>
|
||
<li class="text-xxs lg:text-base text-white hover:opacity-50 mb-5">
|
||
<a href="https://t.me/vacp2p" target="_blank" rel="noopener noreferrer">Telegram</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
</div></nav></div>
|
||
</div>
|
||
</footer>
|
||
<script src="/assets/js/main.min.js"></script>
|
||
<script src="/assets/js/smooth-scroll.min.js"></script>
|
||
|
||
</body>
|
||
</html>
|